Connexion Contactez-Nous

Pourquoi XGBoost n'est pas suffisant pour l'extrapolation des séries temporelles ?

by Guillaume Saupin

#xgboost #mathématiques #time series #timeseries forecasting

XGBoost est un modèle très puissant et polyvalent. Son champ d'application est assez large et il a été appliqué avec succès pour résoudre de nombreux problèmes de classification et de régression en machine learning. Et même s'il n'a pas été initialement conçu pour traiter les séries temporelles, beaucoup l'utilisent pour cela. Ont-ils raison de le faire ? Voyons ce que les mathématiques nous apprennent sur ce cas d'utilisation.

  1. XGBoost pour les séries temporelles
  2. Les mathématiques sous-jacentes à XGBoost
  3. XGBoost ne peut pas extrapoler !!!
  4. Le rôle essentiel de l'interpolation
  5. Peut-on hacker XGBoost pour surmonter ce problème ?
  6. Conclusion

XGBoost pour les séries temporelles

XGBoost a même été utilisé avec profit pour la prévision de séries temporelles ici et ici par exemple. Le secret est de l'alimenter avec des caractéristiques liées au temps : décalage, fréquences, coefficients d'ondelettes, périodes...

Comme XGBoost est très bon pour identifier des modèles dans les données, si vous avez suffisamment de caractéristiques temporelles décrivant votre ensemble de données, il fournira des prédictions très décentes.

Cependant, XGBoost manque d'une caractéristique essentielle, qui est absolument critique pour les séries temporelles. Analysons les mathématiques sous-jacentes à ce modèle pour comprendre ce qui manque cruellement à XGBoost pour être un bon modèle de prévision des séries temporelles.

Les mathématiques sous-jacentes à XGBoost

Sur la doc XGBoost, il y a un article très didactique qui explique en détail comment le modèle XGBoost est dérivé de formules mathématiques. Je vous conseille vivement de lire attentivement cet article, car il est essentiel pour bien comprendre le rôle des hyperparamètres comme gamma, alpha,...

Comme vous le savez tous, XGBoost est un modèle basé sur les arbres. Il empile autant d'arbres que vous le souhaitez, chaque arbre supplémentaire essayant de réduire l'erreur. L'idée générale est de combiner plusieurs prédicteurs simples et faibles pour en construire un plus fort.

Mais concentrons-nous sur la formule la plus importante de la documentation XGBoost : la façon dont les prédictions sont calculées. Il s'agit d'une formule assez simple :

Calcul des prédictions XGBoost

Extrait de la doc XGBoost

Où l'estimation y_i est la prédiction, x_i est un vecteur de caractéristiques, f_k(x_i) sont les valeurs calculées pour chaque arbre, et K est le nombre total d'arbres.

Comme vous pouvez le constater, le modèle XGBoost est essentiellement un modèle additionnel, par rapport à chaque arbre. Jetons un coup d'œil à f_k pour comprendre comment les scores des arbres sont calculés et voir de quel type de fonction nous parlons ici.

La doc XGBoost nous donne la aussi la réponse, et une fois encore, c'est assez facile à comprendre :

Calcul des scores XGBoost

Extrait de la doc XGBoost

q(x) est une fonction qui attribue les caractéristiques x à une feuille spécifique de l'arbre actuel t. w_q(x) est alors le score de la feuille pour l'arbre actuel t et les caractéristiques actuelles x.

En résumé, une fois que vous avez entraîné votre modèle, ce qui est la partie la plus difficile du problème, la prédiction se résume simplement à identifier la bonne feuille pour chaque arbre, en fonction des caractéristiques, et à additionner les valeurs attachées à chaque feuille.

Voyons maintenant quelle est la conséquence concrète d'un tel modèle, et quel est son impact sur la prévision des séries temporelles.

XGBoost ne peut pas extrapoler !!!

Une fois de plus, XGBoost est un outil très puissant et efficace pour la classification et la régression, mais il lui manque une fonctionnalité très critique : il ne peut pas extrapoler ! Ou du moins, il ne peut pas extrapoler quelque chose de mieux qu'une simple constante. Aucune interpolation linéaire, quadratique ou cubique n'est possible.

Comme nous l'avons vu dans les formules précédentes, les prédictions de XGBoost sont uniquement basées sur une somme de valeurs attachées aux feuilles de l'arbre. Aucune transformation n'est appliquée à ces valeurs : pas de mise à l'échelle, pas de log, pas d'exponentiel, rien.

Cela signifie que XGBoost ne peut faire une bonne prédiction que pour des situations déjà rencontrées dans l'historique de formation. Il ne pourra pas capturer les tendances !

Les quelques lignes de code ci-dessous sont très éloquentes, et devraient suffire à illustrer cette limitation et à vous convaincre que XGBoost échoue à extrapoler :

Ces quelques lignes de code essaient d'utiliser un modèle XGBoost pour prévoir les valeurs d'un système très basique, purement linéaire, dont la sortie est juste proportionnelle au temps. Comme le montre le graphique ci-dessous, XGBoost est très bon lors de l'interpolation, comme vous pouvez le voir pour les prédictions pour t entre 0 et 10.

Interpolation XGBoost

Mais il échoue complètement lorsqu'il essaie d'extrapoler, comme nous nous y attendions après avoir analysé le modèle mathématique sous-jacent. En effet, comme indiqué ci-dessus, un modèle XGBoost ne peut pas prédire un événement qui n'a pas fait partie de son apprentissage.

Le rôle essentiel de l'interpolation

Malheureusement, les séries temporelles, ou du moins celles qui sont dignes d'intérêt, sont généralement non stationnaires. Cela signifie que leurs caractéristiques statistiques, la moyenne, la variance et l'écart-type, changent avec le temps.

Et pour prévoir avec précision ce type de séries temporelles, il faut des modèles qui non seulement capturent les variations par rapport au temps mais peuvent aussi extrapoler.

Nous pouvons étudier deux exemples pour illustrer cela. Dans le premier, nous voulons estimer la quantité d'énergie solaire reçue par mètre carré à un endroit précis où le ciel n'est jamais nuageux, selon le jour. Avec quelques années de données, XGboost sera capable de faire une estimation très décente, puisque la quantité d'énergie reçue est essentiellement un problème géométrique, et que le mouvement de la terre autour du soleil est presque parfaitement périodique. Nous sommes alors face à un système stationnaire.

A l'inverse, disons que nous ne voulons plus prédire l'irradiance solaire mais la température. Comme nous le savons maintenant (tous ?), la terre est en train de surmonter un réchauffement global, dû aux activités humaines, et la température moyenne sur terre augmente depuis plus d'un siècle. Voir la figure ci-dessous :

Moyennes de températures entre 1850 et 2019

La température moyenne mondiale augmente. Extrait de berkeley earth.

Même si pour un lieu donné, nous observons des effets saisonniers, la température moyenne n'est pas stable dans le temps. Construire un modèle XGBoost, avec autant de caractéristiques météorologiques ou climatiques que vous pouvez imaginer, ne produira jamais de bonnes estimations pour le futur.

Peut-on hacker XGBoost pour surmonter ce problème ?

Avec certains modèles, il est parfois possible de modifier les mathématiques sous-jacentes pour étendre leur champ d'application.

Par exemple, vous pouvez utiliser des modèles régressifs linéaires simples pour modéliser et prévoir des systèmes non linéaires en les alimentant simplement avec des caractéristiques non linéaires. Ainsi, en alimentant un modèle linéaire avec la 7ème puissance de la vitesse du vent, vous pouvez obtenir de bonnes performances pour la production d'énergie éolienne.

Malheureusement, il n'est pas possible de modifier les formules utilisées pour la prédiction dans le modèle XGBoost afin d'introduire un support pour l'extrapolation.

Une option pour combiner la puissante identification de modèle de XGBoost avec l'extrapolation est d'augmenter XGBoost avec un modèle secondaire en charge de cela.

Une autre pourrait consister à normaliser les données pour éliminer les effets non stationnaires et revenir au cas stationnaire.

Conclusion

XGBoost, et tout autre modèle arborescent, ne peut mathématiquement effectuer aucun type d'extrapolation d'ordre supérieur à 0, c'est-à-dire qu'il ne peut extrapoler qu'une valeur constante. Il s'agit d'une limitation importante à prendre en compte lorsqu'on essaie d'appliquer ce type de modèle à des séries temporelles non stationnaires.

Cependant, XGBoost reste un outil très intéressant pour faire ressortir la structure de données complexes comportant de nombreuses caractéristiques. L'utiliser pour prévoir des séries temporelles peut être une bonne chose, à condition que votre cible soit stationnaire. Si ce n'est pas le cas, vous devez alors prétraiter vos données pour vous assurer qu'elles le sont ou envisager de coupler XGBoost avec un autre modèle chargé de traiter les tendances.

Inscrivez-vous à la newsletter