22 · Bagging: bootstrap aggregating y error out-of-bag
Entrena muchos modelos de alta varianza sobre muestras bootstrap y promedía — la varianza cae mientras el sesgo se mantiene y la generalización mejora.
Entrena muchos modelos de alta varianza sobre muestras bootstrap y promedia sus predicciones — la varianza cae, el sesgo se mantiene y la precisión sube.
Sin esto:
Sin bagging estarías atascado con modelos de alta varianza que sobreajustan, o modelos de alto sesgo que subajustan.
Un único árbol de decisión profundo es el ejemplo clásico de un modelo de alta varianza: volver a entrenarlo en un dataset ligeramente diferente puede cambiar la estructura dramáticamente. El árbol memoriza el ruido del entrenamiento, por lo que la precisión en test sufre.
Bagging (Bootstrap Aggregating) es la técnica de reducción de varianza más simple del machine learning. La idea es sorprendentemente directa:
- Extrae B muestras bootstrap — cada una de tamaño n, muestreada con reemplazo de las n filas de entrenamiento originales.
- Entrena un modelo base separado en cada muestra bootstrap de forma independiente (trivialmente paralelizable).
- Agrega predicciones: promedio para regresión; voto mayoritario para clasificación.
¿Por qué funciona?
Si los B modelos base hacen predicciones independientes, cada una con varianza σ², su promedio tiene varianza σ²/B. Los modelos base reales no son independientes (todos se entrenan con datos solapados), por lo que la reducción de varianza es menor que 1/B — pero sigue siendo sustancial.
Error out-of-bag (OOB)
Como cada muestra bootstrap contiene solo el ~63.2% de las filas originales (en promedio), el ~36.8% restante nunca fue visto por ese modelo en particular. Estas son las muestras out-of-bag (OOB). Para cada fila de entrenamiento, agrega predicciones de los modelos que NO la vieron — esto da una estimación gratuita de calidad comparable a validación cruzada del error de generalización, sin necesitar un conjunto de validación separado.
API de sklearn
BaggingClassifier(estimator=..., n_estimators=100, oob_score=True) y BaggingRegressor envuelven cualquier estimador compatible con sklearn.
Python (in browser)
Un árbol de decisión crecido sin límite de profundidad logra precisión de entrenamiento perfecta creando una hoja única para cada patrón de entrenamiento — pero esta memorización no generaliza. La gran brecha entre precisión de entrenamiento y test es el problema de varianza que bagging está diseñado para resolver.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
Envolver el mismo árbol profundo en `BaggingClassifier` reduce drásticamente la brecha de sobreajuste. La puntuación OOB (`oob_score_`) es una estimación de generalización gratuita y eficiente en datos — construida a partir del ~36.8% de filas que cada modelo nunca vio durante el entrenamiento.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
El 63.2% viene directamente de la teoría de probabilidad: cada fila tiene una probabilidad de (1 − 1/n)^n de ser excluida de una muestra bootstrap, que converge a 1/e ≈ 36.8% cuando n crece. El complemento — 1 − 1/e ≈ 63.2% — es la fracción esperada de filas únicas en cualquier muestra bootstrap.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
La curva de aprendizaje clásica del ensemble: la precisión sube abruptamente con las primeras docenas de estimadores y luego se estabiliza. La región empinada refleja reducción genuina de varianza; el plateau significa que el ensemble ha 'agotado' la diversidad disponible. No hay sobreajuste catastrófico a medida que n_estimators crece — a diferencia del boosting, no puedes agregar demasiados aprendices base en bagging.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
La fórmula de varianza del ensemble ρ·σ² + (1−ρ)/B · σ² muestra dos palancas: más estimadores (B↑) y menor correlación (ρ↓). Bagging solo tira de la palanca B. Los random forests tiran de ambas — de ahí la motivación del truco de subsampling aleatorio de características en la siguiente lección.
Bagging reduce la varianza pero no el sesgo. Entonces hacer bagging de un modelo de alto sesgo como un decision stump de profundidad 1...
- Bagging entrena B modelos base en muestras bootstrap (n filas muestreadas con reemplazo) y agrega predicciones — voto mayoritario para clasificación, promedio para regresión.
- Cada muestra bootstrap contiene ~63.2% de filas únicas; el otro ~36.8% (out-of-bag) da una estimación de generalización gratuita de calidad aproximada a CV a través de `oob_score=True`.
- Varianza del ensemble = ρ·σ² + (1−ρ)/B · σ². Bagging tira de la palanca B; una correlación de modelo base ρ más baja amplifica el beneficio — motivando los random forests.
- Bagging funciona para aprendices base de alta varianza (árboles profundos). No puede corregir aprendices de alto sesgo — promediar muchos modelos malos da un ensemble malo.
- La precisión de test se estabiliza alrededor de 50–100 estimadores — agregar más árboles más allá de eso produce retornos decrecientes sin riesgo de sobreajuste.
Los random forests son árboles de decisión con bagging más un truco extra (subsampling de características). El patrón de ensemble 'bolsa de modelos' aparece en soluciones de Kaggle, promediado de checkpoints de deep learning y dropout (que conceptualmente es bagging aplicado a conexiones de red).
Si lo quitas: Perderías la técnica de reducción de varianza más simple — y el puente conceptual hacia los random forests.