Les données temporelles ont des propriétés spécifiques (autocorrélation, saisonnalité, trend) qui nécessitent des méthodes dédiées. En entretien, on évalue la compréhension de ces spécificités.
Quels sont les 3 composantes d une série temporelle ? Comment les extraire ?
from statsmodels.tsa.seasonal import seasonal_decompose
import pandas as pd
df = pd.read_csv('sales.csv', parse_dates=['date'], index_col='date')
# Décomposition additive : Y = Trend + Saisonnalité + Résidu
# (quand la saisonnalité ne dépend pas du niveau)
result = seasonal_decompose(df['revenue'], model='additive', period=52)
# Décomposition multiplicative : Y = Trend * Saisonnalité * Résidu
# (quand la saisonnalité est proportionnelle au niveau)
result_mult = seasonal_decompose(df['revenue'], model='multiplicative', period=52)
print('Trend:', result.trend[:5])
print('Seasonal:', result.seasonal[:5])
print('Residual:', result.resid[:5])Qu est-ce que la stationnarité ? Comment testez-vous si une série est stationnaire ?
from statsmodels.tsa.stattools import adfuller
# Test de Dickey-Fuller augmenté
# H0 : la série a une racine unitaire (non stationnaire)
result = adfuller(df['revenue'])
adf_stat, p_value = result[0], result[1]
print(f'ADF Statistic: {adf_stat:.4f}')
print(f'p-value: {p_value:.4f}')
if p_value < 0.05:
print('Stationnaire (rejette H0)')
else:
print('NON stationnaire - différenciation nécessaire')
df_diff = df['revenue'].diff().dropna() # différenciation d ordre 1
result_diff = adfuller(df_diff)
print(f'Après différenciation: p={result_diff[1]:.4f}')Que signifient les paramètres p, d, q dans ARIMA(p,d,q) ?
from statsmodels.tsa.arima.model import ARIMA
from pmdarima import auto_arima
# p = ordre AR (autorégressif) : dépendance sur les valeurs passées
# d = ordre d intégration : nombre de différenciations
# q = ordre MA (moyenne mobile) : dépendance sur les erreurs passées
# Auto-sélection des paramètres
model_auto = auto_arima(
df['revenue'],
seasonal=True,
m=52, # périodicité (52 semaines)
stepwise=True,
information_criterion='aic'
)
print(model_auto.summary())
# ARIMA manuel
model = ARIMA(df['revenue'], order=(2, 1, 1))
fitted = model.fit()
predictions = fitted.forecast(steps=12) # 12 prochains pasPourquoi Prophet est-il souvent préféré à ARIMA pour les séries temporelles business ?
from prophet import Prophet
import pandas as pd
# Format Prophet : colonnes 'ds' (date) et 'y' (valeur)
df_prophet = df.reset_index().rename(columns={'date': 'ds', 'revenue': 'y'})
model = Prophet(
seasonality_mode='multiplicative', # si saisonnalité proportionnelle
yearly_seasonality=True,
weekly_seasonality=True,
daily_seasonality=False,
changepoint_prior_scale=0.05 # flexibilité du trend
)
# Ajouter des jours fériés
model.add_country_holidays(country_name='FR')
# Ajouter une saisonnalité custom
model.add_seasonality(name='quarterly', period=91.25, fourier_order=5)
model.fit(df_prophet)
future = model.make_future_dataframe(periods=52, freq='W')
forecast = model.predict(future)Comment détectez-vous des anomalies dans une série temporelle ?
import numpy as np
from sklearn.ensemble import IsolationForest
# Méthode 1 : Z-score sur la série différenciée
df['diff'] = df['revenue'].diff()
df['z_score'] = (df['diff'] - df['diff'].mean()) / df['diff'].std()
anomalies_z = df[df['z_score'].abs() > 3]
# Méthode 2 : Prophet residuals
forecast = model.predict(df_prophet)
df_prophet['yhat'] = forecast['yhat']
df_prophet['residual'] = df_prophet['y'] - df_prophet['yhat']
threshold = df_prophet['residual'].std() * 3
anomalies_prophet = df_prophet[df_prophet['residual'].abs() > threshold]
# Méthode 3 : Isolation Forest multivarié
features = df[['revenue', 'volume', 'avg_basket']].values
iso = IsolationForest(contamination=0.02, random_state=42)
df['anomaly'] = iso.fit_predict(features) # -1 = anomalieComment encodez-vous le temps pour des modèles ML non-séries-temporelles ?
| Niveau | Maitrise | Signal GO | NO-GO |
|---|---|---|---|
| Confirmé | Décomposition, stationnarité, Prophet basique | Teste la stationnarité avant ARIMA, a utilisé Prophet | Applique KFold aléatoire à une série temporelle |
| Senior | ARIMA tuning, détection d anomalies, features temporelles pour ML | Choisit entre ARIMA et Prophet selon le contexte, détecte les anomalies | Ne sait pas ce qu est la stationnarité |
Premier entretien gratuit. Rapport GO/NO-GO sous 48h.