میانگین متحرک ، که گاهی اوقات به عنوان میانگین نورد خوانده می شود ، دنباله ای از میانگین ها است که بر روی زیر مجموعه های یک مجموعه داده های متوالی ساخته شده است. میانگین های متحرک معمولاً برای پردازش سری های زمانی ، به ویژه برای صاف کردن مشاهدات پر سر و صدا استفاده می شوند. به عنوان مثال ، عملکرد پر سر و صدا را در شکل 1 1 1 در نظر بگیرید. اگر این داده ها یک سری زمانی را نشان دهند ، ممکن است ما به یک تخمین واحد از میانگین (خط قرمز رنگ) علاقه نداریم. درعوض ، ما ممکن است به دنباله ای از میانگین تخمین ها ، ساخته شده در دسترس بودن داده ها علاقه مند باشیم. با داشتن متوسط که "حرکت می کند" ، می توانیم یک مجموعه داده پی در پی جدید را بسازیم که یک نسخه صاف از داده های ورودی باشد.

شکل 1. یک تابع پر سر و صدا (خط جامد آبی) ، به همراه میانگین (خط قرمز ، نشانگرهای "X") از کل مجموعه داده ها.
در حالی که میانگین حرکت از نظر مفهومی نسبتاً ساده است ، جزئیاتی وجود دارد که درک آن مفید است. در این پست ، من میانگین تجمعی ، میانگین حرکت ساده و میانگین متحرک وزنی را مورد بحث و پیاده سازی قرار می دهم. من همچنین در مورد یک مورد خاص از میانگین متحرک وزنی ، میانگین متحرک وزن به صورت نمایی بحث خواهم کرد.
میانگین تجمعی
مجموعه داده های متوالی از مشاهدات n n n را در نظر بگیرید ،
این داده ها نیازی به یک سری زمانی ندارند ، اما نیاز به سفارش آنها دارند. برای سادگی ، من به فهرست n ∈ مراجعه می کنم<1 , 2 , … , N>n in n ∈<1 , 2 , … , N>به عنوان "زمان"بنابراین ، در زمان n n n ، datum x n x_n x n به تازگی مشاهده شده است ، در حالی که داده x n + 1 x_ x n + 1 مشاهده بعدی است. اینها روشهای مفیدی برای صحبت در مورد تنظیم مسئله هستند ، اما عملیات مورد بحث می تواند برای هر داده پی در پی مانند ردیف پیکسل ها در یک تصویر اعمال شود.
شاید ساده ترین راه برای برآورد نقطه در شکل 1 1 1 "واکنشی" به داده های جدید ، محاسبه میانگین تجمعی (CA) باشد. در یک CA ، میانگین نمونه با ورود هر داده جدید دوباره محاسبه می شود. در زمان n n n ، CA به عنوان تعریف شده است
ca n = x 1 + x 2 + ⋯ + x n n.(2) text_n = frac. tag ca n = n x 1 + x 2 + ⋯ + x n.(2)
اثر دنباله ای از میانگین تخمین ها است که به طور فزاینده ای بیشتر از داده ها را تشکیل می دهد. برای نمونه ای از CA ساده که در شکل 1 1 1 اعمال شده است ، شکل 2 2 2 را ببینید. واضح است که ، در زمان n n n ، میانگین کل مجموعه داده (خط شکسته قرمز) برابر با ca n text_n ca n (درست ترین نقطه از خط شکسته آبی) است.

شکل 2. میانگین تجمعی (خط شکسته آبی ، نشانگرهای "^") که از شکل 1 1 1 بر روی عملکرد محاسبه می شود.
ما می توانیم CA را در پایتون به شرح زیر پیاده سازی کنیم:
دنباله ca(داده ها): "" "میانگین تجمعی بیش از داده ها را محاسبه کنید." "" برگشت [منظور داشتن(داده ها[:i]) برای i in دامنه(1, لن(داده ها)+1)] دنباله منظور داشتن(داده ها): "" "میانگین محاسبه داده ها." "" برگشت جمع(داده ها) / لن(داده ها)
با این حال ، توجه کنید که دوباره محاسبه میانگین در هر نقطه زمانی ناکارآمد است. ما به سادگی می توانیم عادی سازی مرحله قبلی را خنثی کنیم ، داده جدید را اضافه کنیم و سپس دوباره شکل بگیریم. به طور رسمی ، رابطه بین ca text_n ca n و ca n + 1 text_ ca n + 1
ca n + 1 = n ⋅ ca n + x n + 1 n + 1.(3) text_ = fracبشر tag ca n + 1 = n + 1 n ⋅ ca n + x n + 1.(3)
این منجر به اجرای سریعتر می شود:
دنباله ca_iter(داده ها): "" "میانگین تجمعی بیش از داده ها را محاسبه کنید." "" m = داده ها[0] خارج = [m] برای i in دامنه(1, لن(داده ها)): m = ((m * i) + داده ها[i]) / (i+1) خارج.ضمیمه کردن(m) برگشت خارج
همانطور که خواهیم دید ، این ایده به روزرسانی مکرر ، به جای محاسبه کامل آن ، در محاسبات متوسط در حال حرکت است.
میانگین حرکت ساده
در حالی که CA در شکل 2 2 2 مطمئناً در یک میانگین در شکل 1 1 1 بهبودی دارد ، ممکن است دنباله ای از تخمین ها بخواهیم که حتی واکنش پذیر تر باشند. به عنوان مثال ، در تفاوت بین سری زمانی و CA در n = 100 n = 100 n = 1 0 0 باشید. سری زمانی به سرعت در حال افزایش است ، اما CA برای واکنش کند است. یکی از راه های واکنش پذیری CA ، محاسبه میانگین بیش از یک پنجره در حال حرکت داده ها است ، جایی که "پنجره" به زیر مجموعه داده ها در نظر گرفته می شود. به عبارت دیگر ، ما می توانیم داده های قدیمی را "فراموش کنیم".
در هر نقطه n n n ، یک میانگین متحرک ساده (SMA) میانگین را بیش از یک پنجره با عرض ثابت و با عرض ثابت محاسبه می کند. بگذارید K K K اندازه پنجره را نشان دهد. سپس برای هر فهرست n n n ، ما می خواهیم محاسبه کنیم
SMA ( K ) n = x n − k + 1 + x n − k + 2 + ⋯ + x n − 1 + x n K . (4) ext(K)_n = frac + x_ + dots + x_ + x_n>بشر tag sma (k) n = k x n - k + 1 + x n - k + 2 + ⋯ + x n - 1 + x n.(4)
توجه داشته باشید که بر اساس تعریف در معادله 4 4 4 ، اولین عناصر K-1 K-1 K-1 در دنباله تعریف نشده است. ما می توانیم آنها را از یکی از دو روش تعریف کنیم:
به دنبال کنوانسیون مورد استفاده Pandas ، من SMA (k) m text (k) _m sma (k) m را به عنوان تعریف نشده (یا نان) تعریف می کنم.
شکل 3 3 3 را برای مثال از چندین SMA با اندازه پنجره های مختلف ، که در عملکرد پر سر و صدا در شکل 1 1 1 اعمال می شود ، ببینید.

شکل 3. سه میانگین متحرک ساده محاسبه شده بر روی عملکرد از شکل 1 1 1 (خط جامد آبی). با افزایش اندازه پنجره K K K ، SMA ها به نسخه های نرم تر عملکرد ورودی تبدیل می شوند.
در پایتون ، یک میانگین متحرک ساده را می توان به شرح زیر محاسبه کرد:
نای = شناور("نان") دنباله SMA(داده ها, پنجره): "" "میانگین حرکت ساده را در یک پنجره داده محاسبه کنید." "" خارج = [نای] * (پنجره-1) برای i in دامنه(پنجره, لن(داده ها)+1): m = منظور داشتن(داده ها[i-پنجره:i]) خارج.ضمیمه کردن(m) برگشت خارج
با این حال ، یک ترفند برای محاسبه SMA حتی سریعتر وجود دارد. از آنجا که مخرج هرگز تغییر نمی کند ، ما می توانیم با کم کردن داده که از پنجره خارج می شود ، یک تخمین میانگین موجود را به روز کنیم و آخرین داده را اضافه کنیم. این منجر به یک قانون به روزرسانی تکراری ،
SMA (k) n + 1 = sma (k) n + x n + 1 - x n - k + 1 k.(6) متن (k) _ = text (k) _n + fracبشر tag sma (k) n + 1 = sma (k) n + k x n + 1 - x n - k + 1.(6)
در پایتون ، این اجرای سریعتر است:
دنباله sma_iter(داده ها, پنجره): "" "به طور مکرر میانگین حرکت ساده را بر روی پنجره داده ها محاسبه کنید." "" m = منظور داشتن(داده ها[:پنجره]) خارج = [نای] * (پنجره-1) + [m] برای i in دامنه(پنجره, لن(داده ها)): m += (داده ها[i] - داده ها[i-پنجره]) / پنجره خارج.ضمیمه کردن(m) برگشت خارج
(بدیهی است ، کد موجود در این پست Didactic است ، و شرایط لبه مانند ویندوزهای تعریف نشده را نادیده می گیرد.)
میانگین متحرک وزنی
اشکال آشکار از میانگین متحرک ساده این است که ، اگر داده های پی در پی ما به طور ناگهانی تغییر کند ، ممکن است پاسخ آهسته باشد زیرا به همان اندازه تمام نقاط داده موجود در پنجره را وزن می کند. پسوند طبیعی جایگزینی میانگین محاسبه با میانگین محاسبه وزن است. این به ما امکان می دهد اهمیت نسبی را به مشاهدات موجود در پنجره اختصاص دهیم. این ایده اصلی از میانگین متحرک وزنی (WMA) است. بنابراین ، هر مشاهده در پنجره دارای وزن مرتبط است ،
و اینها به طور مداوم (یعنی به همان ترتیب) اعمال می شوند که پنجره در ورودی حرکت می کند. به طور رسمی ، میانگین متحرک وزنی است
wma (k) n = w 1 x n - k + 1 + w 2 x n - k + 2 + ⋯ + w k - 1 x n - 1 + w k x n w 1 + w 2 + ⋯ + w k.(8) متن (k) _n = fracبشر tag wma (k) n = w 1 + w 2 + ⋯ + w k w 1 x n - k + 1 + w 2 x n - k + 2 + ⋯ + w k - 1 x n- 1 + W k x n.(8)
توجه داشته باشید که این تعریف برای طرح وزنی خاص مورد استفاده آگنوستیک است و این که تعداد وزنها با تعداد مشاهدات می تواند رشد کند (k = n k = n k = n در هر زمان n n n).
به عنوان مثال ، ما می توانیم از وزنهایی استفاده کنیم که بر جدیدترین داده تأکید می کنند ، به عنوان مثالبا پوسیدگی خطی با زمان (w k = k w_k = k w k = k) ، یا می توانیم از وزنه هایی استفاده کنیم که داده ها را صاف می کند ، به عنوان مثال. با استفاده از وزنهای توزیع شده گاوسی یا فیلتر گاوسی (w k = p (w = k) w_k = mathbb (w = k) w k = p (w = k) که در آن به طور معمول توزیع می شود). برای مثال از این وزن ها به شکل 4 4 4 مراجعه کنید.

شکل 4. نمونه هایی از طرح های وزنی که می توانند در میانگین متحرک وزنی استفاده شوند.(سمت چپ) وزنهای پوسیده خطی.(سمت راست) وزن فیلتر گاوسی.
برای مقایسه یک میانگین متحرک ساده و یک میانگین متحرک وزنی با وزن های در حال فروپاشی خطی و وزن های فیلتر گاوسی، که هر دو برای تابع در شکل 1 1 1 اعمال شده اند، به شکل 5 5 5 مراجعه کنید. می توانیم ببینیم که وزن های در حال فروپاشی خطی نسبت به SMA سریع تر به سیگنال واکنش نشان می دهند و وزن های گاوسی عملکرد را بیشتر هموار می کنند.

شکل 5. یک میانگین متحرک ساده (خط نقطه چین نارنجی، نشانگرهای "x") در مقایسه با دو میانگین متحرک وزنی با استفاده از وزن های در حال پوسیدگی خطی (خط چین آبی، نشانگرهای "^") و وزن های توزیع شده گاوسی (خط چین صورتی، نشانگرهای "*").
در پایتون، یک WMA ساده به صورت زیر قابل پیاده سازی است:
دنباله wmean(داده ها, وزنه ها): """میانگین وزن داده ها را محاسبه کنید. """ ادعا کردن لن(داده ها) == لن(وزنه ها) عدد = [داده ها[i] * وزنه ها[i] برای i in دامنه(لن(داده ها))] برگشت جمع(عدد) / جمع(وزنه ها) دنباله wma(داده ها, وزنه ها): """میانگین متحرک وزنی را بر روی داده ها محاسبه کنید. """ پنجره = لن(وزنه ها) خارج = [نای] * (پنجره-1) برای i in دامنه(پنجره, لن(داده ها)+1): m = wmean(داده ها[i-پنجره:i], وزنه ها) خارج.ضمیمه کردن(m) برگشت خارج
من این را "ساده لوح" می نامم زیرا وزنه ها را به عنوان یک پنجره متحرک در نظر می گیرد که یک محدودیت غیر ضروری است. همانطور که در بالا ذکر کردم، اندازه پنجره می تواند با تعداد مشاهدات افزایش یابد. همانند SMA، ترفندهایی برای محاسبه سریعتر WMAها با استفاده از به روزرسانی های تکراری وجود دارد. با این حال، جزئیات الگوریتمی به انتخاب وزن ها بستگی دارد. یک قانون به روزرسانی تکراری را با وزن های در حال فروپاشی نمایی (در زیر) خواهیم دید.
میانگین متحرک نمایی
یک انتخاب صنوبر از وزنه های WMA آنهایی هستند که به صورت تصاعدی فروپاشی می کنند (شکل 6 6 6 ). من چند ایده دارم که چرا این انتخاب بسیار رایج است. اول، مانند وزن های در حال فروپاشی خطی (شکل 4 4 4، سمت چپ)، وزن های در حال فروپاشی نمایی بر جدیدترین نقاط داده تأکید می کنند و می توان آن ها را به گونه ای انتخاب کرد که تقریباً به صورت خطی در نزدیکی مشاهده فعلی فروپاشی کنند. با این حال، وزن های در حال فروپاشی نمایی، داده های قدیمی تر را با ظرافت بیشتری مدیریت می کنند: به جای اینکه در هنگام خروج از پنجره، مبنا از وزنی به وزن نشده (یا وزن صفر) برسد، به هر داده وزنی اختصاص داده می شود که مجانبی به سمت صفر می افتد. در عمل، زمانی که وزن ها به اندازه کافی نزدیک به صفر شدند، می توانیم ردیابی وزن ها را متوقف کنیم. ثانیا، وزن های در حال پوسیدگی نمایی را می توان به چند روش پارامتری کرد، و به مدل ساز چندین راه برای فکر کردن در مورد نحوه هموارسازی می دهد.

شکل 6. نمونه هایی از وزن های در حال پوسیدگی نمایی با نیمه عمر متغیر. با کاهش نیمه عمر، وزنه ها سریعتر از بین می روند.
به عنوان یک یادآوری ، اجازه دهید y 0 y_0 y 0 مقدار اولیه را مشخص کند. سپس تابع پوسیدگی نمایی y (x) y (x) y (x) را می توان در پارامترهای زیر بیان کرد:
y (x) =، & text ، \ y_0 سمت چپ (1/2 راست)^، & text ، \ y_0 (1 - alpha)^x ، & text. end end tag y (x) = ⎩ ⎪ ⎪ ⎨ ⎪ ⎪ ⎧ y 0 e - λ x ، y 0 (1/2) x / h ، y 0 (1 - α) x ،پارامتر پوسیدگی λ ≥ 0 ، پارامتر Halflife H ≥ 0 ، نرخ پوسیدگی α ∈ (0 ، 1).(9)
پست قبلی من را در مورد پوسیدگی نمایی در صورت لزوم مشاهده کنید. توجه داشته باشید که در پست قبلی من ، من میزان پوسیدگی را به عنوان R R به جای α alpha α بیان کردم. در اینجا ، من به α alpha α تغییر داده ام تا با این که اغلب پارامتر مورد بحث در زمینه EWMA ها را می بینم مطابقت داشته باشم. علاوه بر این ، α alpha α گاهی اوقات به جای یک میزان پوسیدگی ، فاکتور صاف کننده نامیده می شود ، زیرا تغییر α alpha α اثر صاف کردن (یا صاف کردن) سری زمانی را دارد.
با توجه به پارامترهای مختلف ، روشهای زیادی وجود دارد که می توانیم EWMA ها را پیاده سازی کنیم ، و هر پارامتر سازی خود را به یک طرح به روزرسانی تکراری متفاوت وام می دهد. واضح است که بحث در مورد هر یک به نوبه خود بسیار خسته کننده خواهد بود. بنابراین ، من بحث را به روش زیر محدود خواهم کرد: اول ، من EWMA را با استفاده از پارامترهای Halflife توضیح می دهم ، که طبیعی ترین در ذهن من است. من نیمی از آنها را دوست دارم زیرا آنها در واحدهای طبیعی این فرآیند هستند (به عنوان مثال نیمه زندگی در ساعت برای داده هایی که ساعتی است). من این را خیلی تصفیه نمی کنم. درعوض ، من با استفاده از پارامترهای نرخ (با استفاده از α alpha α) به بحث در مورد EWMA می پردازم ، به این ترتیب که من اغلب می بینم که آن را مورد بحث قرار می دهد (به عنوان مثال به کد منبع ویکی پدیا و پاندا مراجعه کنید).
پارامتر سازی نیمه زندگی
به یاد بیاورید که نیمه عمر پوسیدگی نمایی مقدار در دامنه است که در آن عملکرد به نیمی از مقدار اولیه خود می رسد. از آنجا که پوسیدگی نمایی هرگز به صفر نمی رسد ، تعداد وزنهای موجود در EWMA با تعداد مشاهدات تاکنون برابر است (k = n k = n k = n). بنابراین ، بیایید به وزن w i w_i w i (جایی که من من داده ها را تا زمان نقطه n n n فهرست می کنم) به عنوان تابعی از مشاهده x i x_i x i فکر کنیم. با استفاده از پارامترهای Halflife ، وزن w i w_i w i به عنوان تعریف شده است
w i = (1 2) (n - i) / h ، i ∈<1 , 2 , … , n>(10) w_i = سمت چپ ( frac راست)^، quad i in tag w i = (2 1) (n - i) / h ، i ∈<1 , 2 , … , n>(1 0)
بدیهی است که این معادله به نماد من بستگی دارد. اگر فرض کردید که W 1 W_1 W 1 به جدیدترین داده اختصاص داده شده است ، معادله 10 10 1 0 متفاوت خواهد بود. شکل 7 7 7 را برای نمونه ای از دنباله ای از وزنهای پوسیدگی نمایی مشاهده کنید.

شکل 7. دنباله ای از وزنهای پوسیدگی نمایی در طول زمان. در زمان n = 1 n = 1 n = 1 ، یک وزن واحد وجود دارد. در زمان n = 2 n = 2 n = 2 ، وزن منفرد در زمان n = 1 n = 1 n = 1 با توجه به نیمه زندگی (در اینجا ، h = 1 ساعت = 1 ساعت = 1) پوسیده می شود ، در حالی که وزن جدید استمعرفی کرد. و غیرهبرای اهداف تجسم ، وزن ها به گونه ای عادی می شوند که جدیدترین وزن همیشه برابر با وحدت است.
همانطور که اشاره کردم ، در ذهن من ، Halflife یک پارامتر بصری است زیرا در واحدهای طبیعی فرآیند است. یک نیمه زندگی کوتاهتر به این معنی است که EMA نسبت به تغییرات در داده ها واکنش پذیر تر است ، در حالی که یک نیمه زندگی طولانی تر به این معنی است که داده های تاریخی تر برای مدت طولانی تر در نظر گرفته می شود. بنابراین یک نیمه زندگی بزرگتر به معنای صاف کردن بیشتر است. برای مقایسه EWMA ها با نیمه های مختلف ، همه در شکل 1 1 1 به شکل 7 7 7 مراجعه کنید.

شکل 8. سه میانگین متحرک با وزنی به صورت نمایی محاسبه شده بر روی عملکرد از شکل 1 1 1 (خط جامد آبی). با افزایش نیمه زندگی ، EWMA ها به نسخه های نرم تر عملکرد ورودی تبدیل می شوند.
در پایتون ، EWMA می تواند به شرح زیر اجرا شود:
دنباله ewma_hl(داده ها, نصف زندگی): "" "محاسبه میانگین متحرک با وزن قابل تصمیمی با نیمه عمر بیش از داده ها." "" وزنه ها = [(1/2)**(x/نصف زندگی) برای x in دامنه(لن(داده ها), 0, -1)] خارج = [] برای i in دامنه(1, لن(داده ها)+1): m = wmean(داده ها[:i], وزنه ها[:i]) خارج.ضمیمه کردن(m) برگشت خارج
توجه کنید که من به سادگی مجموعه ای از وزنهای پوسیدگی نمایی را در ابتدا می سازم و سپس به آن مجموعه فهرست می کنم. این به یک دلیل ظریف عمل می کند: از آنجا که پوسیدگی نمایی بی حافظه است به این معنا که عملکرد به عنوان بخشی از مقدار فعلی آن پوسیده می شود ، مجموعه ای از وزنهای اعمال شده در داخل محاسبه میانگین وزنی (WMEAN) همیشه صحیح هستند زیرا عادی شده اند. اگر بزرگی غیر طبیعی وزنهای مهم باشد ، این اجرای کار نمی کند.
پارامتری فاکتور هموار سازی
اکنون بیایید EWMA ها را از نظر میزان یا فاکتور صاف کننده α alpha α کشف کنیم. من فکر می کنم این پارامتر سازی مهم است اگر فقط به این دلیل باشد که بسیاری دیگر در مورد EWMA ها فکر می کنند و توضیح می دهند. من با توضیح آنچه که من EWMA غیر تنظیم شده می نامم ، شروع می کنم. این یک الگوریتم است که وزن های پوسیدگی را به خوبی تقریباً خوب تقریبی می کند اما از نظر فنی صحیح نیست ، یعنی وزن ها دقیقاً به صورت تصاعدی فروپاشی می کنند. سپس من در مورد EWMA تنظیم شده ، که به سادگی نسخه صحیح رویکرد غیر تنظیم شده است ، بحث خواهم کرد. چرا این اصطلاحات؟من به سادگی از پاندا وام می گیرم ، که EWMA را با یک پارامتر تنظیم پیاده سازی می کند.
برای روشن شدن ، من کاملاً مطمئن نیستم که چرا الگوریتم غیر تنظیم شده اغلب مورد بحث قرار می گیرد ، زیرا از نظر فنی نادرست است و از آنجا که هر دو الگوریتم پارامتری نیمه عمر و EWMA تنظیم شده هم درک و هر دو آسان است. با این حال ، من تصمیم گرفتم که به سادگی در مورد آن بحث کنم ، زیرا بارها فرمول غیر تنظیم شده را دیده ام و هرگز آن را کاملاً درک نکرده ام.(وقتی آن را می بینید ، باید از خود بپرسید که چرا درست است ؛ در واقع ، اینطور نیست!)
EWMA بدون تنظیم. یک قانون به روزرسانی تکراری که معمولاً مورد بحث قرار می گیرد ، زیر است ،
ویکی پدیا به وب سایت موسسه ملی استاندارد و فناوری ، که به نوبه خود استناد می کند (هانتر ، 1986) برای این قانون استناد می کند. ما بررسی خواهیم کرد که معادله 11 11 1 1 معنی دارد و چرا در یک لحظه کار می کند. در حال حاضر ، فرض کنیم که این درست است و فقط در مورد چگونگی تفسیر آن فکر کنید.(هانتر ، 1986) دیدگاه جالبی دارد. بیایید EWMA n text_n ewma n را به عنوان مقدار پیش بینی شده از سری زمانی در زمان n n n فکر کنیم. بیایید این x ^ n + 1 hat_ x ^ n + 1 را بیان کنیم. بدین ترتیب،
ewma n = x ^ n + 1.(12) text_n = hat_. tag ewma n = x ^ n + 1.(1 2)
اکنون بیایید قانون به روزرسانی را در معادله 11 11 1 1 بازنویسی کنیم
x ^ n + 1 = α x n + (1 - α) x ^ n ، ⇓ x ^ n + 1 = x ^ n + α (x n - x ^ n).. end tag x ^ n + 1 x ^ n + 1 = α x n + (1 - α) x ^ n ، ⇓ = x ^ n + α (x n - x ^ n).(1 3)
به عبارت دیگر ، مقدار پیش بینی شده بعدی در سری زمانی مقدار پیش بینی شده فعلی در سری زمانی است ، به علاوه بخشی از خطای بین آنچه مشاهده کردیم و آنچه را پیش بینی کردیم. اگر α = 1 alpha = 1 α = 1 ، ما به هیچ وجه مدل پیش بینی خود را باور نمی کنیم. مقدار پیش بینی شده بعدی مشاهده فعلی خواهد بود. این EWMA به سادگی سری زمانی اصلی را بازسازی می کند.(از این رو چرا α<1 alpha lt 1 α <1 is a restriction.) If α = 0 alpha = 0 α = 0 , then we would not trust our observations at all. The next predicted value would always be the initial value x 1 x_1 x 1 . (Hence why α>0 alpha gt 0 α>0 یک محدودیت است.) از طرف دیگر ، ما می توانیم از پیش بینی بعدی به عنوان ترکیبی محدب از مشاهده فعلی و پیش بینی فعلی فکر کنیم.
در هر صورت ، برای نقل قول (هانتر ، 1986) ، α alpha α "عمق حافظه EWMA را تعیین می کند". شکل 9 9 9 را برای نمونه هایی از EWMA ها با پارامترهای α α alpha α که برای مطابقت با نیمه های در شکل 8 8 انتخاب شده اند ، ببینید. در پایان ، من در مورد این reparameterization از α alpha α تا H h h بحث خواهم کرد.

شکل 9. سه میانگین متحرک با وزنی با وزنی محاسبه شده بر روی عملکرد از شکل 1 1 1 (خط جامد آبی) با استفاده از فاکتور صاف کننده α alpha α. مقادیر α alpha α برای مطابقت با نیمی از شکل در شکل 9 9 9 انتخاب شد. برای جزئیات بیشتر به معادله 23 2 2 3 مراجعه کنید.
اکنون که ما برای این فرمول شهود داریم ، اجازه دهید این سؤال آشکار را بپرسیم: چگونه معادله 11 11 1 1 (یا 13 13 1 3) میانگین متحرک A را با وزنهای پوسیدگی نمایی مدل می کند؟بیایید فرمول را برای چند نکته اول داده بنویسیم:
x ^ 2 = x 1 ، x ^ 3 = α x 2 + (1 - α) x ^ 2 = α x 2 + (1 - α) x 1 x ^ 4 = α x 3 + (1 - α) x ^3 = α x 3 + (1 - α) [α x 2 + (1 - α) x 1] = α x 3 + α (1 - α) x 2 + (1 - α) 2 x 1 ⋮ (14)= alpha x_3 + (1 - alpha) hat_3 \ & = alpha x_3 + (1 - alpha) [ alpha x_2 + (1 - alpha) x_1] \ & = alpha x_3 + alpha alpha(1 - alpha) x_2 + (1 - alpha) ^ 2 x_1 \ & ؛ ؛ vdots end tag x ^ 2 x ^ 3 x ^ 4 = x 1 ، = αx 2 + (1 - α) x ^ 2 = α x 2 + (1 - α) x 1 = α x 3 + (1 - α) x ^ 3 = α x 3 + (1- α) [α x 2 + (1 - α) x 1] = α x 3 + α (1 - α) x 2 + (1 - α) 2 x 1 ⋮ (1 4)
توجه داشته باشید که ما می توانیم α alpha α را توزیع کنیم و این را به آن تعمیم دهیم
x ^ n + 1 = α u2063 [x n + (1 - α) x n - 1 + (1 - α) 2 x n - 2 + ⋯ + (1 - α) n - 2 x 2] + (1 - α) n- 1 x 1.(15) شروع hat_ & = alpha ! سمت چپ [x_n + (1 - alpha) x_ + (1 - alpha)^ 2 x_ + نقاط + (1 - alpha)^ x_2 راست]\ & Quad+ (1 - alpha)^ x_1. end tag x ^ n + 1 = α [x n + (1 - α) x n - 1 + (1 - α) 2 x n - 2 + ⋯ + (1 - α) N - 2 x 2] + (1 - α) N - 1 x 1.(1 5)
در اینجا ، می توانیم ببینیم که چرا معادله 13 13 1 3 میانگین متحرک وزنی را با وزنهای پوسیدگی نمایی تقریب می دهد. به استثنای وزن مرتبط با اولین Datum x 1 x_1 x 1 ، وزن K K K-th به عنوان تعریف شده است
W k = α (1 - α) n - k.(16) w_k = alpha (1 - alpha)^. tag w k = α (1 - α) n - k.(1 6)
توجه داشته باشید که ما میانگین وزنی را در پرواز محاسبه می کنیم ، به این معنی که این وزنه ها باید به وحدت جمع شوند. با استفاده از خواص اساسی سری هندسی ، می توانیم این را تأیید کنیم:
α ∑ i = 0 n - 2 (1 - α) i + (1 - α) n - 1 = α [1 - (1 - α) N - 1 1 - (1 - α)] + (1 - α)n - 1 = 1 - (1 - α) n - 1 + (1 - α) n - 1 = 1. (17) alpha sum_^ (1 - alpha)^ i + (1 - alpha)^ & = alpha سمت چپ [ frac<1 - (1 - alpha)^>ight] + (1 - alpha)^ \ &= 1 - (1 - alpha)^ + (1 - alpha)^ \ &= 1. end ag α i = 0 ∑ n − 2( 1 − α ) i + ( 1 − α ) n − 1 = α [ 1 − ( 1 − α ) 1 − ( 1 − α ) n − 1 ] + ( 1 − α ) n − 1 = 1− ( 1 − α ) n − 1 + ( 1 − α ) n − 1 = 1 .(17)
بنابراین این رویکرد منطقی است. با این حال، وزن مربوط به اولین داده نادرست است. باید α ( 1 - α ) n - 1 alpha (1 - alpha)^ α (1 - α) n - 1 باشد، اما فقط (1 - α) n - 1 است (1 - alpha)^( 1 − α ) n − 1 . برای n n n به اندازه کافی بزرگ، این عبارت باید نزدیک به صفر باشد. در حالی که خطا معمولاً بسیار کوچک است، یک خطا وجود دارد. یک EWMA "تنظیم شده" (در ادامه بحث می شود) به سادگی فرمول صحیح است. همانطور که اشاره کردم، درک رویکرد تعدیل نشده مفید است، زیرا اغلب مطرح می شود، اما در عمل، فکر می کنم دلیلی وجود ندارد که فقط رویکرد تعدیل شده را درک نکرده و از آن استفاده نکنیم.
EWMA تنظیم شدهقانون صحیح به روز رسانی به شرح زیر است:
x ^ n + 1 = x n + ( 1 − α ) x n − 1 + ( 1 − α ) 2 x n − 2 + ⋯ + ( 1 − α ) n x 0 1 + ( 1 − α ) + ( 1 − α ) 2 + . . . + ( 1 − α ) n . (18) hat_ = frac + (1 - alpha)^2 x_ + dots + (1 - alpha)^n x_0>.برچسب x ^ n + 1 = 1 + ( 1 - α ) + ( 1 - α ) 2 + ...+ ( 1 − α ) n x n + ( 1 − α ) x n − 1 + ( 1 − α ) 2 x n − 2 + ⋯ + ( 1 − α ) n x 0 .( 1 8 )
در اینجا، ما هر داده را با وزن به روز می کنیم
w k = ( 1 − α ) n − k .(19) w_k = (1 - alpha)^.برچسب w k = ( 1 − α ) n − k .( 1 9 )
و محاسبه را در هر نقطه زمانی با تقسیم بر مجموع اوزان عادی می کنیم. به راحتی می توان فهمید که هم صورت و هم مخرج در معادله 18 18 18 می توانند به صورت بازگشتی به روز شوند:
عدد n = x n + ( 1 − α ) ⋅ عدد n − 1 , اسم n = 1 + ( 1 − α ) ⋅ اسم n − 1 .(20) x08egin ext_n &= x_n + (1 - alpha) cdot ext_, \ ext_n &= 1 + (1 - alpha) cdot ext_.end برچسب عدد n اسم n = x n + ( 1 − α ) ⋅ عدد n − 1 , = 1 + ( 1 − α ) ⋅ اسم n − 1 .(2 0)
این به ما یک الگوریتم سریع و تکراری برای محاسبه دقیق EWMA آنلاین می دهد. به نظر من، معادله 20 20 2 0 برای استدلال و پیاده سازی بسیار ساده است.
در پایتون، یک EWMA با ضریب هموارسازی α آلفا α را می توان به صورت زیر محاسبه کرد:
دنباله ewma_alpha(داده ها, آلفا): تعداد = داده ها[0] لانه = 1 خارج = [تعداد/لانه] برای i in دامنه(1, لن(داده ها)): تعداد = داده ها[i] + (1 - آلفا) * تعداد لانه = 1 + (1 - آلفا) * لانه خارج.ضمیمه کردن(تعداد/لانه) برگشت خارج
این کدی است که برای تولید شکل 9 9 9 استفاده می شود.
تغییر پارامترها
به عنوان آخرین نظر، مفید است که بتوانید بین پارامترهای نیمه عمر و هموارسازی جابجا شوید. در پست خود در مورد واپاشی نمایی، نشان دادم که ضریب هموارسازی α آلفا α به شکل زیر به پارامتر فروپاشی λ لامبدا λ مرتبط است:
λ = - ln u2061 (1 - α).(21) lambda = - ln (1 - alpha). tag λ = - ln (1 - α).(2 1)
بعداً در پست ، من همچنین نشان دادم که Halflife به روش زیر مربوط به پوسیدگی است:
h = ln u2061 (2) λ.(22) h = frac<ln(2)><lambda>بشر tag h = λ ln (2).(2 2)
با استفاده از این دو معادله ، ما به راحتی می توانیم برای α alpha α از نظر H H H یا برعکس حل کنیم:
α = 1 - 2 - 1 / H ، H = 1 - log u2061 2 (1 - α).(23) شروع alpha & = 1 - 2^، \ h & = frac<log_2(1 - alpha)>بشر end tag α h = 1 - 2 - 1 / h ، = - lo g 2 (1 - α) 1.(2 3)
این عملیات زمانی مفید است که می خواهید در یک پارامتر خاص کار کنید که توسط اجرای EWMA داده شده پشتیبانی نمی شود.
- هانتر ، J. S. (1986). میانگین متحرک با وزنی نمایی. مجله فناوری کیفیت ، 18 (4) ، 203-210.< Pan> λ = - ln u2061 (1 - α).(21) lambda = - ln (1 - alpha). tag λ = - ln (1 - α).(2 1)
تجارت با گزینههای باینری...
ما را در سایت تجارت با گزینههای باینری دنبال می کنید
برچسب :
نویسنده : نازنین فراهانی
بازدید : 35
تاريخ : چهارشنبه
25 مرداد
1402 ساعت: 11:56