XGBoost
XGBoost est une bibliothèque de boosting de gradient qui ajoute des arbres de décision régularisés un à un ; c’est un choix de premier plan pour les données tabulaires. Découvre son fonctionnement avec du code.
XGBoost (eXtreme Gradient Boosting) est une bibliothèque open source pour les arbres de décision à boosting par gradient, et l'un des outils les plus utilisés pour les données tabulaires. Tianqi Chen l'a lancée comme projet de recherche à l'Université de Washington et l'a publiée en 2014 ; l'article KDD de 2016 XGBoost: A Scalable Tree Boosting System, écrit avec Carlos Guestrin, décrivait son objectif régularisé et la conception du système. La bibliothèque, maintenue par la communauté DMLC, gère la classification, la régression et le classement depuis Python, R, la JVM et C, fonctionne sur CPU et GPU, et s'adapte à grande échelle avec Dask et Spark. Son article indique que 17 des 29 solutions victorieuses aux défis publiées sur le blog de Kaggle en 2015 utilisaient XGBoost.
Fonctionnement de XGBoost#
XGBoost construit un ensemble de façon séquentielle : il part d'une prédiction constante et ajoute un arbre à chaque étape de boosting, chacun étant entraîné pour réduire la fonction de perte laissée par les arbres précédents. La prédiction finale additionne les sorties des arbres, chacune étant réduite par le taux d'apprentissage (eta, 0.3 par défaut) afin qu'aucun arbre ne domine. Deux idées de l'article définissent la construction de chaque arbre :
- Objectif du second ordre : Pour chaque ligne, XGBoost calcule les dérivées première et seconde de la fonction de perte par rapport à la prédiction actuelle : le gradient
get le Hessienh. Une feuille dont les lignes ont une somme de gradientsGet une somme de HessiennesHreçoit le poids-G / (H + λ), le même pas de Newton que celui effectué par les optimiseurs du second ordre. - Arbres régularisés : L'objectif ajoute une pénalité
γpar feuille et une pénalité L2λsur les poids des feuilles, ainsi qu'une pénalité L1 facultativeα. Une division n'est conservée que si son gain,½ [G_L²/(H_L + λ) + G_R²/(H_R + λ) − (G_L + G_R)²/(H_L + H_R + λ)] − γ, est positif, ce qui intègre la régularisation à la construction des arbres et limite le surapprentissage.
La profondeur des arbres est limitée (max_depth, 6 par défaut) et ils croissent niveau par niveau, sauf si grow_policy="lossguide" active la croissance feuille par feuille. L'entraînement s'effectue généralement avec un arrêt anticipé sur un jeu de validation :
Valeurs manquantes, vitesse et passage à l'échelle#
La recherche de divisions tenant compte de la parcimonie de XGBoost permet d'entraîner des tableaux contenant des lacunes sans étape d'imputation. À chaque division, l'algorithme essaie d'envoyer les lignes dont la valeur est manquante à gauche, puis à droite, et conserve comme branche par défaut du nœud la direction qui offre le gain le plus élevé. Le même mécanisme lui permet de parcourir uniquement les entrées stockées dans des matrices creuses, comme les encodages one-hot. Cet exemple masque 30 % des valeurs de caractéristiques du jeu de données sur le cancer du sein de scikit-learn et entraîne le modèle directement sur les lacunes :
import numpy as np
import xgboost as xgb
from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
X, y = load_breast_cancer(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=0)
# Hide 30% of all values; each split learns a default branch for missing ones
rng = np.random.default_rng(0)
X_train_nan = np.where(rng.random(X_train.shape) < 0.3, np.nan, X_train)
X_test_nan = np.where(rng.random(X_test.shape) < 0.3, np.nan, X_test)
for name, train, test in [("complete", X_train, X_test), ("30% missing", X_train_nan, X_test_nan)]:
model = xgb.XGBClassifier(n_estimators=200, max_depth=4, learning_rate=0.1)
model.fit(train, y_train)
print(f"{name}: accuracy {model.score(test, y_test):.3f}")Le programme affiche une exactitude de test de 0.972 sur les données complètes et de 0.951 lorsque 30 % des valeurs sont manquantes dans les jeux d'entraînement et de test.
Pour gagner en vitesse, la méthode d'arbre par défaut hist regroupe chaque caractéristique dans un maximum de 256 intervalles (max_bin) et recherche les divisions entre les intervalles, comme le fait LightGBM, tandis que exact examine chaque valeur triée. En définissant device="cuda", l'entraînement est transféré vers un GPU NVIDIA ; enable_categorical=True divise nativement les colonnes catégorielles, et le mode mémoire externe permet d'entraîner des modèles sur des jeux de données dépassant la RAM. Depuis la version 2.1, les modèles sont enregistrés par défaut au format binaire UBJSON.
XGBoost et les méthodes apparentées#
- LightGBM : Le framework de boosting de Microsoft, publié en 2016, qui fait croître les arbres feuille par feuille par défaut et ajoute l'échantillonnage des lignes par gradient et le regroupement des caractéristiques creuses. Les deux bibliothèques utilisent désormais des histogrammes par défaut et partagent la plupart des techniques.
- CatBoost : La bibliothèque de boosting de Yandex, qui construit des arbres symétriques et encode les caractéristiques catégorielles à l'aide de statistiques cibles ordonnées.
- Forêt aléatoire : Méthode de bagging qui entraîne indépendamment des arbres profonds sur des échantillons bootstrap et en calcule la moyenne, ce qui réduit la variance et nécessite peu de réglages.
- Apprentissage profond : La méthode de référence pour les entrées non structurées comme les images, l'audio et le texte, où les réseaux apprennent des caractéristiques à partir des données brutes. Pour les tableaux de caractéristiques conçues, les arbres boostés restent la référence à battre, et les modèles de fondation tabulaires comme TabPFN rivalisent désormais avec eux sur les petits jeux de données.
Applications concrètes#
- Détection de fraude et risque de crédit : Les sociétés de paiement évaluent chaque transaction à partir de caractéristiques telles que le montant, le commerçant, le lieu, l'appareil et l'historique du compte. Il s'agit d'une tâche centrale de modélisation prédictive, pour laquelle l'inférence rapide de XGBoost convient aux décisions en temps réel.
- Inspection visuelle : Les systèmes de contrôle qualité en fabrication combinent des données de caméra et de capteurs. Les prédictions d’Ultralytics YOLO26 fournissent les données de caméra :
result.summary()renvoie la classe, le niveau de confiance et les coordonnées de la boîte de chaque défaut détecté. Une usine peut agréger ces données par pièce et les joindre aux relevés de température et de pression comme caractéristiques d’un modèle XGBoost qui prédit les défaillances. - Classement et prédiction des clics :
XGBRankers'entraîne par défaut avec l'objectifrank:ndcgpour classer les résultats de recherche, et les classificateurs binaires prédisent les taux de clics sur les publicités. - Problèmes ayant remporté des compétitions : L'article KDD énumère les tâches à l'origine des solutions gagnantes de 2015, notamment la prédiction des ventes en magasin, la classification d'événements en physique des hautes énergies, la classification de logiciels malveillants et la prédiction de l'abandon de cours en ligne à grande échelle.










