CatBoost
CatBoost es una biblioteca de boosting por gradiente de código abierto de Yandex que codifica las características categóricas mediante estadísticas ordenadas del objetivo y construye árboles simétricos.
CatBoost es una biblioteca de código abierto de aumento de gradiente para árboles de decisión, desarrollada por Yandex y publicada en 2017. Su nombre procede de «aumento categórico»: acepta columnas categóricas, como la ciudad, el identificador del producto o el tipo de dispositivo, en forma de cadenas sin procesar y las convierte internamente en números, por lo que los datos tabulares no necesitan codificación manual one-hot ni codificación del objetivo antes del entrenamiento. Dos ideas de su artículo de NeurIPS de 2018, las estadísticas ordenadas del objetivo y el aumento ordenado, evitan que cada fila de entrenamiento aporte su propia etiqueta a los números que se usan para ajustarla; esa filtración sesga tanto la codificación simple del objetivo como el aumento estándar. CatBoost se entrena en CPU y GPU, ofrece interfaces para Python, R y la línea de comandos, y permite clasificación, regresión y clasificación por orden.
Cómo codifica CatBoost las características categóricas#
La codificación one-hot crea una columna por categoría, lo que resulta poco manejable para características con miles de valores, como el identificador de un comercio o de un usuario. La codificación del objetivo sustituye cada categoría por la etiqueta media de sus filas. Es compacta, pero filtra la respuesta: la etiqueta de una fila forma parte del número que la describe, así que el modelo aprende un atajo que falla con datos nuevos. Se trata de una forma de filtración de datos que se manifiesta como sobreajuste, sobre todo en las categorías poco frecuentes.
Las estadísticas ordenadas del objetivo de CatBoost resuelven este problema mediante una permutación aleatoria de las filas de entrenamiento. La categoría de cada fila se codifica usando solo las etiquetas de las filas que la preceden en la permutación, con suavizado hacia un valor previo, de modo que ninguna fila llega a ver su propia etiqueta. CatBoost repite el proceso con varias permutaciones, aplica codificación one-hot a las características con muy pocos valores distintos y construye de forma codiciosa combinaciones de características categóricas —por ejemplo, ciudad y tipo de dispositivo— como nuevas características durante el entrenamiento.
En el paquete de CatBoost para Python, las columnas categóricas se indican por nombre mediante cat_features. En este ejemplo, cada uno de 50 planes de suscripción tiene una tasa de cancelación propia que no se muestra, y se comprueba si el modelo recupera las tasas a partir de los nombres originales de los planes:
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))El script imprime tasas reales de 0.05 y 0.60, y tasas predichas de 0.06 y 0.59. El modelo recuperó la tasa de cancelación de cada plan a partir de la columna de cadenas original, con solo unas 100 filas de entrenamiento por plan.
Aumento ordenado y árboles simétricos#
El aumento de gradiente estándar calcula los objetivos de cada nuevo árbol —los gradientes de la función de pérdida— con las mismas filas con las que se ajustaron los árboles anteriores, lo que sesga esos gradientes; los autores de CatBoost llaman a este efecto desplazamiento de predicción. El aumento ordenado vuelve a aplicar el truco de la permutación: el gradiente de cada fila procede de un modelo entrenado únicamente con filas anteriores en la permutación. Es una opción de entrenamiento, boosting_type="Ordered", que suele mejorar la calidad en conjuntos de datos pequeños a costa de la velocidad. La opción predeterminada en CPU es el método clásico "Plain", y el entrenamiento en GPU usa "Ordered" de forma predeterminada en conjuntos de hasta 50 000 filas, salvo en el modo multiclase.
De forma predeterminada, CatBoost crea árboles simétricos, u oblivious, en los que todos los nodos de una misma profundidad usan la misma condición de división. Por tanto, un árbol de profundidad 6 —el valor predeterminado— consta de seis pruebas de sí o no cuyas respuestas forman un índice de 6 bits para acceder a 64 hojas. Esto agiliza la predicción y limita la complejidad de cada árbol, lo que constituye una forma de regularización. El parámetro grow_policy permite cambiar al crecimiento por niveles o por hojas cuando un conjunto de datos necesita árboles menos restringidos.
Aplicaciones en el mundo real#
- Riesgo crediticio: Los prestamistas combinan campos categóricos de los solicitantes, como la profesión, la región y el propósito del préstamo, con cifras numéricas de ingresos y deudas para predecir impagos, sin aplicar codificación one-hot a cientos de códigos de profesión.
- Clasificación por orden y recomendaciones: CatBoost ofrece funciones de pérdida para clasificación por orden, como YetiRank, que se usa para ordenar resultados de búsqueda o productos según la relevancia predicha a partir de características de usuario, artículo y contexto en un sistema de recomendación.
- Valoración de inmuebles: Un detector YOLO26 entrenado a medida puede contar elementos como piscinas o paneles solares en las fotos de los anuncios, y esos recuentos se incorporan a un modelo de precios de CatBoost como columnas numéricas, junto a las categóricas, como el barrio y el tipo de inmueble.
CatBoost frente a XGBoost y LightGBM#
Las tres bibliotecas construyen secuencialmente un conjunto de modelos de árboles; cada árbol corrige los errores de los anteriores. Esto las diferencia de los bosques aleatorios, cuyos árboles se entrenan de forma independiente.
- XGBoost: De forma predeterminada, construye árboles nivel por nivel y añade regularización L1 y L2 a su función objetivo. Las versiones posteriores incorporaron compatibilidad nativa con variables categóricas, aunque muchas canalizaciones siguen codificando las categorías antes del entrenamiento.
- LightGBM: Construye árboles por hojas y divide la hoja que más reduce la pérdida; además, agrupa las características en histogramas, lo que le permite ser rápido con conjuntos de datos grandes. También acepta de forma nativa columnas categóricas codificadas como enteros.
- CatBoost: Construye árboles simétricos, codifica las categorías mediante estadísticas ordenadas del objetivo y ofrece buenos resultados sin necesidad de ajustar hiperparámetros. De forma predeterminada, usa 1000 árboles de profundidad 6 y elige automáticamente la tasa de aprendizaje según el número de iteraciones para las funciones objetivo de pérdida logarítmica, multiclase y RMSE.










