MARGO

Actualité

Tutoriel : Quelques bases en python pour la prédiction de séries temporelles

Découvrez comment prédire les données de séries temporelles en utilisant des librairies Python

Par Youssef Bennani Senior Data Scientist

11/09/2018

Dans ce tutoriel, nous introduisons quelques concepts élémentaires en séries temporelles afin de pouvoir effectuer “rapidement” des prédictions de valeurs futures sur des données temporelles. Loin d’être exhaustif, ce premier tutoriel présente quelques outils de base en Python permettant d’effectuer de premiers traitements. Le code permettant de retrouver ces résultats est ici : https://gitlab.com/margo-group/public/SeriesTemporelles.

Une série temporelle, ou série chronologique, est une séquence de valeurs numériques indexées dans le temps, souvent avec un même pas de temps séparant deux observations successives.

La figure ci-dessous montre une série temporelle correspondant au chiffre d’affaires (CA) journalier réalisé par un site de vente en ligne durant la première année de son lancement. Cette série nous accompagnera tout au long de ce tutoriel afin d’illustrer les modèles de prédiction que nous présenterons.

observations article python Margo

L’un des concepts essentiels dans l’étude des séries temporelles est la “stationnarité”. Il s’agit de savoir si les observations d’une série temporelle sont générées par une structure* qui change, ou non, avec le temps.

Une façon pratique de vérifier si une série temporelle est stationnaire ou pas est d’étudier l’évolution dans le temps de la structure de sa moyenne, de sa variance et de ses corrélations croisées avec elle-même.

Plus explicitement, si on note \(\{s_t\}_{t=1}^{T}\) une série temporelle, elle est dite stationnaire** si:

 

\(E[s_t] = m<\infty, \forall t \),

\(V[s_t] = \sigma^2<\infty,  \forall t \),

\(\gamma(t_1,t_2) = \gamma(t_2-t_1) \),

 

avec :

\(Cov(s_{t_1},s_{t_2}) = E[(s_{t_1}-m)(s_{t_2}-m)]\).

 

Ces trois assertions indiquent que la moyenne, la variance et la dépendance entre les valeurs de la série ont une structure finie et indépendante du temps.

 

La figure précédente montre que cette série n’est pas stationnaire; nous remarquons que les niveaux du CA et de sa variabilité évoluent dans le temps.

 

Il existe de nombreux tests statistiques***  pour déterminer si une série est stationnaire ou pas. Il se peut que la moyenne, la variance et les autocorrélations de la série originale ne sont pas constantes dans le temps mais que les statistiques relatives aux changements de la série entre \(d\) périodes sont constantes. Et il est donc possible de rendre stationnaire une série non-stationnaire en la différenciant \(d\) fois, c’est à dire de considérer la série \(\{s_t-s_{t-d}\}\). On parle d’opérateur retard, noté \(L\), appliqué \(d\) fois.

 

Modèle ARIMA

Le modèle ARIMA, appelé aussi modèle de Box-Jenkis, est la combinaison de trois termes : le terme autorégressif (AR), le terme de différenciation (I) et le terme de moyennes mobiles (MA).

 

Le terme autorégressif suppose que la valeur à l’instant \(t\) est une combinaison linéaire des valeurs des instants précédents plus un terme d’erreur.

 

\(AR(p) : s_t = m + \sum_{i=1}^{p}\phi_i s_{t-i} + \epsilon_t\)

 

La partie moyennes mobiles suppose que la série est une combinaison linéaire de bruits blancs****  et s’écrit comme suit :

 

\(MA(q) : s_t = \epsilon_t + \sum_{i=1}^{q}\theta_i \epsilon_{t-i}\)

 

Enfin, le terme de différenciation est une application de l’opérateur retard \(L\) une ou plusieurs fois.

 

Ainsi le modèle ARIMA s’écrit :

\(ARIMA(p,d,q) : (1-\sum_{i=1}^{p}\phi_i L^i)(1-L)^d s_t = m + (1 + \sum_{i=1}^{q}\theta_i L^i) \epsilon_{t})\)

 

Une version plus détaillée du modèle ARIMA (appelé SARIMA) propose de modéliser la saisonnalité de la série temporelle en ajoutant le paramètre \(S\) qui est la période et les paramètres \(P\), \(D\) et \(Q\) qui correspondent aux facteurs \(p\), \(d\) et \(q\) de la série différenciée \(S\) fois.

 

Les paramètres \(p\), \(d\), \(q\), \(S\), \(P\), \(D\) et \(Q\) sont déterminés par optimisation du critère d’information d’Akaike (AIC). Ce critère mesure le compromis entre la complexité d’un modèle et sa qualité d’ajustement.

 

La figure ci-dessous montre le résultat de la prédiction de la série par un modèle ARIMA sur les derniers 165 jours de l’année (zone rose). On peut remarquer que la prédiction obtenue a un niveau de variance proche de la série d’origine. Cependant cette prédiction rate souvent le sens de l’évolution de la série.

 

Le 277ème point de la série d’origine est nul. Cela pourrait correspondre à une panne rencontrée sur le site ce jour-là, ou tout simplement à une donnée manquante. A cause de la périodicité calibrée par le modèle ARIMA on remarque que le modèle prédit un pic de baisse de CA pendant les quatre semaines qui suivent le 277ème jour de la série. C’est une illustration à la fois du pouvoir de ce modèle et de ces limites.

Prédiction Arima Tutoriel Python Margo

Dans le paragraphe suivant on met l’accent sur un autre modèle de prédiction basé sur les réseaux de neurones.

Réseau de neurones récurrents (RNN)

Les réseaux de neurones artificiels sont des systèmes informatiques inspirés des réseaux de neurones biologiques qui constituent les cerveaux biologiques. Ces systèmes apprennent un phénomène en considérant beaucoup d’exemples. Un réseau est basé sur une collection d’unités connectées appelées neurones. Chaque connexion entre deux neurones signifie la possibilité de circulation de signal entre les deux neurones.

 

Un réseau de neurones récurrents (RNN) est un réseau de neurones artificiels avec des connexions récurrentes, c’est à dire des neurones interconnectés pouvant présenter des cycles. Ces réseaux ont prouvé leur efficacité dans la modélisation de problématiques de reconnaissance automatique de la parole, de l’écriture manuscrite, des formes et dans la prédiction des séries temporelles.

 

Afin d’évaluer la performance de la prévision par RNN, les données de la séries sont séparées en deux sous-ensembles : ensemble de training et ensemble de test. Comme fait précédemment, nous séparons les données des premiers 200 jours du reste de la série.

 

Une idée simple pour traiter des données temporelles par des RNN est de considérer la question de prédiction comme un problème de régression. En effet, nous ré-organisons les données de façons à expliquer une valeur courante de la série par un nombre choisi des valeurs qui lui précèdent. Ce nombre est la taille de la fenêtre par laquelle on regarde la série et qui glisse d’un cran tous les jours.

 

Le réseau mis en place a pour valeur d’entrée le nombre de retards considérés, une couche cachée avec 3 neurones et une couche de sortie.

 

Pour évaluer la performance du modèle, on utilise le critère RMSE (root-mean-square error), c’est à dire la racine carrée de la moyenne des carrées des erreurs entre valeurs prédites et valeurs observées. On ajuste le réseau en spécifiant une fonction d’activation et une méthode d’optimisation grâce à la librairie keras. Enfin, le modèle est adapté à l’ensemble de données d’apprentissage. On obtient les prédictions dans la figure ci-dessous.

Prédiction RNN Tutoriel Python Margo

On obtient un RMSE égal à 317722 alors que pour le modèle ARIMA on obtient un RMSE égal à 344723. On remarque donc que la prévision par RNN est plus pertinente que celle par ARIMA.

Réseau de neurones RNN-LTSM

RNN-LSTM (LSTM pour long short term memory) est une architecture de réseau de neurones récurrent qui se souvient des valeurs sur des intervalles arbitraires pendant l’apprentissage. Cette architecture est bien adaptée pour classer, traiter et prédire des séries temporelles avec des décalages temporels de taille et de durée inconnues entre des événements importants.

 

Le résultat de la prédiction par RNN-LTSM est donné dans la figure ci-dessous. Le RMSE correspondant est égal à 294995. Cela indique que le modèle RNN-LTSM dépasse ARIMA et RNN en ce qui concerne la précision de prédiction sur l’ensemble des données de test.

 

Autre fait que nous soulignons ici est que le modèle ne prévoit pas la chute du CA du 277ème jour (ce qui est normal). Par contre il arrive bien à prédire le pic qui survient une semaine après sans que cela n’affecte les prédictions des semaines qui suivent, comme c’était le cas avec le modèle ARIMA.

Prédiction RNN-LSTM Tutoriel Python Margo

Conclusion

Dans ce tutoriel (et le code qui l’accompagne disponible ici : https://gitlab.com/margo-group/public/SeriesTemporelles), nous avons montré comment mettre en place les modèle ARIMA, RNN et RNN-LSTM pour prédire les données de séries temporelles en utilisant des librairies Python. Nous constatons que RNN-LSTM offre une meilleure précision sur les données utilisées dans le cadre de ce test.

 

 

*On parle de processus stochastique générant les données.

**Plus exactement, la définition donnée ici est celle de la stationnarité faible ou de second ordre.

***On distingue deux types de tests de stationnarité : les tests de racine unitaire comme le test de Dicky-Fuller augmenté et le test de Phillips-Perron où l’hypothèse nulle est que la série n’est pas stationnaire et les tests comme le KPSS où l’hypothèse nulle est que la série est stationnaire.

****un bruit blanc est la réalisation d’un processus aléatoire dont la variance est constante et la moyenne et l’autocovariance sont nulles.

 


Par Youssef Bennani Senior Data Scientist
Big Data
Data to Business
DataScience
Python
Actualité

Mener à bien un projet data : une route encore semée d'embûches

En 2020, les investissements des entreprises dans les projets data devraient dépasser les 203 milliards de dollars au niveau mondial. Mais à l'heure où beaucoup se revendiquent être des Data Driven Companies, nombre de projets data se soldent encore par un échec.

15/10/2018 Découvrir 
Communiqué de presse

Margo prévoit 200 recrutements d’ici fin 2019

Margo, société de conseil française créée en 2005, annonce l’ouverture au recrutement de 40 postes supplémentaires d’ici la fin de l’année 2018. Historiquement spécialisée en IT et finance de marché, l’entreprise, qui a fait évoluer son business model afin d’adresser désormais tous les secteurs d’activité concernés par les avantages concurrentiels portés par la transformation digitale, compte déjà plus de 300 collaborateurs en France, mais aussi en Pologne et en Angleterre. Poursuivant sa forte dynamique de croissance, elle ambitionne également d’augmenter ses effectifs sur l’année 2019 grâce au recrutement de 160 nouveaux collaborateurs.

10/09/2018 Découvrir 
Actualité

Kaggle Challenge : Ad Tracking fraud detection pour TalkingData

TalkingData est la plus grande plateforme indépendante de services Big Data en Chine, couvrant plus de 70% des appareils mobiles actifs dans tout le pays. Ils traitent 3 milliards de clics par jour, dont 90% sont potentiellement frauduleux. Afin de garder une longueur d'avance sur les fraudeurs, ils se sont tournés vers la communauté Kaggle pour obtenir de l'aide dans le développement de leur solution. Le sujet du challenge : créer un algorithme qui prédit si un utilisateur va télécharger une application après avoir cliqué sur une annonce d'application mobile.

31/05/2018 Découvrir 
Actualité

La Data Science appliquée au monde du retail : les 10 use-cases incontournables

La Data Science impacte de plus en plus les business model dans toutes les industries, et notamment dans la vente de détail. Selon IBM, 62% des détaillants déclarent que l'utilisation de techniques relatives au Big Data leur donne un sérieux avantage compétitif. Savoir ce que veut votre client et à quel moment est aujourd’hui à portée de main grâce à la data science. Pour cela il suffit d’avoir les bons outils et les bons processus en place pour les utiliser. Nous présentons dans cet article 10 applications essentielles de la data science au domaine du retail.

18/05/2018 Découvrir 
Actualité

Introduction aux Chatbots avec Dialogflow

DialogFlow est un très bon outil pour apprendre à créer des Chatbots qui pourront ensuite être intégrés dans vos propres sites web ou applications. Dans cet article, je commencerai par introduire quelques notions sur Dialogflow et les Chatbots, puis je vous expliquerai comment créer simplement un Chatbot sur cette plateforme.

07/05/2018 Découvrir 
Actualité

Mise en place d'une plateforme centralisée de gestion des logs avec la suite Elastic

Les cas d’usage de la suite elastic sont nombreux. Nous citons à titre d’exemple la correction d’un dysfonctionnement applicatif par la récupération des erreurs explicites (exception, message d’erreur ..etc) et le suivi de la charge d’une application (mémoire consommée, CPU ..etc), ce qui permet d’avoir une vision globale de la production. De même au niveau métier, il est possible d’exploiter la suite pour valider une chaîne de workflow par l’extraction des données spécifiques et leurs analyses.

04/05/2018 Découvrir