قراية
وضع الحكايات

أساسيات الـ time series

~12 دقيقة قراية الدرس 1 من 3 في الوحدة 10

بيانات مترتبة بالزمن

الـ time series (السلسلة الزمنية) هي تسلسل مشاهدات متجمعة عند نقط زمنية ورا بعض. وعلى عكس الـ cross-sectional data (بيانات المقطع العرضي) اللي مشاهداتها مستقلة، بيانات الـ time series ليها ترتيب طبيعي — كل مشاهدة مرتبطة باللي قبلها واللي بعدها. درجات الحرارة المتسجّلة كل ساعة، وأسعار الأسهم اليومية، وأرقام المبيعات الشهرية، والتعداد السنوي — كل دول أمثلة على time series.

تحليل الـ time series فرع من الإحصاء بيهتم بفهم التركيبة الزمنية واستخدامها في التنبؤ. وهو أساسي في الفلوس والاقتصاد والـ signal processing وعلوم المناخ، وفي أي مجال الأحداث فيه بتحصل على مدار الزمن. والفكرة الأساسية إن القيم اللي فاتت شايلة معلومات عن القيم الجاية — وإنك تطلّع المعلومات دي هو جوهر التحليل.

إيه اللي بيخلّي الـ time series مختلفة؟

في الإحصاء التقليدي بنفترض إن المشاهدات مستقلة. في الـ time series، المشاهدات مرتبطة ببعض على مدار الزمن — قيمة امبارح مرتبطة بقيمة النهارده. وإنك تتجاهل الارتباط ده معناه إنك بترمي إشارة قيّمة مدفونة في التركيبة الزمنية.

الـ time series = البيانات + الترتيب الزمني + الـ autocorrelation

المكوّنات الأربعة

أغلب الـ time series الحقيقية ممكن تتفكّ لـ 4 مكوّنات أساسية. وفهم المكوّنات دي هو أول خطوة ناحية الـ modeling والتنبؤ.

الـ trend (الاتجاه العام) (T): الاتجاه البعيد المدى للسلسلة — هي طالعة عمومًا، ولا نازلة، ولا ثابتة؟ متوسط حرارة الكرة الأرضية طالع على طول. ومبيعات التليفونات الأرضي نازلة على طول. والناتج المحلي في أغلب الدول طالع على مدى عقود.

الـ seasonality (الموسمية) (S): تذبذبات دورية بتتكرر بفترات منتظمة ومعروفة. مبيعات المحلات بتعلى في ديسمبر كل سنة. ومبيعات الآيس كريم بتوصل للقمة في الصيف وبتنزل في الشتا. والطلب على الكهربا أعلى صباحات أيام الشغل. والـ seasonality ممكن تتوقعها ومرتبطة بالنتيجة أو بالدورات الطبيعية.

الـ cyclical component (الدورية) (C): تذبذبات أطول ومش منتظمة ومالهاش فترة ثابتة. الدورات الاقتصادية (الرواج والكساد) عادةً بتستمر كذا سنة. وعلى عكس الـ seasonality، الدورية مش مرتبطة بالنتيجة وطولها مش ثابت من الأول.

الـ noise (التشويش) (ε): التغيّر العشوائي المش منتظم اللي بيفضل بعد ما تشيل الـ trend والـ seasonality والدورات. اسمه كمان الـ residuals أو مكوّن الخطأ. وفي الـ model الكويس، الـ noise المفروض يبان زي white noise — عشوائي من غير نمط.

الـ additive والـ multiplicative decomposition

العلاقة بين المكوّنات دي يا إما additive (تجميعية) يا إما multiplicative (تضريبية). في الـ additive model المكوّنات بتتجمع ببساطة. وفي الـ multiplicative بتتضرب. والاختيار معتمد على هل التقلبات الموسمية بتكبر بنسبة من الـ trend ولا لأ.

الـ additive model
Y_t = T_t + S_t + C_t + \varepsilon_t
بيستخدم لما التقلبات الموسمية تبقى تقريبًا ثابتة الحجم مهما كان مستوى الـ trend
الـ multiplicative model
Y_t = T_t \cdot S_t \cdot C_t \cdot \varepsilon_t
بيستخدم لما التقلبات الموسمية تكبر بنسبة من الـ trend (منتشر في البيانات الاقتصادية)

لو لاحظت وإنت بترسم السلسلة إن القمم والقيعان الموسمية بتكبر لما الـ trend يعلى، استخدم الـ multiplicative model. أما لو التغيّر الموسمي فضل ثابت نسبيًا بالقيم المطلقة، يبقى الـ additive هو الأنسب. وتقدر كمان تطبّق log transformation عشان تحوّل السلاسل الـ multiplicative لـ additive.

الـ stationarity

models كتير للـ time series محتاجة الـ stationarity (الثبات الإحصائي) — خاصية معناها إن الخصايص الإحصائية للسلسلة مش بتتغيّر مع الوقت. رسميًا، الـ time series بتبقى stationary (بالمعنى الضعيف) لو الـ mean والـ variance وتركيبة الـ autocorrelation بتاعتها ثابتين على مدار الزمن.

شروط الـ weak stationarity

1. mean ثابت: E[Xₜ] = μ لكل t

2. variance ثابت: Var(Xₜ) = σ² لكل t

3. الـ covariance معتمد على الـ lag بس: Cov(Xₜ, Xₜ₊ₖ) معتمد على k بس مش على t

السلسلة اللي فيها trend مش stationary لأن الـ mean بتاعها بيتغيّر مع الزمن. والسلسلة اللي الـ variance بتاعها بيتغيّر (heteroscedasticity) مش stationary برضه. وإنك تخلّي السلسلة stationary هو أول خطوة في المعالجة قبل ما تطبّق ARIMA models وزيّها. وأشهر طريقة هي الـ differencing (الفروق): إنك تطرح المشاهدات المتتالية من بعض عشان تشيل الـ trend.

الـ first difference
\nabla Y_t = Y_t - Y_{t-1}
الـ differencing بيشيل الـ trend بإنه يحسب التغيّر بين المشاهدات المتتالية. ولو الـ first difference مكفّاش، ممكن تطبّق الـ second difference.

الـ autocorrelation function (ACF)

الـ autocorrelation function (دالة الارتباط الذاتي) أو ACF بتقيس الارتباط بين الـ time series وقيمها اللي فاتت عند lags مختلفة. بتجاوب على سؤال: السلسلة شبه نسخة منها متزحزحة k خطوات لورا قد إيه؟

الـ autocorrelation عند الـ lag k
\rho(k) = \frac{\text{Cov}(X_t,\, X_{t+k})}{\text{Var}(X_t)} = \frac{\gamma(k)}{\gamma(0)}
الـ ACF عند الـ lag k هي الارتباط بين المشاهدات اللي بينها k خطوة. ρ(0) = 1 دايمًا؛ والقيم القريبة من ±1 بتشاور على autocorrelation قوي.

لما ترسم الـ ACF عند كل الـ lags بيطلعلك الـ ACF plot (الـ correlogram). وشكل الرسمة دي شايل معلومات مهمة جدًا:

لو الـ ACF بتقل ببطء (ارتباط significant عند lags كتير)، يبقى السلسلة مش stationary ومحتاجة differencing. والنمط الجيبي بيكشف seasonality. والـ ACF اللي بتقطع فجأة بعد الـ lag q بتقترح MA model من الدرجة q. والـ ACF اللي بتقل exponentially بتقترح AR process.

الـ partial autocorrelation function (PACF)

الـ partial autocorrelation function (دالة الارتباط الذاتي الجزئي) أو PACF بتقيس الارتباط بين Xₜ وXₜ₋ₖ بعد ما تشيل الأثر الخطي للـ lags اللي في النص 1، 2، ...، k-1. يعني بتعزل التأثير المباشر للـ lag k مع التحكم في الـ lags الأقصر.

الـ ACF والـ PACF مع بعض هما الأدوات التشخيصية الأساسية عشان تحدد الـ order الصح لـ ARIMA model:

دليل تفسير الـ ACF والـ PACF

الـ AR(p) process: الـ ACF بتقل بشكل هندسي أو بتتذبذب؛ والـ PACF بتقطع فجأة بعد الـ lag p.

الـ MA(q) process: الـ ACF بتقطع فجأة بعد الـ lag q؛ والـ PACF بتقل بشكل هندسي.

الـ ARMA(p,q) model: الدالتين بيقلّوا بالتدريج — ولا واحدة فيهم بتقطع فجأة.

الـ additive decomposition في الواقع

الـ classical additive decomposition بيمشي بإنه يقدّر كل مكوّن لوحده. الأول، بيستخدم moving average عشان يقدّر الـ trend. وبعد ما يشيل الـ trend، بيقدّر المكوّن الموسمي بإنه يحسب متوسط السلسلة اللي اتشال منها الـ trend على الفترات. واللي بيفضل هو الـ residuals (الـ noise).

طرق الـ decomposition الحديثة زي الـ STL (Seasonal and Trend decomposition using Loess) أمتن — بتتعامل مع الأنماط الموسمية اللي بتتغيّر وبتقاوم الـ outliers. وفي Python، الطرق دي بتتطبّق عن طريق `statsmodels.tsa.seasonal.seasonal_decompose` و`STL`.

الـ decomposition ليه هدفين: الأول إنك تشوف تركيبة السلسلة — النمو بيتسارع؟ الـ seasonality بتتغيّر؟ والتاني إنك تحسّن التنبؤ بإنك تعمل model لكل مكوّن لوحده وترجع تجمع التنبؤات.

في الدرس الجاي، هنبني على الأساسات دي عشان نتعلّم الـ ARIMA models — العمود الفقري للتنبؤ بالـ time series. هتتعلّم إزاي تستخدم رسومات الـ ACF والـ PACF عشان تحدد الـ order الصح للـ model، وإزاي تتعامل مع عدم الـ stationarity بالـ differencing.

أهم النقط
  • الـ time series بيانات مترتبة بالزمن؛ والمشاهدات مرتبطة ببعض على مدار الزمن، على عكس الـ samples المستقلة.
  • كل time series بتتفكّ لـ: trend، وseasonality، ودورية، وnoise — يا إما additive يا إما multiplicative.
  • الـ stationarity (ثبات الـ mean والـ variance وتركيبة الـ covariance) مطلوبة في أغلب الـ models؛ والـ differencing هو الأداة الأساسية عشان توصلها.
  • الـ ACF بتقيس الارتباط عند كل lag؛ والـ PACF بتعزل التأثير المباشر عند كل lag بعد ما تشيل تأثير الـ lags الأقصر.
  • رسمتين الـ ACF والـ PACF مع بعض بيكشفوا الـ order بتاع الـ AR والـ MA processes اللي ورا البيانات.
السابق — الوحدة 9 الـ computational Bayesian methods نظرة عامة على الموديول الدرس اللي بعده الـ ARIMA models