التنبؤ بالسلاسل الزمنية: ARIMA وETS وVAR مع اختبار رجعي سليم في R وPython
دليل عملي إلى التنبؤ بالسلاسل الزمنية: الاستقرارية والفروق، وقراءة ACF وPACF، ونماذج ARIMA وETS وVAR في R وPython، والاختبار الرجعي بأصل متدحرج، وعرض عدم اليقين لصانع القرار.
نحول البيانات الشهرية والفصلية إلى توقعات مختبرة على الماضي، يرافقها نطاق عدم يقين واضح يساعد على تخطيط الموازنات والطلب والطاقة الاستيعابية.
عن المنهجية
تبني الجهات الحكومية والمؤسسات خططها السنوية على أرقام مستقبلية: أعداد الطلاب المتوقعة، والطلب على الكهرباء والمياه، ومراجعات المرافق الصحية، والإيرادات. كثير من هذه التوقعات يعتمد على متوسط بسيط أو نسبة نمو ثابتة، فتغيب الموسمية وأثر العطل والصدمات، ولا يعرف المخطط حجم الخطأ المحتمل. تحليل السلاسل الزمنية يفصل الاتجاه العام عن الموسمية والتذبذب العشوائي، وينتج توقعًا مصحوبًا بمدى معقول يمكن التخطيط على أساسه.
نبدأ بفحص السلسلة: انقطاعات التسجيل، والقيم الشاذة، وتغير التعريفات الإدارية عبر الزمن، ثم نختبر الاستقرارية والموسمية. نقارن نماذج متعددة مثل ETS وARIMA الموسمي والنماذج ذات المتغيرات الخارجية بمعيار مرجعي بسيط كالتنبؤ الموسمي الساذج، عبر اختبار رجعي متدحرج الأصل يحاكي ظروف الاستخدام الفعلي. نختار النموذج بمقاييس خطأ خارج العينة مثل MAE وMASE، ونفحص البواقي للتأكد من عدم بقاء نمط لم يلتقطه النموذج.
يحصل صاحب القرار على توقعات للأفق المطلوب مع نطاقات تنبؤ عند مستويات الثقة التي يحددها، وجدول يبين أداء كل نموذج في الاختبار الرجعي حتى يرى سبب الاختيار. وعند تعدد المستويات، كالمنطقة ثم المحافظة ثم الدولة، نستخدم التنبؤ الهرمي لتتسق الأرقام عند جمعها. ونسلم شيفرة موثقة تعيد إنتاج التوقعات عند وصول بيانات جديدة، مع توضيح صريح بأن التوقع تقدير احتمالي لا رقم مضمون.
للمؤسسات والجهات
وزارات التعليم: إسقاط أعداد الطلاب حسب المرحلة والمنطقة لتخطيط الشعب الدراسية واحتياجات المعلمين.
القطاع الصحي: توقع المراجعات الأسبوعية لأقسام الطوارئ والحاجة إلى الطاقة السريرية والكوادر في المواسم.
المالية العامة والجهات الاقتصادية: التنبؤ بالإيرادات الشهرية ومؤشرات الأسعار لدعم إعداد الموازنة.
البلديات ومرافق الخدمات: تقدير الطلب على المياه والكهرباء وجمع النفايات حسب الموسم والمنطقة.
أجهزة الإحصاء: التعديل الموسمي للمؤشرات الشهرية والتنبؤ الآني (Nowcasting) بالقيم قبل صدورها الرسمي.
المنظمات الإنسانية: توقع الاحتياج من المواد والإمدادات لتخطيط المخزون وسلاسل التوريد.
النماذج والأساليب
يلتقط المستوى والاتجاه والموسمية بأوزان تتناقص مع تقادم المشاهدات، ويناسب كثيرًا من السلاسل التشغيلية.
يصف الارتباط الذاتي في السلسلة بعد إزالة الاتجاه والموسمية، ويعطي نطاقات تنبؤ مبنية على نموذج احتمالي صريح.
يضيف إلى نموذج السلسلة متغيرات خارجية مثل العطل الرسمية أو الأسعار أو حالة الطقس.
يجعل توقعات المستويات الفرعية تجمع إلى توقع المستوى الأعلى دون تناقض.
يفصل الاتجاه عن الموسمية ويستوعب التغيرات المفاجئة والقيم المفقودة في السلسلة.
يقيس دقة كل نموذج بإعادة التنبؤ من نقاط زمنية متتالية كما لو استخدم فعليًا في الماضي.
من الكود
مقتطفات مبسطة من نوع الكود الذي نسلمه موثقًا مع التقرير، تعمل على بيانات مدمجة أو اصطناعية، ويعاد تشغيلها على بيانات مؤسستك متى وصلت.
import numpy as np
import statsmodels.api as sm
from statsmodels.tsa.statespace.sarimax import SARIMAX
# Built-in weekly CO2 series aggregated to monthly
y = (sm.datasets.co2.load_pandas().data["co2"]
.resample("MS").mean().ffill())
train, test = y[:-24], y[-24:]
# Backtest: fit on training window, score last 24 months
fit = SARIMAX(train, order=(1, 1, 1),
seasonal_order=(0, 1, 1, 12)).fit(disp=False)
pred = fit.forecast(len(test))
naive = y.shift(12)[-24:] # seasonal naive benchmark
mae = lambda f: np.mean(np.abs(test - f))
print(f"MAE sarima={mae(pred):.3f} naive={mae(naive):.3f}")
# Same parameters on full data: 12 months, 95% interval
fc = fit.apply(y).get_forecast(12).summary_frame(alpha=0.05)
print(fc[["mean", "mean_ci_lower", "mean_ci_upper"]].round(2))library(fable)
library(tsibble)
library(dplyr)
# Built-in AirPassengers as a monthly tsibble
ap <- as_tsibble(AirPassengers)
train <- ap |> filter(index < yearmonth("1959 Jan"))
# Competing models fitted on the training window
fit <- train |> model(
ets = ETS(log(value)),
arima = ARIMA(log(value)),
snaive = SNAIVE(log(value)))
# Backtest on 1959-1960: RMSE, MAE, MAPE, MASE
fit |> forecast(h = 24) |> accuracy(ap)
# Refit on full data: 12-month forecast, 95% interval
ap |> model(ETS(log(value))) |>
forecast(h = 12) |> hilo(level = 95)Python: statsmodels, statsforecast, sktime, pmdarima, pandas, matplotlibR: fable, fabletools, tsibble, feasts, forecast
المخرجات
نتفق على النطاق كتابيًا من البداية، والمدة حسب حجم العمل وتعقيد المنهجية.
توقعات للأفق الزمني المطلوب مع نطاقات تنبؤ عند مستويات الثقة المحددة.
جدول مقارنة بين النماذج يبين أخطاءها في الاختبار الرجعي مقابل معيار مرجعي بسيط.
تحليل للاتجاه العام والموسمية والقيم الشاذة في السلسلة مع رسوم توضيحية.
شيفرة Python أو R موثقة تعيد إنتاج التوقعات عند تحديث البيانات.
مذكرة منهجية بافتراضات النموذج وحدود استخدامه ومتى تلزم إعادة تقديره.
منهجيات أخرى
نماذج تتنبأ بالطلب والمخاطر والتسرب، مع تحقق متقاطع ومقاييس دقة واضحة وتفسير لأهم العوامل.
التفاصيل والنماذج ←تصاميم الفروق في الفروق (DiD) ومطابقة درجة الميل (PSM) لقياس الأثر الفعلي للبرامج والسياسات.
التفاصيل والنماذج ←نماذج للبيانات المتداخلة وبيانات البانل، وتقديرات بايزية بفترات مصداقية.
التفاصيل والنماذج ←تصنيف النصوص واستخراج موضوعاتها واتجاهاتها من الشكاوى والاستبانات المفتوحة والمنشورات.
التفاصيل والنماذج ←خرائط وتحليل للارتباط المكاني يكشف التفاوت بين المناطق وبؤر التركز.
التفاصيل والنماذج ←لوحات بـ Power BI وTableau وShiny وDash تتجدد مع وصول البيانات.
التفاصيل والنماذج ←أوزان المعاينة والتصاميم الطبقية والعنقودية وتقديرات المناطق الصغيرة.
التفاصيل والنماذج ←من المدونة
دليل عملي إلى التنبؤ بالسلاسل الزمنية: الاستقرارية والفروق، وقراءة ACF وPACF، ونماذج ARIMA وETS وVAR في R وPython، والاختبار الرجعي بأصل متدحرج، وعرض عدم اليقين لصانع القرار.
بايثون أم R لتحليل البيانات: مقارنة عملية بين منظومتي اللغتين في الإحصاء وتعلم الآلة والتقارير القابلة لإعادة الإنتاج، مع مثال مكافئ بالكودين ومعايير واضحة للاختيار.
شرح تحليل الانحدار الخطي البسيط والمتعدد: شروطه وطرق فحصها في SPSS، وقراءة R² وجدول ANOVA ومعاملات بيتا، وصياغة النتائج في الرسالة بمثال تطبيقي.
لديك بيانات وسؤال؟
نبدأ باستشارة مبدئية مجانية نحدد فيها السؤال والبيانات والمنهجية المناسبة، ونرد عليك خلال ساعة.
الأسئلة الشائعة