Validation croisée pour séries temporelles

Validation croisée (cross-validation) pour les séries temporelles

Dans ce tutoriel, nous allons expliquer le principe de validation croisée durant l’apprentissage d’une série temporelle.

validation croisée

Principe

L’analyse des séries chronologiques représente une approche fondamentale dans le domaine des statistiques et de l’apprentissage automatique, visant à comprendre et à prédire les modèles de données qui évoluent au fil du temps. Compte tenu des caractéristiques uniques des données de séries chronologiques, notamment les tendances, la saisonnalité et l’autocorrélation, les techniques traditionnelles de validation croisée ne parviennent souvent pas à fournir des estimations de performances précises et fiables.

Pour relever ces défis, la validation croisée des séries chronologiques apparaît comme une méthodologie essentielle, adaptée pour respecter l’ordre temporel inhérent aux données. Cet essai explore les subtilités de la validation croisée des séries chronologiques, en soulignant sa signification, sa méthodologie, ses variations et ses considérations pratiques.

Pour naviguer sur le fleuve du temps, il faut respecter son courant. La validation croisée des séries chronologiques incarne cette sagesse, garantissant que nos prédictions sont ancrées non seulement dans les données, mais dans le flux temporel lui-même.

cross-validation

L’objectif principal de la validation croisée des séries chronologiques est d’évaluer les performances prédictives d’un modèle d’une manière qui reflète son application future. Ceci est crucial dans divers domaines, tels que la finance, la météorologie et l’épidémiologie, où les décisions reposent sur des prévisions.

Les méthodes traditionnelles de validation croisée, qui partitionnent les données de manière aléatoire, peuvent perturber la séquence temporelle, conduisant à des estimations de performances trop optimistes et à des modèles qui échouent dans les dynamiques temporelles réelles. La validation croisée des séries chronologiques préserve l’ordre chronologique, garantissant que les prédictions sont toujours basées sur des informations passées, fournissant ainsi une évaluation plus réaliste des capacités prédictives d’un modèle.

Méthodologie

L’essence de la validation croisée des séries chronologiques réside dans son approche de division séquentielle de l’ensemble de données. Contrairement au partitionnement aléatoire, il étend systématiquement l’ensemble de données d’entraînement pour inclure des observations plus récentes, tandis que l’ensemble de test comprend des observations qui suivent immédiatement celles de l’ensemble d’entraînement. Cette procédure est répétée de manière itérative, avançant à chaque fois le point de coupure entre les ensembles de formation et de test. Cette approche garantit que le modèle est validé sur différentes périodes, capturant diverses dynamiques temporelles et changements structurels potentiels dans les données.

Plusieurs variantes de validation croisée de séries chronologiques répondent aux besoins et contraintes spécifiques des ensembles de données dépendants du temps :

  • Prévision en une seule étape : il s’agit de l’approche la plus simple, dans laquelle le modèle est formé et validé à des moments uniques et successifs. Il est particulièrement utile pour évaluer les performances du modèle dans les prédictions avec une longueur d’avance.
  • Prévision en plusieurs étapes : dans la prévision en plusieurs étapes, le modèle est testé sur plusieurs points temporels futurs à chaque itération. Cette variation est cruciale pour évaluer les performances du modèle sur des horizons plus longs, ce qui est essentiel pour la planification stratégique et la prise de décision.
  • Rolling Origin : Également appelée validation croisée « Rolling Forecast Origin », cette méthode consiste à avancer le point de départ du test défini d’une ou plusieurs périodes à chaque itération. Il permet une évaluation complète de la stabilité et de la fiabilité du modèle dans le temps.
  • Fenêtre extensible : contrairement à la technique de l’origine glissante, la variation de la fenêtre extensible conserve toutes les données précédentes dans l’ensemble d’apprentissage, augmentant progressivement sa taille. Cette approche est bénéfique pour capturer les tendances et la saisonnalité à long terme.

La mise en œuvre de la validation croisée des séries chronologiques nécessite de prêter attention à plusieurs aspects pratiques :

  • Saisonnalité et tendances : les modèles doivent être évalués sur différentes saisons et phases de tendance pour garantir leur robustesse aux changements temporels.
  • Stationnarité : s’assurer que la série chronologique est stationnaire, c’est-à-dire que ses propriétés statistiques ne changent pas au fil du temps, peut être crucial pour la fiabilité des résultats de validation croisée.
  • Efficacité informatique : la validation croisée des séries chronologiques peut nécessiter beaucoup de calculs, en particulier pour les grands ensembles de données et les modèles complexes. Des techniques efficaces de mise en œuvre et d’optimisation sont essentielles à une utilisation pratique.
  • Réglage des paramètres : la validation croisée imbriquée peut être utilisée dans le cadre des séries chronologiques pour optimiser les paramètres du modèle, améliorant ainsi encore la précision prédictive.

Code

Pour illustrer la validation croisée des séries chronologiques avec un exemple de code Python complet, nous allons générer un ensemble de données de séries chronologiques synthétiques, mettre en œuvre la validation croisée des séries chronologiques, former un modèle simple, l’évaluer à l’aide de métriques appropriées et visualiser les résultats. Cet exemple utilisera des bibliothèques Python courantes telles que pandas, numpy, matplotlib et sklearn.

Commençons par le code :

import numpy as np
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt

# Step 1: Generate Synthetic Dataset
np.random.seed(42) # For reproducibility
time = np.arange(100)
trend = time * 0.5
seasonality = 10 * np.sin(np.pi * time / 6)
noise = np.random.normal(loc=0, scale=5, size=time.size)
data = trend + seasonality + noise
dates = pd.date_range(start='2020-01-01', periods=time.size, freq='D')
ts_data = pd.Series(data, index=dates)

# Step 2: Time Series Cross-Validation Setup
def time_series_cv(X, y, model, n_splits):
test_scores = []

tscv = TimeSeriesSplit(n_splits=n_splits)

for train_idx, test_idx in tscv.split(X):
X_train, X_test = X[train_idx], X[test_idx]
y_train, y_test = y[train_idx], y[test_idx]

model.fit(X_train, y_train)
y_pred = model.predict(X_test)
test_score = mean_squared_error(y_test, y_pred)
test_scores.append(test_score)

return test_scores

# Preparing data for modeling
X = time.reshape(-1, 1)
y = data

# Step 3: Model Training
model = LinearRegression()

# Import TimeSeriesSplit
from sklearn.model_selection import TimeSeriesSplit
n_splits = 5
scores = time_series_cv(X, y, model, n_splits=n_splits)

# Step 4: Evaluate Model Performance
print(f'MSE Scores for each split: {scores}')
print(f'Average MSE: {np.mean(scores)}')

# Step 5: Visualize the Results
plt.figure(figsize=(10, 6))
plt.plot(dates, data, label='True Value', color='blue')
plt.plot(dates, model.predict(X), label='Predicted Value', color='red', linestyle='--')
plt.title('Time Series Cross-Validation: True vs Predicted')
plt.legend()
plt.show()

Ce code effectue les opérations suivantes :

  • Génère un ensemble de données de séries chronologiques synthétiques avec une tendance, une saisonnalité et un bruit.
  • Implémente une stratégie de validation croisée de l’origine des prévisions glissantes à l’aide de TimeSeriesSplit de sklearn.
  • Entraîne un modèle de régression linéaire sur les données de séries chronologiques.
  • Évalue les performances du modèle à l’aide de la métrique Mean Squared Error (MSE).
  • Visualise les valeurs réelles et prédites sur la série chronologique.
MSE Scores for each split: [113.85938733387366, 125.52615877943208, 70.17575280052887, 74.29515859510016, 78.3146223127321]
Average MSE: 92.43421596433339
cross-validation
N’oubliez pas que cet exemple utilise un modèle de régression linéaire simple à des fins de démonstration. En pratique, vous sélectionnerez un modèle en fonction des caractéristiques de vos données de séries chronologiques et des exigences spécifiques de votre tâche de prévision.