نمایش تصویری از میانگین‌های متحرک نمایی.
نمایش تصویری از میانگین‌های متحرک نمایی.

میانگین متحرک نمایی در مقیاس بزرگ: ساخت سیستم‌های هوشمند با زوال زمانی

میانگین‌های متحرک نمایی (EMAs) دهه‌هاست که سنگ بنای تحلیل مالی بوده‌اند و روشی از نظر ریاضی ظریف برای هموارسازی داده‌های سری زمانی با دادن وزن بیشتر به مشاهدات اخیر ارائه می‌دهند. اصول اساسی EMAs که در ابتدا برای تحلیل بازار سهام ابداع شد تا به معامله‌گران در شناسایی روندها در میان نوسانات قیمت کمک کند، اکنون در زمینه‌هایی مانند سیستم‌های توصیه‌گر و تحلیل‌های بی‌درنگ جان تازه‌ای می‌یابد. در این کاربردهای مدرن، چالش مشابه است: چگونه تعاملات کاربر را در طول زمان وزن‌دهی می‌کنید، در حالی که ارتباط آن‌ها به طور طبیعی زوال می‌یابد؟

در این پست، بررسی خواهیم کرد که چگونه می‌توان میانگین‌های متحرک نمایی را دوباره تنظیم کرد تا سیستم‌های هوشمند با زوال زمانی ایجاد کرد. ما ریاضیات اصلی پشت میانگین‌های متحرک نمایی را بررسی خواهیم کرد، یک پیاده‌سازی ساده‌شده را مرور می‌کنیم و چالش‌های پیچیده مهندسی را که هنگام مقیاس‌بندی این سیستم‌ها برای پردازش میلیون‌ها رویداد در زمان واقعی ایجاد می‌شود، مورد بحث قرار خواهیم داد.

قطعه کد پایتون که محاسبه زوال نمایی را نشان می‌دهد
تابع پایتون برای محاسبه زوال نمایی.

ریاضیات زوال زمانی

در قلب میانگین متحرک نمایی یک ایده ساده نهفته است: رویدادهای اخیر مرتبط‌تر از رویدادهای قدیمی‌تر هستند. این امر با اعمال یک زوال نمایی به وزنی که به نقاط داده گذشته اختصاص داده می‌شود، به دست می‌آید. به عنوان مثال، اگر عامل زوال (a) را روی 0.5 تنظیم کنید و پنجره خود را به عنوان یک روز تعریف کنید، رویدادی که هم اکنون رخ می‌دهد، وزن کامل (0.5° = 1.0) را دارد، رویدادی که یک روز از آن می‌گذرد، نیمی از آن (0.5¹ = 0.5) کمک می‌کند و رویدادی که دو روز از آن می‌گذرد، فقط یک چهارم (0.5² = 0.25) کمک می‌کند.

یک تابع پایتون فشرده در زیر این منطق را ثبت می‌کند:

این تابع به وضوح نشان می‌دهد که چگونه وزن با زمان کاهش می‌یابد — که توسط عامل زوال و اندازه پنجره مشخص‌شده کنترل می‌شود.

کلاس پایتون برای محاسبه میانگین‌های متحرک نمایی در زمان واقعی
پیاده‌سازی کلاس پایتون برای محاسبه EMA با توان عملیاتی بالا.

چالش‌های پیاده‌سازی

در حالی که فرمول اساسی ساده است، اعمال EMAs در یک سیستم با توان عملیاتی بالا و بی‌درنگ مجموعه‌ای جدید از چالش‌ها را معرفی می‌کند. در عمل، یک سیستم توصیه‌گر ممکن است میلیون‌ها تعامل کاربر در ثانیه دریافت کند و هر تعامل باید در محاسبه میانگین‌های متحرک نمایی گنجانده شود در حالی که زمان پاسخ زیر 100 میلی‌ثانیه حفظ شود. این پیاده‌سازی جامع‌تر که در پایتون نوشته شده است را در نظر بگیرید:

به‌روزرسانی مقدار EMA با وزن‌دهی مبتنی بر زمان
به‌روزرسانی مقادیر EMA با مثال وزن‌دهی مبتنی بر زمان.

در این کلاس، تعاملات جدید با وزن‌های مبتنی بر زمان مربوطه خود جمع می‌شوند و مقدار میانگین‌های متحرک نمایی قبلی بر اساس زمان سپری‌شده به طور مناسب کاهش می‌یابد. به عنوان مثال، اگر ماشین حساب را با یک پنجره یک روزه و یک مجموعه روی 0.5 نمونه‌سازی کنید، ممکن است EMA را به صورت زیر به‌روزرسانی کنید:

این قطعه کد یک سناریوی عملی را نشان می‌دهد که در آن EMA با ترکیب داده‌های تازه ثبت‌شده با مقدار کاهش‌یافته داده‌های گذشته به‌روزرسانی می‌شود.

فراتر از پیاده‌سازی اولیه

استقرار چنین سیستمی در مقیاس بزرگ صرفاً به درست انجام دادن ریاضیات نیست — بلکه طراحی یک راه‌حل است که بتواند بارهای شدید را تحمل کند و در عین حال دقت را حفظ کند. سیستم‌های دنیای واقعی باید میلیون‌ها تعامل را با تأخیر بسیار کم پردازش کنند. دستیابی به این امر مستلزم تعامل قوی بین کارایی محاسباتی و طراحی سیستم است:

  • توان عملیاتی بالا و تأخیر کم:
    سیستم باید با ورود داده‌های جدید به سرعت EMA را به‌روزرسانی کند. این اغلب به معنای تکیه بر تکنیک‌های مختلف برای رسیدگی به EMAهایی است که برای پنجره‌های کوتاه‌تر در مقابل پنجره‌های طولانی‌تر محاسبه می‌شوند.
  • سازگاری داده‌های توزیع‌شده:
    در سیستم‌های توزیع‌شده در مقیاس بزرگ، اطمینان از اینکه هر گره دیدگاه سازگاری از مقدار EMA دارد، بسیار مهم است. این شامل حافظه‌نهان پیشرفته، متعادل‌سازی بار و استراتژی‌های تحمل خطا است که می‌تواند به‌روزرسانی‌ها را در زمان واقعی آشتی دهد.
  • حجم داده‌های پویا:
    حجم تعامل کاربر می‌تواند به طور قابل توجهی نوسان داشته باشد. معماری باید با جهش‌های ناگهانی بدون به خطر انداختن زمان پاسخ یا دقت سازگار شود و خطوط لوله پردازش مقیاس‌پذیر و انعطاف‌پذیر را ضروری کند.
Tulika Bhatt، مهندس ارشد نرم‌افزار در نتفلیکس
Tulika Bhatt، مهندس ارشد نرم‌افزار در نتفلیکس.

نگاهی به آینده با میانگین‌های متحرک نمایی

در سخنرانی آینده من در ODSC East 2025، "چگونه نتفلیکس برداشت‌های بی‌درنگ را در مقیاس بزرگ ارائه می‌کند"، بینش‌های عمیق‌تری را در مورد الگوهای معماری و شیوه‌های مهندسی به اشتراک خواهم گذاشت که نتفلیکس را قادر می‌سازد تا تریلیون‌ها نقطه داده را مدیریت کند و در عین حال زمان‌های پاسخ را زیر 100 میلی‌ثانیه نگه دارد. من بررسی خواهم کرد که چگونه پردازش سری زمانی توزیع‌شده پیشرفته و تکنیک‌های ارکستراسیون داده‌های بی‌درنگ گرد هم می‌آیند تا یک سیستم EMA قوی ایجاد کنند که شخصی‌سازی محتوا را برای بیش از 250 میلیون مشترک نیرو می‌دهد.

درباره نویسنده: Tulika Bhatt یک مهندس ارشد نرم‌افزار در نتفلیکس است که بر ساخت سیستم‌های داده بی‌درنگ مقیاس‌پذیر تمرکز دارد. او تجربه گسترده‌ای در سیستم‌های توزیع‌شده و مهندسی داده برای حل چالش‌های پیچیده در شخصی‌سازی محتوا به ارمغان می‌آورد.

با Tulika ارتباط برقرار کنید: