Cours
Imaginez que vous prévoyiez la demande d’électricité mensuelle. Vous avez un solide modèle ARIMA qui capture l’autocorrélation et la tendance de la série. Puis une vague de chaleur survient, et votre prévision dévie de 15 %. La série n’a pas changé ; la météo, si. C’est précisément la situation pour laquelle ARIMAX a été conçu : la prévision de séries temporelles lorsque des facteurs externes expliquent autant de variabilité que l’historique de la série elle-même.
Nous verrons ce qu’est ARIMAX, en quoi il diffère d’ARIMA et de SARIMAX, et quand il est pertinent de préférer l’un ou l’autre. Nous parcourrons également une implémentation Python complète : préparation des données, ajustement du modèle, diagnostics et évaluation des prévisions, afin que vous puissiez appliquer ces notions.
Qu’est-ce qu’ARIMAX ?
ARIMAX signifie AutoRegressive Integrated Moving Average avec variables exogènes. C’est un modèle ARIMA qui accepte également des entrées externes, c’est-à-dire des prédicteurs extérieurs à la série cible elle-même. Exemples typiques : dépenses publicitaires, température, indicateurs de promotion, taux d’intérêt.
La notation générale est ARIMAX(p, d, q) avec un ou plusieurs régresseurs exogènes. Les paramètres p, d et q gardent le même sens que dans ARIMA : ordre autorégressif, degré de différenciation et ordre de moyenne mobile. Le « X » signifie que vous pouvez fournir des colonnes supplémentaires que vous pensez influer sur la cible. Un point à noter : certains logiciels implémentent ARIMAX comme une régression avec erreurs ARIMA plutôt qu’en traitant les variables externes comme des entrées AR directes. La distinction est subtile mathématiquement, mais elle compte pour l’interprétation des coefficients. Nous y reviendrons en examinant la sortie de statsmodels.
Comment fonctionne ARIMAX
ARIMAX combine deux éléments : la mémoire de la série elle-même et le pouvoir explicatif de variables externes.
Les composantes AR, I et MA
La partie AR (autorégressive) utilise des valeurs retardées de la série cible pour prédire la valeur courante. Si les ventes du mois dernier étaient élevées, cela compte.
La partie I (intégrée) différencie la série pour retirer tendances ou racines unitaires, et la rendre stationnaire.
La partie MA (moyenne mobile) utilise les erreurs de prévision passées pour corriger les biais systématiques du modèle.
Ensemble, ces trois éléments gèrent l’essentiel de ce qui pilote une série temporelle typique : tendances, cycles et autocorrélation dans les résidus.
Rôle des variables exogènes
Les variables exogènes apportent une information que l’historique de la série ne peut fournir. Pour des ventes, l’historique renseigne des schémas habituels. Mais une baisse de prix ou l’arrivée d’un concurrent constituent une information nouvelle. Le modèle estime un coefficient pour chaque prédicteur externe tout en tenant compte simultanément de l’autocorrélation des erreurs.
En pratique : si votre série cible est bien expliquée par ses valeurs passées et que vous n’avez pas de prédicteurs externes fiables, un ARIMA simple suffit probablement. Mais lorsque vous savez que des facteurs externes interviennent, et que vous disposerez de leurs valeurs futures, ARIMAX fournit généralement des prévisions plus précises.
ARIMA vs ARIMAX vs SARIMAX
SARIMAX s’appuie sur SARIMA en ajoutant des variables exogènes. En pratique, la plupart des implémentations Python d’ARIMAX passent par SARIMAX() de statsmodels, avec l’ordre saisonnier fixé à zéro.
Ce n’est pas un contournement : c’est l’approche standard. SARIMAX est un bon premier choix si votre série présente une saisonnalité marquée ou si vous avez besoin de régresseurs externes ; il gère proprement les deux. Un avertissement : « ARIMAX » et « SARIMAX » ne sont pas interchangeables dans toutes les bibliothèques. Dans certains outils, SARIMAX sans terme saisonnier et ARIMAX sont identiques en pratique. Dans d’autres, ils diffèrent par la manière dont les variables exogènes entrent dans la vraisemblance. Vérifiez la documentation de l’outil que vous utilisez.
Quand utiliser ARIMAX
La question-clé est souvent : disposez-vous de prédicteurs externes susceptibles d’influer sur la cible, et aurez-vous leurs valeurs futures au moment de prévoir ?
Situations où ARIMAX apporte un gain
Bons cas d’usage : prévision des ventes avec indicateurs de promotion ou variations de prix, demande énergétique avec la température, trafic web avec dépenses de campagne, indicateurs économiques aux côtés des taux d’intérêt. Dans chaque cas, la variable externe fournit une information que la série ne peut générer seule.
Un ARIMA simple peut suffire lorsque les prédicteurs externes sont indisponibles, peu fiables, ou n’améliorent pas la précision hors échantillon. Ajouter des variables qui introduisent du bruit sans signal n’aide pas. Plus d’entrées ne garantissent pas de meilleures prévisions. Évaluez tout prédicteur pressenti sur des données de validation avant de l’adopter.
Un mot sur la causalité
Une relation entre un prédicteur et la cible n’établit pas la causalité. ARIMAX est un cadre de prévision ; il estime des associations. Si les dépenses publicitaires sont corrélées aux ventes parce que les deux augmentent en décembre, le modèle peut le capter, mais il ne dira pas que la publicité a causé l’hausse. Cette nuance compte si vous utilisez les prévisions pour orienter des décisions et pas seulement pour prédire. Il est utile de l’expliciter lors de la présentation des résultats.
Comment construire un modèle ARIMAX en Python
Passons à l’implémentation.
Nous utiliserons un exemple reproductible : ventes mensuelles de glaces (unités vendues) avec la température (°C) et un indicateur de promotion comme prédicteurs exogènes. Le jeu de données couvre 48 mois, dont 36 pour l’apprentissage et 12 pour l’évaluation.
Préparer les données
Commencez par charger ou construire un DataFrame avec un index de dates mensuel cohérent. Identifiez votre variable cible et vos colonnes exogènes, puis alignez le tout par date. Traitez les valeurs manquantes avant la séparation apprentissage/test. N’imputez pas à travers la frontière train/test : cela introduit des fuites.
La règle à intégrer d’emblée : quelles que soient les valeurs exogènes passées au moment de l’apprentissage, vous aurez besoin d’équivalents futurs pour la prévision. Si vous ne pouvez pas obtenir de prévisions de température, vous ne pouvez pas utiliser la température comme prédicteur. Ce n’est pas un détail ; cela écarte beaucoup de candidats.
import pandas as pd
import numpy as np
from statsmodels.tsa.statespace.sarimax import SARIMAX
from statsmodels.tsa.stattools import adfuller
from sklearn.metrics import mean_absolute_error
# Construct a sample monthly dataset
np.random.seed(42)
dates = pd.date_range(start="2020-01", periods=48, freq="MS")
temperature = 15 + 10 * np.sin(np.linspace(0, 4 * np.pi, 48)) + np.random.normal(0, 1, 48)
promotion = np.where((np.arange(48) % 6 == 0), 1, 0)
sales = (
500
+ 8 * temperature
+ 150 * promotion
+ np.cumsum(np.random.normal(0, 10, 48))
)
df = pd.DataFrame({"sales": sales, "temperature": temperature, "promotion": promotion}, index=dates)
# Train/test split
train = df.iloc[:36]
test = df.iloc[36:]
Le échelonnage n’est généralement pas requis pour l’estimation avec statsmodels, mais il peut aider à la stabilité numérique lorsque les prédicteurs sont sur des échelles très différentes. C’est une question de jugement.
Contrôler la série et les prédicteurs
Avant de choisir les paramètres du modèle, inspectez visuellement la série cible et effectuez un test de stationnarité. Le test de Dickey-Fuller augmenté (ADF) est la référence. Une p-valeur inférieure à 0,05 suggère une série stationnaire et probablement pas de différenciation (d=0). Si la série présente une tendance marquée, on fixe généralement d=1. Les tests sont un éclairage ; l’expertise métier et l’inspection visuelle comptent aussi.
Vérifiez aussi vos prédicteurs : sont-ils alignés avec la cible ? Existe-t-il un risque qu’un prédicteur soit mesuré après la date de prévision ? Un indicateur de promotion défini avant le début du mois convient. Le chiffre d’affaires du mois, non.
Choisir des paramètres candidats et ajuster le modèle
Les graphiques ACF et PACF aident à suggérer des valeurs candidates pour p et q. Un pic significatif au retard 1 dans la PACF avec une ACF décroissante suggère souvent AR(1) ; l’inverse suggère MA(1). Comparez un petit ensemble de candidats avec l’AIC ou le BIC sur les données d’apprentissage, et réservez l’ensemble de test à l’évaluation finale.
# Fit ARIMAX(1,1,1) via SARIMAX with no seasonal order
exog_train = train[["temperature", "promotion"]]
exog_test = test[["temperature", "promotion"]]
model = SARIMAX(
train["sales"],
exog=exog_train,
order=(1, 1, 1),
seasonal_order=(0, 0, 0, 0),
trend="n"
)
result = model.fit(disp=False)
print(result.summary())
La sortie summary() affiche les coefficients ARIMA aux côtés de ceux des variables exogènes. Le coefficient de température indique de combien une hausse d’un degré est associée à une variation du niveau des ventes, après que la structure autorégressive a pris en compte l’inertie de la série. À savoir : statsmodels utilise une formulation « régression avec erreurs ARIMA », ce qui signifie que la différenciation (d=1) s’applique au processus d’erreur, pas à l’équation de régression elle-même. Le coefficient représente donc l’effet sur le niveau des ventes indépendamment de d. Dans une formulation « fonction de transfert » (utilisée par d’autres outils), d=1 ferait que les coefficients reflètent des effets sur les variations plutôt que sur les niveaux. Cette distinction piège souvent ; consultez la documentation de votre outil.
Contrôler les résidus et évaluer les prévisions
Les résidus doivent ressembler à du bruit blanc. Vérifiez l’ACF des résidus pour toute autocorrélation résiduelle. Des pics significatifs indiquent que le modèle manque de structure. Si vous observez des motifs systématiques aux retards saisonniers, passez à SARIMAX avec un ordre saisonnier.
# Generate out-of-sample predictions
predictions = result.forecast(steps=12, exog=exog_test)
# Evaluate
mae = mean_absolute_error(test["sales"], predictions)
# Naive baseline: forecast each period using the previous period's actual value
naive_forecast = np.concatenate([[train["sales"].iloc[-1]], test["sales"].values[:-1]])
naive_mae = mean_absolute_error(test["sales"], naive_forecast)
print(f"ARIMAX MAE: {mae:.1f}")
print(f"Naive MAE: {naive_mae:.1f}")
Comparez la MAE d’ARIMAX à une base naïve (utiliser la valeur de la période précédente comme prévision). Si ARIMAX ne dépasse pas le modèle naïf sur votre test, c’est un résultat significatif : la complexité supplémentaire n’est pas justifiée. Je l’ai vu plus souvent qu’on ne le pense, surtout lorsque les prédicteurs exogènes sont plus bruyants qu’ils n’en ont l’air en apprentissage.
Prévoir des valeurs futures
La prévision au-delà de la période d’apprentissage se fait comme l’évaluation hors échantillon : fournissez les valeurs exogènes futures avec l’appel forecast(). Pour les indicateurs de promotion, c’est généralement simple puisque vous connaissez le calendrier promotionnel à l’avance. Pour la température, on utilisera une prévision météo ou des moyennes saisonnières historiques.
Point de vigilance : les intervalles de confiance renvoyés par statsmodels sont conditionnels aux valeurs de prédicteurs que vous fournissez. Ils ne tiennent pas compte de l’incertitude sur ces prédicteurs. Si votre prévision de température est incertaine, l’incertitude réelle des prévisions est plus large que ne le suggèrent les intervalles. C’est important à communiquer si des décisions vont en découler.
Défis et limites courants
L’implémentation ci-dessus couvre le cas idéal. Voici là où ça coince souvent.
- Les prédicteurs futurs peuvent être inconnus : c’est l’obstacle pratique le plus fréquent. Si vous ne pouvez pas obtenir de manière fiable les valeurs futures de vos variables exogènes, vous ne pouvez pas les utiliser. Prévoir la demande d’énergie avec la température de demain exige une prévision de température, pas celle d’hier.
- Les prédicteurs peuvent fuiter de l’information : une variable mesurée après la date de prévision peut embellir artificiellement vos résultats en apprentissage. Soyez attentif à la datation réelle de vos prédicteurs.
- Les relations peuvent évoluer : des coefficients estimés sur l’historique peuvent ne plus tenir à l’avenir. Une élasticité-prix stable pendant deux ans peut changer après un choc de marché, et 2024 et 2025 en ont suffisamment produit pour rendre cela très concret. Réestimer périodiquement le modèle est une bonne pratique.
- Des prédicteurs corrélés compliquent l’interprétation : des entrées très collinéaires rendent les coefficients individuels instables. Cela ne nuit pas toujours à la précision des prévisions, mais complique l’attribution des effets.
- Plus d’entrées ne signifient pas de meilleures prévisions : évaluez chaque prédicteur proposé face à une base sur des données de validation. Certains attributs paraissent informatifs en apprentissage mais ajoutent du bruit hors échantillon.
- La saisonnalité nécessite des termes saisonniers : si votre série présente une saisonnalité régulière, comme des ventes mensuelles avec un pic en décembre, SARIMAX avec un ordre saisonnier est le bon choix. ARIMAX seul ne le captera pas.
- La causalité n’est pas établie : à répéter : ARIMAX est un cadre de prévision, pas une méthode d’inférence causale. N’utilisez pas les signes des coefficients pour tirer des conclusions causales sans analyses complémentaires.
Conclusion
ARIMAX a toute sa place lorsque vous avez des facteurs externes qui influencent réellement la cible et que vous pouvez fournir leurs valeurs futures au moment de prévoir. C’est une extension naturelle d’ARIMA, pas un remplaçant. Si votre série est « sage » et que vous n’avez pas de prédicteurs fiables, un ARIMA simple est généralement le meilleur point de départ. Ajouter des variables donne l’impression d’avancer. Parfois, ce n’est pas le cas.
Le bon flux de travail tient en quatre points :
- alignez correctement vos prédicteurs,
- vérifiez les fuites avant d’évaluer,
- validez sur de vraies données tenues à part, et
- comparez toujours à une base simple.
Un modèle ARIMAX qui bat à peine une prévision naïve n’est pas meilleur qu’une prévision naïve. Il est juste plus coûteux.
Pour aller plus loin sur les fondTime Series Analysis in Pythonations des séries temporelles, notre cours couvre en détail ARIMA, la stationnarité et les diagnostics. Côté statsmodels, notre cours Introduction to Regression with statsmodels in Python développe l’intuition statistique utile pour interpréter les sorties des modèles et analyser les résidus.
Vinod Chugani a débuté sa carrière à Tokyo comme plus jeune responsable du desk ventes hedge funds de JPMorgan, puis a signé un record de ventes individuel chez Lehman Brothers, avant de développer une activité de distribution d’électronique présente dans 30 pays, dépassant les 100 millions SG$ de chiffre d’affaires, puis de se tourner vers la data. Diplômé en économie de Duke et ancien élève de la NYC Data Science Academy, il a fait partie des trois lauréats de bourse sur plus de 100 candidatures pour le cours Building AI Applications de Hugo Bowne-Anderson sur Maven. Aujourd’hui, il écrit pour DataCamp, KDnuggets, Machine Learning Mastery et Statology, sur des sujets allant des statistiques à l’IA agentique, et accompagne des professionnels de la data à la NYC Data Science Academy, avec plus de 1 000 séances individuelles à son actif.
FAQs
Quelle est la différence entre ARIMAX et ARIMA ?
ARIMA prévoit une série cible en n’utilisant que ses propres valeurs passées et ses erreurs de prévision passées. ARIMAX étend cette approche en intégrant des variables exogènes — des entrées externes comme la température, les promotions ou les taux d’intérêt — dont on pense qu’elles influencent la cible. Si ces facteurs externes pilotent réellement la variabilité de votre série et que vous pouvez fournir leurs valeurs futures, ARIMAX produira généralement de meilleures prévisions qu’ARIMA seul.
En quoi ARIMAX diffère-t-il de SARIMAX ?
ARIMAX gère les variables externes mais pas les schémas saisonniers. SARIMAX ajoute des termes AR, de différenciation et de MA saisonniers par-dessus ARIMAX, ce qui en fait le bon choix lorsque votre série présente une saisonnalité récurrente. Dans statsmodels sous Python, ARIMAX est généralement implémenté via SARIMAX() avec l’ordre saisonnier (0, 0, 0, 0). Dans cette configuration, les deux sont fonctionnellement identiques.
Dois-je fournir des valeurs futures des variables exogènes pour prévoir avec ARIMAX ?
Oui — c’est l’une des contraintes pratiques les plus importantes. Pour générer des prévisions au-delà de la période d’apprentissage, vous devez fournir des valeurs pour chaque variable exogène à chaque échéance future. Pour des indicateurs de promotion ou de jours fériés, c’est généralement simple. Pour des variables comme la température ou les prix des matières premières, il vous faudra des valeurs prévisionnelles ou des hypothèses raisonnables, ce qui ajoute de l’incertitude.
Comment choisir p, d et q pour un modèle ARIMAX ?
Commencez par les graphiques ACF et PACF de la série (différenciée). Un pic significatif au retard 1 dans la PACF et une ACF décroissante suggèrent souvent AR(1) ; le schéma inverse suggère MA(1). Utilisez l’ADF pour d et votre expertise métier. Puis comparez un petit ensemble de combinaisons (p, d, q) à l’aide de l’AIC ou du BIC sur les données d’apprentissage. Évitez d’utiliser l’ensemble de test à ce stade : réservez-le à l’évaluation finale.
Que signifie le coefficient d’une variable exogène dans un modèle ARIMAX ?
Le coefficient représente la variation estimée du niveau de la série cible associée à une hausse d’une unité de ce prédicteur, après prise en compte de la structure autorégressive. Dans statsmodels, cela reste vrai même avec d=1, car la différenciation s’applique au processus d’erreur et non à l’équation de régression (formulation « régression avec erreurs ARIMA »). D’autres outils utilisent une formulation « fonction de transfert » où d=1 ferait que les coefficients reflètent des effets sur les variations plutôt que sur les niveaux ; vérifiez donc la documentation. L’interprétation devient aussi délicate quand les prédicteurs sont sur des échelles différentes ou corrélés ; standardiser les entrées aide si vous voulez comparer les coefficients.
Comment détecter et gérer la multicolinéarité des prédicteurs exogènes ?
Calculez le VIF (Variance Inflation Factor) pour chaque prédicteur avant l’ajustement. Des valeurs supérieures à 10 signalent une collinéarité problématique. Si c’est le cas, supprimez le prédicteur le moins justifié théoriquement, ou regroupez des variables corrélées en un composite. Une forte collinéarité ne dégrade pas nécessairement la précision des prévisions, mais rend les coefficients individuels peu fiables et difficiles à interpréter.
Comment évaluer si ARIMAX apporte réellement de la valeur ?
Comparez toujours à une base simple : une prévision naïve (valeur de la période précédente) est un bon départ. Si ARIMAX ne la dépasse pas sur des données de test tenues à part, le modèle ne justifie pas sa complexité. MAE et RMSE sont deux métriques pertinentes ; la MAE est plus simple à expliquer aux parties prenantes. Faites la comparaison sur un véritable ensemble de test jamais utilisé pour choisir les paramètres.
Quand utiliser SARIMAX plutôt qu’ARIMAX ?
Utilisez SARIMAX lorsque votre série présente une saisonnalité régulière : ventes mensuelles avec un pic en décembre, trafic web hebdomadaire avec un pic le lundi, etc. SARIMAX ajoute des composantes AR, différenciation et MA saisonnières qui manquent à ARIMAX. Puisque statsmodels implémente ARIMAX via SARIMAX(), la question pratique est de savoir s’il faut fixer un ordre saisonnier non nul. Si les résidus présentent une autocorrélation significative aux retards saisonniers après un ARIMAX, c’est le signal d’ajouter des termes saisonniers.

