/Time-Series

Primary LanguageJupyter Notebook

Time Series

Partie 1: Introduction aux séries temporelles

Qu'est-ce qu'une série temporelle ?

  • Quelles sont les particularités des séries temporelles ?

Caractériser une série temporelle

  • Tracer les séries choisies
  • Les qualifier en termes de moyenne, tendance, saisonnalité, cycle
  • Qu'est-ce que la stationnarité ?
  • Appliquer le test de Dickey-Fuller à une série temporelle visiblement non stationnaire
  • Rendre la série stationnaire (comment ?)
  • Ré-appliquer le test à la série stationnarisée
  • Prendre un exemple de série avec cycle et appliquer une méthode de désaisonnalisation

Etude de la série temporelle

  • Décomposition d'une série temporelle : ici et et ici

  • Stationnarité et test de Dickey-Fuller augmenté : ici ici et et ici

  • Désaisonnalisation : ici

  • FFT : ici

  • Un bon notebook Kaggle utilisant la librairie statsmodel : ici

  • Un cours complet sur les séries temporelles avec des exemples en python : ici

Les techniques classiques de prédiction

  • Les baselines les plus simples ?
  • Modèles AR, MA, ARMA, ARIMA
    • Equations ?
    • Paramètres ?
    • Ordres ?

Auto-corrélation

  • Avec les séries temporelles déjà choisies, tracer l'ACF
  • Avec les séries temporelles déjà choisies, tracer la PACF
  • En déduire le modèle ARIMA adapté
  • Implémenter le modèle ARIMA correspondant, changer ses ordres et observer

Evaluation de la qualité des modèles

  • Qu'est-ce que le backtest ?
  • Walk-forward validation

Partie 2: Modèles ARMA, ARIMA

Suite de l'introduction aux séries temporelles

Revoir rapidement la décomposition de séries temporelles ici

BigML Time Series

  • Regarder la vidéo sur les séries temporelles dans BigML (vidéo)
  • Appliquer le workflow BigML au dataset cité dans la vidéo (dataset disponible ici, suivre les étapes de la vidéo
  • Appliquer le même workflow BigML au dataset sunspot.csv (disponible sur Kaggle, github, etc.) avec l'outil Time Series : à quoi vous attendez-vous ? Que constatez-vous ?
  • Choisir une série temporelle dans une des bases ci-après et appliquer le même workflow dans BigML avec l'outil Time Series

Modèles auto-régressif

Auto-corrélation

  • Un modèle auto-régressif fait appel à la notion d'auto-corrélation, c'est-à-dire à la corrélation entre des valeurs d'une série temporelle séparées par un intervalle de temps constant. Par exemple, la température moyenne aujourd'hui à un endroit donné est fortement corrélée avec la température au même endroit la veille et moins corrélée avec la température 3 mois avant.
  • Implémenter le notebook : https://machinelearningmastery.com/gentle-introduction-autocorrelation-partial-autocorrelation/

Note : La première partie de ce canevas reprend les grandes étapes classiques d'une analyse de séries temporelles :

  1. Observer la série
  2. Nettoyer les données si nécessaire
  3. Transformer la série en série stationnaire en enlevant sa moyenne, sa tendance, ses éléments saisonniers
  4. Vérififer que le résultat de 3 est stationnaire par une méthode empirique ou un test statistique (ex. : Augmented Dickey-Fuller)
  5. Etudier l'auto-corrélation en traçant l'ACF et la PACF enfin de fixer les ordres p et q d'un modèle ARMA ou ARIMA
  6. Splitter les données
  7. Fitter le modèle, tester des variantes du modèle autour des valeurs p et q trouvées en 5, les classer suivant une métrique
  8. Evaluer le(s) modèle(s) avec des fenêtres glissantes training/test
  9. Evaluer aussi la performance du modèle après avoir inversé les opérations de l'étape 3
  10. Pour la production, suivre à intervalles réguliers la performance du modèle, ré-entraîner en cas de divergence avérée

Note : Pour le choix des ordres p et q pour les parties AR et MA du modèle, on prend p tel que :

  • La PACF passe sous les intervalles de confiance à partir de p+1
  • On prend q pour la partie MA tel que :
    • l'ACF passe sous les intervalles de confiance à partir de q+1
  • Si l'ACF décroit régulièrement de façon exponentielle sans pic, le modèle sera un AR pur, q = 0
  • Si le le PACF décroit régulièrement de façon exponentielle sans pic, le modèle sera un MA pur, p = 0

Voir une discussion plus détaillée (et nuancée), en français, [ici](https://didierdelignieresblog.files.wordpress.com/2019/09/arimacomplet.pdf=

Exercice ACF/PACF

  • Générer plusieurs séries temporelles simples (+1 -1, sinus, droites, etc.)
  • Générer un signal AR, un signal MA, un signal ARMA
  • Plotter les ACF/PACF correspondantes

Partie 3: Modèle de Machine Learning

Avec le modèle persistant naïf et ARMA, nous avons une baseline comme référence pour des modèles plus sophistiqués... Suite de l'introduction aux séries temporelles avec les techniques "modernes" venant du Machine Learning :

  • RNN/LSTM/GRU
  • Convolution 1D
  • Méthodes ensemblistes du style Random Forest/XGBoost
  • Modèles dit avec "attention" venant des problèmes seq2seq du NLP (transformers)

Rappel : le théorème No Free Lunch indique qu'aucun modèle n'est universellement le meilleur, d'où l'intérêt d'essayer diverses approches sur les mêmes données.

Atelier

  • Partie 1
    • Produire une série suivant un sinus
    • Entraîner et évaluer un RNN simple sur cette série
    • Varier la méthode d'évaluation (par exemple Walk-forward à fenêtre fixe ou à fenêtre croissante)
    • Ajouter différents niveaux de bruit et re-tester le modèle précédent
    • Ré-entraîner, tester
    • Refaire ce qui précède avec un LSTM et comparer
    • Refaire ce qui précède avec un GRU et comparer
  • Partie 2
    • Tout refaire avec la série choisie la semaine précédente (éventuellement prendre une série plus longue pour les LSTM/GRU si moins de 1000 exemples. Les données de consommation électrique sont une bon matériau)
    • Tout refaire avec une méthode ensembliste et comparer
    • Tout refaire avec une conv-1D et comparer
    • BONUS : remplacer le LSTM par un modèle à attention

Méthodes plus avancées

Ressources

BigML

Les séries temporelles dans BigML (vidéo) (et ici pour les fonctionnalités principales)

Datasets

  • 7 datasets collectés dans un article de Jason Brownlee : ici
  • 41 séries temporelles : ici
  • 102 datasets de l'UCI :ici

Séries multivariées

https://www.analyticsvidhya.com/blog/2018/09/multivariate-time-series-guide-forecasting-modeling-python-codes/