Choix de la méthode
| Scénario | Meilleure méthode |
|---|---|
| Peu de séries, données propres | Prophet, SARIMA |
| Nombreuses séries (1000+) | LightGBM avec lag features |
| Saisonnalité complexe | N-BEATS, TFT |
| Temps réel, faible latence | Lissage exponentiel simple |
LightGBM pour les séries temporelles
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
Framework de backtesting
Validation walk-forward : entraîner sur [0..t], prédire [t+1..t+h], glisser vers l'avant.