23 · Random Forest: árboles decorrelados e importancia de características
Bagging + subsampling aleatorio de características en cada split decorrela los árboles — la varianza del ensemble resultante cae aún más y la importancia de características se vuelve confiable.
Random Forest = árboles de decisión con bagging + selección aleatoria de CARACTERÍSTICAS en cada split — decorrelando aprendices base para una reducción de varianza aún mayor.
Sin esto:
Sin los random forests perderías el baseline de ML tabular más fuerte durante una década — y el algoritmo que 'simplemente funciona' sin ajuste.
Bagging ya reduce la varianza promediando muchos aprendices base. Pero el bagging simple tiene un techo: si todos los árboles se entrenan con datos solapados y usan las mismas características, sus predicciones están altamente correlacionadas (ρ es grande). La fórmula de varianza del ensemble muestra que la alta correlación limita cuánto ayuda el promediado.
El truco del random forest
En cada split — no solo en cada árbol — un random forest considera solo un subconjunto aleatorio de max_features características como candidatos. Este único cambio tiene un efecto profundo:
- Los árboles divergen: con diferentes características candidatas en cada nodo, los árboles se estructuran de forma diferente incluso en muestras bootstrap similares.
- La correlación ρ cae: los árboles menos correlacionados hacen que el promediado sea mucho más efectivo.
- Cada árbol es ligeramente peor que un árbol con todas las características, pero el ensemble gana en grande.
Defaults típicos
| Configuración | Clasificación | Regresión |
|---|---|---|
| max_features | "sqrt" (√d) | 1.0 (todas) o "sqrt" |
| n_estimators | 100–500 | 100–500 |
| max_depth | None (profundidad completa) | None |
Importancia de características
model.feature_importances_[i] = disminución media de impureza (MDI) atribuible a la característica i, promediada en todos los árboles. Como agrega en cientos de árboles es mucho más estable que la importancia de un árbol único — aunque todavía tiene un ligero sesgo hacia características numéricas de alta cardinalidad.
Python (in browser)
La progresión árbol único → bagging → random forest ilustra limpiamente los dos pasos de reducción de varianza. Bagging reduce la varianza promediando; el subsampling aleatorio de características reduce además la correlación entre árboles, exprimiendo la mejora final del 1-2%.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
La importancia de características del random forest es más estable que la importancia de un árbol único porque promedia MDI en todos los 200 árboles. Las características principales (`worst radius`, `worst perimeter`, `worst concave points`) coinciden con el conocimiento del dominio: el tamaño celular y la irregularidad de forma son los indicadores más fuertes de malignidad.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
El árbol único memoriza cada punto de entrenamiento con predicciones de función escalón irregulares. El random forest, promediando 200 árboles, produce una aproximación mucho más suave de la señal subyacente. Ambos son piecewise-constant, pero promediar cientos de funciones escalón desplazadas converge hacia una curva suave.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Python (in browser)
GridSearchCV sobre `max_features` confirma que el default `sqrt` es robusto — típicamente dentro del 0.5–1% de la mejor configuración. Establecer `max_features=1.0` (sin subsampling de características) degrada la precisión porque los árboles se vuelven demasiado correlacionados, que es el resultado del bagging simple de la primera celda de código.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Random Forest es el **baseline de cero intentos**: alta precisión sin ajuste, importancias interpretables y riesgo casi nulo de fallo catastrófico. Solo invierte el esfuerzo de ajuste en gradient boosting cuando el baseline de RF no es suficientemente bueno.
La innovación clave de Random Forest sobre el bagging simple es...
- Random Forest agrega subsampling aleatorio de características (`max_features='sqrt'`) en cada split sobre el bagging — esto decorela los árboles, reduciendo la varianza del ensemble más allá del bagging simple.
- La importancia de características RF (MDI) promedia la reducción de impureza en todos los árboles — más estable que la importancia de un árbol único pero sesgada hacia características de alta cardinalidad.
- El default `sqrt` para `max_features` está generalmente dentro del 1% del óptimo — RF necesita casi nada de ajuste para servir como baseline fuerte.
- RF es el primer modelo a usar para datos tabulares: defaults fuertes, paralelizable, importancias interpretables, sin escalado necesario. Cambia a XGBoost cuando importa exprimir el último 1-2%.
- Para selección de características honesta, prefiere la importancia de permutación (`sklearn.inspection.permutation_importance`) sobre MDI — mide el impacto real de precisión en datos separados.
El baseline de ML tabular por defecto; el estimador más usado de sklearn después de LogisticRegression; competiciones de datos estructurados antes del dominio de XGBoost. La importancia de características de RF informa la selección de características en innumerables pipelines descendentes.
Si lo quitas: Te saltarías 'el algoritmo que simplemente funciona' — el modelo que usas primero en cualquier problema tabular.