Modèle de série chronologique : un guide
Que l'on souhaite prédire l'évolution des marchés financiers ou la consommation d'électricité, le temps est un facteur important qui doit être pris en compte dans nos modèles. Par exemple, il serait intéressant de prévoir à quelle heure se situe le pic de consommation en électricité. Cela pourrait être utile pour ajuster le prix ou la production d'électricité.
Entrez la série chronologique. Une série chronologique est une série de points de données ordonnés dans le temps. Dans une série chronologique, le temps est souvent la variable indépendante et l'objectif est généralement de faire une prévision pour l'avenir.
Cependant, d'autres aspects entrent en jeu lorsqu'il s'agit de séries chronologiques.
Dans cet article, je présenterai différentes caractéristiques des séries chronologiques et comment nous pouvons les modéliser pour obtenir des prévisions aussi précises que possible.
De manière informelle, l'autocorrélation est la similarité entre les observations en fonction du décalage temporel entre elles.
Ci-dessus, un exemple de graphique d'autocorrélation. Si vous regardez attentivement, vous verrez que la première valeur et la 24e valeur ont une autocorrélation élevée. De même, les 12e et 36e observations sont fortement corrélées. Cela signifie que nous trouverons une valeur très similaire toutes les 24 unités de temps.
Remarquez à quel point le tracé ressemble à une fonction sinusoïdale. Ceci est un indice de saisonnalité,et vous pouvez trouver sa valeur en trouvant la période dans le graphique ci-dessus, ce qui donnerait 24 heures.
En savoir plus sur la science des donnéesUn guide des réseaux de neurones récurrents : comprendre les réseaux RNN et LSTM
La saisonnalité fait référence aux fluctuations périodiques. Par exemple, la consommation d'électricité est élevée le jour et faible la nuit, ou les ventes en ligne augmentent à Noël avant de ralentir à nouveau.
Comme vous pouvez le voir ci-dessus, il y a une saisonnalité quotidienne. Chaque jour, vous voyez un pic vers le soir, et les points les plus bas sont le début et la fin de chaque journée.
N'oubliez pas que la saisonnalité peut également être dérivée d'un graphique d'autocorrélation s'il a une forme sinusoïdale. Regardez simplement la période, et cela donne la durée de la saison.
La stationnarité est une caractéristique importante des séries chronologiques. Une série temporelle est dite stationnaire si ses propriétés statistiques ne changent pas dans le temps. En d'autres termes, il a une moyenne et une variance constantes, et sa covariance est indépendante du temps.
En regardant le même graphique, nous voyons que le processus ci-dessus est stationnaire. La moyenne et la variance ne varient pas dans le temps.
Souvent, les prix des actions ne sont pas un processus stationnaire. Nous pourrions voir une tendance à la hausse, ou sa volatilité pourrait augmenter avec le temps (ce qui signifie que la variance change.)
Idéalement, nous voudrions avoir une série chronologique stationnaire pour la modélisation. Bien sûr, tous ne sont pas stationnaires, mais nous pouvons faire différentes transformations pour les rendre stationnaires.
Vous avez peut-être remarqué que le titre de l'intrigue ci-dessus est "Dickey-Fuller". C'est le test statistique que nous exécutons pour déterminer si une série chronologique est stationnaire ou non.
Sans entrer dans les détails techniques, le test de Dickey-Fuller teste l'hypothèse nulle pour déterminer si une racine unitaire est présente.
Si c'est le cas, alors p > 0, et le processus n'est pas stationnaire.
Sinon, p = 0, l'hypothèse nulle est rejetée et le processus est considéré comme stationnaire.
Par exemple, le processus ci-dessous n'est pas stationnaire. Remarquez que la moyenne n'est pas constante dans le temps.
Il existe de nombreuses façons de modéliser une série chronologique afin de faire des prédictions. Les moyens les plus populaires incluent :
Le modèle de la moyenne mobile est probablement l'approche la plus naïve de la modélisation des séries chronologiques. Ce modèle indique simplement que la prochaine observation est la moyenne de toutes les observations passées.
Bien que simple, ce modèle peut être étonnamment efficace et représente un bon point de départ.
Sinon, la moyenne mobile peut être utilisée pour identifier des tendances intéressantes dans les données. Nous pouvons définir une fenêtre pour appliquer le modèle de moyenne mobile pour lisser la série temporelle et mettre en évidence différentes tendances.
Dans le graphique ci-dessus, nous avons appliqué le modèle de moyenne mobile à une fenêtre de 24 heures. La ligne verte a lissé la série chronologique et nous pouvons voir qu'il y a deux pics sur une période de 24 heures.
Bien sûr, plus la fenêtre est longue, plus la tendance sera fluide. Vous trouverez ci-dessous un exemple de moyenne mobile dans une fenêtre plus petite.
Le lissage exponentiel utilise une logique similaire à la moyenne mobile, mais cette fois, un poids décroissant différent est attribué à chaque observation. Autrement dit, on accorde moins d'importance aux observations à mesure qu'on s'éloigne du présent.
Mathématiquement, le lissage exponentiel s'exprime par :
Ici, alpha est un facteur de lissage qui prend des valeurs entre zéro et un. Il détermine à quelle vitesse le poids diminue pour les observations précédentes.
D'après le graphique ci-dessus, la ligne bleu foncé représente le lissage exponentiel de la série chronologique à l'aide d'un facteur de lissage de 0,3, tandis que la ligne orange utilise un facteur de lissage de 0,05.
Comme vous pouvez le voir, plus le facteur de lissage est petit, plus la série temporelle sera lisse. Cela a du sens, car lorsque le facteur de lissage se rapproche de zéro, nous nous rapprochons du modèle de moyenne mobile.
Le lissage exponentiel double est utilisé lorsqu'il existe une tendance dans la série chronologique. Dans ce cas, nous utilisons cette technique, qui est simplement une utilisation récursive du lissage exponentiel deux fois.
Mathématiquement:
Ici, bêta est le facteur de lissage de la tendance et prend des valeurs comprises entre zéro et un.
Ci-dessous, vous pouvez voir comment différentes valeurs d'alpha et de bêta affectent la forme de la série chronologique.
Cette méthode étend le double lissage exponentiel en ajoutant un facteur de lissage saisonnier. Bien sûr, cela est utile si vous remarquez une saisonnalité dans votre série chronologique.
Mathématiquement, le lissage exponentiel triple s'exprime par :
Où gamma est le facteur de lissage saisonnier et L est la durée de la saison.
En savoir plus sur la science des donnéesComprendre l'algorithme K-Nearest Neighbor (KNN)
SARIMA est en fait la combinaison de modèles plus simples qui créent un modèle complexe pouvant présenter une série chronologique présentant des propriétés non stationnaires et une saisonnalité.
Premièrement, nous avons le modèle d'autorégression, AR(p). Il s'agit essentiellement d'une régression de la série chronologique sur elle-même. Ici, nous supposons que la valeur actuelle dépend de ses valeurs précédentes avec un certain décalage. Il prend un paramètre p, qui représente le décalage maximal. Pour le trouver, nous examinons le graphique d'autocorrélation partielle et identifions le décalage après lequel la plupart des décalages ne sont pas significatifs.
Dans l'exemple ci-dessous, pserait quatre.
Ensuite, nous ajouterons le modèle de moyenne mobile MA(q). Cela prend un paramètre qqui représente le plus grand décalage après lequel les autres décalages ne sont pas significatifs sur le tracé d'autocorrélation.
Ci-dessous, qserait quatre.
Après cela, nous ajouterons l'ordre d'intégration I(d). Le paramètre dreprésente le nombre de différences nécessaires pour rendre la série stationnaire.
Enfin, nous ajouterons la composante finale : la saisonnalité S(P, D, Q, s), où s est simplement la longueur de la saison. Ce composant nécessite les paramètres P et Q qui sont les mêmes que p et q, mais pour la composante saisonnière. Enfin, Dest l'ordre d'intégration saisonnière représentant le nombre de différences nécessaires pour supprimer la saisonnalité de la série.
En combinant tout, on obtient le SARIMA (p, d, q)(P, D, Q, s)modèle.
Le principal point à retenir est le suivant : avant de modéliser avec SARIMA, nous devons appliquer des transformations à nos séries chronologiques pour supprimer la saisonnalité et tout comportement non stationnaire.
C'était beaucoup de théorie pour nous faire comprendre. Appliquons les techniques décrites ci-dessus dans notre premier projet.
Nous essaierons de prédire le cours de l'action d'une entreprise spécifique. Maintenant, prédire les cours des actions est pratiquement impossible. Cependant, cela reste un exercice amusant, et ce sera un bon moyen de mettre en pratique ce que nous avons appris.
Nous utiliserons le cours historique des actions du New Germany Fund (GF) pour tenter de prédire le cours de clôture au cours des cinq prochains jours de bourse. (Vous pouvez coder avec l'ensemble de données et le bloc-notes.)
Tout d'abord, nous allons importer certaines bibliothèques qui seront utiles tout au long de notre analyse. De plus, nous devons définir le pourcentage d'erreur moyen moyen (MAPE), car ce sera notre métrique d'erreur.
Ensuite, nous importerons notre ensemble de données et les dix premières entrées. Vous devriez obtenir :
Comme vous pouvez le voir, nous avons quelques entrées concernant un autre titre que le New Germany Fund (GF). De plus, nous avons une entrée concernant les informations intrajournalières, mais nous ne voulons que des informations de fin de journée (EOD).
Tout d'abord, nous supprimerons les entrées indésirables.
Ensuite, nous supprimerons les colonnes inutiles, car nous voulons uniquement nous concentrer sur le cours de clôture de l'action.
Si vous prévisualisez l'ensemble de données, vous devriez voir :
Maintenant, nous sommes prêts pour l'analyse exploratoire des données.
Nous tracerons le cours de clôture sur toute la période de notre ensemble de données.
Tu devrais obtenir:
De toute évidence, ce n'est pas un processus stationnaire et il est difficile de dire s'il existe une sorte de saisonnalité.
Utilisons le modèle de moyenne mobile pour lisser nos séries temporelles. Pour cela, nous nous appuierons sur une fonction d'assistance qui exécutera le modèle de moyenne mobile sur une fenêtre de temps spécifiée, et tracera la courbe lissée du résultat :
En utilisant une fenêtre temporelle de cinq jours, nous obtenons :
Nous pouvons à peine voir une tendance car elle est trop proche de la courbe réelle. Lissons par le mois précédent et le trimestre précédent pour comparer les résultats.
Les tendances sont désormais plus faciles à repérer. Remarquez comment les tendances sur 30 et 90 jours montrent une courbe descendante à la fin. Cela pourrait signifier que le stock est susceptible de baisser dans les jours suivants.
Maintenant, utilisons le lissage exponentielpour voir s'il peut prendre une meilleure tendance.
Ici, nous utilisons 0,05 et 0,3 comme valeurs pour le facteur de lissage. N'hésitez pas à essayer d'autres valeurs et voir quels sont les résultats.
Comme vous pouvez le constater, une valeur alpha de 0,05 a lissé la courbe tout en captant la plupart des tendances à la hausse et à la baisse.
Maintenant, utilisons le double lissage exponentiel.
Et vous obtenez :
Encore une fois, expérimentez différentes combinaisons alpha et bêta pour obtenir de meilleures courbes.
Comme indiqué précédemment, nous devons transformer notre série en un processus stationnaire afin de le modéliser. Par conséquent, appliquons le test de Dickey-Fuller pour voir s'il s'agit d'un processus stationnaire :
Tu devrais voir:
Selon le test de Dickey-Fuller, la série chronologique est sans surprise non stationnaire. De plus, en regardant le diagramme d'autocorrélation, nous voyons qu'il est très élevé, et il semble qu'il n'y ait pas de saisonnalité claire.
Pour se débarrasser de l'autocorrélation élevée et rendre le processus stationnaire, prenons la première différence (ligne 23 dans le bloc de code.) Nous soustrayons simplement la série chronologique d'elle-même avec un décalage d'un jour, et nous obtenons :
Notre série est maintenant stationnaire et nous pouvons commencer la modélisation.
Maintenant, pour SARIMA, nous devons d'abord définir quelques paramètres et une plage de valeurs pour d'autres paramètres afin de générer une liste de toutes les combinaisons possibles de p, q, d, P, Q, D, s.
Maintenant, dans la cellule de code ci-dessus, nous avons 625 combinaisons différentes. Nous essaierons chaque combinaison et formerons SARIMA avec chacune pour trouver le modèle le plus performant. Cela peut prendre un certain temps en fonction de la puissance de traitement de votre ordinateur.
Une fois cela fait, nous imprimerons un résumé du meilleur modèle, et vous devriez voir :
Nous pouvons enfin prédire le cours de clôture des cinq prochains jours de bourse et évaluer le pourcentage d'erreur absolu moyen (MAPE) du modèle.
Dans ce cas, nous avons un MAPE de 0,79 %, ce qui est très bon.
En savoir plus sur Data ScienceC-Means Clustering expliqué
Maintenant, pour comparer notre prédiction avec des données réelles, nous pouvons prendre des données financières de Yahoo Finance et créer un DataFrame.
Ensuite, nous faisons un tracé pour voir à quelle distance nous étions des prix de clôture réels :
Il semble que nous soyons un peu à côté de nos prévisions. En fait, le prix prévu est essentiellement stable, ce qui signifie que notre modèle ne fonctionne probablement pas bien.
Encore une fois, cela n'est pas dû à notre procédure, mais au fait qu'il est essentiellement impossible de prévoir les cours des actions.
Dès le premier projet, nous avons appris toute la procédure pour rendre une série temporelle stationnaire avant d'utiliser SARIMA pour modéliser. C'est un processus long et fastidieux avec beaucoup de réglages manuels.
Maintenant, présentons le prophète de Facebook. C'est un outil de prévision disponible en Python et R. Cet outil permet aux experts et aux non-experts de produire des prévisions de haute qualité avec un minimum d'efforts.
Le titre dit tout : nous utiliserons Prophet pour nous aider à prédire la qualité de l'air. Vous pouvez coder avec le bloc-notes complet et l'ensemble de données.
Comme toujours, nous commençons par importer quelques bibliothèques utiles. Nous allons ensuite imprimer les cinq premières lignes :
Comme vous pouvez le voir, l'ensemble de données contient des informations sur les concentrations de différents gaz. Ils ont été enregistrés à chaque heure pour chaque jour.
Si vous explorez un peu plus l'ensemble de données, vous remarquerez qu'il existe plusieurs instances de la valeur -200. Bien sûr, cela n'a pas de sens d'avoir une concentration négative, nous devrons donc nettoyer les données avant la modélisation.
Par conséquent, nous devons nettoyer les données.
Ici, nous commençons par analyser notre colonne de date pour la transformer en "dates".
Ensuite, nous transformerons toutes les mesures en flotteurs.
Ensuite, nous prendrons la moyenne de chaque mesure pour agréger les données par jour.
À ce stade, nous avons encore du NaN dont nous devons nous débarrasser. Par conséquent, nous supprimons les colonnes qui ont plus de huit NaN. De cette façon, nous pouvons ensuite supprimer les lignes contenant des valeurs NaN sans perdre trop de données.
Enfin, nous agrégeons les données par semaine, car cela donnera une tendance plus lisse à analyser.
Nous pouvons tracer les tendances de chaque produit chimique. Ici, nous montrons celle des NOx.
Les oxydes d'azote sont très nocifs, car ils réagissent pour former du smog et des pluies acides, en plus de provoquer la formation de particules fines et d'ozone troposphérique. Ceux-ci ont des effets néfastes sur la santé, de sorte que la concentration de NOx est une caractéristique clé de la qualité de l'air.
En savoir plus sur la science des donnéesTop 10 des outils d'analyse prédictive à connaître
Nous nous concentrerons uniquement sur la modélisation de la concentration en NOx. Par conséquent, nous supprimerons toutes les autres colonnes non pertinentes.
Ensuite, nous importerons Prophet.
Prophet exige que la colonne de date soit nommée ds et que la colonne de fonction soit nommée y, nous apportons donc les modifications appropriées.
À ce stade, nos données ressemblent à ceci :
Ensuite, nous définissons un ensemble d'apprentissage. Pour cela, nous conserverons les 30 dernières entrées pour prédiction et validation. Ensuite, nous initialisons simplement Prophet, adaptons le modèle aux données et faisons des prédictions.
Vous devriez voir ce qui suit :
Ici, yhat représente la prédiction, tandis que yhat_lower et yhat_upper représentent respectivement les limites inférieure et supérieure de la prédiction. Prophet vous permet de tracer facilement les prévisions, et nous obtenons :
Comme vous pouvez le voir, Prophet a simplement utilisé une ligne droite descendante pour prédire la concentration de NOx dans le futur.
Ensuite, nous pouvons vérifier si la série chronologique présente des caractéristiques intéressantes, telles que la saisonnalité :
Ici, Prophet n'a identifié qu'une tendance à la baisse sans saisonnalité.
En évaluant les performances du modèle en calculant son pourcentage d'erreur absolu moyen (MAPE) et son erreur absolue moyenne (MAE), nous voyons que le MAPE est de 13,86 % et le MAE est de 109,32, ce qui n'est pas si mal. Rappelez-vous que nous n'avons pas peaufiné le modèle.
Enfin, nous traçons simplement la prévision avec ses bornes supérieure et inférieure :
Vous avez maintenant appris à analyser et modéliser de manière robuste une série chronologique et appliqué vos connaissances dans deux projets différents.
, .