En séries temporelles, la validation est plus délicate que dans un cadre classique. On ne peut pas mélanger le passé et le futur sans risquer de biaiser complètement les résultats.
🔁 Time-based cross-validation#
On ne peut pas utiliser une cross-validation aléatoire classique. On doit respecter l’ordre temporel.
Deux approches principales :
Rolling window (fenêtre glissante) On entraîne sur une fenêtre fixe qui avance dans le temps.
Train: [1 → 100] → Test: [101 → 110]
Train: [11 → 110] → Test: [111 → 120]
👉 Utile si on pense que les données anciennes deviennent moins pertinentes.
Expanding window (fenêtre croissante) On entraîne sur tout l’historique disponible.
Train: [1 → 100] → Test: [101 → 110]
Train: [1 → 110] → Test: [111 → 120]
👉 Plus stable, mais peut intégrer du “vieux signal”.
💡 En pratique :
- rolling = plus adaptatif
- expanding = plus robuste
⚠️ Data leakage (le piège numéro 1)#
Le modèle ne doit jamais avoir accès au futur.
Exemples classiques :
- utiliser une moyenne calculée sur toute la série (incluant le futur)
- créer des features avec un mauvais décalage (lags mal définis)
- normaliser avec des statistiques globales
👉 Résultat : performances artificiellement excellentes… mais inutilisables en production.
💡 Règle simple :
à chaque instant t, on ne doit utiliser que l’information disponible à t
🎯 Horizon de prédiction#
Prédire à +1 jour n’est pas la même chose que prédire à +30 jours.
Deux points importants :
- la difficulté augmente avec l’horizon
- le modèle optimal peut changer selon l’horizon
Exemples :
- court terme → modèles autoregressifs performants
- long terme → besoin de variables explicatives (exogènes)
💡 Toujours préciser :
“on prédit quoi, et à quelle échéance ?”
🔄 Backtesting réaliste#
On simule des conditions réelles de production.
Pas juste un split train/test unique, mais plusieurs évaluations dans le temps.
Objectifs :
- reproduire le comportement du modèle dans le futur
- mesurer la variabilité des performances
📉 Stabilité dans le temps#
Un modèle performant une fois peut être instable.
On regarde :
- performance moyenne
- variance des performances
- dégradation dans le temps
👉 Un modèle légèrement moins performant mais stable est souvent préférable.
🧱 Baseline obligatoire#
On compare toujours à un modèle naïf.
Exemples :
- naïf : ( y_t = y_{t-1} )
- moyenne historique
- saisonnalité simple
👉 Si le modèle ne bat pas une baseline simple :
- soit il est inutile
- soit il y a un problème dans la validation
💡 C’est un garde-fou extrêmement puissant.
🧠 À retenir#
- On respecte toujours la temporalité
- Le data leakage est le risque principal
- Le backtesting doit simuler la réalité
- La stabilité compte autant que la performance
- Une baseline simple est indispensable