- Quelles sont les particularités des séries temporelles ?
- 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
-
Stationnarité et test de Dickey-Fuller augmenté : ici ici et là 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 baselines les plus simples ?
- Modèles AR, MA, ARMA, ARIMA
- Equations ?
- Paramètres ?
- Ordres ?
- 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
- Qu'est-ce que le backtest ?
- Walk-forward validation
Suite de l'introduction aux séries temporelles
Revoir rapidement la décomposition de séries temporelles ici
- 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
- De même, dans une série temporelle, un modèle auto-régressif est une régression linéaire d'une variable sur ses valeurs passées
- Une vidéo sur ces modèles ici
- Pour illustrer le modèle AR, implémenter le notebook : https://machinelearningmastery.com/autoregression-models-time-series-forecasting-python/
- 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 :
- Observer la série
- Nettoyer les données si nécessaire
- Transformer la série en série stationnaire en enlevant sa moyenne, sa tendance, ses éléments saisonniers
- Vérififer que le résultat de 3 est stationnaire par une méthode empirique ou un test statistique (ex. : Augmented Dickey-Fuller)
- 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
- Splitter les données
- 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
- Evaluer le(s) modèle(s) avec des fenêtres glissantes training/test
- Evaluer aussi la performance du modèle après avoir inversé les opérations de l'étape 3
- 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=
- 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
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.
- 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
- Modèles à seq2seq https://jeddy92.github.io/JEddy92.github.io/ts_seq2seq_intro/
- La FFT dans Python et son usage (si pas le temps, se reporter ici)
-
Stationnarité et test de Dickey-Fuller augmenté : ici ici et là 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
-
Un exemple très complet sur la sélection des ordres d'un modèle ARMA, en français ! ici
-
Librairie statsmodels ici
-
Des modèles plus exotiques : ARCH, GARCH voir
-
Un exemple d'analyse de série temporelle : ici
-
Vidéo d'ouverture sur d'autres méthodes, l'exemple d'Uber : ici
-
Un livre entier sur les méthodes de prédiction : ici
-
Grid search sur les time series https://machinelearningmastery.com/how-to-grid-search-deep-learning-models-for-time-series-forecasting/
-
Un exemple de notebook avec un modèle ARIMA https://github.com/JTreguer/arima_example
Les séries temporelles dans BigML (vidéo) (et ici pour les fonctionnalités principales)
- 7 datasets collectés dans un article de Jason Brownlee : ici
- 41 séries temporelles : ici
- 102 datasets de l'UCI :ici
-
RNN simple sur un sinus avec Keras : ici
-
RNN simple sur un sinus avec TensorFlow : ici
-
Notebook de Guillaume ici
-
Des explications sur les LSTM : ici
-
LSTM sur un sinus : ici Une discussion à lire
-
LSTM sur série univarié ici
-
Deep learning sur série univarié : ici
-
Un diagramme très complet sur la forme des entrée pour un LSTM dans Keras : https://github.com/MohammadFneish7/Keras_LSTM_Diagram
-
Une analyse de série temporelle très complète d'un point de vue statistique sur un cas réel avec LSTM : ici Avec le notebook Tiré de ça
-
ARIMA vs LSTM (vs Prophet): ici
-
Changer la fréquence d'une série temporelle avec Pandas : http://benalexkeen.com/resampling-time-series-data-with-pandas/
-
Utiliser la convolution 1D pour les séries temporelles : ici ,ici ,ici et là
-
XGBoost pour les séries temporelles : ici
-
Un notebook Kaggle qui utilise XGBoost pour de la prédiction de séries temporelles : ici
-
Une étude comparative sur github entre ARIMA, XGBOOST et RNN: ici