CatBoost es un modelo de arboles por boosting desarrollado por Yandex, especialmente potente con variables categoricas. Con estadisticas objetivo ordenadas y arboles simetricos (oblivious), logra buena precision con poco preprocesamiento.
Converge rapido incluso con tasas de aprendizaje bajas y es robusto a valores faltantes y cambios de distribucion, por lo que se usa mucho en produccion y competencias.
1. Como funciona CatBoost #
Codificacion de categorias
Usa Ordered Target Statistics al barajar los datos y actualizar promedios de forma secuencial, evitando leakage y limitaciones del one-hot o label encoding.Arboles oblivious
Cada nivel usa la misma caracteristica y umbral, creando (2^d) hojas en la profundidad (d). Es eficiente en GPU y rapido en inferencia.Ordered boosting
Estima gradientes con diferentes permutaciones para reducir overfitting y mejorar la estabilidad.Funciones ricas
Soporta pesos de clases, texto, restricciones monotoneas y metricas combinadas.
2. Entrenar un clasificador en Python #
from catboost import CatBoostClassifier, Pool
from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report, roc_auc_score
# Datos de credito (categoricas y numericas)
data = fetch_openml(name="credit-g", version=1, as_frame=True)
X = data.data
y = (data.target == "good").astype(int)
categorical_features = X.select_dtypes(include="category").columns.tolist()
X_train, X_valid, y_train, y_valid = train_test_split(
X, y, test_size=0.2, stratify=y, random_state=42
)
train_pool = Pool(
X_train,
label=y_train,
cat_features=categorical_features,
)
valid_pool = Pool(X_valid, label=y_valid, cat_features=categorical_features)
model = CatBoostClassifier(
depth=6,
iterations=1000,
learning_rate=0.03,
loss_function="Logloss",
eval_metric="AUC",
random_seed=42,
early_stopping_rounds=50,
verbose=100,
)
model.fit(train_pool, eval_set=valid_pool, use_best_model=True)
proba = model.predict_proba(X_valid)[:, 1]
pred = (proba >= 0.5).astype(int)
print("ROC-AUC:", roc_auc_score(y_valid, proba))
print(classification_report(y_valid, pred, digits=3))
Solo hay que pasar las columnas categoricas al Pool; el target encoding se aplica
internamente.
3. Hiperparametros principales #
| Parametro | Rol / consejos |
|---|---|
depth | Profundidad del arbol. En arboles oblivious, depth=6 da 64 hojas. Profundidades altas aumentan capacidad pero tambien overfitting. |
iterations | Numero de iteraciones. Usar con early_stopping_rounds. |
learning_rate | Tasas pequenas suelen mejorar precision, pero requieren mas iteraciones. |
l2_leaf_reg | Regularizacion L2 en hojas; valores altos suavizan el modelo. |
border_count | Numero de bins para numericos (default 254). Menos bins es mas rapido pero menos preciso. |
bagging_temperature | Controla aleatoriedad del muestreo; cerca de 0 es determinista. |
class_weights | Ajusta pesos de clase para datos desbalanceados. |
4. Importancia de variables y SHAP #
importance = model.get_feature_importance(type="PredictionValuesChange")
for name, score in sorted(zip(X.columns, importance), key=lambda x: -x[1])[:10]:
print(f"{name}: {score:.3f}")
shap_values = model.get_feature_importance(valid_pool, type="ShapValues")
# shap_values[:, -1] es el baseline; matplotlib puede graficar resumentes.
PredictionValuesChangemide el cambio en predicciones; el signo indica direccion.- Los valores SHAP se obtienen con
type="ShapValues"y sirven para explicar ejemplos.
5. Tecnicas propias de CatBoost #
- Combinaciones de categorias:
one_hot_max_sizeycombinations_ctypescrean interacciones. - Texto:
text_featuresytext_processing(TF-IDF, BM25). - Restricciones monotoneas:
monotone_constraintspara modelos de precio o riesgo. - CV integrado:
cvejecuta validacion cruzada adaptada al ordered boosting.
6. Cuando elegir CatBoost #
- Datos mayormente categoricos y poco preprocesamiento → CatBoost.
- Datos numericos y muchas iteraciones rapidas → LightGBM suele ser mas veloz.
- Datos dispersos y grandes →
DMatrixde XGBoost puede ser eficiente. - En ensambles, añadir CatBoost mejora robustez en categorias.
7. Resumen #
- CatBoost procesa categorias automaticamente y estabiliza el entrenamiento con ordered boosting.
- El balance entre
depth,iterations,learning_rateyl2_leaf_reges clave. - SHAP y soporte de texto lo hacen muy util dentro de un ensemble.