Prédire la Production d'Énergie Électrique avec XGBoost : Votre Guide Complet
Maîtrisez XGBoost, évaluez la performance et suivez l'amélioration de votre modèle pas à pas.
Après avoir soigneusement prétraité vos données de production d'énergie électrique, l'étape suivante consiste à appliquer un modèle de machine learning robuste pour effectuer des prédictions précises. XGBoost (Extreme Gradient Boosting) est un choix populaire et performant pour les tâches de régression sur séries temporelles comme celle-ci. Ce guide détaillé vous accompagnera à travers chaque étape, du déploiement du modèle au suivi de ses performances.
Points Clés à Retenir
- Application de XGBoost : Découvrez comment configurer, entraîner et utiliser XGBoost spécifiquement pour la prédiction de séries temporelles énergétiques.
- Évaluation Précise : Apprenez à calculer et interpréter les métriques essentielles (R², MAE, MSE) pour juger de la performance de votre modèle.
- Suivi Dynamique : Visualisez comment les erreurs de votre modèle diminuent (MAE, MSE) et comment son pouvoir explicatif augmente (R²) au fil des itérations d'entraînement.
Étape 1 : Préparation Finale des Données et Ingénierie des Caractéristiques
Affiner vos Données pour XGBoost
Même si le prétraitement initial est fait, l'ingénierie des caractéristiques (feature engineering) est cruciale pour XGBoost, surtout avec des séries temporelles. Assurez-vous que vos données incluent des caractéristiques pertinentes.
Création de Caractéristiques Temporelles et Décalées
XGBoost ne comprend pas intrinsèquement la nature séquentielle des données. Vous devez lui fournir cette information via des caractéristiques :
- Variables Décalées (Lags) : Créez des colonnes représentant la production d'énergie à des instants précédents (par exemple, T-1 heure, T-24 heures, T-1 semaine). Celles-ci aident le modèle à capter l'autocorrélation.
- Caractéristiques Temporelles : Extrayez des informations de l'horodatage, comme l'heure du jour, le jour de la semaine, le jour du mois, le mois, la saison, l'année. Ces variables capturent les cycles et saisonnalités.
- Moyennes Mobiles : Calculez des moyennes (ou autres statistiques comme l'écart-type) de la production sur des fenêtres temporelles glissantes (par exemple, moyenne sur les 3 dernières heures, sur les 24 dernières heures).
- Variables Exogènes : Si disponibles, incluez des données externes pertinentes comme la météo (température, ensoleillement, vitesse du vent), les jours fériés, etc.
Illustration de la demande d'électricité, un concept similaire à la production en termes de dépendance temporelle.
Division Chronologique des Données
Pour les séries temporelles, il est impératif de diviser les données chronologiquement pour éviter la "fuite de données" (data leakage), où le modèle apprendrait accidentellement des informations futures. Ne mélangez jamais les données de manière aléatoire.
# Supposons que 'df' est votre DataFrame pandas trié par date
# 'features' contient vos variables explicatives (lags, temps, météo...)
# 'target' est la colonne de production d'énergie à prédire
from sklearn.model_selection import train_test_split
# Exemple : 80% pour l'entraînement, 20% pour le test
train_size = int(len(df) * 0.8)
df_train = df.iloc[:train_size]
df_test = df.iloc[train_size:]
X_train = df_train[features]
y_train = df_train[target]
X_test = df_test[features]
y_test = df_test[target]
# Vous pouvez aussi créer un ensemble de validation à partir de l'ensemble d'entraînement
# X_train, X_val, y_train, y_val = train_test_split(X_train_full, y_train_full, test_size=0.15, shuffle=False) # 15% de l'entraînement pour la validation
print(f"Taille entraînement: {X_train.shape}, Taille test: {X_test.shape}")
Cette approche garantit que vous entraînez le modèle sur le passé et le testez sur le futur, simulant ainsi un scénario de prédiction réaliste.
Étape 2 : Construction et Entraînement du Modèle XGBoost
Mise en Place de l'Algorithme
Installation et Importation
Assurez-vous que la bibliothèque XGBoost est installée dans votre environnement Python. Si ce n'est pas le cas, installez-la via pip :
pip install xgboost pandas scikit-learn matplotlib
Importez ensuite les modules nécessaires :
import xgboost as xgb
from sklearn.model_selection import GridSearchCV # Pour l'optimisation des hyperparamètres
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
Initialisation et Optimisation des Hyperparamètres
XGBoost possède plusieurs hyperparamètres qui contrôlent son comportement. Un réglage fin (tuning) est souvent nécessaire pour obtenir les meilleures performances. Les paramètres clés incluent :
n_estimators: Le nombre d'arbres (itérations) à construire.learning_rate(oueta) : La vitesse à laquelle le modèle apprend. Une valeur plus faible nécessite plus d'arbres mais peut être plus robuste.max_depth: La profondeur maximale de chaque arbre. Limite la complexité pour éviter le surapprentissage.subsample: La fraction d'échantillons de données utilisée pour entraîner chaque arbre.colsample_bytree: La fraction de caractéristiques (colonnes) utilisée pour construire chaque arbre.reg_alpha(L1),reg_lambda(L2) : Termes de régularisation pour pénaliser la complexité.objective: La fonction de perte à optimiser. Pour la régression,'reg:squarederror'est commun (minimise le MSE).
Vous pouvez utiliser GridSearchCV ou RandomizedSearchCV pour trouver une bonne combinaison, mais cela peut être coûteux en temps de calcul. Souvent, on commence avec des valeurs par défaut raisonnables et on ajuste itérativement.
Entraînement du Modèle avec Suivi
L'entraînement se fait avec la méthode .fit(). Pour suivre les performances pendant l'entraînement, utilisez les paramètres eval_set et eval_metric.
# Initialiser le modèle XGBoost Regressor
model = xgb.XGBRegressor(
objective='reg:squarederror',
n_estimators=1000, # Nombre potentiellement élevé, l'arrêt précoce décidera
learning_rate=0.05,
max_depth=5,
subsample=0.8,
colsample_bytree=0.8,
random_state=42, # Pour la reproductibilité
n_jobs=-1 # Utiliser tous les cœurs CPU disponibles
# Ajoutez ici d'autres hyperparamètres si optimisés (ex: reg_alpha, reg_lambda)
)
# Définir l'ensemble d'évaluation pour le suivi et l'arrêt précoce
# Il est crucial d'avoir un ensemble de validation distinct de l'ensemble de test final
# Ici, nous utilisons l'ensemble de test pour l'exemple, mais idéalement, utilisez un ensemble de validation dédié.
eval_set = [(X_train, y_train), (X_test, y_test)]
# Entraîner le modèle
print("Début de l'entraînement XGBoost...")
model.fit(
X_train, y_train,
eval_set=eval_set,
eval_metric=['rmse', 'mae'], # Métriques à suivre (RMSE est la racine de MSE)
early_stopping_rounds=50, # Arrêter si aucune amélioration pendant 50 tours
verbose=True # Afficher les métriques à chaque itération (ou True pour toutes les itérations)
# verbose=100 pour afficher tous les 100 tours
)
print("Entraînement terminé.")
L'early_stopping_rounds est crucial : il arrête l'entraînement lorsque la performance sur l'ensemble de validation (ici, `X_test`, `y_test`) cesse de s'améliorer pendant un certain nombre d'itérations, empêchant ainsi le surapprentissage et déterminant le nombre optimal d'n_estimators.
Vidéo : Prévision de Séries Temporelles avec XGBoost
Pour approfondir visuellement le processus d'application de XGBoost à la prévision énergétique, cette vidéo (en anglais) fournit un excellent tutoriel pratique utilisant Python :
Cette vidéo montre comment préparer les données, créer des caractéristiques temporelles, entraîner un modèle XGBoost et faire des prédictions pour la consommation d'énergie, des étapes très similaires à la prédiction de la production.
Étape 3 : Évaluation de la Performance du Modèle
Quantifier la Précision des Prédictions
Faire des Prédictions sur l'Ensemble de Test
Utilisez le modèle entraîné (potentiellement arrêté prématurément) pour prédire les valeurs de production d'énergie sur l'ensemble de test, que le modèle n'a jamais vu pendant l'entraînement.
# Prédictions sur l'ensemble de test
y_pred = model.predict(X_test)
Calcul des Métriques d'Erreur
Comparez les prédictions (y_pred) avec les valeurs réelles (y_test) en utilisant les métriques R², MAE et MSE.
-
Erreur Absolue Moyenne (MAE - Mean Absolute Error) :
Mesure la moyenne des erreurs absolues. Elle est dans la même unité que la cible (par exemple, MWh) et est moins sensible aux valeurs aberrantes que le MSE.
\[ \text{MAE} = \frac{1}{n} \sum_{i=1}^{n} |y_{\text{test}, i} - y_{\text{pred}, i}| \] -
Erreur Quadratique Moyenne (MSE - Mean Squared Error) :
Mesure la moyenne des erreurs au carré. Elle pénalise davantage les grosses erreurs. Son unité est le carré de l'unité cible (par exemple, MWh²). La racine carrée (RMSE) est souvent utilisée pour retrouver l'unité d'origine.
\[ \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_{\text{test}, i} - y_{\text{pred}, i})^2 \] -
Coefficient de Détermination (R²) :
Indique la proportion de la variance de la variable cible qui est expliquée par le modèle. Un R² de 1 signifie une prédiction parfaite, un R² de 0 signifie que le modèle ne fait pas mieux qu'une simple moyenne, et un R² négatif signifie que le modèle est pire qu'une simple moyenne.
\[ R^2 = 1 - \frac{\sum_{i=1}^{n} (y_{\text{test}, i} - y_{\text{pred}, i})^2}{\sum_{i=1}^{n} (y_{\text{test}, i} - \bar{y}_{\text{test}})^2} \]où \( \bar{y}_{\text{test}} \) est la moyenne des valeurs réelles de test.
# Calcul des métriques
mae = mean_absolute_error(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
rmse = np.sqrt(mse) # RMSE est souvent rapporté aussi
r2 = r2_score(y_test, y_pred)
print(f"Performance finale sur l'ensemble de test:")
print(f" MAE: {mae:.4f}")
print(f" MSE: {mse:.4f}")
print(f" RMSE: {rmse:.4f}")
print(f" R²: {r2:.4f}")
Visualisation du Processus Global
Le diagramme suivant résume le flux de travail typique pour la prédiction de séries temporelles avec XGBoost, de la préparation des données à l'évaluation finale.
Ce schéma illustre les étapes interdépendantes nécessaires pour construire et valider un modèle de prédiction fiable.
Étape 4 : Suivi de l'Évolution des Métriques au Fil des Itérations
Observer l'Apprentissage du Modèle
L'un des aspects les plus intéressants de l'entraînement XGBoost est de pouvoir observer comment les métriques d'erreur (MAE, MSE/RMSE) diminuent et comment le R² (qui n'est pas directement suivi par défaut mais peut être dérivé ou ajouté comme métrique personnalisée) augmente au fur et à mesure que le modèle ajoute des arbres (itérations ou "époques" dans ce contexte).
Accéder aux Résultats d'Évaluation
Si vous avez utilisé eval_set et eval_metric pendant l'entraînement avec .fit(), XGBoost stocke l'historique des performances dans l'attribut evals_result() du modèle entraîné.
# Récupérer les résultats de l'évaluation stockés pendant l'entraînement
results = model.evals_result()
# results est un dictionnaire, par exemple:
# {'validation_0': {'rmse': [valeur_tour1, valeur_tour2, ...], 'mae': [...]},
# 'validation_1': {'rmse': [valeur_tour1, valeur_tour2, ...], 'mae': [...]}}
# 'validation_0' correspond au premier set dans eval_set (ici, train)
# 'validation_1' correspond au second set dans eval_set (ici, test/validation)
epochs = len(results['validation_0']['rmse']) # Nombre d'itérations effectuées
x_axis = range(0, epochs)
Visualisation des Courbes d'Apprentissage
Tracez ces métriques pour visualiser les courbes d'apprentissage. Cela aide à diagnostiquer le surapprentissage (si l'erreur d'entraînement diminue mais l'erreur de validation augmente) ou le sous-apprentissage (si les deux erreurs restent élevées).
# Tracer les courbes d'apprentissage pour RMSE et MAE
fig, ax = plt.subplots(1, 2, figsize=(15, 5))
# Graphique RMSE
ax[0].plot(x_axis, results['validation_0']['rmse'], label='Train RMSE')
ax[0].plot(x_axis, results['validation_1']['rmse'], label='Validation RMSE')
ax[0].set_xlabel('Nombre d\'itérations (Epochs)')
ax[0].set_ylabel('RMSE')
ax[0].set_title('XGBoost RMSE au Fil des Itérations')
ax[0].legend()
# Graphique MAE
ax[1].plot(x_axis, results['validation_0']['mae'], label='Train MAE')
ax[1].plot(x_axis, results['validation_1']['mae'], label='Validation MAE')
ax[1].set_xlabel('Nombre d\'itérations (Epochs)')
ax[1].set_ylabel('MAE')
ax[1].set_title('XGBoost MAE au Fil des Itérations')
ax[1].legend()
plt.tight_layout()
plt.show()
# Idéalement, vous verrez les deux courbes diminuer puis se stabiliser.
# Si la courbe de validation commence à remonter tandis que celle d'entraînement continue de descendre,
# c'est un signe de surapprentissage, et l'arrêt précoce aura stoppé l'entraînement à temps.
Vous devriez observer une diminution des courbes MAE et RMSE, indiquant que le modèle apprend et réduit ses erreurs. Le R² (qui n'est pas tracé ici mais peut être calculé à chaque étape si nécessaire) devrait augmenter en conséquence.
Analyse des Facteurs d'Influence sur la Performance
La performance finale de votre modèle XGBoost dépend de plusieurs facteurs interdépendants. Le graphique radar ci-dessous offre une vue qualitative de l'importance relative de certains de ces facteurs pour atteindre une haute précision dans la prédiction de production énergétique.
Ce graphique met en évidence que des aspects comme l'ingénierie des caractéristiques et la gestion du surapprentissage sont souvent cruciaux, tandis que l'impact de la taille des données ou de la fréquence de réentraînement peut varier selon l'horizon de prédiction visé.
Tableau Récapitulatif : Hyperparamètres Clés de XGBoost
Paramètres à Connaître pour Optimiser Votre Modèle
Comprendre les hyperparamètres principaux de XGBoost est essentiel pour affiner votre modèle et améliorer ses performances. Voici un aperçu de certains des plus importants :
| Hyperparamètre | Description | Impact Typique / Conseil |
|---|---|---|
n_estimators |
Nombre d'arbres (itérations) de boosting. | Augmenter améliore généralement la performance jusqu'à un certain point, mais augmente le risque de surapprentissage et le temps de calcul. À utiliser avec early_stopping_rounds. |
learning_rate (ou eta) |
Taux d'apprentissage. Réduit la contribution de chaque arbre. | Valeurs typiques : 0.01 - 0.3. Un taux plus faible nécessite plus d'n_estimators mais peut conduire à une meilleure généralisation. |
max_depth |
Profondeur maximale des arbres individuels. | Contrôle la complexité du modèle. Valeurs typiques : 3 - 10. Des valeurs plus élevées peuvent capter des interactions complexes mais augmentent le risque de surapprentissage. |
subsample |
Fraction des échantillons de données utilisés pour l'entraînement de chaque arbre. | Valeurs typiques : 0.5 - 1.0. Aide à prévenir le surapprentissage en introduisant de la stochasticité. Mettre à < 1.0 active le "Stochastic Gradient Boosting". |
colsample_bytree |
Fraction des caractéristiques (colonnes) utilisées lors de la construction de chaque arbre. | Valeurs typiques : 0.5 - 1.0. Utile pour la régularisation et accélère l'entraînement lorsque le nombre de features est grand. |
gamma (ou min_split_loss) |
Réduction minimale de la perte requise pour effectuer une nouvelle partition sur un nœud feuille de l'arbre. | Contrôle la complexité. Des valeurs plus élevées rendent l'algorithme plus conservateur. |
reg_alpha (L1) |
Terme de régularisation L1 sur les poids. | Peut conduire à des poids nuls (sélection de caractéristiques). Utile en cas de haute dimensionnalité. |
reg_lambda (L2) |
Terme de régularisation L2 sur les poids. | Plus couramment utilisé que L1. Rend les poids plus petits et le modèle plus simple. |
Le réglage optimal de ces paramètres dépend fortement de votre jeu de données spécifique. L'expérimentation et la validation croisée (adaptée aux séries temporelles) sont recommandées.
Défis Potentiels et Leurs Solutions
Anticiper et Résoudre les Problèmes Courants
Lors de l'application de XGBoost, vous pourriez rencontrer certains défis. Voici les plus fréquents et comment les aborder :
1. Surapprentissage (Overfitting)
- Symptôme : L'erreur sur l'ensemble d'entraînement est très faible, mais l'erreur sur l'ensemble de validation/test est significativement plus élevée ou commence à augmenter après un certain nombre d'itérations.
- Solutions :
- Utiliser
early_stopping_rounds: C'est la méthode la plus directe et efficace. - Réduire la complexité du modèle : Diminuer
max_depth, augmentergamma,min_child_weight. - Augmenter la régularisation : Augmenter
reg_alphaet/oureg_lambda. - Diminuer
learning_rate: Combiné avec plus d'n_estimators(contrôlé par l'arrêt précoce). - Utiliser le sous-échantillonnage : Régler
subsampleetcolsample_bytreeà des valeurs inférieures à 1.0. - Validation Croisée Temporelle : Utiliser des techniques comme
TimeSeriesSplitde scikit-learn pour une évaluation plus robuste des hyperparamètres.
- Utiliser
2. Sous-apprentissage (Underfitting)
- Symptôme : L'erreur est élevée à la fois sur l'ensemble d'entraînement et de validation/test. Le modèle est trop simple pour capturer les motifs des données.
- Solutions :
- Augmenter la complexité du modèle : Augmenter
max_depth, diminuergamma,min_child_weight. - Diminuer la régularisation : Réduire
reg_alphaetreg_lambda. - Augmenter
learning_rate(avec prudence) : Ou augmentern_estimatorssi l'arrêt précoce n'est pas encore atteint. - Améliorer l'Ingénierie des Caractéristiques : Ajouter des caractéristiques plus pertinentes (lags plus longs/courts, interactions, variables exogènes).
- Vérifier la qualité des données : Assurez-vous qu'il n'y a pas de problèmes fondamentaux dans les données d'entrée.
- Augmenter la complexité du modèle : Augmenter
Comprendre la composition des sources d'énergie (comme illustré ici pour les nouvelles installations) peut aider à identifier des variables exogènes pertinentes pour la prédiction.
3. Fuite de Données (Data Leakage)
- Symptôme : Le modèle obtient des performances irréalistement bonnes pendant le développement mais échoue en production.
- Cause Principale (Séries Temporelles) : Utilisation d'informations futures pour prédire le passé/présent (par exemple, division aléatoire des données, utilisation de variables cibles futures comme caractéristiques).
- Solutions :
- Division Chronologique Stricte : Toujours diviser les données en ensembles d'entraînement, validation et test en fonction du temps.
- Ingénierie des Caractéristiques Prudente : S'assurer que toutes les caractéristiques utilisées pour prédire un instant `T` sont disponibles à ou avant `T`. Attention aux moyennes mobiles centrées ou aux calculs utilisant des données futures.
4. Temps d'Entraînement Long
- Symptôme : L'entraînement du modèle prend trop de temps, en particulier avec de grands jeux de données ou lors de l'optimisation des hyperparamètres.
- Solutions :
- Utiliser un GPU : Si disponible, configurez XGBoost pour utiliser l'accélération GPU (
tree_method='gpu_hist'). - Réduire
n_estimators(viaearly_stopping_rounds) : L'arrêt précoce limite le nombre d'itérations. - Ajuster
n_jobs: Mettren_jobs=-1pour utiliser tous les cœurs CPU disponibles. - Sous-échantillonnage : Réduire
subsampleet/oucolsample_bytreepeut accélérer l'entraînement. - Optimisation des Hyperparamètres : Utiliser
RandomizedSearchCVau lieu deGridSearchCVpour explorer un espace de paramètres plus large avec moins de combinaisons.
- Utiliser un GPU : Si disponible, configurez XGBoost pour utiliser l'accélération GPU (
Foire Aux Questions (FAQ)
Qu'est-ce que XGBoost et pourquoi l'utiliser pour la prédiction d'énergie ?
XGBoost (Extreme Gradient Boosting) est un algorithme d'apprentissage automatique basé sur les arbres de décision, utilisant une technique appelée "gradient boosting". Il est réputé pour sa vitesse et ses performances élevées.
Pour la prédiction de la production d'énergie (une série temporelle), XGBoost est pertinent car :
- Il gère bien les relations non linéaires entre les caractéristiques (heure, météo, lags) et la production.
- Il intègre nativement la régularisation pour prévenir le surapprentissage.
- Il est souvent plus performant que les modèles linéaires traditionnels pour ce type de tâche complexe.
- Il peut gérer efficacement les valeurs manquantes (bien qu'un prétraitement soit souvent préférable).
Comment choisir le bon nombre d'itérations (n_estimators) ?
Il n'y a pas de valeur unique "correcte" pour n_estimators. Le nombre optimal dépend de votre jeu de données et des autres hyperparamètres (notamment learning_rate).
La meilleure pratique consiste à :
- Fixer
n_estimatorsà une valeur relativement élevée (par exemple, 500, 1000, voire plus). - Utiliser l'
early_stopping_roundspendant l'entraînement, en surveillant une métrique de performance (comme RMSE ou MAE) sur un ensemble de validation distinct. - L'entraînement s'arrêtera automatiquement lorsque la métrique de validation ne s'améliorera plus pendant le nombre de tours spécifié par
early_stopping_rounds.
Le nombre d'itérations effectivement réalisées avant l'arrêt est alors considéré comme le nombre optimal pour cette configuration spécifique.
Quelle est la différence entre MAE et MSE ? Quand utiliser l'une ou l'autre ?
MAE (Mean Absolute Error) et MSE (Mean Squared Error) sont deux métriques courantes pour évaluer les modèles de régression.
- MAE : Calcule la moyenne des différences absolues entre les prédictions et les valeurs réelles. \( \frac{1}{n} \sum |y_i - \hat{y}_i| \). Elle est dans la même unité que la cible et est moins sensible aux erreurs importantes (outliers).
- MSE : Calcule la moyenne des différences au carré. \( \frac{1}{n} \sum (y_i - \hat{y}_i)^2 \). Elle pénalise davantage les grandes erreurs en raison de la mise au carré. Son unité est le carré de l'unité cible. La racine carrée (RMSE) ramène l'erreur à l'unité d'origine.
Quand utiliser laquelle ?
- Utilisez MAE si vous voulez une mesure d'erreur directement interprétable dans l'unité de votre cible et si vous ne voulez pas que les grandes erreurs aient une influence disproportionnée (par exemple, si les outliers ne sont pas critiques).
- Utilisez MSE (ou RMSE) si les grandes erreurs sont particulièrement indésirables et doivent être fortement pénalisées. C'est souvent la métrique optimisée par défaut dans de nombreux algorithmes de régression (y compris XGBoost avec
'reg:squarederror').
Il est souvent utile de regarder les deux métriques pour avoir une compréhension complète de la performance du modèle.
Puis-je utiliser XGBoost sans faire d'ingénierie de caractéristiques spécifique aux séries temporelles ?
Techniquement, oui, vous pouvez entraîner un modèle XGBoost en utilisant uniquement les caractéristiques brutes (par exemple, juste l'horodatage et des variables exogènes). Cependant, les performances seront très probablement médiocres pour la prédiction de séries temporelles.
XGBoost, comme la plupart des modèles basés sur les arbres, ne comprend pas nativement l'ordre séquentiel ou la dépendance temporelle des données. Sans caractéristiques comme les valeurs décalées (lags), les moyennes mobiles ou les composantes temporelles (heure, jour, mois), le modèle aura du mal à identifier et exploiter les motifs temporels essentiels (autocorrélation, saisonnalité, tendance).
L'ingénierie de caractéristiques adaptées aux séries temporelles est donc fortement recommandée et constitue l'une des étapes les plus importantes pour obtenir des prédictions précises avec XGBoost dans ce contexte.
Références
- Use XGBoost for Time-Series Forecasting - Analytics Vidhya
- Exploring Time Series Prediction of Energy Consumption Using XGBoost and Cross Validation - Medium
- Custom Objective and Evaluation Metric - XGBoost Documentation
- Evaluate XGBoost performance with the Root Mean Squared Error metric - XGBoosting.com
- [Tutorial] Time Series forecasting with XGBoost - Kaggle
- Machine learning benchmarks MAE, RMSE, and R-squared - Cross Validated (Stack Exchange)
Recherches Recommandées
Last updated April 13, 2025