CatBoost
CatBoost è la libreria open source di gradient boosting di Yandex, che codifica le caratteristiche categoriche con statistiche target ordinate e fa crescere alberi simmetrici.
CatBoost è una libreria open source di gradient boosting per alberi decisionali, sviluppata da Yandex e rilasciata nel 2017. Il nome deriva da "categorical boosting": accetta colonne categoriche, come città, ID prodotto o tipo di dispositivo, come stringhe grezze e le converte internamente in numeri, così i dati tabellari non richiedono codifica one-hot o codifica target manuale prima dell'addestramento. Due idee del paper NeurIPS 2018, le statistiche target ordinate e il boosting ordinato, evitano che ogni riga di addestramento contribuisca con la propria etichetta ai numeri usati per adattare il modello: una perdita di dati che introduce bias sia nella codifica target semplice sia nel boosting standard. CatBoost si addestra su CPU e GPU, include interfacce per Python, R e riga di comando e gestisce classificazione, regressione e ranking.
Come CatBoost codifica le caratteristiche categoriche#
La codifica one-hot crea una colonna per categoria, diventando ingombrante per una caratteristica con migliaia di valori, come un commerciante o un ID utente. La codifica target sostituisce ogni categoria con la media delle etichette delle relative righe: è compatta, ma causa una perdita di dati, perché l'etichetta di una riga contribuisce al numero che la descrive e il modello impara una scorciatoia che non funziona con dati nuovi. È una forma di data leakage che si manifesta come overfitting, soprattutto per le categorie rare.
Le statistiche target ordinate di CatBoost risolvono il problema usando una permutazione casuale delle righe di addestramento. La categoria di ogni riga viene codificata usando solo le etichette delle righe che la precedono nella permutazione, con una regolarizzazione verso un valore a priori: nessuna riga vede mai la propria etichetta. CatBoost ripete l'operazione su più permutazioni, applica la codifica one-hot alle caratteristiche con pochissimi valori distinti e costruisce in modo greedy combinazioni di caratteristiche categoriche, ad esempio città e tipo di dispositivo, come nuove caratteristiche durante l'addestramento.
Nel pacchetto CatBoost per Python, le colonne categoriche vengono passate tramite il nome usando cat_features. Questo esempio assegna a ciascuno di 50 piani di abbonamento un tasso di abbandono nascosto e verifica se il modello riesce a ricavare i tassi dai nomi grezzi dei piani:
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))Lo script stampa tassi reali di 0,05 e 0,60 e tassi previsti di 0,06 e 0,59. Il modello ha ricavato il tasso di abbandono di ciascun piano dalla colonna di stringhe grezze, con solo circa 100 righe di addestramento per piano.
Boosting ordinato e alberi simmetrici#
Il gradient boosting standard calcola i target per ogni nuovo albero, cioè i gradienti della loss, sulle stesse righe usate per addestrare gli alberi precedenti, introducendo un bias nei gradienti: un effetto che gli autori di CatBoost chiamano spostamento delle previsioni. Il boosting ordinato applica di nuovo il trucco della permutazione: il gradiente di ogni riga deriva da un modello addestrato solo sulle righe precedenti nella permutazione. È un'opzione di addestramento, boosting_type="Ordered", che di solito migliora la qualità sui dataset piccoli a scapito della velocità. L'impostazione predefinita per la CPU è lo schema classico "Plain"; l'addestramento su GPU usa per impostazione predefinita "Ordered" per dataset fino a 50.000 righe, tranne in modalità multiclasse.
Per impostazione predefinita, CatBoost costruisce alberi simmetrici, o oblivious, in cui ogni nodo alla stessa profondità usa la stessa condizione di suddivisione. Un albero di profondità 6, il valore predefinito, consiste quindi in sei test sì/no, le cui risposte formano un indice di 6 bit per accedere a 64 foglie: questo rende rapide le previsioni e limita la complessità di ciascun albero, una forma di regolarizzazione. Il parametro grow_policy passa alla crescita per profondità o per foglia quando il dataset richiede alberi meno vincolati.
Applicazioni nel mondo reale#
- Rischio di credito: gli istituti di credito combinano campi categorici del richiedente, come professione, area geografica e finalità del prestito, con valori numerici di reddito e debito per prevedere un mancato rimborso, senza codificare one-hot centinaia di codici professionali.
- Ranking e sistemi di raccomandazione: CatBoost offre loss di ranking come YetiRank, usate per ordinare risultati di ricerca o prodotti in base alla pertinenza prevista a partire da caratteristiche di utente, elemento e contesto in un sistema di raccomandazione.
- Valutazione immobiliare: un rilevatore YOLO26 addestrato su misura può contare servizi come piscine o pannelli solari nelle foto degli annunci; questi conteggi vengono inseriti come colonne numeriche in un modello di prezzo CatBoost, accanto a colonne categoriche come quartiere e tipo di immobile.
CatBoost vs. XGBoost e LightGBM#
Tutte e tre le librerie costruiscono in sequenza un ensemble di alberi, ciascuno dei quali corregge gli errori degli alberi precedenti: è questo che le distingue dal random forest, i cui alberi vengono addestrati in modo indipendente.
- XGBoost: per impostazione predefinita costruisce gli alberi livello per livello e aggiunge regolarizzazione L1 e L2 alla funzione obiettivo. Il supporto nativo per le caratteristiche categoriche è stato introdotto nelle versioni successive, ma molte pipeline continuano a codificare le categorie prima dell'addestramento.
- LightGBM: costruisce gli alberi foglia per foglia, suddividendo la foglia che riduce maggiormente la loss, e raggruppa le caratteristiche in istogrammi, risultando veloce sui dataset di grandi dimensioni. Accetta anche colonne categoriche codificate come interi in modo nativo.
- CatBoost: costruisce alberi simmetrici, codifica le categorie con statistiche target ordinate e offre risultati solidi senza ottimizzazione degli iperparametri. Le impostazioni predefinite prevedono 1.000 alberi di profondità 6, con un tasso di apprendimento scelto automaticamente in base al numero di iterazioni per gli obiettivi di log loss, multiclasse e RMSE.










