Nachiketa Hebbar

Follow

Sep 18, 2020 – 8 min de lecture

La prévision des séries temporelles est l’une des techniques les plus demandées de la science des données, que ce soit dans le trading boursier, la prévision des ventes commerciales ou les prévisions météorologiques. C’est clairement une compétence très pratique à avoir et je vais vous équiper avec juste cela à la fin de cet article.

Dans ce tutoriel, nous allons construire un modèle ARIMA(ne vous inquiétez pas si vous ne savez pas exactement comment cela fonctionne encore) pour prédire les valeurs de température futures d’une ville particulière en utilisant python. Le lien GitHub pour le code et l’ensemble des données se trouve à la fin de ce blog. J’ai également joint ma vidéo YouTube à la fin, au cas où vous seriez intéressé par une explication vidéo. Donc, sans perdre de temps, commençons.

La première étape de toute série chronologique est de lire vos données et de voir à quoi elles ressemblent. L’extrait de code suivant démontre comment faire cela.

Le code est assez simple. Nous lisons les données en utilisant pd.read_csv et en écrivant parse_date=True, s’assure que pandas comprend qu’il a affaire à des valeurs de date et non à des valeurs de chaîne.

Puis nous supprimons toutes les valeurs manquantes et imprimons la forme des données. df.head() imprime les 5 premières lignes du jeu de données. Voici la sortie que vous devriez voir pour cela :

Placer vos données

La prochaine étape consiste à tracer vos données. Cela vous permet de savoir si les données sont stationnaires ou non. Pour ceux qui ne savent pas ce que signifie la stationnarité, laissez-moi vous en donner l’essentiel. Bien que j’aie fait plusieurs vidéos sur ce sujet, tout se résume à ceci :

Toutes les données de séries temporelles qui doivent être modélisées doivent être stationnaires. Stationnaire signifie que ses propriétés statistiques sont plus ou moins constantes dans le temps. C’est logique, non ? Comment voulez-vous faire des prédictions si les propriétés statistiques varient avec le temps ? Voici les propriétés suivantes que tout modèle de stationnarité aura :

  1. Moyenne constante
  2. Variance constante(Il peut y avoir des variations, mais les variations ne doivent pas être irrégulières)
  3. Pas de saisonnalité(Pas de motifs répétitifs dans l’ensemble de données)

Donc la première étape est de vérifier la stationnarité. Si votre ensemble de données n’est pas stationnaire, vous devrez le convertir en une série stationnaire. Maintenant, avant de commencer à vous inquiéter de tout cela, détendez-vous ! Nous avons un test simple et fixe pour vérifier la stationnarité, appelé ADF (Augmented Dickey Fuller Test). Mais avant de montrer cela, traçons d’abord les données.

Puisque je suis seulement intéressé à prédire la température moyenne, c’est la seule colonne que je tracerai.

df.plot(figsize=(12,5))

Vérification de la stationnarité

D’emblée, on peut voir qu’elle semble avoir une moyenne quelque peu constante autour de 45. Et les fluctuations semblent aussi être plus ou moins les mêmes. Cependant, pour être sûr que les données sont stationnaires ou non, nous exécutons un test statistique fixe en utilisant le code suivant:

Vous obtiendrez la sortie suivante:

Vous n’avez pas besoin de vous soucier de toutes les statistiques complexes. Pour interpréter les résultats du test, il vous suffit de regarder la valeur p. Et vous utilisez la méthode simple suivante :

Si p< 0,05 ; Les données sont stationnaires

si p>0,05 ; Les données ne sont pas stationnaires

Ce n’est pas une règle absolue, mais une donnée stationnaire devrait avoir une petite valeur p. Une valeur p plus grande pourrait indiquer la présence de certaines tendances(moyenne variable) ou d’une saisonnalité également.

Finalement, décidez de votre modèle ARIMA

Maintenant, bien que j’ai fait plusieurs vidéos YouTube sur ce sujet, si vous ne comprenez pas complètement ce qu’est un modèle ARIMA, permettez-moi de vous présenter un aperçu facile :

ARIMA est composé de 3 termes(Auto-régression + Intégré+Moving-Average)

  1. Auto-régression:

Cela signifie essentiellement que vous utilisez les valeurs précédentes de la série chronologique afin de prédire l’avenir. Le nombre de valeurs antérieures que vous utilisez, détermine l’ordre du modèle AR. Voici à quoi ressemble un modèle AR(1) :

Y(t)= Some_Constant*Y(t-1)+ Another_Constant +Error(t)

C’est assez simple, non ?

2. Intégré :

So, vous vous souvenez de notre exposé sur la stationnarité, et comment elle est extrêmement importante ? Eh bien si vous êtes ensemble de données n’est pas stationnaire, vous avez le plus souvent besoin d’effectuer une sorte d’opération de différence pour le rendre stationnaire. Si vous faites une différence avec la valeur précédente, elle est d’ordre 1 et ainsi de suite. Voici un exemple de cela:

Pardon pour mon mauvais dessin. Mais comme vous pouvez le constater la série Y(t) n’était pas stationnaire, à cause d’une tendance à l’augmentation résultant en une moyenne variable. Il suffit de la soustraire des valeurs précédentes et voilà ! Elle devient stationnaire. Selon vos données, vous pourriez avoir à répéter la différenciation pour obtenir une différenciation de deuxième ordre , de troisième ordre et ainsi de suite..

3. Moyenne mobile:

Cela signifie essentiellement que vous utilisez les erreurs précédentes pour faire la prédiction future. C’est également logique, non ? En voyant à quel point vous vous êtes trompé dans votre prédiction, vous en tenez compte pour faire une meilleure prédiction. Et tout comme dans un modèle AR, le nombre d’erreurs précédentes(aussi appelé nombre de lags) que vous utilisez, détermine l’ordre du modèle.

Voici à quoi ressemble l’équation d’ordre de MA(1) :
Y(t)= Moyenne + Une certaine_constante*Erreur(t-1) +Erreur(t)

Donc notre travail principal est de décider de l’ordre des parties AR, I, MA qui sont données par(p,d,q) respectivement.

Et avant que vous ne commenciez à vous inquiéter, laissez-moi vous dire que tout va être fait automatiquement. La bibliothèque pmdarima vient à notre secours ! Elle fait le travail de déterminer l’ordre de l’ARIMA toute seule. Voici à quoi ressemble le bout de code :

from pmdarima import auto_arima
stepwise_fit = auto_arima(df, trace=True,
suppress_warnings=True)

(Assurez-vous d’installer la bibliothèque pmdarima d’abord en utilisant pip install pmdarima)

Le code est assez explicite. Nous fournissons simplement nos données à la fonction auto_arima. La fonction utilise essentiellement quelque chose appelé comme le score AIC pour juger de la qualité d’un modèle d’ordre particulier. Elle essaie simplement de minimiser le score AIC, et voici à quoi ressemble la sortie :

Performances du modèle pour différentes combinaisons d’ordres

Nous pouvons voir que le meilleur modèle ARIMA semble être de l’ordre (1,0,5) avec le score AIC minimum=8294.785. Avec cette connaissance, nous pouvons enfin procéder à l’entraînement et à l’ajustement du modèle pour commencer à faire des prédictions!

Split Your Dataset

Avant d’entraîner réellement le modèle, nous devons diviser l’ensemble de données en une section d’entraînement et de test. Nous faisons cela parce que nous formons d’abord le modèle sur les données et gardons la section de test cachée du modèle. Une fois que le modèle est prêt, nous lui demandons de faire des prédictions sur les données de test et de voir comment il se comporte.

L’extrait de code suivant illustre comment faire cela :

print(df.shape)
train=df.iloc
test=df.iloc
print(train.shape,test.shape)

Donc, comme vous pouvez probablement le dire, nous réservons les 30 derniers jours des données comme section de test. Vous pouvez voir les formes des données réelles, et les sections de test et de formation dans la sortie.

Forme de la section de formation et de test

Enfin, nous arrivons à la substance juteuse !

Surprenamment, la création du modèle ARIMA est en fait l’une des étapes les plus faciles une fois que vous avez fait toutes les étapes préalables. C’est aussi simple que le montre l’extrait de code ci-dessous :

from statsmodels.tsa.arima_model import ARIMA
model=ARIMA(train,order=(1,0,5))
model=model.fit()
model.summary()

Comme vous pouvez le voir, nous appelons simplement la fonction ARIMA, lui fournissons notre ensemble de données et mentionnons l’ordre du modèle ARIMA que nous voulons. Vous pourrez également voir le résumé du modèle dans votre sortie.

Résumé du modèle

Vous pouvez voir tout un tas d’informations sur votre modèle par ici. Vous pourrez également voir les coefficients de chaque terme AR et MA. Ce ne sont rien d’autre que la valeur des variables que vous avez vues dans l’équation précédente du modèle AR/MA et qui étaient étiquetées comme ‘Some_Constant’. Généralement, une magnitude plus élevée de cette variable signifie qu’elle a un impact plus important sur la sortie.

Vérifier la qualité de votre modèle

C’est ici que nos données de test entrent en jeu. Nous faisons d’abord une prédiction pour la température sur les données de test. Ensuite, nous traçons pour voir comment nos prédictions se comparent aux données réelles.

Pour faire réellement des prédictions, nous devons utiliser la fonction model.predict et lui indiquer l’indice de début et de fin dans lequel nous voulons faire les prédictions.

Puisque nous voulons commencer à faire des prédictions là où les données de formation se terminent, c’est ce que j’ai écrit dans la variable start. Nous voulons arrêter de faire des prédictions lorsque l’ensemble de données se termine, ce qui explique la variable end. Si vous voulez faire des prédictions futures aussi, vous pouvez juste changer cela en conséquence dans la variable de début et de fin aux indices que vous voulez. Votre tracé de sortie devrait ressembler à ceci:

Test values vs Predictions Plot

Comme vous pouvez le voir les prédictions font un assez bon travail de correspondance avec la tendance réelle tout en ayant un certain décalage acceptable.

Vérifiez votre métrique d’exactitude

Pour déterminer réellement à quel point votre modèle est bon ou mauvais, nous trouvons l’erreur quadratique moyenne pour lui. L’extrait de code suivant montre cela :

D’abord nous vérifions la valeur moyenne de l’ensemble de données qui s’avère être 45. Et l’erreur quadratique moyenne pour ce modèle particulier devrait être d’environ 2,3. Vous devez également veiller à ce que votre racine carrée moyenne soit très inférieure à la valeur moyenne de l’ensemble de test. Dans ce cas, nous pouvons voir que l’erreur moyenne sera d’environ 2.3/45 *100=5.1% de la valeur réelle.

Ainsi, avec cela, votre modèle ARIMA est prêt à fonctionner ! Dans les prochains blogs, je vais parler de différents modèles et comment vous pouvez augmenter la précision du modèle plus loin.

Si vous êtes intéressé par l’explication vidéo de la même chose, dirigez-vous vers ma chaîne YouTube pour plus de contenu de ce type ! Vous pouvez trouver le lien GitHub pour le code et l’ensemble de données ici : https://github.com/nachi-hebbar/ARIMA-Temperature_Forecasting

N’hésitez pas à vous connecter avec moi sur LinkedIn également !

.