Accéder au contenu principal

Modèles SARIMA : guide complet de la prévision de séries temporelles saisonnières

Découvrez comment SARIMA étend ARIMA pour gérer la saisonnalité, comprenez ses sept paramètres et construisez un modèle opérationnel en Python, de la collecte des données à la prévision.
Actualisé 31 juil. 2026  · 15 min lire

Explorer avec l’IA

Ouvrir dans ChatGPTOuvrir dans ClaudeOuvrir dans Perplexity

Chaque mois de décembre, les enseignes font le plein de stocks pour les fêtes. Chaque été, les réseaux électriques se préparent aux pics de climatisation. Ces motifs se répètent année après année, et si vous élaborez une prévision de séries temporelles qui les ignore, vous perdez en précision.

Les modèles SARIMA (Seasonal AutoRegressive Integrated Moving Average) étendent le cadre ARIMA, largement utilisé, afin de capturer les schémas saisonniers récurrents en plus des tendances régulières. Dans cet article, vous verrez ce qu'est SARIMA, comment ses composantes fonctionnent, quand le préférer à ARIMA et comment en construire un pas à pas en Python.

Qu'est-ce que SARIMA ?

SARIMA est un modèle de prévision pour séries temporelles qui gère à la fois les schémas non saisonniers et saisonniers. Il s'appuie directement sur ARIMA : si vous avez déjà travaillé avec ARIMA, vous reconnaîtrez l'essentiel de la mécanique. La différence clé, c'est que SARIMA ajoute une seconde couche de paramètres conçus pour modéliser des comportements qui se répètent à intervalles fixes, comme des cycles mensuels, trimestriels ou hebdomadaires.

Formellement, un modèle SARIMA s'écrit SARIMA(p, d, q)(P, D, Q)[S]. Le premier triplet (p, d, q) gère la structure non saisonnière, identique à ARIMA standard. Le second, (P, D, Q)[S], rend compte des schémas saisonniers, où S est la longueur du cycle saisonnier. Pour des données mensuelles avec une saisonnalité annuelle, S = 12. Pour des données trimestrielles, S = 4.

Composantes clés de SARIMA

Les sept paramètres de SARIMA peuvent sembler nombreux au début. Pensez-les en deux groupes : le trio ARIMA bien connu (p, d, q) et leurs équivalents saisonniers (P, D, Q, S) qui les reflètent à l'échelle saisonnière. Chaque paramètre saisonnier fait exactement ce que fait son homologue non saisonnier, mais appliqué à des décalages saisonniers plutôt qu'à des pas de temps adjacents.

Partie autorégressive (AR)

La composante AR utilise les valeurs passées de la série pour prédire les valeurs futures. Le paramètre p indique combien de valeurs retardées inclure. Si p = 2, le modèle utilise les deux pas de temps précédents comme prédicteurs de la valeur actuelle.

Côté saisonnier, P fait la même chose mais avec des retards saisonniers. Si P = 1 et S = 12, le modèle regarde la valeur d'il y a 12 périodes, même mois, année précédente, comme prédicteur. Cela capte directement les schémas d'une année sur l'autre.

Partie intégrée (I)

Le paramètre d contrôle combien de fois la série est différenciée pour supprimer les tendances et la rendre stationnaire. La différenciation consiste à soustraire l'observation précédente de chaque observation, ce qui supprime une tendance linéaire. Si d = 1, vous prenez les premières différences ; si d = 2, vous différenciez à nouveau la série déjà différenciée.

La différenciation saisonnière fonctionne de la même manière mais aux retards saisonniers. Le paramètre D précise combien de différenciations saisonnières appliquer. Avec D = 1 et S = 12, vous soustrayez la valeur d'il y a 12 périodes de chaque observation. Utiliser d = 1 et D = 1 ensemble est courant lorsqu'une série présente à la fois une tendance haussière générale et un motif saisonnier récurrent.

Partie moyenne mobile (MA)

Contrairement à la composante AR, qui s'intéresse aux valeurs passées, la composante MA modélise la relation entre l'observation courante et les erreurs résiduelles des prévisions passées. Le paramètre q fixe combien de termes d'erreur retardés inclure. Si q = 1, le modèle utilise l'erreur de prédiction de l'étape précédente pour ajuster sa prévision actuelle.

L'équivalent saisonnier Q applique la même logique aux retards saisonniers. Avec Q = 1 et S = 12, le modèle intègre l'erreur de prévision d'il y a 12 périodes. C'est utile lorsque des chocs saisonniers, comme un été exceptionnellement chaud qui dope la demande d'énergie, tendent à se reproduire à la même période l'année suivante.

Composante saisonnière (S)

Le paramètre S définit la longueur du cycle saisonnier et relie les trois paramètres saisonniers (P, D, Q). Bien choisir S est crucial : si vos données sont mensuelles avec un motif annuel, S = 12. Des données hebdomadaires avec un cycle annuel donnent S proche de 52.

C'est là que la saisonnalité peut devenir subtile. Une année ne fait pas exactement 52 semaines ; on est plus près de 52,18. Dans la pratique, arrondir à S = 52 convient généralement. Mais certains jeux de données présentent plusieurs périodes saisonnières : la demande d'électricité quotidienne montre souvent à la fois un cycle hebdomadaire (S = 7) et un cycle annuel (S = 365). SARIMA standard gère une seule période saisonnière ; plusieurs saisonnalités nécessitent des méthodes plus avancées comme TBATS ou Facebook Prophet.

Quand S n'est pas évident, la décomposition de série temporelle aide. Décomposer la série en tendance, saisonnalité et résidu met visuellement en évidence la période dominante. Vous pouvez aussi examiner les tracés d'autocorrélation pour repérer des pics à intervalles réguliers.

ARIMA vs SARIMA : quelle différence ?

Vous vous demandez sûrement déjà : quand utiliser concrètement SARIMA plutôt que l'ARIMA plus simple ?

La réponse courte : utilisez ARIMA si vos données n'ont pas de saisonnalité marquée, et SARIMA si elles en ont une.

ARIMA modélise trois éléments : l'autocorrélation de la série elle-même (AR), le nombre de différenciations nécessaires pour la stationnarité (I) et l'influence persistante des erreurs de prévision passées sur la valeur actuelle (MA). Il gère bien les tendances, les cycles et le bruit irrégulier. Ce qu'il ne peut pas faire, c'est modéliser des motifs qui se répètent à une fréquence saisonnière fixe. Ceux-ci restent comme variance inexpliquée.

SARIMA ajoute précisément cette capacité. Lorsque des pics et creux saisonniers nets apparaissent dans vos données, ajuster un ARIMA simple force ces motifs dans les résidus, aboutissant à de moins bonnes prévisions et à des résidus qui ne sont pas du bruit blanc. Un SARIMA les capture directement.

Règle pratique : tracez vos données et recherchez des motifs qui se répètent à un intervalle fixe. Si vous en voyez, pics de ventes liés aux fêtes, hausse hivernale de la consommation d'énergie, schémas trimestriels de résultats, optez pour SARIMA. Si la série est irrégulière ou guidée par une tendance sans cycle régulier, ARIMA est plus simple et suffisant.

Notre cours ARIMA Models in Python couvre les deux cadres avec des exercices pratiques pour affiner votre intuition sur les bons cas d'usage.

Comment construire un modèle SARIMA en Python

Construire un modèle SARIMA suit une séquence logique : collecter les données, vérifier la stationnarité, identifier les paramètres, ajuster le modèle, mener les diagnostics, puis prévoir. Voici comment chaque étape se déroule en pratique avec la bibliothèque statsmodels de Python.

Collecte des données

Pour capter la saisonnalité, il faut suffisamment d'historique pour observer le motif au moins deux fois, idéalement plusieurs cycles. Les ventes mensuelles au détail, les relevés de température, les consommations d'énergie et le trafic passagers sont des exemples classiques. Des sources publiques comme la Federal Reserve Economic Data (FRED), le US Census Bureau ou Kaggle sont de bons points de départ.

Le jeu de données pédagogique standard pour ce flux de travail est le comptage de passagers aériens : des données mensuelles de 1949 à 1960, avec une tendance haussière nette et une forte saisonnalité annuelle. Il est disponible via statsmodels avec get_rdataset(), qui le récupère depuis Rdatasets. Apprenez la démarche sur ce jeu avant de l'appliquer à vos propres données.

Prétraitement des données

Avant d'ajuster un modèle SARIMA, il vous faut une série stationnaire, c'est-à-dire dont la moyenne et la variance ne changent pas dans le temps. Le test de Dickey-Fuller augmenté (ADF) le vérifie formellement : une p-valeur inférieure à 0,05 suggère la stationnarité.

Sinon, la différenciation corrige le tir. Appliquez une différenciation classique (d = 1) pour la tendance, une différenciation saisonnière (D = 1 au retard S) pour la non-stationnarité saisonnière, ou les deux si nécessaire. Traitez les valeurs manquantes avant cette étape. Le report à la valeur suivante/précédente (forward fill) ou l'interpolation sont des approches standards en séries temporelles, car supprimer des lignes brise la structure temporelle.

Identification du modèle

Avec une série stationnaire, utilisez les tracés de la fonction d'autocorrélation (ACF) et de la fonction d'autocorrélation partielle (PACF) pour identifier les paramètres. Repérez :

  • ACF : montre la corrélation entre la série et ses retards. Un arrêt net après le retard q suggère l'ordre MA. Des pics aux retards saisonniers (12, 24, 36 pour des données mensuelles) informent Q.
  • PACF : montre les corrélations partielles en retirant les effets des retards intermédiaires. Un arrêt net après le retard p suggère l'ordre AR. Les pics saisonniers informent P.

En pratique, ces tracés donnent des valeurs candidates, et vous comparez quelques modèles à l'aide de critères d'information (nous y revenons dans les diagnostics). Si vous préférez automatiser la recherche, auto_arima() du package pmdarima réalise une recherche en grille des combinaisons et sélectionne le meilleur modèle.

Estimation des paramètres

Une fois les paramètres candidats définis, statsmodels les estime par maximum de vraisemblance (MLE), en trouvant les coefficients qui rendent les données observées les plus probables sous le modèle. L'estimation SARIMA est plus coûteuse qu'un ARIMA simple car l'optimiseur doit ajuster simultanément les composantes non saisonnières et saisonnières.

Le processus d'ajustement peut parfois converger vers un optimum local au lieu de l'optimum global ; il vaut donc la peine d'essayer quelques valeurs initiales ou combinaisons de paramètres différentes si les résultats semblent étranges.

Ajustement du modèle

Voici comment ajuster un modèle SARIMA en Python avec le jeu de données des passagers aériens :

import pandas as pd
import statsmodels.api as sm

# Load the classic airline dataset
airline_data = sm.datasets.get_rdataset("AirPassengers", "datasets").data
airline_data.index = pd.date_range(start="1949-01", periods=len(airline_data), freq="MS")
passengers = airline_data["value"]

# Fit SARIMA(1,1,1)(1,1,1)[12]
sarima_model = sm.tsa.statespace.SARIMAX(
    passengers,
    order=(1, 1, 1),
    seasonal_order=(1, 1, 1, 12),
    enforce_stationarity=False,
    enforce_invertibility=False
)

sarima_result = sarima_model.fit(disp=False)
print(sarima_result.summary())	

L'argument order prend (p, d, q) pour la partie non saisonnière ; seasonal_order prend (P, D, Q, S). Définir enforce_stationarity=False et enforce_invertibility=False donne plus de latitude à l'optimiseur, ce qui aide souvent la convergence sur des données réelles.

Statistiques et diagnostics du modèle

Après l'ajustement, lancez les graphiques de diagnostic intégrés avec sarima_result.plot_diagnostics(). Quatre points d'attention :

  • Résidus standardisés : doivent ressembler à du bruit blanc, sans motif évident.
  • Histogramme des résidus : doit être approximativement normal.
  • Q-Q plot normal : les points doivent suivre de près la diagonale.
  • Corrélogramme (ACF des résidus) : absence de pics significatifs, signe d'absence d'autocorrélation non expliquée.

Accordez une attention particulière aux retards saisonniers dans le corrélogramme. Des pics aux retards 12, 24, etc. suggèrent que la composante saisonnière n'est pas entièrement capturée. Comparez les spécifications avec l'AIC (Akaike Information Criterion) et le BIC (Bayesian Information Criterion) : plus c'est bas, mieux c'est, avec un BIC plus pénalisant pour la complexité.

Prévision

Avec un modèle validé, générer des prévisions est simple. Scindez vos données en ensembles d'entraînement et de test pour évaluer honnêtement la précision :

# Train on first 11 years, test on final year
train = passengers[:"1959"]
test = passengers["1960":]

# Refit on training data and forecast
sarima_train = sm.tsa.statespace.SARIMAX(
    train,
    order=(1, 1, 1),
    seasonal_order=(1, 1, 1, 12),
    enforce_stationarity=False,   # add this
    enforce_invertibility=False   # add this
).fit(disp=False)

forecast = sarima_train.get_forecast(steps=12)
forecast_mean = forecast.predicted_mean
conf_int = forecast.conf_int()

La méthode get_forecast() renvoie des prédictions ponctuelles assorties d'intervalles de confiance qui s'élargissent à mesure que l'horizon s'allonge. Cet élargissement n'est pas un défaut ; le modèle reflète honnêtement l'incertitude. Évaluez la précision avec la RMSE (Root Mean Squared Error) ou la MAPE (Mean Absolute Percentage Error) sur l'échantillon de test écarté.

Applications pratiques de SARIMA

Tant de signaux réels sont saisonniers que SARIMA mérite une place permanente dans toute boîte à outils de séries temporelles. Quelques exemples sectoriels :

  • Retail : prévoir les volumes de ventes mensuels pour la planification des stocks, notamment autour des fêtes où les pics de demande sont prévisibles mais d'ampleur variable d'une année sur l'autre.
  • Consommation d'énergie : prédire la demande d'électricité et de gaz, qui suit des cycles saisonniers à la fois quotidiens et annuels dictés par la température et les habitudes d'activité.
  • Finance : modéliser les résultats trimestriels ou les schémas de volumes de transactions qui se répètent avec les calendriers fiscaux.
  • Prévision météo : projeter la température, les précipitations et d'autres variables climatiques à forte cyclicité annuelle.

Dans chaque cas, la structure récurrente est le signal, et SARIMA est conçu pour la capturer.

Limites de SARIMA

Savoir où un outil excelle n'est que la moitié de l'équation. SARIMA est une base solide pour les séries saisonnières, mais connaître ses limites fait la différence entre utiliser les modèles avec discernement ou à l'aveugle.

Il gère une seule période saisonnière. Si vos données présentent plusieurs saisonnalités superposées, quotidiennes, hebdomadaires et annuelles, SARIMA ne les modélisera pas toutes simultanément. Des méthodes comme TBATS, Prophet ou les réseaux LSTM gèrent plus naturellement plusieurs fréquences saisonnières.

SARIMA suppose également la linéarité. Il modélise des relations linéaires entre valeurs passées, erreurs passées et observations futures. Les dynamiques non linéaires, fréquentes en finance ou dans des systèmes chaotiques, requièrent d'autres outils. Et comme ARIMA, SARIMA s'appuie uniquement sur l'historique de la série. Si vous avez des facteurs externes qui influencent vos prévisions (promotions, météo, indicateurs économiques), regardez SARIMAX, qui ajoute des variables exogènes au cadre SARIMA.

Enfin, la sélection des paramètres peut être réellement difficile. Avec sept paramètres à régler, l'espace de recherche est vaste et l'ajustement peut être lent sur de longues séries. auto_arima() de pmdarima aide à automatiser cela. Mais il n'existe pas de raccourci pour comprendre ce que signifient vraiment les paramètres, d'où notre passage en revue des composantes avant d'écrire la moindre ligne de code.

Conclusion

J'ai toujours pensé que SARIMA était sous-estimé dans les cours d'initiation à la prévision. On l'enseigne comme « ARIMA, mais avec de la saisonnalité », ce qui sonne comme une extension mineure. Ce n'est pas le cas. Les paramètres saisonniers ne sont pas rajoutés en fin de course ; ils capturent une couche de comportement de vos données qu'ARIMA n'atteint tout simplement pas.

Ce qui fait déclic avec SARIMA en pratique, c'est de comprendre que les composantes non saisonnières et saisonnières ne sont pas deux modèles parallèles. Elles interagissent. Les termes AR et MA travaillent avec leurs homologues saisonniers, chacun s'attaquant à une échelle temporelle différente de l'autocorrélation. Une fois que cela est clair, lire les tracés ACF et PACF ne ressemble plus à du simple « pattern matching » mais à une vraie compréhension de vos données.

Si vous travaillez avec des données mensuelles, trimestrielles ou tout cycle régulier, SARIMA est le bon point de départ — non pas parce que c'est toujours l'aboutissement, mais parce qu'il vous oblige à clarifier la structure de votre série. De là, SARIMAX ajoute des prédicteurs externes, et des méthodes comme TBATS ou Prophet gèrent mieux les cas multi-saisonniers plus complexes. Notre tutoriel Time Series Forecasting et le cours ARIMA Models in Python sont deux bonnes prochaines étapes.

FAQ sur SARIMA

Que signifie SARIMA ?

SARIMA signifie Seasonal AutoRegressive Integrated Moving Average. Il étend le modèle ARIMA standard en ajoutant des paramètres saisonniers — (P, D, Q) et la période saisonnière S — qui capturent les motifs récurrents dans les séries temporelles, comme les cycles mensuels ou trimestriels.

Quelle est la différence entre ARIMA et SARIMA ?

ARIMA modélise les schémas non saisonniers : tendance, autocorrélation et effets de moyenne mobile. SARIMA ajoute une seconde couche de paramètres (P, D, Q, S) qui modélisent les mêmes effets aux retards saisonniers. Si vos données présentent des motifs répétitifs à intervalle fixe — par exemple des ventes plus élevées chaque décembre — SARIMA les capte directement, alors qu'ARIMA les laisse en variance résiduelle inexpliquée.

Comment choisir les bons paramètres SARIMA ?

Commencez par vérifier la stationnarité avec le test de Dickey-Fuller augmenté. Puis examinez les tracés ACF et PACF : les ordres AR (p) et MA (q) non saisonniers se déduisent des ruptures nettes aux retards non saisonniers, tandis que les ordres saisonniers P et Q se lisent via les pics aux retards saisonniers. Vous pouvez aussi utiliser auto_arima() du package pmdarima pour rechercher automatiquement parmi les combinaisons de paramètres, en vous appuyant sur l'AIC ou le BIC pour sélectionner le meilleur modèle.

Comment déterminer la période saisonnière S pour mon modèle SARIMA ?

La période saisonnière S reflète la fréquence de répétition du motif. Pour des données mensuelles avec une saisonnalité annuelle, S = 12. Pour des données trimestrielles, S = 4. Pour des données hebdomadaires, S = 52 (ou 52,18 arrondi). Si la période n'est pas évidente, utilisez une décomposition en série temporelle ou inspectez l'ACF pour repérer des pics régulièrement espacés — ces pics révèlent la fréquence saisonnière dominante.

SARIMA peut-il gérer plusieurs périodes saisonnières ?

SARIMA standard gère une période saisonnière à la fois. Si vos données présentent plusieurs saisonnalités superposées — par exemple une demande d'électricité quotidienne avec des cycles hebdomadaire et annuel — vous aurez besoin d'alternatives comme TBATS, Facebook Prophet ou des réseaux LSTM, conçus pour modéliser simultanément plusieurs structures saisonnières qui se chevauchent.

Quelle bibliothèque Python est la mieux adaptée pour ajuster des modèles SARIMA ?

La bibliothèque statsmodels de Python est la référence, avec SARIMAX() (assez flexible pour ajuster des modèles SARIMA sans variables exogènes). Pour la sélection automatique des paramètres, la fonction auto_arima() de la bibliothèque pmdarima effectue une recherche en grille et mérite d'être ajoutée à votre workflow lorsque vous ne savez pas par où commencer pour les valeurs de paramètres.

Comment évaluer si mon modèle SARIMA est satisfaisant ?

Après l'ajustement, exécutez plot_diagnostics() sur l'objet de résultat et vérifiez que les résidus ressemblent à du bruit blanc sans structure — en particulier sans pics aux retards saisonniers dans l'ACF. Comparez des spécifications concurrentes à l'aide de l'AIC ou du BIC (plus bas est meilleur). Pour la précision en prévision sur des données mises de côté, la RMSE et la MAPE sont les métriques les plus courantes.

Qu'est-ce que SARIMAX et quand l'utiliser plutôt que SARIMA ?

SARIMAX ajoute des variables exogènes — des prédicteurs externes — au cadre SARIMA. Utilisez-le lorsque vous disposez de facteurs mesurables qui influencent votre série au-delà de son propre historique : dépenses promotionnelles sur les ventes retail, température sur la demande d'énergie, indicateurs macroéconomiques sur le chiffre d'affaires trimestriel. Si votre seule donnée est la série elle-même, SARIMA suffit ; dès que vous avez des moteurs externes pertinents, SARIMAX permet de les intégrer directement.

Sujets
Contenus associés

Tutoriel

Séquence de Fibonacci en Python : Apprenez et explorez les techniques de codage

Veuillez découvrir le fonctionnement de la suite de Fibonacci. Veuillez explorer ses propriétés mathématiques et ses applications concrètes.
Laiba Siddiqui's photo

Laiba Siddiqui

Tutoriel

Tutoriel sur les boucles « for » en Python

Apprenez à implémenter des boucles « for » en Python pour itérer une séquence ou les lignes et colonnes d'un DataFrame pandas.
Aditya Sharma's photo

Aditya Sharma

Tutoriel

Tutoriel Python sur les structures de données

Initiez-vous aux structures de données de Python : apprenez-en plus sur les types de données et les structures de données primitives et non primitives, telles que les chaînes de caractères, les listes, les piles, etc.
Sejal Jaiswal's photo

Sejal Jaiswal

Tutoriel

Tableaux Python

Tableaux Python avec exemples de code. Découvrez comment créer et imprimer des tableaux à l'aide de Python NumPy dès aujourd'hui.
DataCamp Team's photo

DataCamp Team

Tutoriel

Données JSON Python : Un guide illustré d'exemples

Apprenez à utiliser JSON en Python, notamment la sérialisation, la désérialisation, le formatage, l'optimisation des performances, la gestion des API, ainsi que les limites et les alternatives de JSON.
Moez Ali's photo

Moez Ali

Tutoriel

Tutoriel sur les boucles Python

Tutoriel complet d'introduction aux boucles Python. Apprenez et pratiquez les boucles while et for, les boucles imbriquées, les mots-clés break et continue, la fonction range et bien plus encore.
Satyabrata Pal's photo

Satyabrata Pal

Voir PlusVoir Plus