Atlasingeniería

Aprendizaje automáticoAprendizaje supervisadoTema 3

Árboles de decisión, random forest y boosting

Un árbol solo sobreajusta y se lee como un diagrama de flujo. Combinar muchos árboles resuelve lo primero y sacrifica lo segundo, y hay dos formas de combinarlos que apuntan a errores distintos.

Para datos tabulares —tablas con columnas heterogéneas, que es la mayoría de los datos de una empresa— los ensambles de árboles siguen ganándole a las redes neuronales. Vale la pena entender por qué, y empieza por entender el árbol solo.

Un árbol parte los datos con preguntas

Un árbol de decisión parte los datos con preguntas sobre un atributo a la vez: “¿el monto supera mil?”. Cada partición separa los datos en dos y el proceso se repite hasta que las hojas son suficientemente puras.

El criterio para elegir la pregunta es cuánto baja la impureza —Gini o entropía en clasificación, varianza en regresión—. Es una búsqueda golosa: se elige la mejor partición local sin mirar las consecuencias futuras, porque el árbol óptimo global es un problema intratable.

Arriba, todos los datos mezclados: 100 transacciones, 20 de ellas fraude.

1 / 5
Cada partición se elige mirando sólo cuánto baja la impureza ahí mismo. Nadie comprueba si otra pregunta primera hubiera dado un árbol más chico: eso es lo goloso, y es lo que lo hace calculable.

Antes de seguir, predecí

Un árbol de decisión sin límite de profundidad sobre los datos de entrenamiento. ¿Qué error da?

Lo que un árbol trae gratis

Los árboles tienen propiedades raras y muy convenientes. No les afecta la escala de los atributos, así que no hay que estandarizar. Manejan atributos categóricos y numéricos juntos. Capturan interacciones y no linealidades sin que nadie las declare. Y se leen: un árbol chico se explica a cualquiera.

La contra es que sobreajustan sin límite —un árbol profundo memoriza— y son inestables: cambiar unos pocos datos puede producir un árbol completamente distinto.

Promediar muchos para bajar la varianza

Esa inestabilidad es alta varianza, y la varianza se combate promediando. Bagging entrena muchos árboles sobre muestras aleatorias con reemplazo y promedia sus predicciones.

Random forest agrega una idea más: en cada partición, considerar sólo un subconjunto aleatorio de atributos. Suena contraintuitivo y es la clave, porque decorrelaciona los árboles: si un atributo es muy predictivo, todos los árboles lo usarían primero y quedarían parecidos, y promediar cosas parecidas no reduce nada.

Encadenar débiles para bajar el sesgo

El boosting ataca el otro error. En vez de árboles independientes, entrena en secuencia: cada árbol nuevo se concentra en los errores que dejaron los anteriores. En la versión por gradiente, cada árbol ajusta el gradiente del costo, es decir, lo que falta.

Los árboles son deliberadamente chicos, de pocos niveles, y cada uno aporta una corrección pequeña regulada por la tasa de aprendizaje. Con eso se reduce el sesgo, y por eso boosting suele lograr mayor exactitud que random forest, a cambio de poder sobreajustar si se lo deja correr de más.

Cuál de los dos según el problema

La diferencia práctica ordena la elección. Random forest es difícil de arruinar: pocos hiperparámetros sensibles, paralelizable, más árboles nunca empeora. Es la opción para una línea de base sólida rápido.

Boosting —XGBoost, LightGBM, CatBoost— suele ganar en exactitud y exige más cuidado: tasa de aprendizaje, cantidad de árboles, profundidad y parada temprana interactúan entre sí. Es lo que gana las competencias de datos tabulares, y lo que más mantenimiento pide.

La importancia de atributos y su letra chica

Los ensambles reportan importancia de atributos, y conviene leerla con desconfianza. La importancia por impureza favorece a los atributos con muchos valores distintos, y entre dos atributos correlacionados reparte el crédito de forma arbitraria.

Alternativas más honestas son la importancia por permutación y los valores SHAP, que además explican predicciones individuales. Y una limitación estructural: los árboles predicen por regiones constantes, así que no extrapolan. Fuera del rango visto en entrenamiento devuelven el valor del borde, cosa que un modelo lineal sí extiende.

Los hiperparámetros que importan

from sklearn.ensemble import RandomForestClassifier
import lightgbm as lgb

# Random forest: difícil de arruinar, pocos parámetros sensibles
bosque = RandomForestClassifier(
    n_estimators=500,        # más árboles nunca empeora: sólo cuesta tiempo
    max_features="sqrt",     # el parámetro que decorrelaciona, y es el que importa
    min_samples_leaf=5,      # controla el sobreajuste
    n_jobs=-1,               # entrena en paralelo: los árboles son independientes
)

# Boosting: más exacto y con parámetros que interactúan entre sí
modelo = lgb.LGBMClassifier(
    learning_rate=0.05,      # más chico, más árboles hacen falta
    n_estimators=2000,       # se corta antes con parada temprana
    num_leaves=31,
    min_child_samples=20,
)
modelo.fit(
    X_train, y_train,
    eval_set=[(X_val, y_val)],
    callbacks=[lgb.early_stopping(50)],   # deja de agregar árboles cuando deja de mejorar
)

La diferencia práctica está a la vista: el bosque se entrena en paralelo porque cada árbol es independiente, y el boosting es secuencial porque cada árbol corrige lo que dejaron los anteriores. Por eso el bosque escala con núcleos y el boosting no.

La parada temprana no es una optimización: en boosting es el mecanismo principal contra el sobreajuste, porque agregar árboles indefinidamente termina memorizando.

Cuál de los dos, y contra las redes

Un árbolRandom forestBoosting
Qué error atacaninguno: es la basevarianza, promediandosesgo, corrigiendo
Entrenamientoinstantáneoparalelosecuencial
Se puede arruinarsobreajusta solodifícilsí: sobreajusta si se lo deja correr
Exactitud típicabajabuenala mejor en datos tabulares
Mantenimientoningunopocolos parámetros interactúan
Para datos tabulares —tablas con columnas heterogéneas, que es la mayoría de los datos de una empresa— el boosting sigue ganándole a las redes neuronales, y no por poco.

Cierre

Particiones golosas por impureza: sin escalado, con interacciones gratis y sobreajuste asegurado. Bagging y random forest bajan varianza promediando árboles decorrelacionados; boosting baja sesgo corrigiendo en secuencia. Las importancias engañan y ningún árbol extrapola.

Autoevaluación

¿Lo entendiste?

¿Por qué la construcción de un árbol es golosa?
¿Cuál es la diferencia entre random forest y boosting?
¿Por qué los árboles no necesitan estandarizar los atributos?
Para una tabla con columnas heterogéneas, ¿qué conviene probar primero?