041 — Random Forest, boosting y ensembles

← Clase anterior · Índice de la parte · Clase siguiente →

Parte: 03 — Machine learning clásico
Nivel: intermedio · Horas estimadas: 6
Laboratorio: ml · Estado: EXECUTABLE_CORE

🎯 Propósito

Comprender random forest, boosting y ensembles dentro de la evolución de la inteligencia artificial, implementar un experimento mínimo verificable y distinguir qué parte constituye evidencia frente a una afirmación todavía no comprobada.

📚 Resultados de aprendizaje

Al finalizar podrás:

  1. Explicar random forest, boosting y ensembles usando los conceptos ensembles, bagging, boosting, diversidad.
  2. Ejecutar el laboratorio con una semilla explícita y revisar su contrato JSON.
  3. Identificar al menos un supuesto, una limitación y un riesgo de aplicación.
  4. Comparar el enfoque con la etapa anterior de la ruta de aprendizaje.
  5. Producir una evidencia reproducible y una conclusión que no exceda los datos.

🧩 Conceptos centrales

ensembles, bagging, boosting, diversidad

🗺️ Ubicación en el mapa de la IA

Los ensembles resuelven la debilidad central del árbol de la clase anterior — su varianza — combinando muchos modelos imperfectos: bagging y random forest (Breiman, 1996 y 2001) los promedian en paralelo; boosting (Freund & Schapire 1997; Friedman 2001) los encadena en secuencia. Sus descendientes de gradiente (XGBoost, LightGBM) siguen siendo el estado del arte en datos tabulares, compitiendo de igual a igual con las redes profundas de la parte 04. La idea de que "muchos débiles coordinados superan a uno fuerte" reaparece luego en mixture-of-experts y en las votaciones de self-consistency de los LLM.

📖 Fundamentos

🎲 Por qué promediar reduce varianza

Si B estimadores tienen cada uno varianza σ² y correlación media ρ entre sí, la varianza del promedio es:

Var(promedio) = ρσ² + (1−ρ)σ²/B

Con B → ∞ el segundo término desaparece, pero el primero no: el techo de mejora lo pone la correlación entre los modelos. Todo el diseño de un ensemble por promedio consiste en fabricar modelos individualmente decentes y mutuamente descorrelacionados.

👜 Bagging y random forest

🚀 Boosting: sumar correctores en secuencia

Boosting construye un modelo aditivo por etapas, donde cada modelo nuevo corrige los errores del acumulado:

F_M(x) = F₀ + Σ_{m=1..M} ν · h_m(x)     h_m: árbol pequeño (stump o profundidad 2-4)

En términos del compromiso sesgo-varianza: bagging ataca la varianza (promedia modelos de bajo sesgo), boosting ataca el sesgo (suma modelos débiles que se especializan en lo que falta) controlando la varianza con ν, la profundidad del débil y el submuestreo.

🧮 Ejemplo trabajado

Voto de mayoría: 5 clasificadores independientes, cada uno con accuracy 0.7. El ensemble por mayoría acierta si aciertan al menos 3:

P(3 de 5) = C(5,3)·0.7³·0.3² = 10·0.343·0.09  = 0.3087
P(4 de 5) = C(5,4)·0.7⁴·0.3¹ =  5·0.2401·0.3  = 0.3602
P(5 de 5) = 0.7⁵                              = 0.1681
P(mayoría acierta) = 0.3087 + 0.3602 + 0.1681 ≈ 0.837

Cinco modelos del 70 % → ensemble del 83.7 %, si los errores son independientes. Si los cinco fueran clones (ρ = 1) el ensemble seguiría en 0.7: la diversidad lo es todo.

Una ronda de AdaBoost: 10 ejemplos con peso 1/10; el stump h₁ falla en 2 → err₁ = 0.2 y α₁ = ½·ln(0.8/0.2) = ½·ln 4 ≈ 0.693. Los 2 fallados multiplican su peso por e^0.693 ≈ 2 (pasan a 0.2) y los 8 acertados por e^−0.693 ≈ 0.5 (pasan a 0.05); la suma es 2·0.2 + 8·0.05 = 0.8 y tras renormalizar cada fallado pesa 0.25 y cada acertado 0.0625. La ronda 2 queda obligada a ocuparse de los casos difíciles.

📊 Propiedades y comparación

Aspecto Árbol único Random forest AdaBoost Gradient boosting
Ataca principalmente Varianza Sesgo Sesgo (pérdida flexible)
Entrenamiento 1 árbol Paralelo (B árboles) Secuencial Secuencial
Sobreajuste al crecer B/M No (satura) Sí (moderado) Sí (exige early stopping)
Ruido de etiqueta Media Baja Alta (re-pondera errores) Media (según pérdida)
Hiperparámetros clave profundidad, α B, m features/nodo M, profundidad del débil M, ν, profundidad, submuestreo
Interpretabilidad Alta (pequeño) Baja (importancias) Baja Baja
Validación interna OOB gratis No Early stopping en val
flowchart TD
    subgraph RF["Random forest (paralelo: baja la varianza)"]
        D["Datos train"] --> B1["Bootstrap 1 + m features/nodo → árbol 1"]
        D --> B2["Bootstrap 2 + m features/nodo → árbol 2"]
        D --> B3["... → árbol B"]
        B1 --> V["Voto mayoritario / promedio"]
        B2 --> V
        B3 --> V
        V --> OOB["Error OOB con los árboles<br/>que no vieron cada ejemplo"]
    end
    subgraph GB["Gradient boosting (secuencial: baja el sesgo)"]
        F0["F₀ = constante (media/log-odds)"] --> R1["pseudo-residuos<br/>−∂L/∂F"]
        R1 --> H1["árbol pequeño h₁"]
        H1 --> F1["F₁ = F₀ + ν·h₁"]
        F1 --> R2["nuevos pseudo-residuos"]
        R2 --> H2["h₂ ..."]
        H2 --> FM["F_M — parar cuando la pérdida<br/>de validación deja de bajar"]
    end

⚠️ Errores conceptuales frecuentes

  1. "Más árboles en el forest terminarán sobreajustando." No: B solo estabiliza el promedio; el error converge a un límite fijado por ρ y la calidad de cada árbol. Lo que sí sobreajusta es M en boosting.
  2. "El ensemble siempre supera a sus miembros." Solo si los miembros son mejores que el azar y sus errores están (parcialmente) descorrelacionados. Promediar clones no aporta nada; promediar modelos malos promedia basura.
  3. "Random forest y boosting son intercambiables." Atacan errores opuestos: forest promedia modelos de bajo sesgo para bajar varianza; boosting encadena modelos de alto sesgo para bajarlo. Con etiquetas ruidosas el forest suele ser más robusto; con señal compleja y datos limpios, el boosting suele ganar.
  4. "La importancia de features del forest es fiable." Hereda los sesgos del árbol (cardinalidad, correlación); la importancia por permutación en OOB/validación es preferible, y ninguna implica causalidad.
  5. "Las probabilidades del boosting son probabilidades." Los scores de boosting suelen estar descalibrados (demasiado extremos AdaBoost, depende de la pérdida en GB); antes de aplicar umbrales por costo hay que calibrar (clase 039 y 047).

🚀 Del aprendizaje a la operación

Para operar un ensemble real faltan: búsqueda de hiperparámetros con presupuesto explícito (ν, M, profundidad interactúan; early stopping en validación separada), calibración de probabilidades antes de decidir con umbrales, importancia por permutación y ejemplos contrafactuales para explicar decisiones (obligatorio en dominios regulados), control del costo de inferencia (500 árboles × profundidad 12 tienen latencia y memoria reales), y monitoreo de drift: el ensemble extrapola constante fuera del rango visto, igual que sus árboles.

🧪 Laboratorio

python lab.py

El laboratorio llama a ai_evolution.labs.run_lab("ml"). Esta decisión evita 183 implementaciones divergentes: cada clase tiene un entrypoint propio, pero los motores didácticos se prueban como una biblioteca común.

🔍 Evidencia esperada

📓 Notebooks

📝 Evaluación

Criterio Peso
Comprensión conceptual 25 %
Ejecución reproducible 25 %
Interpretación basada en evidencia 25 %
Riesgos, límites y mejora propuesta 25 %

Consulta assessment.md para preguntas y criterio de aceptación.

⚠️ Errores comunes

Síntoma Causa probable Corrección
El código corre, pero no hay conclusión Se confundió ejecución con aprendizaje Explica qué demuestra y qué no demuestra
El resultado cambia sin explicación No se registró semilla o configuración Conserva semilla, versión y parámetros
Se promete uso real Se extrapoló desde una demo educativa Declara entorno, datos, límites y revisión humana
Se copia una métrica aislada No existe baseline ni costo de error Añade comparación y criterio de decisión

❓ Preguntas frecuentes

¿Debo usar una API comercial?
No. El núcleo funciona localmente. Las extensiones LIVE se documentan por separado.

¿El laboratorio representa una implementación industrial?
No por sí solo. Enseña el contrato y el patrón; producción exige integración, seguridad, observabilidad, pruebas y operación.

¿Dónde profundizo?
Revisa las especializaciones enlazadas en el README raíz y la ruta siguiente.

🔗 Referencias


📜 Papers que fundamentan esta clase

Bloque generado por python scripts/link_papers_to_classes.py. La fuente es papers/catalog/papers.json.

Paper Año Qué desbloqueó Miniatura
P78 · Una generalización decisional del aprendizaje en línea y su aplicación al boosting 1997 Demuestra que muchos clasificadores apenas mejores que el azar se combinan en uno arbitrariamente bueno, y da el algoritmo que lo hace. notebook
P79 · Bosques aleatorios 2001 Demuestra que el error de un conjunto depende de la fuerza de sus miembros Y de su correlación, y que empeorarlos a propósito puede mejorarlo. notebook

Cada ficha explica el problema anterior, la matemática mínima, los límites y los errores de atribución más frecuentes. Para leerlas con método: cómo leer un paper de IA · anexos matemáticos.


📚 Bibliografía de apoyo

Bloque generado por python scripts/link_sources_to_classes.py. Cada obra lleva su localizador verificado en sources/bibliography.json.

Los papers dicen de dónde salió el mecanismo. Estas obras lo desarrollan con el espacio que una clase no tiene: teoría completa, demostraciones y ejercicios.

Obra Edición Localizador Papel en esta clase
Hastie, Trevor, Tibshirani, Robert y Friedman, Jerome — The Elements of Statistical Learning 2.ª · 2009 ISBN 9780387848570 · web de la obra citada en las referencias de esta clase · cap. 10 · obra de referencia de la parte 03
James, Gareth et al. — An Introduction to Statistical Learning 2021 ISBN 9783031387470 · web de la obra obra de referencia de la parte 03 · toda la parte, nivel introductorio
Murphy, Kevin P. — Probabilistic Machine Learning 2022 ISBN 9780262046824 · web de la obra obra de referencia de la parte 03 · fundamentos probabilísticos del aprendizaje

⬅️ Clase anterior

040 — Árboles de decisión y reglas interpretables

➡️ Siguiente clase

042 — Ingeniería y selección de características


📝 Evaluación completa

❓ Preguntas

  1. Define random forest, boosting y ensembles sin usar una marca o framework como definición.
  2. Explica la relación entre ensembles, bagging, boosting, diversidad.
  3. Ejecuta lab.py dos veces con la misma semilla. ¿Qué debe conservarse?
  4. Identifica una afirmación permitida y una afirmación exagerada sobre el resultado.
  5. Propón una prueba negativa o un caso límite.

🏆 Reto verificable

Amplía el resultado del laboratorio con una clave student_extension que incluya:

✅ Criterio de aceptación