Prévision de séries chronologiques avec statsmodels et Prophet

Prévision de séries chronologiques avec statsmodels et Prophet

Nœud source: 1996963
Prévision de séries chronologiques avec statsmodels et Prophet
Image jcomp on Freepik
 

Les séries chronologiques sont un ensemble de données unique dans le domaine de la science des données. Les données sont enregistrées sur une fréquence temporelle (par exemple, quotidienne, hebdomadaire, mensuelle, etc.) et chaque observation est liée à l'autre. Les données de séries chronologiques sont précieuses lorsque vous souhaitez analyser ce qu'il advient de vos données au fil du temps et créer des prévisions futures. 

La prévision de séries chronologiques est une méthode permettant de créer des prévisions futures basées sur des données de séries chronologiques historiques. Il existe de nombreuses méthodes statistiques pour la prévision de séries chronologiques, telles que ARIMA or Lissage exponentiel.

La prévision de séries chronologiques est souvent rencontrée dans l'entreprise, il est donc avantageux pour le data scientist de savoir comment développer un modèle de séries chronologiques. Dans cet article, nous allons apprendre à prévoir des séries chronologiques à l'aide de deux packages Python de prévisions populaires ; statsmodels et Prophet. Allons-y.

La statistiquesmodèles Le package Python est un package open source offrant divers modèles statistiques, y compris le modèle de prévision de séries chronologiques. Essayons le package avec un exemple de jeu de données. Cet article utilisera le Série chronologique des devises numériques données de Kaggle (CC0 : domaine public). 

Nettoyons les données et examinons l'ensemble de données dont nous disposons.

import pandas as pd df = pd.read_csv('dc.csv') df = df.rename(columns = {'Unnamed: 0' : 'Time'})
df['Time'] = pd.to_datetime(df['Time'])
df = df.iloc[::-1].set_index('Time') df.head()

 

Prévision de séries chronologiques avec statsmodels et Prophet
 

Pour notre exemple, disons que nous voulons prévoir la variable 'close_USD'. Voyons comment le modèle de données au fil du temps.

import matplotlib.pyplot as plt plt.plot(df['close_USD'])
plt.show()

 

Prévision de séries chronologiques avec statsmodels et Prophet
 

Construisons le modèle de prévision basé sur nos données ci-dessus. Avant la modélisation, divisons les données en données d'apprentissage et de test.

# Split the data
train = df.iloc[:-200] test = df.iloc[-200:]

 

Nous ne divisons pas les données au hasard car il s'agit de données de séries chronologiques et nous devons préserver l'ordre. Au lieu de cela, nous essayons d'avoir les données de train antérieures et les données de test des dernières données.

Utilisons statsmodels pour créer un modèle de prévision. Le modèle de statistiques fournit de nombreuses API de modèles de séries chronologiques, mais nous utiliserions le modèle ARIMA comme exemple.

from statsmodels.tsa.arima.model import ARIMA #sample parameters
model = ARIMA(train, order=(2, 1, 0)) results = model.fit() # Make predictions for the test set
forecast = results.forecast(steps=200)
forecast

 

Prévision de séries chronologiques avec statsmodels et Prophet
 

Dans notre exemple ci-dessus, nous utilisons le modèle ARIMA de statsmodels comme modèle de prévision et essayons de prédire les 200 prochains jours.

Le résultat du modèle est-il bon ? Essayons de les évaluer. L'évaluation du modèle de série chronologique utilise généralement un graphique de visualisation pour comparer le réel et la prédiction avec des métriques de régression telles que l'erreur absolue moyenne (MAE), l'erreur quadratique moyenne (RMSE) et MAPE (erreur absolue moyenne en pourcentage).

from sklearn.metrics import mean_squared_error, mean_absolute_error
import numpy as np #mean absolute error
mae = mean_absolute_error(test, forecast) #root mean square error
mse = mean_squared_error(test, forecast)
rmse = np.sqrt(mse) #mean absolute percentage error
mape = (forecast - test).abs().div(test).mean() print(f"MAE: {mae:.2f}")
print(f"RMSE: {rmse:.2f}")
print(f"MAPE: {mape:.2f}%")

 

MAE: 7956.23 RMSE: 11705.11 MAPE: 0.35%

 

Le score ci-dessus semble correct, mais voyons ce qu'il en est lorsque nous les visualisons.

plt.plot(train.index, train, label='Train')
plt.plot(test.index, test, label='Test')
plt.plot(forecast.index, forecast, label='Forecast')
plt.legend()
plt.show()

 

Prévision de séries chronologiques avec statsmodels et Prophet
 

Comme nous pouvons le voir, les prévisions étaient pires car notre modèle ne peut pas prévoir la tendance à la hausse. Le modèle ARIMA que nous utilisons semble trop simple pour faire des prévisions.

Peut-être que c'est mieux si nous essayons d'utiliser un autre modèle en dehors des statsmodels. Essayons le fameux package prophète de Facebook.

Prophète est un progiciel de modèles de prévision de séries chronologiques qui fonctionne le mieux sur les données avec des effets saisonniers. Prophet était également considéré comme un modèle de prévision robuste car il pouvait gérer les données manquantes et les valeurs aberrantes.

Essayons le package Prophet. Tout d'abord, nous devons installer le package.

pip install prophet

 

Après cela, nous devons préparer notre ensemble de données pour la formation du modèle de prévision. Prophet a une exigence spécifique : la colonne de temps doit être nommée "ds" et la valeur "y".

df_p = df.reset_index()[["Time", "close_USD"]].rename( columns={"Time": "ds", "close_USD": "y"}
)

 

Une fois nos données prêtes, essayons de créer une prédiction de prévision basée sur les données.

import pandas as pd
from prophet import Prophet model = Prophet() # Fit the model
model.fit(df_p) # create date to predict
future_dates = model.make_future_dataframe(periods=365) # Make predictions
predictions = model.predict(future_dates) predictions.head()

 

Prévision de séries chronologiques avec statsmodels et Prophet
 

Ce qui était génial avec le Prophète, c'est que chaque point de données de prévision était détaillé pour que nous, les utilisateurs, comprenions. Cependant, il est difficile de comprendre le résultat uniquement à partir des données. Nous pourrions donc essayer de les visualiser à l'aide de Prophet.

model.plot(predictions)

 

Prévision de séries chronologiques avec statsmodels et Prophet
 

La fonction de tracé des prédictions du modèle nous indiquerait le niveau de confiance des prédictions. D'après le graphique ci-dessus, nous pouvons voir que la prédiction a une tendance à la hausse, mais avec une incertitude accrue, plus les prédictions sont longues.

Il est également possible d'examiner les composants de prévision avec la fonction suivante.

model.plot_components(predictions)

 

Prévision de séries chronologiques avec statsmodels et Prophet
 

Par défaut, nous obtiendrions la tendance des données avec une saisonnalité annuelle et hebdomadaire. C'est un bon moyen d'expliquer ce qui se passe avec nos données.

Serait-il possible d'évaluer également le modèle Prophet ? Absolument. Prophet inclut une mesure de diagnostic que nous pouvons utiliser : validation croisée des séries chronologiques. La méthode utilise une partie des données historiques et ajuste le modèle à chaque fois en utilisant des données jusqu'au point limite. Ensuite, le Prophète comparait les prédictions avec les réalités. Essayons d'utiliser le code.

from prophet.diagnostics import cross_validation, performance_metrics # Perform cross-validation with initial 365 days for the first training data and the cut-off for every 180 days. df_cv = cross_validation(model, initial='365 days', period='180 days', horizon = '365 days') # Calculate evaluation metrics
res = performance_metrics(df_cv) res

 

Prévision de séries chronologiques avec statsmodels et Prophet
 

Dans le résultat ci-dessus, nous avons acquis le résultat d'évaluation à partir du résultat réel par rapport à la prévision de chaque jour de prévision. Il est également possible de visualiser le résultat avec le code suivant.

from prophet.plot import plot_cross_validation_metric
#choose between 'mse', 'rmse', 'mae', 'mape', 'coverage' plot_cross_validation_metric(df_cv, metric= 'mape')

 

Prévision de séries chronologiques avec statsmodels et Prophet
 

Si nous voyons le graphique ci-dessus, nous pouvons voir que l'erreur de prédiction variait selon les jours et qu'elle pouvait atteindre une erreur de 50 % à certains moments. De cette façon, nous pourrions vouloir ajuster davantage le modèle pour corriger l'erreur. Vous pouvez vérifier le Documentation pour une exploration plus poussée.

La prévision est l'un des cas courants qui se produisent dans l'entreprise. Un moyen simple de développer un modèle de prévision consiste à utiliser les packages statsforecast et Prophet Python. Dans cet article, nous apprenons à créer un modèle de prévision et à les évaluer avec statsforecast et Prophet.
 
 
Cornellius Yudha Wijaya est un gestionnaire adjoint en science des données et un rédacteur de données. Tout en travaillant à plein temps chez Allianz Indonesia, il aime partager des conseils Python et Data via les réseaux sociaux et les supports d'écriture.
 

Horodatage:

Plus de KDnuggetsGenericName