XGBoost
XGBoost è una libreria di gradient boosting che aggiunge alberi decisionali regolarizzati uno alla volta ed è una delle scelte migliori per i dati tabulari. Come funziona, con codice.
XGBoost (potenziamento estremo del gradiente) è una libreria open source per gli alberi decisionali potenziati con gradient boosting, nonché uno degli strumenti più diffusi per i dati tabellari. Tianqi Chen l'ha avviata come progetto di ricerca all'Università di Washington e l'ha pubblicata nel 2014; l'articolo KDD del 2016 XGBoost: un sistema scalabile di potenziamento degli alberi, scritto con Carlos Guestrin, ne descrive l'obiettivo regolarizzato e la progettazione del sistema. La libreria, gestita dalla community DMLC, supporta classificazione, regressione e ranking da Python, R, JVM e C, funziona su CPU e GPU e può essere distribuita su più nodi con Dask e Spark. L'articolo riporta che 17 delle 29 soluzioni vincitrici di competizioni pubblicate sul blog di Kaggle nel 2015 usavano XGBoost.
Come funziona XGBoost#
XGBoost costruisce un ensemble in modo sequenziale: parte da una previsione costante e aggiunge un albero per ogni iterazione di boosting, ciascuno addestrato per ridurre la funzione di perdita lasciata dagli alberi precedenti. La previsione finale somma gli output degli alberi, ciascuno ridotto mediante il tasso di apprendimento (eta, 0.3 per impostazione predefinita), così che nessun singolo albero prevalga. Due idee dell'articolo definiscono il modo in cui viene costruito ciascun albero:
- Obiettivo del secondo ordine: per ogni riga, XGBoost calcola le derivate prima e seconda della funzione di perdita rispetto alla previsione corrente: il gradiente
ge l'Hessianah. Una foglia le cui righe hanno una somma dei gradientiGe una somma delle HessianeHriceve il peso-G / (H + λ), lo stesso passo di Newton eseguito dagli ottimizzatori del secondo ordine. - Alberi regolarizzati: l'obiettivo aggiunge una penalità
γper foglia e una penalità L2λsui pesi delle foglie, oltre a una penalità L1 facoltativaα. Una divisione viene mantenuta solo quando il suo guadagno,½ [G_L²/(H_L + λ) + G_R²/(H_R + λ) − (G_L + G_R)²/(H_L + H_R + λ)] − γ, è positivo: in questo modo la regolarizzazione è integrata nella costruzione degli alberi e si limita l'overfitting.
Gli alberi hanno una profondità limitata (max_depth, 6 per impostazione predefinita) e crescono livello per livello, a meno che grow_policy="lossguide" non attivi la crescita foglia per foglia. L'addestramento viene in genere eseguito con early stopping su un set di validazione:
Valori mancanti, velocità e scalabilità#
La ricerca delle divisioni di XGBoost, consapevole della sparsità, si addestra su tabelle con valori mancanti senza una fase di imputazione. A ogni divisione prova a inviare a sinistra e poi a destra le righe con un valore mancante, mantiene la direzione con il guadagno più alto come ramo predefinito del nodo e usa lo stesso meccanismo per esaminare solo le voci memorizzate nelle matrici sparse, come quelle delle codifiche one-hot. Questo esempio nasconde il 30% di tutti i valori delle feature nel dataset sul cancro al seno di scikit-learn e si addestra direttamente sui valori mancanti:
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}")Stampa un'accuratezza di test pari a 0.972 sui dati completi e a 0.951 con il 30% dei valori mancanti sia nei dati di addestramento sia nei set di test.
Per velocizzare l'addestramento, il metodo ad albero predefinito hist suddivide ogni feature in un massimo di 256 intervalli (max_bin) e cerca le divisioni ai confini degli intervalli, come fa LightGBM; exact, invece, esamina ogni valore ordinato. Impostando device="cuda" si sposta l'addestramento su una GPU NVIDIA; enable_categorical=True suddivide le colonne categoriche in modo nativo, mentre la modalità con memoria esterna permette di addestrarsi su dataset più grandi della RAM. Dalla versione 2.1, i modelli vengono salvati per impostazione predefinita nel formato binario UBJSON.
XGBoost e i metodi correlati#
- LightGBM: framework di boosting di Microsoft del 2016, che fa crescere gli alberi foglia per foglia per impostazione predefinita e aggiunge il campionamento delle righe basato sul gradiente e il raggruppamento delle feature sparse. Oggi entrambe le librerie usano gli istogrammi per impostazione predefinita e condividono la maggior parte delle tecniche.
- CatBoost: libreria di boosting di Yandex, che costruisce alberi simmetrici e codifica le feature categoriche con statistiche del target ordinate.
- Foresta casuale: metodo di bagging che addestra alberi profondi in modo indipendente su campioni bootstrap e ne calcola la media, riducendo la varianza e richiedendo poche regolazioni.
- Deep learning: lo standard per input non strutturati come immagini, audio e testo, in cui le reti apprendono le feature dai dati grezzi. Sulle tabelle di feature progettate manualmente, gli alberi potenziati restano il riferimento da battere; i modelli fondamentali per dati tabellari, come TabPFN, competono ormai con loro sui dataset piccoli.
Applicazioni nel mondo reale#
- Rilevamento delle frodi e rischio di credito: le società di pagamento assegnano un punteggio a ogni transazione usando feature quali importo, esercente, posizione, dispositivo e cronologia del conto: un compito fondamentale di modellazione predittiva in cui l'inferenza rapida di XGBoost si adatta alle decisioni in tempo reale.
- Ispezione visiva: I sistemi di controllo qualità manifatturieri combinano dati di telecamere e sensori. Le previsioni di Ultralytics YOLO26 forniscono i dati delle telecamere:
result.summary()restituisce la classe, la confidenza e le coordinate del riquadro di ogni difetto rilevato; uno stabilimento può aggregarle per pezzo e unirle alle letture di temperatura e pressione, usandole come caratteristiche per un modello XGBoost che prevede i guasti. - Ranking e previsione dei clic:
XGBRankersi addestra per impostazione predefinita con l'obiettivorank:ndcgper ordinare i risultati di ricerca, mentre i classificatori binari prevedono i tassi di clic sugli annunci. - Problemi che hanno vinto competizioni: l'articolo KDD elenca i compiti alla base delle soluzioni vincitrici del 2015, tra cui la previsione delle vendite dei negozi, la classificazione degli eventi di fisica delle alte energie, la classificazione del malware e la previsione dell'abbandono dei corsi online su larga scala.










