Data Science & ML · L3 · Section 5/12
Séries temporelles
Progression
#Séries temporelles
Les données séquentielles demandent des précautions particulières. On découpe l'entraînement et le test dans l'ordre du temps pour éviter les fuites. Les transformations respectent la causalité: on calcule les agrégats et moyennes mobiles uniquement avec le passé disponible.
La stationnarité simplifie la modélisation; à défaut, on différencie ou on utilise des méthodes qui tolèrent les tendances. Les métriques reflètent les coûts métier: MAPE pour les pourcentages, quantile loss pour les prévisions de capacité. Les modèles vont des régressions avec features calendaires aux approches séquentielles plus riches.
#Prérequis et objectifs
Prérequis: pages « Pipeline et features », « Apprentissage supervisé » et « Évaluation et généralisation » du module (split, régularisation, validation croisée), notions de corrélation et de régression linéaire.
Objectifs d'apprentissage:
- découper une série en train/test sans mélanger les périodes, et comprendre pourquoi la validation croisée aléatoire y est interdite;
- construire des features causales: lags, moyennes mobiles calculées sur le passé seulement;
- évaluer avec des métriques adaptées (MAPE, sMAPE, quantile loss) et toujours comparer à une baseline naïve;
- interpréter une prévision sans lui faire dire plus qu'elle ne contient: pas de causalité sans hypothèses supplémentaires.
#Pas à pas: éviter la fuite de futur
Première règle: le test est toujours postérieur au train. La validation croisée par découpage aléatoire mélange les époques; le voisinage temporel d'un point contient presque toujours l'information qui permet de le deviner, et un score obtenu ainsi surestime la capacité réelle à prévoir le futur.
Deuxième règle: une feature doit être disponible au moment de la prévision. Une moyenne mobile qui englobe t, une agrégation calculée sur toute la série, un encodage ajusté sur le corpus complet: autant de portes d'entrée pour l'information future. En cas de doute, demandez-vous ce que le modèle verrait si la dernière observation n'existait pas encore.
Troisième règle: en production on prévoit rarement une fois. On recalcule périodiquement: c'est le schéma rolling, qui révèle aussi la robustesse du modèle quand le régime change.
#Playground: baseline naïve et lags sans fuite
Observation attendue: la persistance affiche MAPE = 0.077; le modèle à deux retards [1, 2], recalibré à chaque pas, fait pire (0.081): la régression court après le bruit du retard récent au lieu d'exploiter la saison. Avec le retard saisonnier ([1, 2, 24], période connue du générateur), la MAPE tombe à 0.065 et bat la baseline. Leçon honnête: un modèle à lags ne bat pas la persistance par défaut; il la bat quand ses retards codent une structure réelle, ici le cycle de 24 pas. Vérifiez vous-même en changeant LAGS.
#Exercice vérifiable: fabriquer puis mesurer une fuite
Dans le playground ci-dessus, remplacez la prédiction rolling par une version « trichée »: construisez les coefficients avec fit_coefs(ts) sur la totalité de la série (points de test inclus), puis prédisez le test avec les lags de ts. Corrigé: la MAPE passe de 0.065 à 0.064 — à peine visible. Sur ce jouet, le modèle causal capte déjà toute la structure prévisible, donc la fuite n'a presque rien à voler; la différence entre les deux MAPE (ici minuscule) mesure le gain fictif de la triche. Conclusion observable: une fuite n'est pas toujours spectaculaire, et c'est précisément pourquoi elle est dangereuse — seul le protocole causal (recalibré sur le passé) borne ce qu'on peut espérer en production.
#Features calendaires et décomposition
Une approche robuste et interprétable: régresser la cible sur des features calendaires (heure, jour de semaine, mois, indicateur de jour férié) et des lags. La saisonnalité peut aussi être extraite par moyenne par position de cycle (moyenne de toutes les observations à la même position si la période est 24). Ces features sont causales par construction: le calendrier est connu à l'avance.
Décomposition: tendance (moyenne mobile centrée pour l'analyse, moyenne mobile passée pour la prévision), saisonnalité (profil par cycle), résidu. Attention: la version « centrée » utilise le futur, elle sert à analyser, jamais à prévoir.
#Choix de métriques
MAPE: erreur relative moyenne, lisible en pourcentage; elle explose quand la série passe près de zéro et pénalise de façon asymétrique les surestimations et sous-estimations. sMAPE ou WAPE (erreur absolue pondérée) corrigent partiellement ces asymétries.
Quantile loss (pinball): pour une prévision médiane ou à quantiles, elle pondère les erreurs selon le quantile visé. C'est la métrique des prévisions de capacité: sous-dimensionner un service coûte plus cher que le sur-dimensionner, la loss asymétrique encode ce coût.
Toujours comparer à une baseline naïve (persistance, saisonnière naïve: même valeur qu'une période avant). Un modèle sophistiqué qui ne bat pas la baseline saisonnière sur un problème périodique n'a aucune raison d'être déployé.
#Corrélation temporelle n'est pas causalité
Deux séries qui suivent la même tendance sont corrélées sans lien causal (confiance dans les modèles qui intègrent des exogènes sans justification théorique). Les tests de causalité de Granger disent « x aide à prévoir y », ce qui reste une notion prédictive, pas causale. Toute affirmation causale exige des hypothèses supplémentaires: absence de confusion, calendrier plausible, et idéalement une intervention contrôlée. La page « Éthique et interprétabilité » revient sur ce garde-fou.