Time Series Forecasting2020متوسط12 دقيقة قراءة
DeepAR: التنبؤ الاحتمالي باستخدام الشبكات التكرارية الذاتية الانحدار
DeepAR: Probabilistic Forecasting with Autoregressive Recurrent Networks
Salinas, D. · Flunkert, V. · Gasthaus, J. · Januschowski, T. — International Journal of Forecasting
المشكلة
الطرق التقليدية مثل ARIMA والتمهيد الأُسّي تبني نموذجاً منفصلاً لكل على حدة. المشكلة تظهر حين يكون عندك آلاف أو ملايين السلاسل المترابطة — طلبات منتجات، أحمال خوادم، قراءات طاقة — لأن بناء نموذج مستقل لكل واحدة بطيء، ولا يستفيد من الأنماط المشتركة بين السلاسل، ويعجز تماماً أمام المنتجات الجديدة التي ليس لها تاريخ سابق. فوق ذلك، أغلب هذه الطرق تعطيك رقماً واحداً فقط ولا توفّر التوزيع الاحتمالي الكامل الذي تحتاجه لاتخاذ قرارات حساسة للمخاطر كتخطيط المخزون أو تخصيص الموارد.
الإسهام
يقترح DeepAR شبكة عصبية تكرارية ذاتية الانحدار تتعلّم من آلاف السلاسل الزمنية المترابطة دفعة واحدة بدل بناء نموذج لكل سلسلة. تأخذ شبكة LSTM الملاحظات التاريخية والمتغيرات المصاحبة وتُحوّلها إلى معاملات توزيع احتمالي — غاوسي للقيم المستمرة أو ذي الحدين السالب لبيانات العدّ. عند التنبؤ، يُولّد النموذج عدة مسارات عيّنات بأسلوب مونت كارلو ليُنتج توزيعات تنبؤية كاملة لا مجرد أرقام نقطية. يعالج النموذج التفاوت الكبير في أحجام السلاسل بتطبيع خاص لكل واحدة، ويتغلّب على مشكلة بتضمينات مُتعلَّمة لكل عنصر. التجارب أظهرت تحسّناً يقارب 15% على أفضل الطرق المتاحة عبر عدة مجموعات بيانات حقيقية.
الأثر
أسّس DeepAR لنقلة نوعية في التنبؤ بالسلاسل الزمنية: بدل بناء نموذج لكل سلسلة، تُدرَّب شبكة عصبية واحدة على آلاف السلاسل معاً. تبنّته أمازون كمحرّك أساسي لخدمة Amazon Forecast للتنبؤ بالطلب، وألهم جيلاً كاملاً من طرق التنبؤ العصبية. أسلوبه في توليد مسارات عيّنات ذاتية الانحدار لبناء تنبؤات احتمالية متسقة أثّر بوضوح على أعمال لاحقة مثل Chronos وInformer ومنظومة GluonTS. الأهم أن DeepAR أثبت عملياً أن التعلّم العميق ليس ترفاً أكاديمياً في مجال التنبؤ — بل أداة إنتاجية فعّالة.
تخيّل خبير أرصاد جوية أمضى 20 سنة يدرس طقس كل المدن في المنطقة. حين تأتيه مدينة جديدة تماماً وتسأله عن طقس الغد، لا يحتار — بل يقول فوراً: «هذا النمط يشبه المدن الساحلية في الربيع.» والأهم أنه لا يعطيك رقماً واحداً، بل يقول: «الأرجح 21 درجة، لكن توقّع ما بين 18 و24.»
التنبؤ التقليدي يشبه أن توظّف خبيراً مستقلاً لكل مدينة لا يعرف إلا سجلاتها. أما DeepAR فهو ذلك الخبير المخضرم الذي تعلّم من جميع المدن معاً: يكتشف الأنماط المشتركة، يتعامل مع المدن الجديدة بسلاسة، ويعطيك دائماً نطاقاً — لا رقماً يتيماً.
المشكلة: نموذج لكل سلسلة لا يصمد أمام التوسّع
لنأخذ مثالاً واقعياً: بائع تجزئة كبير يتتبّع الطلب على 500,000 منتج عبر 1,000 فرع. الطرق التقليدية كـ ARIMA أو التمهيد الأُسّي تبني نموذجاً منفصلاً لكل سلسلة زمنية على حدة. وهذا يُسبّب ثلاث مشكلات أساسية:
التوسّع: بناء وصيانة نصف مليون نموذج عبء تشغيلي ضخم.
شُحّ البيانات: كثير من المنتجات لها سجلات مبيعات قصيرة أو متقطعة، فلا تملك النماذج المنفردة بيانات كافية لتلتقط أي نمط ذي معنى.
البداية الباردة: المنتج الجديد ليس له تاريخ أصلاً، فالنماذج المنفردة لا تملك ما تبدأ منه.
وحتى حين تعمل هذه الطرق، فإنها عادةً تعطيك رقماً واحداً — تنبؤاً نقطياً. لكن القرارات العملية تحتاج تقدير عدم اليقين: هل أطلب 100 وحدة أم 200؟ الجواب يتوقف على مدى ثقتك في التنبؤ. ما نحتاجه فعلاً هو توزيع احتمالي كامل يصف القيم المستقبلية المحتملة.
الفكرة: نموذج واحد لكل السلاسل يُخرج توزيعات احتمالية
فكرة DeepAR تقوم على ركيزتين أساسيتين:
1. نموذج شامل واحد: بدل بناء نموذج لكل سلسلة زمنية، تُدرَّب شبكة عصبية تكرارية واحدة على جميع السلاسل المترابطة في آنٍ واحد. الشبكة تتعلّم أنماطاً مشتركة — كالموسمية وأشكال الاتجاهات وتأثيرات المتغيرات المصاحبة — وتنقل هذه المعرفة بين السلاسل. أما ما يميّز كل سلسلة عن غيرها فيُلتقط عبر مُتعلَّمة لكل عنصر وتطبيع مقياس خاص بكل سلسلة.
2. مُخرَج احتمالي: بدل أن يتنبأ النموذج برقم واحد، يُخرج معاملات توزيع احتمالي عند كل خطوة زمنية. إن كانت البيانات مستمرة، يُخرج المتوسط μ والانحراف المعياري σ لتوزيع غاوسي. وإن كانت بيانات عدّ، يُخرج معاملات التوزيع ذي الحدين السالب. النتيجة: توزيع تنبؤي كامل لا مجرد رقم وحيد.
البنية : في كل خطوة زمنية، يأخذ النموذج الملاحظة السابقة والمتغيرات المصاحبة، يمرّرها عبر LSTM، ويُخرج معاملات التوزيع. تخيّلها كسلسلة حلقات: كل حلقة تستخدم ناتج الحلقة السابقة لتُنتج التنبؤ التالي.
البنية: كيف تتعاون LSTM مع دالة الأرجحية
في كل خطوة زمنية t، يمرّ DeepAR بأربع مراحل:
الخطوة 1 — تجميع المُدخلات: نأخذ الملاحظة السابقة z(t−1) مع المتغيرات المصاحبة x(t) — وهي سمات زمنية كيوم الأسبوع والشهر والعطلات، إضافة إلى أي سمات خاصة بالعنصر — مع السابقة h(t−1).
الخطوة 2 — عبر LSTM: نُدخل كل ذلك إلى شبكة LSTM متعددة الطبقات، فتُنتج حالة خفية جديدة h(t). فكّر في الحالة الخفية كذاكرة مضغوطة تلخّص كل ما رآه النموذج حتى الآن عن هذه السلسلة.
الخطوة 3 — إنتاج معاملات التوزيع: نُمرِّر h(t) عبر طبقتين كاملتي الاتصال. في حالة مثلاً: طبقة تُخرج μ(t) وهو المتوسط المتوقع، وطبقة تُخرج σ(t) وهو الانحراف المعياري، ويمرّ عبر دالة softplus لضمان أنه موجب دائماً.
الخطوة 4 — حساب : الأرجحية ℓ(z(t) | θ(t)) تقيس: ما مدى توافق القيمة الحقيقية z(t) مع التوزيع الذي توقّعه النموذج؟ أثناء نُعظِّم هذه الأرجحية — أو بصياغة مكافئة، نُصغِّر اللوغاريتم السالب لها.
التدريب: تعظيم الأرجحية باستخدام التلقين القسري
يُدرَّب DeepAR عبر تعظيم لوغاريتم الأرجحية على البيانات المُلاحظة. دالة الخسارة تأخذ الشكل التالي:
أثناء التدريب، يعتمد النموذج على ما يُعرف بـ****: في كل خطوة زمنية، يتلقّى النموذج القيمة الحقيقية السابقة z(t−1) كمُدخل — لا تنبؤه هو. الأمر يشبه طالباً يتدرّب ومعه ورقة الإجابات: يرى دائماً الجواب الصحيح للخطوة السابقة، فيتعلّم أسرع وبثبات أكبر.
لكن عند لا توجد قيم مستقبلية حقيقية. هنا يضطر النموذج لاستخدام عيّناته المُولَّدة كمُدخلات — وهذا يخلق فجوة جوهرية بين بيئة التدريب وبيئة التشغيل الفعلي. هذا تحدٍّ معروف في ، ويتعامل معه DeepAR باختيار نوافذ تدريب عشوائية من السلاسل لتقليل هذا الأثر.
الاستدلال: كيف تُبنى التنبؤات بمسارات مونت كارلو
عند الاستدلال، يبني DeepAR تنبؤاته عبر أخذ عيّنات مونت كارلو. الخطوات كالتالي:
-
نُمرِّر التاريخ المعروف (نطاق التهيئة) عبر LSTM لبناء الحالة الخفية — بالضبط كما نفعل في التدريب.
-
عند أول خطوة تنبؤ، نسحب عيّنة من التوزيع المتوقع: z̃(t₀) ~ Gaussian(μ(t₀), σ(t₀)).
-
نُدخل تلك العيّنة كقيمة سابقة للخطوة التالية — بدل الملاحظة الحقيقية التي لا نملكها بعد.
-
نكرّر ذلك لكل خطوة حتى نهاية أفق التنبؤ.
-
نُعيد العملية كاملة K مرة (مثلاً K=100) فنحصل على K مسار عيّنة.
كل مسار هو سيناريو مستقبلي محتمل. حين نجمع المسارات الـ K معاً، نحصل على تقريب تجريبي للتوزيع التنبؤي الكامل. من هذه المسارات نستطيع حساب أي نريده (P10 أو P50 أو P90)، أو فترات ثقة، أو قيم متوقعة — حسب ما يحتاجه نظام اتخاذ القرار.
أدوات عملية: تطبيع المقياس وتضمينات العناصر
في الواقع العملي تظهر مشكلتان يعالجهما DeepAR بحلول بسيطة وفعّالة:
تطبيع المقياس: المنتج «أ» قد يبيع 10,000 وحدة يومياً بينما المنتج «ب» يبيع وحدتين فقط. لو أدخلنا القيم الخام، ستسيطر السلاسل الكبيرة على التدريب وتبتلع إشارة السلاسل الصغيرة. الحل: يقسم DeepAR كل سلسلة على معامل مقياس v_i — عادةً متوسط قيمها المطلقة في نطاق التهيئة — فتتعلّم الشبكة الأنماط في فضاء مُطبَّع، ثم تُعاد التنبؤات إلى مقياسها الأصلي. بهذه الطريقة تستطيع شبكة واحدة التعامل مع سلاسل تختلف أحجامها بمراتب عديدة.
تضمينات العناصر: كل سلسلة تحصل على متجه تضمين قابل للتعلّم — تخيّله كبطاقة هوية رقمية تختزل خصائص السلسلة التي لا يمكن استنتاجها من المتغيرات المصاحبة وحدها. يُضاف هذا التضمين كمُدخل إضافي لشبكة LSTM. بالنسبة للعناصر الجديدة التي ليس لها تاريخ، يبدأ التضمين بقيمة افتراضية ويتشكّل تدريجياً مع وصول البيانات.
كيف تختار دالة الأرجحية المناسبة
من أقوى نقاط تصميم DeepAR أن دالة الأرجحية قابلة للاستبدال بسهولة. البنية الأساسية للشبكة لا تتغيّر — كل ما يتغيّر هو طبقة الإخراج ودالة الخسارة:
الأرجحية الغاوسية — تناسب البيانات المستمرة كدرجة الحرارة والأسعار واستهلاك الطاقة. الشبكة تُخرج μ وσ، ودالة الخسارة هي اللوغاريتم السالب لكثافة التوزيع الغاوسي عند القيمة الحقيقية.
أرجحية التوزيع ذي الحدين السالب — تناسب بيانات العدّ كالطلب على المنتجات أو النقرات أو عدد الأحداث. هذا التوزيع يتعامل بشكل طبيعي مع كثرة الأصفار والتشتت المفرط — على عكس التوزيع الغاوسي الذي قد يُعطي قيماً سالبة لا معنى لها في سياق العدّ.
ويمكن إضافة خيارات أخرى بنفس السهولة: توزيع بيتا للبيانات المحصورة بين 0 و1، أو توزيع برنولي للنتائج الثنائية، أو مزيج من التوزيعات للحالات المعقدة. الشرط الوحيد: أن تستطيع حساب لوغاريتم الأرجحية واشتقاق التدرّجات منه — وهذا متحقق في أي توزيع حدودي قياسي.
الفكرة مُترجمة إلى كود
مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.
import numpy as np
def deepar_forward(lstm, z_prev, x_t, h_prev, W_mu, W_sigma):
"""خطوة زمنية واحدة في DeepAR: مُدخلات → LSTM → معاملات التوزيع."""
# ندمج القيمة السابقة مع المتغيرات المصاحبة والتضمين الاختياري
inp = np.concatenate([z_prev, x_t])
# تُنتج LSTM حالة خفية جديدة (ذاكرة مضغوطة)
h_t = lstm.forward(h_prev, inp) # الشكل: (hidden_dim,)
# نُسقط الحالة الخفية على معاملات التوزيع
mu = W_mu @ h_t # المتوسط المتوقع
sigma = softplus(W_sigma @ h_t) # الانحراف المعياري (دائماً > 0)
return h_t, mu, sigma
def deepar_train_loss(model, series, covariates):
"""حساب خسارة اللوغاريتم السالب للأرجحية على سلسلة زمنية واحدة."""
loss = 0.0
h = np.zeros(model.hidden_dim) # الحالة الخفية الأولية
for t in range(1, len(series)):
h, mu, sigma = deepar_forward(
model.lstm,
z_prev=series[t-1:t], # تلقين قسري: نُدخل القيمة الحقيقية
x_t=covariates[t],
h_prev=h,
W_mu=model.W_mu,
W_sigma=model.W_sigma,
)
# اللوغاريتم السالب للأرجحية الغاوسية
loss += 0.5 * np.log(2 * np.pi * sigma**2) + (series[t] - mu)**2 / (2 * sigma**2)
return loss / (len(series) - 1)
# عند الاستدلال: نستبدل series[t-1] بعيّنة من Gaussian(mu, sigma).
# نكرّر K مرة → K مسار عيّنة → توزيع تنبؤي تجريبي.النتائج: أداء متفوّق على مجموعات بيانات واقعية
اختُبر DeepAR على عدة مجموعات بيانات كبيرة تغطي الطلب على التجزئة وقطع غيار السيارات واستهلاك الكهرباء، وكانت النتائج لافتة:
تحسّن بنحو 15% في خسارة المئين المُرجَّحة مقارنة بأفضل الطرق السائدة كـ ARIMA والتمهيد الأُسّي والموسمي الساذج، وذلك على معظم مجموعات البيانات.
بيانات الكهرباء (370 سلسلة ساعية): تفوّق DeepAR بفارق واضح على الطرق التقليدية، وكان الفارق أوضح في الآفاق الزمنية الطويلة حيث تزداد أهمية الأنماط المشتركة بين السلاسل.
بيانات قطع الغيار (طلب متقطع): هنا تألّقت أرجحية التوزيع ذي الحدين السالب، لأنها التقطت بدقة نمط «أصفار كثيرة ثم قفزة» الذي تعجز عنه الطرق الغاوسية.
بيانات حركة المرور (862 سلسلة إشغال طرق): نجح DeepAR في التقاط الموسمية اليومية والأسبوعية المشتركة بين المستشعرات، وأنتج نطاقات عدم يقين مُعايَرة جيداً.
الخلاصة المهمة: نموذج شامل واحد تفوّق باستمرار على مجموعة من النماذج المتخصصة المبنية لكل سلسلة على حدة — مع حاجة أقل بكثير للضبط اليدوي.
DeepAR من منظور المُرمِّز وفاكّ الترميز
يمكن فهم DeepAR عبر إطار المُرمِّز وفاكّ الترميز المعروف في نماذج التسلسل إلى تسلسل:
نطاق التهيئة — أي الملاحظات التاريخية — يلعب دور : شبكة LSTM تقرأ التاريخ المعروف وتُراكم السياق في حالتها الخفية. بنهاية هذه المرحلة تكون الحالة الخفية ملخصاً مضغوطاً لكل ما يعرفه النموذج عن هذه السلسلة.
نطاق التنبؤ يلعب دور : انطلاقاً من الحالة الخفية النهائية، تُولّد LSTM القيم المستقبلية خطوة بخطوة، وتُعيد كل عيّنة تُنتجها كمُدخل للخطوة التالية. الفرق الجوهري عن نماذج الترجمة الآلية أن المُرمِّز وفاكّ الترميز هنا يتشاركان شبكة LSTM واحدة — لا توجد شبكة منفصلة لفك الترميز. هذا التشارك في الأوزان هو ما يجعل DeepAR خفيفاً ويُمكِّنه من الانتقال بسلاسة من قراءة التاريخ إلى توليد التنبؤات.
ما الذي مهّد له DeepAR
2017
DeepAR
شبكة تكرارية ذاتية الانحدار شاملة للتنبؤ الاحتمالي. نموذج واحد يخدم آلاف السلاسل ويُولّد مسارات مونت كارلو مع إمكانية تبديل دالة الأرجحية.
2019
GluonTS
مكتبة مفتوحة المصدر للتنبؤ الاحتمالي بالسلاسل الزمنية مبنية على MXNet. وضعت DeepAR والنماذج المشابهة في أيدي الممارسين بسهولة.
2019
Amazon Forecast
خدمة مُدارة من AWS للتنبؤ بالسلاسل الزمنية، يقوم DeepAR بدور خوارزميتها الأساسية. أوصلت التنبؤ العصبي إلى بيئات الإنتاج الفعلية على نطاق واسع.
2021
Informer
تنبؤ بأفق زمني طويل باستخدام المُحوِّل وآلية انتباه ProbSparse. نقل فكرة التنبؤ الاحتمالي إلى عالم البنيات القائمة على الانتباه.
2023
PatchTST
تقسيم السلاسل الزمنية إلى رقع ومعالجتها بالمُحوِّل. أثبت أن هذا الأسلوب ينافس الطرق المبنية على الشبكات التكرارية.
2024
Chronos
نموذج لغوي مُدرَّب مسبقاً للسلاسل الزمنية يعتمد على ترميز القيم كرموز. يحمل فلسفة DeepAR في التوليد الذاتي الانحدار والتنبؤ الاحتمالي، لكن على نطاق النماذج التأسيسية.
المرجعSalinas, Flunkert, Gasthaus, Januschowski. DeepAR: Probabilistic forecasting with autoregressive recurrent networks. International Journal of Forecasting, 2020.
مصطلحات هذه الورقة
- النموذج التوليدي التراجعيAutoregressive Model
- التنبؤ الاحتماليProbabilistic Forecasting
- الشبكة العصبية التكراريةRecurrent Neural Network (RNN)
- شبكة الذاكرة الطويلة قصيرة المدىLSTM
- الأرجحيةLikelihood
- سالب لوغاريتم الأرجحيةNegative Log-Likelihood
- التوزيع الغاوسيGaussian Distribution
- التوجيه بالمرجعTeacher Forcing
- أساليب محاكاة مونت كارلوMonte Carlo
- المتغير المرافقCovariate
- الحالة المخفيةHidden State
- البداية الباردةCold Start
- التضمينEmbedding
- المئينQuantile
- سلسلة زمنيةTime Series