Modèle SARIMA (Seasonal ARIMA)
Le modèle SARIMA (Seasonal AutoRegressive Integrated Moving Average) est une extension du modèle ARIMA qui prend en compte les variations saisonnières dans les séries temporelles. Il est particulièrement utile pour les séries temporelles qui présentent des cycles ou des patterns saisonniers réguliers (par exemple, les données mensuelles, trimestrielles ou hebdomadaires).
Le modèle SARIMA combine des termes ARIMA classiques avec des termes saisonniers pour modéliser les comportements saisonniers dans les séries temporelles.
Composants du modèle SARIMA
Le modèle SARIMA est noté de la manière suivante :
où :
-
: Le nombre de termes autorégressifs (AR) pour la partie non saisonnière.
-
: Le nombre de différences nécessaires pour rendre la série stationnaire (non saisonnière).
-
: Le nombre de termes de moyenne mobile (MA) pour la partie non saisonnière.
-
: Le nombre de termes autorégressifs saisonniers (AR).
-
: Le nombre de différences saisonnières.
-
: Le nombre de termes de moyenne mobile saisonnière (MA).
-
: La longueur de la saison (par exemple,
pour les données mensuelles avec une saisonnalité annuelle).
Composants saisonniers de SARIMA
Les termes saisonniers
,
, et
correspondent à la même logique que pour ARIMA mais appliqués à la saisonnalité (par exemple, une saisonnalité annuelle pour les données mensuelles).
-
AR saisonnier (P) : Comportement autorégressif observé à une période saisonnière.
-
MA saisonnier (Q) : Moyenne mobile appliquée à une période saisonnière.
-
Différence saisonnière (D) : Différence appliquée pour rendre la série stationnaire saisonnièrement (par exemple, en soustrayant une valeur d’il y a 12 mois pour les séries mensuelles).
Étapes pour appliquer un modèle SARIMA
-
Stationnarité :
-
Comme pour ARIMA, il faut vérifier si la série est stationnaire. Si la série n’est pas stationnaire, vous pouvez appliquer des différences saisonnières pour la rendre stationnaire.
-
-
Identification des paramètres :
-
Utilisez les graphiques ACF (autocorrélation) et PACF (autocorrélation partielle) pour identifier les paramètres saisonniers (AR, MA) et non saisonniers.
-
Identifiez également la longueur de la saison (s).
-
-
Ajustement du modèle :
-
Ajustez le modèle SARIMA aux données en estimant les paramètres saisonniers et non saisonniers.
-
-
Validation du modèle :
-
Vérifiez les résidus du modèle pour vous assurer qu’ils ne contiennent pas d’informations non capturées par le modèle.
-
-
Prévision :
-
Utilisez le modèle ajusté pour effectuer des prévisions saisonnières.
-
Fonctions :
-
SARIMAX()
La fonction SARIMAX() de statsmodels permet d'ajuster un modèle SARIMAX à une série temporelle.
Importation :
from statsmodels.tsa.statespace.sarimax import SARIMAX
Attributs :
Nom Type Description order tuple (p, d, q) Le paramètre `order` spécifie l'ordre du modèle ARIMA standard. `p` est l'ordre de l'auto-régression, `d` est le nombre de différenciations nécessaires pour rendre la série stationnaire, et `q` est l'ordre de la moyenne mobile. seasonal_order tuple (P, D, Q, s) Le paramètre `seasonal_order` définit la partie saisonnière du modèle. `P` est l'ordre de l'auto-régression saisonnière, `D` est le nombre de différenciations saisonnières, `Q` est l'ordre de la moyenne mobile saisonnière, et `s` est la longueur de la saisonnalité (par exemple, 12 pour une saisonnalité mensuelle sur 1 an). exog array-like, optionnel Variables exogènes à inclure dans le modèle. Par exemple, des facteurs externes qui peuvent influencer la série temporelle (ex. : politiques économiques, promotions, etc.). trend str, optionnel Spécifie le type de tendance à utiliser dans le modèle (par défaut, aucune tendance). Les valeurs possibles sont 'n' (pas de tendance), 'c' (constante), 't' (tendance linéaire) et 'ct' (constante et tendance). Exemple de code :
from statsmodels.tsa.statespace.sarimax import SARIMAX import pandas as pd import numpy as np import matplotlib.pyplot as plt # Création d'une série temporelle d'exemple avec des tendances saisonnières np.random.seed(0) dates = pd.date_range('2020-01-01', periods=100, freq='D') data = np.sin(np.linspace(0, 20, 100)) + 0.1 * np.random.normal(size=100) # Série avec une tendance saisonnière et un bruit # Création d'une DataFrame series = pd.Series(data, index=dates) # Définir l'ordre du modèle SARIMAX (p, d, q) et (P, D, Q, s) # Ici, p=1, d=1, q=1 pour la partie ARIMA et P=1, D=1, Q=1, s=7 pour la saisonnalité hebdomadaire (7 jours) model = SARIMAX(series, order=(1, 1, 1), seasonal_order=(1, 1, 1, 7)) # Ajustement du modèle SARIMAX fitted_model = model.fit() # Affichage des résultats du modèle print(fitted_model.summary()) # Prédictions avec le modèle SARIMAX forecast = fitted_model.forecast(steps=10) # Prédire les 10 prochaines valeurs # Affichage de la série temporelle et des prévisions plt.plot(series, label='Données historiques') plt.plot(pd.date_range('2020-04-10', periods=10, freq='D'), forecast, label='Prévisions', color='red') plt.legend() plt.show()
Explication du code :
Les bibliothèques nécessaires sont importées :
- SARIMAX de statsmodels.tsa.statespace.sarimax permet de modéliser une série temporelle en prenant en compte la saisonnalité à l’aide du modèle SARIMAX (Seasonal AutoRegressive Integrated Moving Average with eXogenous regressors).
- pandas pour la gestion des données sous forme de DataFrame.
- numpy pour les calculs mathématiques et la génération de données aléatoires.
- matplotlib.pyplot pour créer des visualisations graphiques.
Création d'une série temporelle d'exemple avec des tendances saisonnières
Tout d'abord, une graine aléatoire est fixée pour garantir la reproductibilité des résultats. Ensuite, une série de 100 dates est générée, à partir du 1er janvier 2020 avec une fréquence journalière. Une série de données est créée en utilisant la fonction sinus pour générer une tendance saisonnière, à laquelle est ajouté un bruit aléatoire faible.
Création d'une DataFrame
Les données générées sont converties en un objet pandas.Series, avec les dates comme index pour former une série temporelle.
Définir l'ordre du modèle SARIMAX
Un modèle SARIMAX est défini pour modéliser la série temporelle. Les paramètres sont spécifiés comme suit :
- order=(1, 1, 1) : il s'agit de l'ordre du modèle ARIMA (AutoRegressive Integrated Moving Average), avec p=1 (autoregressive), d=1 (differencing), q=1 (moving average).
- seasonal_order=(1, 1, 1, 7) : ce modèle inclut une composante saisonnière avec P=1, D=1, Q=1 et une saisonnalité de période s=7 jours (hebdomadaire).
Ajustement du modèle SARIMAX
Le modèle SARIMAX est ensuite ajusté à la série temporelle à l'aide de la méthode fit().
Affichage des résultats du modèle
Une fois le modèle ajusté, un résumé des résultats est affiché avec la méthode summary(), contenant des informations détaillées sur les paramètres du modèle, leur significativité, ainsi que les performances du modèle.
Prédictions avec le modèle SARIMAX
Le modèle ajusté est utilisé pour prédire les 10 prochaines valeurs de la série temporelle à l'aide de la méthode forecast().
Affichage de la série temporelle et des prévisions
Un graphique est tracé pour afficher à la fois les données historiques et les prévisions obtenues avec le modèle SARIMAX. La série historique est représentée en bleu, tandis que les prévisions sont tracées en rouge.