Gradient Boosting : XGBoost, LightGBM, CatBoost
“De petites corrections cumulées valent mieux qu'une grande supposition — poursuivre les résidus séquentiellement”
Du Gradient Boosting vanilla à XGBoost (Tree Score = SSR + λT), LightGBM (histogram, leaf-wise) et CatBoost (ordered boosting).
Prérequis
Concepts Couverts
∑Formules Clés
Ensemble de Boosting
Prédiction finale = somme de M apprenants faibles, chacun pondéré par γ — chaque arbre corrige les erreurs des précédents
Pseudo-Résidus
Gradient négatif de la perte — ce que le prochain arbre doit apprendre pour réduire l'erreur
Score d'Arbre XGBoost
Gain d'une division (G = somme des dérivées premières, H = somme des dérivées secondes) — maximiser ce score choisit le meilleur split
Gain de Division
Amélioration de l'objectif en divisant une feuille en deux — utilisé pour l'élagage et le critère d'arrêt
▶Simulation Interactive
⬡Architecture du Modèle
Pourquoi le Gradient Boosting Domine les Données Tabulaires
Depuis 2014, les méthodes de gradient boosting (XGBoost, LightGBM, CatBoost) ont remporté la majorité des compétitions Kaggle sur les données structurées. Ce sont les meilleurs algorithmes pour le ML tabulaire : ils gèrent les types mixtes nativement, ne nécessitent pas de mise à l'échelle, capturent les interactions non linéaires complexes, et viennent avec une régularisation intégrée.
L'Idée Centrale : Ajuster les Erreurs
Supposez que votre modèle actuel prédit les prix des maisons et se trompe de 50k€ sur la maison A. Au lieu de ré-entraîner depuis zéro, entraînez un nouvel arbre pour prédire exactement cette erreur de 50k€. Ajoutez-le à votre modèle. Maintenant vous vous trompez moins. Répétez. Chaque nouvel arbre cible les erreurs résiduelles de tous les arbres précédents combinés.
Le 'gradient' dans le gradient boosting se réfère à la descente de gradient fonctionnel, pas à la descente de gradient paramétrique. Nous optimisons dans l'espace des fonctions, pas des poids.
Gradient Boosting comme Descente de Gradient dans l'Espace Fonctionnel
À l'étape m, nous ajustons un arbre hₘ au gradient négatif de la perte par rapport à la prédiction actuelle F_{m-1}(x). Pour la perte ECM L = ½(y − F(x))², le gradient négatif est exactement le résidu r = y − F(x). Pour d'autres pertes (log loss, MAE), nous obtenons différents 'pseudo-résidus' — d'où la généralité du cadre.
XGBoost : Optimisation du Second Ordre
Le GBM original de Friedman n'utilise que des gradients de premier ordre (résidus). XGBoost utilise à la fois le premier (G) et le second (H) ordre du développement de Taylor de la perte, lui donnant de meilleures informations sur la courbure — comme la méthode de Newton vs la descente de gradient.
XGBoost vs LightGBM vs CatBoost
Three major frameworks, each with distinct architectural innovations:
XGBoost : Croissance en largeur + optimisation de second ordre. Plus lent mais mature. Meilleur pour les petits/moyens jeux de données.
LightGBM : Croissance feuille par feuille + histogrammes. 10–20× plus rapide à l'entraînement. Meilleur pour les grands jeux de données.
CatBoost : Boosting ordonné pour éviter les fuites de cibles. Gestion native des catégorielles. Meilleur avec beaucoup de caractéristiques catégorielles.
Règle empirique : Commencez avec LightGBM. Utilisez CatBoost avec beaucoup de catégorielles. XGBoost pour les petits jeux où la vitesse ne compte pas.
Croissance Feuille par Feuille de LightGBM
Initialiser F₀(x) = log(p/(1-p)) pour la classification binaire
Pour m = 1 à M :
Calculer les pseudo-résidus rᵢ = -∂L/∂F(xᵢ)|_{F=F_{m-1}}
Trouver la meilleure feuille à diviser (globalement, pas niveau par niveau)
Calculer les valeurs des feuilles : γⱼ = ΣᵢGᵢ / (ΣᵢHᵢ + λ)
Mise à jour : F_m(x) = F_{m-1}(x) + ν · γ_{feuille(x)}
Ajouter un arrêt anticipé si la perte de validation cesse de s'améliorer
LightGBM en Production avec Optuna
import lightgbm as lgb import optuna import numpy as np from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split class="tok-comment"># ── Données dclass="tok-str">'exemple ────────────────────────────────────────────────── X, y = make_classification(n_samples=class="tok-num">1000, n_features=class="tok-num">20, n_informative=class="tok-num">10, random_state=class="tok-num">42) X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=class="tok-num">0.2, random_state=class="tok-num">42) dtrain = lgb.Dataset(X_train, label=y_train) def objectif(trial): params = { 'objectiveclass="tok-str">': 'binaryclass="tok-str">', 'metricclass="tok-str">': 'aucclass="tok-str">', 'learning_rateclass="tok-str">': trial.suggest_float('lrclass="tok-str">', class="tok-num">0.01, class="tok-num">0.3, log=True), 'num_leavesclass="tok-str">': trial.suggest_int('num_leavesclass="tok-str">', class="tok-num">20, class="tok-num">300), 'max_depthclass="tok-str">': trial.suggest_int('max_depthclass="tok-str">', class="tok-num">3, class="tok-num">12), 'min_data_in_leafclass="tok-str">': trial.suggest_int('min_childclass="tok-str">', class="tok-num">10, class="tok-num">100), 'feature_fractionclass="tok-str">': trial.suggest_float('feat_fracclass="tok-str">', class="tok-num">0.4, class="tok-num">1.0), 'bagging_fractionclass="tok-str">': trial.suggest_float('bag_fracclass="tok-str">', class="tok-num">0.4, class="tok-num">1.0), 'lambda_l1class="tok-str">': trial.suggest_float('l1class="tok-str">', class="tok-num">1e-8, class="tok-num">10.0, log=True), 'lambda_l2class="tok-str">': trial.suggest_float('l2class="tok-str">', class="tok-num">1e-8, class="tok-num">10.0, log=True), 'verboseclass="tok-str">': -class="tok-num">1, } cv_resultats = lgb.cv( params, dtrain, nfold=class="tok-num">5, num_boost_round=class="tok-num">500, early_stopping_rounds=class="tok-num">50, stratified=True ) return max(cv_resultats['valid auc-meanclass="tok-str">']) etude = optuna.create_study(direction='maximize') etude.optimize(objectif, n_trials=class="tok-num">100)
?Vérification des Connaissances
La progression est sauvegardée dans votre navigateur — aucun compte requis.
Besoin d'un ingénieur IA ou data scientist ?
Je conçois des modèles ML sur mesure, des agents IA, de la vision par ordinateur et de l'automatisation — de l'idée à la production.