XGBoost (Extreme Gradient Boosting) construye árboles uno tras otro, donde cada árbol nuevo se especializa en corregir los errores que dejaron los anteriores. En lugar de votar en paralelo como Random Forest, aquí los árboles colaboran en secuencia.
Boosting: aprender de los errores
La idea del boosting es sencilla y poderosa. Empezamos con una predicción tosca y la vamos mejorando sumando árboles pequeños, cada uno enfocado en lo que aún falla:
donde cada es un árbol y es el número total. Los árboles se agregan de forma aditiva: en el paso , el modelo ya construido se mantiene fijo y solo se aprende .
El gradiente como brújula
¿Cómo sabe cada árbol nuevo hacia dónde ir? Mirando el gradiente de la función de pérdida: la dirección en la que el error disminuye más rápido. Cada árbol se ajusta a esos residuos (los errores del modelo actual). De ahí el nombre gradient boosting.
XGBoost afina esta idea usando una aproximación de segundo orden (gradiente y curvatura) y añadiendo un término de regularización que penaliza árboles demasiado complejos:
Ese control extra sobre la complejidad es parte de por qué XGBoost gana tantas competencias.
La tasa de aprendizaje
Un hiperparámetro clave es la tasa de aprendizaje (learning rate), que encoge la contribución de cada árbol:
- pequeña (p. ej. ): pasos cautelosos, necesita más árboles pero generaliza mejor.
- grande: aprende rápido, pero corre el riesgo de pasarse.
Es el clásico intercambio entre velocidad y estabilidad.
Random Forest vs. XGBoost
| Random Forest | XGBoost | |
|---|---|---|
| Estrategia | Bagging (paralelo) | Boosting (secuencial) |
| Cada árbol | Independiente | Corrige al anterior |
| Reduce sobre todo | Varianza | Sesgo |
| Ajuste | Fácil, robusto | Requiere más cuidado |
En código
La librería xgboost ofrece una interfaz idéntica a la de scikit-learn. Los hiperparámetros clave son la tasa de aprendizaje y la regularización:
from xgboost import XGBClassifier
modelo = XGBClassifier(
n_estimators=400,
learning_rate=0.05, # η: pasos pequeños → necesita más árboles, generaliza mejor
max_depth=4, # árboles poco profundos, para no sobreajustar
reg_lambda=1.0, # regularización L2 (el término Ω sobre las hojas)
).fit(X_train, y_train)
modelo.predict(X_test)
learning_rate y n_estimators van de la mano: al bajar uno, sube el otro. Se afinan con validación cruzada.
Para llevar
XGBoost es boosting de gradiente regularizado: árboles secuenciales que corrigen errores previos, guiados por el gradiente de la pérdida y frenados por la tasa de aprendizaje. Suele ofrecer la mayor precisión en datos tabulares, a cambio de un ajuste más delicado. Ya tenemos tres modelos; ahora toca evaluarlos bien.
