Saltar al contenido

lección 1

Random Forest: muchos árboles mediocres ganan a uno bueno

La idea de conjunto: un bosque de árboles diversos generaliza mucho mejor que un solo árbol profundo, porque sus errores se cancelan al votar.

⏱ 50 min

Hay un experimento mental que lo cuenta todo. Metes a mil personas corrientes en una sala y les enseñas un frasco lleno de monedas. Nadie es tasador, nadie acierta de cerca: uno dice 400, otro 1.200, otro 650. Si eliges a cualquiera de ellos al azar, su respuesta es mala. Pero si promedias las mil respuestas, el resultado se acerca al número real con una precisión que ningún individuo de la sala alcanzó. Francis Galton midió esto en una feria de ganado en 1906 con 787 personas estimando el peso de un buey, y la media de las estimaciones falló por menos de medio kilo sobre un animal de más de 500. Ninguna persona era experta. El conjunto sí.

Esa es, en una frase, la idea más potente del aprendizaje automático moderno con datos en tablas: un conjunto (en inglés ensemble) de predictores mediocres pero diversos bate a cualquiera de ellos por separado. Ya sabes entrenar un árbol de decisión y lo has visto hacer algo incómodo: cuando lo dejas crecer sin límite, memoriza los datos de entrenamiento, los acierta todos, y luego falla con los datos nuevos. Esa brecha entre lo que acierta en entrenamiento y lo que acierta en prueba es el sobreajuste, y la mediste con honestidad en los montones separados. El Random Forest (bosque aleatorio) es la respuesta directa a ese problema, y en esta lección vas a ver por qué funciona y cómo se usa.

Conviene que la idea del conjunto no te suene a truco de laboratorio, porque la usas sin saberlo todos los días. Cuando pides opinión a tres amigos antes de una decisión importante en lugar de fiarte de uno solo, estás montando un conjunto. Cuando un tribunal de oposición lo forman varios examinadores y no uno, es para que los sesgos individuales de cada uno se compensen. Cuando el pronóstico del tiempo combina varios modelos meteorológicos en lugar de publicar el de uno solo, es exactamente esto. La intuición de que varias opiniones imperfectas pero independientes valen más que una sola es antigua y profunda; lo que hizo el aprendizaje automático fue convertirla en un algoritmo y demostrar, con números, cuánto se gana.

La condición, y esto es lo que a menudo se olvida, es la independencia. Los tres amigos solo te ayudan si piensan por su cuenta; si los tres repiten lo que dijo el primero, has preguntado a uno disfrazado de tres. El tribunal solo compensa sesgos si sus miembros no comparten exactamente el mismo. Toda la ingeniería del Random Forest está dedicada a conseguir esa independencia entre sus árboles, porque sin ella el conjunto no vale más que un árbol solo. Guarda esta idea, porque vuelve una y otra vez a lo largo de la lección: la diversidad no es un adorno, es el mecanismo.

## Por qué un árbol solo es frágil

Un árbol de decisión profundo tiene una debilidad concreta: es inestable. Cambia unas pocas filas de los datos de entrenamiento y el árbol que sale puede ser completamente distinto, con otras preguntas en otro orden. Esa sensibilidad es la cara visible del sobreajuste: el árbol no aprende la regla general que hay detrás de los datos, aprende los accidentes concretos de las filas que le tocaron. Memoriza en lugar de generalizar. Es el estudiante que se sabe de memoria los exámenes de otros años y se hunde en cuanto le cambias los números del enunciado.

Podrías pensar que la solución es podar el árbol, limitarle la profundidad para que no memorice. Ayuda, pero tiene un techo: un árbol poco profundo deja de memorizar, pero también deja de captar relaciones de verdad útiles, y su acierto se estanca. Te quedas con un modelo que no sobreajusta pero que tampoco es bueno. La pregunta interesante es otra: ¿y si en vez de intentar arreglar un árbol, usamos muchos a propósito, cada uno con sus propios defectos, y los hacemos votar?

Para ver por qué esa salida tiene sentido, conviene separar dos razones distintas por las que un modelo falla, porque no se arreglan igual. Un modelo puede fallar porque es demasiado simple para captar lo que pasa: un árbol de un solo corte intentando separar algo que tiene forma de espiral nunca lo conseguirá, por muchos datos que le des. Ese fallo es de rigidez. Y un modelo puede fallar por lo contrario, por ser tan flexible que se amolda a cada capricho de los datos que vio: ahí está el árbol profundo que memoriza. Ese fallo es de inestabilidad. El árbol solo, cuando lo dejas crecer, cae del lado de la inestabilidad: es flexible de sobra, lo que le sobra es firmeza. Y resulta que promediar muchos modelos inestables es justo el remedio para la inestabilidad, mientras que no hace casi nada contra la rigidez. Por eso el bosque se construye con árboles profundos y flexibles, no con árboles podados: toma modelos que pecan de inestables y los estabiliza promediándolos.

## La idea de conjunto: la diversidad es la fuerza

Aquí está la clave, y es contraintuitiva: lo que da fuerza a un bosque no es la calidad de cada árbol, es la diversidad entre ellos. Si entrenas cien árboles idénticos, votar entre cien copias del mismo error no arregla nada: te equivocas cien veces en lo mismo. Pero si cada árbol se equivoca de una forma distinta, al promediar sus votos los errores individuales tiran en direcciones opuestas y se cancelan entre sí, mientras que la señal verdadera (la que todos captan, aunque sea a medias) se refuerza porque apunta siempre al mismo sitio. El ruido se reparte y se anula; la señal se suma. Por eso un bosque de árboles mediocres pero diferentes bate a un árbol bueno pero solo.

La pregunta inmediata es: ¿cómo consigues que cien árboles entrenados con los mismos datos salgan distintos? El Random Forest usa dos trucos de azar a la vez, y de ahí viene lo de aleatorio en su nombre.

  1. 01.Cada árbol se entrena con una muestra distinta de las filas, sacada al azar y con reemplazo (algunas filas salen repetidas, otras no salen). Esta técnica se llama bagging, de bootstrap aggregating: cada árbol ve una versión ligeramente distorsionada del conjunto, así que aprende cosas distintas.
  2. 02.Y en cada punto donde el árbol decide qué pregunta hacer, no mira todas las variables disponibles, solo un subconjunto elegido al azar. Esto evita que todos los árboles se apoyen en la misma variable dominante y acaben pareciéndose.

Con esos dos ingredientes, cada árbol del bosque es una visión parcial y sesgada de la realidad, pero sesgada de un modo propio. Es exactamente la sala llena de personas que estiman el frasco de monedas: nadie tiene razón, pero el promedio sí. El voto mayoritario del bosque es el equivalente a esa media de la multitud.

Los dos trucos de azar en una imagen: cada árbol recibe filas sorteadas con repetición y solo algunas variables, así que ninguno ve lo mismo y por eso se equivocan distinto.
El voto mayoritario anula el error del árbol que se equivocó: la diversidad hace que los fallos individuales caigan en minoría.

Fíjate en lo que muestra el diagrama que una frase sola no deja ver: el error no desaparece porque los árboles sean buenos, desaparece porque está en minoría. El árbol 2 se equivocó, pero su voto quedó enterrado bajo cuatro votos correctos que no coincidían en nada salvo en la respuesta buena. Si los cinco árboles fueran idénticos, los cinco habrían votado B y el bosque también se equivocaría. La diversidad es lo que pone el error en minoría.

Hay una forma de verlo con números pequeños que convence más que cualquier metáfora. Supón que cada árbol acierta el 60% de las veces, apenas mejor que lanzar una moneda, y que sus errores son independientes unos de otros. Si tienes un solo árbol, aciertas el 60%. Pero si tienes tres árboles y votas por mayoría, para equivocarte tienen que fallar al menos dos de los tres a la vez, y como fallan de forma independiente, la probabilidad de que coincidan dos fallos es mucho menor que el 40% de cada uno por separado: el voto mayoritario de tres sube por encima del 64%. Con cinco árboles sube más, con cien, aún más. El acierto del conjunto supera al de cualquiera de sus miembros, y lo hace precisamente porque cada fallo necesita que varios árboles se equivoquen en el mismo sitio, cosa que si son diversos casi nunca pasa. Esto es lo que Galton vio en la feria sin ponerle fórmula, y lo que convierte a un montón de predictores mediocres en uno bueno.

Observa el detalle que sostiene todo el argumento: he dicho si sus errores son independientes. Si los árboles se equivocan todos en las mismas filas, los fallos no se reparten, se amontonan, y el voto mayoritario los confirma en lugar de anularlos. Por eso un bosque de árboles clónicos no mejora nada, y por eso los dos trucos de azar que vienen a continuación no son opcionales: son lo que compra la independencia sin la cual el conjunto no funciona.

## Un árbol clasifica votando dentro de cada hoja

Para clasificación, cada árbol da su voto por una clase y el bosque se queda con la clase más votada: eso es el voto mayoritario. Para predecir un número en lugar de una clase, el bosque promedia las predicciones de todos los árboles en vez de contar votos. La idea es la misma en los dos casos: agregar muchas opiniones diversas para quedarte con una más estable que cualquiera de ellas.

Hay una consecuencia práctica muy agradable de todo esto: el Random Forest es difícil de estropear. Un árbol solo exige que ajustes su profundidad con cuidado para que no sobreajuste; el bosque, en cambio, puedes dejarlo con árboles profundos sin despeinarte, porque el promedio se encarga de controlar el sobreajuste que cada árbol individual sí tiene. Es de los pocos modelos que funcionan razonablemente bien con los ajustes que trae de fábrica, y por eso es un primer modelo serio excelente en casi cualquier problema con datos en tablas.

La ganancia de añadir árboles decrece: pasar de 1 a 10 cambia mucho, de 100 a 200 casi nada. Más árboles no empeora, pero cuesta tiempo.

## Cómo se usa en la práctica

La biblioteca scikit-learn trae el bosque en RandomForestClassifier (para clasificar) y RandomForestRegressor (para predecir números), y los dos siguen el mismo contrato que ya conoces: creas el modelo, llamas a fit con los datos de entrenamiento y luego a predict con los datos nuevos. El parámetro que más vas a tocar es n_estimators, el número de árboles. Más árboles dan un modelo más estable, pero a partir de cierto punto la mejora es mínima y solo pagas más tiempo de cálculo, como se ve en la curva de arriba. Un valor entre 100 y 300 suele ser un buen punto de partida.

El segundo parámetro que conviene conocer es max_depth, la profundidad máxima que se permite a cada árbol. Aquí hay una diferencia importante con el árbol solo: en un árbol aislado, limitar la profundidad era tu principal defensa contra el sobreajuste, y había que afinarla con cuidado. En el bosque esa defensa ya la hace el promedio, así que puedes dejar los árboles crecer bastante y el conjunto se encarga de que no memoricen en bloque. No es que la profundidad deje de importar del todo, pero el bosque perdona mucho más que un árbol solo cualquier valor razonable. Esa tolerancia es parte de por qué el bosque es tan cómodo: te deja equivocarte en los ajustes sin que el modelo se derrumbe.

Hay otra comodidad que se agradece en datos reales: al bosque no le molesta mezclar variables de naturalezas distintas ni le afecta la escala. Un árbol decide con preguntas del tipo esta variable es mayor que tal valor, así que da igual que una columna vaya en euros y otra en años: no hace falta escalarlas ni normalizarlas para que convivan, al contrario que en otros modelos que sí lo exigen. Tampoco se despeina si una variable tiene algún valor extremo suelto, porque la pregunta es de orden, no de magnitud. Todo esto hace del bosque un modelo que exige poca preparación de los datos para dar un resultado decente, y por eso es tan buen punto de partida cuando empiezas a atacar un problema nuevo y aún no sabes qué funciona.

Fija siempre random_state en el modelo. El bosque usa azar para muestrear filas y variables, así que sin una semilla fija entrenas un bosque ligeramente distinto cada vez y tus resultados no se pueden reproducir ni comparar. Un experimento que no puedes repetir no es un experimento, es una anécdota.

Consejo de quien ya se ha quemado: no juzgues un bosque por lo que acierta en los datos con los que lo entrenaste. Un bosque, igual que un árbol, puede acertar casi todo el entrenamiento y mucho menos los datos nuevos. La única cifra que cuenta es la del montón de prueba que apartaste y no tocaste. Todo lo que hagas aquí se mide con esa misma vara de honestidad que ya aprendiste: nunca un acierto sobre datos de entrenamiento presentado como si fuera el bueno.

Un apunte histórico que ayuda a situar la herramienta. La idea de combinar árboles con muestras distintas de los datos, el bagging, la propuso el estadístico Leo Breiman en 1996, y el propio Breiman añadió el segundo truco (el azar en las variables) en 2001, cuando bautizó el método como Random Forest. No salió de una moda: salió de años de trabajo sobre por qué los árboles eran tan buenos y tan inestables a la vez, y de la intuición de que esa inestabilidad, bien aprovechada, podía convertirse en una ventaja. Más de dos décadas después, el bosque sigue siendo uno de los primeros modelos que prueba cualquiera que se enfrenta a datos en tablas, no por nostalgia sino porque funciona, es difícil de estropear y pide poco a cambio.

Hay además un regalo que viene de serie con los árboles: la importancia de cada variable. Como el bosque sabe cuánto le ayudó cada variable a separar las clases, puede ordenarlas de la más útil a la menos útil. Eso te da una primera lectura de qué está mirando el modelo, y es una pista valiosa aunque, como verás más adelante, hay que leerla con cautela. Por ahora quédate con que un bosque no solo predice: también te dice en qué se apoya.

Esa importancia de variables tiene un valor práctico que conviene no exagerar ni despreciar. Te sirve para una primera conversación con quien conoce el negocio: si el modelo dice que lo que más pesa para predecir las bajas es el número de incidencias abiertas, y el responsable de atención al cliente asiente porque le cuadra, vas por buen camino; y si el modelo se apoya con fuerza en una variable que no debería importar nada, eso es una señal de alarma que a menudo destapa una fuga de datos escondida. Pero no la trates como una verdad absoluta sobre causas: que una variable pese mucho en el modelo no significa que mueva el resultado en el mundo real, solo que al modelo le resultó útil para separar. La diferencia entre esas dos cosas es sutil y da para toda una lección más adelante.

## El cierre: una familia, dos maneras de construirla

Lo que has visto es la primera de las dos grandes familias de conjunto. El Random Forest construye sus árboles en paralelo: cada uno por su lado, sin saber de los demás, y al final votan todos juntos. Es un jurado que delibera por separado y luego cuenta las papeletas. Pero hay otra forma de montar un conjunto, una en la que los árboles no son independientes sino que trabajan en cadena, cada uno arreglando lo que el anterior dejó mal. Esa otra familia suele ganar casi todas las competiciones con datos en tablas, y es a donde vamos ahora.

Regístrate para guardar tu progreso.