اختيار الطريقة
| السيناريو | الطريقة الأفضل |
|---|---|
| سلاسل قليلة، بيانات نظيفة | Prophet، SARIMA |
| سلاسل كثيرة (1000+) | LightGBM مع ميزات الإزاحة |
| موسمية معقدة | N-BEATS، TFT |
| زمن حقيقي، زمن استجابة منخفض | التنعيم الأسي البسيط |
LightGBM للسلاسل الزمنية
def make_features(df, lags=[1,7,14,28], windows=[7,14,28]):
for lag in lags:
df[f'lag_{lag}'] = df['target'].shift(lag)
for w in windows:
df[f'rolling_mean_{w}'] = df['target'].shift(1).rolling(w).mean()
df[f'rolling_std_{w}'] = df['target'].shift(1).rolling(w).std()
df['day_of_week'] = df.index.dayofweek
df['month'] = df.index.month
df['is_weekend'] = (df.index.dayofweek >= 5).astype(int)
return df
إطار الاختبار الرجعي
التحقق walk-forward: درّب على [0..t]، وتنبّأ بـ [t+1..t+h]، ثم انزلق للأمام.