Accueil / Factory / Algos ML / CatBoost — factory / algos ML / apprentissage supervisé

ALGORITHME CATBOOST.

Un gradient boosting développé par Yandex, qui accepte les variables catégorielles telles quelles : zone, enseigne, code postal, canal. Il les convertit lui-même en chiffres sans laisser fuiter la cible. Ses réglages par défaut sont réputés solides, ce qui en fait le boosting le plus simple à mettre en route.

ClassificationRégressionVariables catégoriellesEnsemble / boostingNiveau : intermédiaire

FICHE D'IDENTITÉ

notes sur 5 · usage entreprise
PerformanceAu niveau de XGBoost et LightGBM, parfois devant
InterprétabilitéImportance des variables et SHAP, pas de règle lisible
VitessePrédiction très rapide, entraînement plus lent que LightGBM
Facilité de réglageBons résultats avec les réglages par défaut
Tolérance aux données brutesCatégorielles en texte, manquants gérés, pas de normalisation
EN 30 SECONDES

Pour noter une zone sans tricher, on ne regarde que les magasins déjà passés en revue avant celui-ci. Chaque magasin reçoit ainsi une valeur de zone calculée sans lui-même.

1. On mélange les lignes au hasard

CatBoost tire une permutation aléatoire des données d'apprentissage. Elle définit un ordre fictif, comme si les lignes arrivaient l'une après l'autre.

2. On remplace chaque catégorie par une statistique ordonnée

Pour chaque ligne, la modalité (ici la zone) est remplacée par une statistique de la cible, en pratique une moyenne lissée, calculée seulement sur les lignes précédentes de même modalité. La ligne ne voit jamais sa propre cible : pas de fuite.

3. On empile des arbres symétriques

Les arbres posent la même question à tous les nœuds d'un même étage. Ils sont moins souples mais plus stables, et très rapides en prédiction. Comme tout boosting, chacun corrige l'erreur restante.

LE CAS MÉTIER

implantation · retail / réseaux d'agences
EN ENTRÉE

Une ligne par magasin

Surface, budget publicitaire local, nombre de concurrents, zone d'implantation (centre-ville, périphérie, rural) laissée en texte. La cible : le chiffre d'affaires annuel en k€.

EN SORTIE

Le CA attendu d'un projet d'ouverture

Le modèle chiffre un projet décrit par les mêmes variables. L'équipe développement compare plusieurs sites candidats avant d'engager un bail.

CE QU'ON MESURE

L'erreur moyenne en k€

La MAE (erreur absolue moyenne) se lit directement : « on se trompe en moyenne de tant de k€ par magasin ». Comparez-la toujours à une régression linéaire : sur ce jeu, les relations sont presque linéaires et le boosting n'a pas d'avantage net.

QUAND LE SORTIR, QUAND L'ÉVITER

OUI

  • Beaucoup de variables catégorielles : enseigne, région, canal, code produit
  • Catégories à nombreuses modalités où le one-hot créerait des centaines de colonnes
  • Besoin d'un bon modèle sans passer des jours sur les réglages
  • Prédiction à très faible latence en production, grâce aux arbres symétriques

NON

  • Relations simples et peu de lignes : une régression linéaire fait aussi bien et s'explique mieux
  • Des dizaines de millions de lignes et des variables toutes numériques : LightGBM entraîne plus vite
  • Décision à justifier variable par variable : préférer une régression ou un arbre
  • Environnement R sans possibilité d'installer un paquet hors CRAN : utiliser xgboost ou lightgbm
LES 4 RÉGLAGES QUI COMPTENT

Noms identiques en R (catboost.train) et en Python (CatBoostRegressor). Le paquet R s'installe depuis les versions publiées par CatBoost, pas depuis le CRAN.

cat_features

La liste des colonnes catégorielles. En Python, on les nomme ; en R, les colonnes de type facteur sont prises comme catégorielles. Oublier ce réglage revient à perdre l'intérêt de CatBoost.

iterations + learning_rate

Nombre d'arbres (1 000 par défaut) et pas d'apprentissage. Par défaut, le pas est choisi automatiquement selon la taille des données. Avec un jeu de validation, use_best_model garde le meilleur nombre d'arbres.

depth

La profondeur des arbres symétriques, 6 par défaut. Entre 4 et 8 en général. Un arbre de profondeur 6 a toujours 64 feuilles, d'où l'intérêt de rester modéré sur les petits jeux.

one_hot_max_size

En dessous de ce nombre de modalités, la variable est encodée en indicatrices 0 / 1 plutôt qu'en statistiques ordonnées. Utile à ajuster pour des variables à quelques modalités, comme la zone ici.

LE CODE MINIMAL

jeu d'exemple : magasins.csv ↓
# CA des magasins : CatBoost en R
library(catboost)

# stringsAsFactors : la zone devient un facteur, que CatBoost traite comme catégorielle
magasins <- read.csv("magasins.csv", stringsAsFactors = TRUE)
variables <- c("surface_m2", "budget_pub_k", "nb_concurrents", "zone")

set.seed(42)
idx <- sample(nrow(magasins), round(0.75 * nrow(magasins)))
pool_train <- catboost.load_pool(magasins[idx, variables], label = magasins$ca_k[idx])
pool_test <- catboost.load_pool(magasins[-idx, variables], label = magasins$ca_k[-idx])

modele <- catboost.train(pool_train, params = list(loss_function = "RMSE", iterations = 800,
                         learning_rate = 0.05, depth = 4, random_seed = 42, logging_level = "Silent"))

# Erreur moyenne en k€ sur les magasins jamais vus
pred <- catboost.predict(modele, pool_test)
cat("Erreur moyenne (MAE) :", round(mean(abs(pred - magasins$ca_k[-idx])), 1), "k€\n")
print(catboost.get_feature_importance(modele, pool_train))

# Prévision pour un projet d'ouverture
projet <- data.frame(surface_m2 = 1500, budget_pub_k = 15, nb_concurrents = 3,
                     zone = factor("peripherie", levels = levels(magasins$zone)))
cat("CA prévu du projet :", round(catboost.predict(modele, catboost.load_pool(projet))), "k€\n")

QUESTIONS FRÉQUENTES

Faut-il encoder les variables catégorielles avec CatBoost ?

Non. On déclare les colonnes catégorielles et CatBoost les convertit lui-même, par statistiques ordonnées sur la cible ou par one-hot si la variable a très peu de modalités. C'est son principal avantage sur les autres boostings.

CatBoost, XGBoost ou LightGBM ?

Les trois donnent des performances proches une fois réglés. CatBoost se distingue avec des variables catégorielles nombreuses et des réglages par défaut solides. LightGBM est le plus rapide sur de très gros volumes ; XGBoost est le plus répandu dans les outils.

Qu'est-ce que le target encoding et pourquoi CatBoost l'ordonne-t-il ?

Le target encoding remplace une catégorie par la moyenne de la cible dans cette catégorie. Calculé naïvement, il utilise la cible de la ligne elle-même et le modèle surapprend. CatBoost ne calcule cette moyenne que sur les lignes précédentes d'une permutation aléatoire, ce qui supprime cette fuite.

LES ALGOS VOISINS

à comparer avant de choisir
plus rapide

LightGBM

Le boosting des gros volumes. Gère aussi les catégorielles, avec plus de risque de surapprentissage quand les modalités sont nombreuses.

Voir la fiche →
le plus répandu

XGBoost

Le boosting le plus présent dans les outils. Les catégorielles y demandent en général un encodage préalable.

Voir la fiche →
la référence à battre

Régression linéaire

Sur des relations presque linéaires comme ce CA de magasins, elle fait jeu égal et chaque coefficient se lit en k€.

Voir la fiche →
— formation

Passer de la fiche à la pratique

Dataistudio forme les équipes au machine learning et à l'IA, sur des cas concrets.

Voir les formations →