CatBoost
CatBoost est la bibliothèque open source de gradient boosting de Yandex. Elle encode les caractéristiques catégorielles à l’aide de statistiques ordonnées sur la cible et construit des arbres symétriques.
CatBoost est une bibliothèque libre de boosting par gradient pour les arbres de décision, développée par Yandex et publiée en 2017. Son nom vient de « categorical boosting » : elle accepte les colonnes catégorielles, comme la ville, l’identifiant de produit ou le type d’appareil, sous forme de chaînes brutes et les convertit elle-même en nombres. Les données tabulaires n’ont donc pas besoin d’encodage manuel one-hot ou par cible avant l’entraînement. Deux idées présentées dans son article NeurIPS 2018, les statistiques ordonnées de la cible et le boosting ordonné, empêchent que l’étiquette d’une ligne d’entraînement soit utilisée pour ajuster les nombres qui la représentent ; cette fuite biaise aussi bien l’encodage par cible classique que le boosting standard. CatBoost s’exécute sur CPU et GPU, propose des interfaces Python, R et en ligne de commande, et gère la classification, la régression et le classement.
Comment CatBoost encode les caractéristiques catégorielles#
L’encodage one-hot crée une colonne par catégorie, ce qui devient peu pratique pour une caractéristique comportant des milliers de valeurs, comme un identifiant de commerçant ou d’utilisateur. L’encodage par cible remplace chaque catégorie par la moyenne des étiquettes de ses lignes. Cette méthode est compacte, mais elle divulgue la réponse : l’étiquette d’une ligne entre dans le nombre qui la décrit, si bien que le modèle apprend un raccourci qui échoue sur de nouvelles données. C’est une forme de fuite de données qui se manifeste par du surapprentissage, surtout pour les catégories rares.
Les statistiques ordonnées de la cible de CatBoost corrigent ce problème grâce à une permutation aléatoire des lignes d’entraînement. La catégorie de chaque ligne est encodée à partir des étiquettes des seules lignes qui la précèdent dans la permutation, avec un lissage vers une valeur a priori ; aucune ligne ne voit donc jamais sa propre étiquette. CatBoost répète l’opération sur plusieurs permutations, encode en one-hot les caractéristiques ayant très peu de valeurs distinctes et construit gloutonnement de nouvelles caractéristiques combinant des caractéristiques catégorielles, comme la ville et le type d’appareil, pendant l’entraînement.
Dans le package Python CatBoost, les colonnes catégorielles sont indiquées par leur nom via cat_features. Cet exemple attribue à chacun de 50 forfaits d’abonnement un taux de résiliation masqué et vérifie si le modèle retrouve ces taux à partir des noms bruts des forfaits :
import numpy as np
import pandas as pd
from catboost import CatBoostClassifier
# Synthetic churn data: each of 50 plans has its own hidden churn rate
rng = np.random.default_rng(0)
rates = rng.uniform(0.05, 0.6, size=50)
plan_ids = rng.integers(0, 50, size=5000)
X = pd.DataFrame({"plan": [f"plan_{i}" for i in plan_ids], "tenure_months": rng.integers(1, 60, size=5000)})
y = rng.random(5000) < rates[plan_ids]
# Raw strings go in directly; CatBoost encodes them with ordered target statistics
model = CatBoostClassifier(iterations=200, depth=4, verbose=0, random_seed=0)
model.fit(X, y, cat_features=["plan"])
# Compare true and predicted churn for the safest and riskiest plans
lo, hi = rates.argmin(), rates.argmax()
probe = pd.DataFrame({"plan": [f"plan_{lo}", f"plan_{hi}"], "tenure_months": [30, 30]})
print("True churn rates: ", rates[[lo, hi]].round(2))
print("Predicted churn rates:", model.predict_proba(probe)[:, 1].round(2))Le script affiche des taux réels de 0.05 et 0.60, ainsi que des taux prédits de 0.06 et 0.59. Le modèle a retrouvé le taux de résiliation de chaque forfait à partir de la colonne de chaînes brutes, avec seulement une centaine de lignes d’entraînement par forfait.
Boosting ordonné et arbres symétriques#
Le boosting par gradient standard calcule les cibles de chaque nouvel arbre — les gradients de la fonction de perte — sur les mêmes lignes que celles utilisées pour ajuster les arbres précédents, ce qui biaise ces gradients. Les auteurs de CatBoost appellent cet effet le décalage de prédiction. Le boosting ordonné réutilise l’astuce de la permutation : le gradient de chaque ligne provient d’un modèle entraîné uniquement sur les lignes qui la précèdent dans la permutation. Il s’agit d’une option d’entraînement, boosting_type="Ordered", qui améliore généralement la qualité sur les petits jeux de données, au prix d’une vitesse réduite. Sur CPU, la valeur par défaut est le schéma classique "Plain" ; sur GPU, l’entraînement utilise par défaut "Ordered" pour les jeux de données de 50 000 lignes ou moins, sauf en mode multiclasse.
Par défaut, CatBoost construit des arbres symétriques, ou oblivious, dans lesquels chaque nœud d’une même profondeur utilise la même condition de séparation. Un arbre de profondeur 6, la valeur par défaut, se résume donc à six tests oui-non dont les réponses forment un indice de 6 bits vers 64 feuilles. Cela accélère la prédiction et limite la complexité de chaque arbre, ce qui constitue une forme de régularisation. Le paramètre grow_policy permet de passer à une croissance par profondeur ou par feuille lorsque le jeu de données nécessite des arbres moins contraints.
Applications concrètes#
- Risque de crédit : les prêteurs combinent des caractéristiques catégorielles du demandeur, comme la profession, la région et l’objet du prêt, avec des valeurs numériques de revenu et d’endettement pour prédire le défaut de paiement, sans encoder en one-hot des centaines de codes de profession.
- Classement et recommandations : CatBoost propose des fonctions de perte de classement comme YetiRank, utilisées pour ordonner les résultats de recherche ou les produits selon leur pertinence prédite, à partir des caractéristiques de l’utilisateur, de l’article et du contexte dans un système de recommandation.
- Évaluation immobilière : un détecteur YOLO26 entraîné sur mesure peut compter les équipements, comme les piscines ou les panneaux solaires, dans les photos d’annonces. Ces nombres sont ensuite intégrés comme colonnes numériques dans un modèle de prix CatBoost, à côté de colonnes catégorielles comme le quartier et le type de bien.
CatBoost comparé à XGBoost et LightGBM#
Les trois bibliothèques construisent séquentiellement un ensemble d’arbres, chaque arbre corrigeant les erreurs des précédents. Elles se distinguent ainsi de la forêt aléatoire, dont les arbres sont entraînés indépendamment.
- XGBoost : construit les arbres niveau par niveau par défaut et ajoute une régularisation L1 et L2 à son objectif. La prise en charge native des catégories est arrivée dans des versions ultérieures, et de nombreux pipelines encodent encore les catégories avant l’entraînement.
- LightGBM : construit les arbres feuille par feuille, en divisant celle qui réduit le plus la fonction de perte, et répartit les caractéristiques en histogrammes, ce qui accélère le traitement des grands jeux de données. Il accepte également nativement les colonnes catégorielles encodées en entiers.
- CatBoost : construit des arbres symétriques, encode les catégories à l’aide de statistiques ordonnées de la cible et donne de bons résultats sans réglage des hyperparamètres. Ses paramètres par défaut sont de 1 000 arbres de profondeur 6, avec un taux d’apprentissage choisi automatiquement en fonction du nombre d’itérations pour les fonctions de perte log, multiclasse et RMSE.










