26 · Gradient boosting: ajuste de residuos y tasa de aprendizaje
Ajusta cada nuevo árbol a los ERRORES RESIDUALES del ensemble actual — descenso de gradiente en espacio de funciones, un aprendiz débil a la vez.
Ajusta cada nuevo árbol a los ERRORES RESIDUALES del ensemble actual — descenso de gradiente en espacio de funciones, un aprendiz débil a la vez.
Sin esto:
Sin gradient boosting estarías limitado a la precisión de random forest; gradient boosting es lo que desbloquea la cima del leaderboard de ML tabular.
AdaBoost nos mostró que el aprendizaje secuencial funciona: cada nuevo aprendiz se enfoca en lo que los anteriores erraron. Gradient Boosting generaliza esta idea de forma elegante — en lugar de repoderar muestras, ajusta cada nuevo árbol directamente a los errores residuales (gradientes negativos de la función de pérdida) del ensemble actual.
Piénsalo como descenso de gradiente en espacio de funciones. En el descenso de gradiente ordinario actualizas un vector de pesos. En gradient boosting actualizas una función — el ensemble mismo — agregando un nuevo árbol que apunta en la dirección de descenso más pronunciado de la pérdida.
El algoritmo (regresión, pérdida cuadrática)
- Inicializar: F₀(x) = media(y) — el predictor constante más simple.
- Para t = 1, 2, ..., T: a. Calcula gradientes negativos (= residuos para pérdida cuadrática): rᵢ = yᵢ − Fₜ₋₁(xᵢ) b. Ajusta un árbol poco profundo hₜ para predecir los residuos rᵢ. c. Actualizar: Fₜ(x) = Fₜ₋₁(x) + η · hₜ(x) donde η es la tasa de aprendizaje (encogimiento).
- Predicción final: Fₜ(x).
Hiperparámetros clave
| Parámetro | Rango típico | Efecto |
|---|---|---|
| n_estimators | 100–2000 | Más árboles → mejor ajuste, riesgo de sobreajuste |
| learning_rate (η) | 0.01–0.3 | η más pequeño → necesita más árboles, pero generaliza mejor |
| max_depth | 3–8 | Más superficial que RF — el ensemble hace el trabajo pesado |
El tradeoff learning_rate / n_estimators: reducir η a la mitad y duplicar n_estimators típicamente da el mismo o mejor error de test, al doble del costo de entrenamiento. El η "correcto" usualmente se encuentra con grid search u Optuna.
API de sklearn: GradientBoostingRegressor y GradientBoostingClassifier. Ambos exponen staged_predict — un iterador que produce predicciones en cada etapa de boosting, permitiendo monitorear la curva de aprendizaje sin reentrenar.
Python (in browser)
Cada panel muestra la predicción acumulada del ensemble tras 0, 1, 2 y 3 iteraciones de boosting. La base plana (media de y) se refina progresivamente cuando árboles de profundidad-3 sucesivos ajustan los residuos. Observa cómo el RMSE cae en cada paso — gradient boosting en su forma más pura.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`GradientBoostingRegressor(n_estimators=200, learning_rate=0.05, max_depth=3)` generalmente supera tanto a un árbol profundo único como a un Random Forest en problemas de regresión suaves. La clave: GB controla simultáneamente el sesgo (con más estimadores) y la varianza (con árboles poco profundos + tasa de aprendizaje pequeña).
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Las tasas de aprendizaje más pequeñas necesitan más árboles para converger, pero generalizan mejor — especialmente con muchos `n_estimators`. Un η grande (0.5) puede sobrepasarse y empeorar con más árboles debido al aumento de varianza. El punto óptimo suele ser η ∈ [0.05, 0.1] con 200–500 árboles.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
`staged_predict` produce predicciones del conjunto de test en cada etapa de boosting. Graficar la precisión del test vs el número de etapa te muestra exactamente dónde agregar más árboles deja de ayudar — este es el equivalente de gradient boosting al 'early stopping'. El `n_estimators` óptimo es la etapa con mayor precisión en test.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Gradient boosting no está restringido al error cuadrático. Cualquier pérdida diferenciable produce un algoritmo válido — el árbol en cada paso ajusta el gradiente negativo de esa pérdida específica. Esto hace que GB sea aplicable a regresión cuantil, regresión robusta y clasificación bajo un único framework unificado.
En gradient boosting de regresión con pérdida cuadrática, ¿qué predice cada nuevo árbol?
- Gradient boosting ajusta cada nuevo árbol a los RESIDUOS (gradientes negativos de la pérdida) del ensemble actual — es descenso de gradiente en espacio de funciones.
- La tasa de aprendizaje η reduce la contribución de cada árbol; η más pequeño + más árboles típicamente supera a η más grande + menos árboles — a costa de tiempo de entrenamiento.
- Los árboles en GB deben ser SUPERFICIALES (profundidad 3–8) — los árboles individuales son intencionalmente débiles; el ensemble hace el trabajo expresivo.
- `staged_predict` te permite monitorear la curva de aprendizaje y elegir el `n_estimators` óptimo sin reentrenar — el equivalente de early stopping en GB.
- GB NO es paralelizable entre árboles (cada uno depende del anterior) — es más lento que RF con la misma cantidad de árboles. XGBoost y LightGBM compensan con optimizaciones de ingeniería en la construcción individual de árboles.
El algoritmo dominante para ML tabular — competiciones de Kaggle, detección de fraude, predicción de tasa de clics, pronóstico de demanda, todos usan gradient boosting. XGBoost, LightGBM y CatBoost son implementaciones de gradient boosting.
Si lo quitas: Llegarías al techo del random forest y perderías la categoría de algoritmo que gana el 80% de las competencias de ML tabular.