Hoy hablamos sobre los métodos de ensemble en Machine Learning, cómo funcionan técnicas como bagging, boosting y stacking.
¿Recuerdas el famoso programa de televisión ¿Quién quiere ser millonario?, conocido antes como 50x15? Era ese programa donde el concursante tenía que responder 15 preguntas para ganar 50 millones de pesetas. Uno de los comodines más populares era el del público. Básicamente, el concursante pedía ayuda al público, que votaba cuál creía que era la respuesta correcta, y luego decidía si seguir el consejo o no.
Pues los métodos de ensemble funcionan de forma similar: en lugar de confiar en un solo modelo para hacer predicciones, dejamos que un grupo de modelos vote la respuesta y combinamos sus opiniones para tomar la mejor decisión posible.
[Métodos de ensemble]: Un conjunto de modelos que combina sus predicciones para obtener un resultado más preciso que cualquier modelo por sí solo.
Esto es como si un grupo de modelos de Machine Learning se juntara para tomar decisiones...
¡igual que el comodín del público en ¿Quién quiere ser millonario?!
La idea de los métodos de ensembling es entrenar varios modelos de Machine Learning y luego combinar las predicciones de todos para tener una predicción final.
Sencillo y efectivo.
Si agregamos las predicciones de un grupo de modelos normalmente obtendremos mejores resultados que con cualquiera de esos modelos usados individualmente.
Las técnicas de ensemble mejoran la precisión de cualquiera de los modelos individuales que combinamos.
Por eso, si alguna vez dais una vuelta por una competición de Kaggle podréis ver que los equipos ganadores usan métodos de ensemble para ganar combinando distintos modelos para conseguir la máxima precisión en su solución.
Cuando hablamos de mejorar nuestros modelos de Machine Learning, una de las estrategias más efectivas es la de introducir diversidad.
En lugar de entrenar un único modelo con todos los datos disponibles, podemos crear varios modelos entrenándolos con diferentes subconjuntos de datos.
Esto permite que cada modelo aprenda distintos aspectos de la información y que, al combinar sus predicciones, podamos obtener resultados más precisos y robustos. Hay dos formas principales de lograr esta diversidad a través de los datos: pasting y bootstaping.
Pasting es cuando dividimos el conjunto de datos de entrenamiento original en distintos subconjuntos, asegurándonos de que cada observación solo se utilice una vez.
Es como si estuviéramos repartiendo las observaciones en diferentes bolsitas para entrenar cada modelo por separado. Sin repeticiones, cada canica (u observación) va a una sola bolsa.
Después entrenaríamos cada modelo con uno de esos subconjuntos de datos y combinaríamos sus predicciones.
El bagging (abreviatura de bootstrap aggregation) es una técnica que nos permite entrenar varios modelos utilizando diferentes subconjuntos de datos del conjunto de entrenamiento original.
Bootstraping, permite que las mismas observaciones se repitan en varios conjuntos de entrenamiento.
Es como si tuviéramos una bolsa grande de canicas y, cada vez que sacamos una para entrenar un modelo, volvemos a meterla en la bolsa. De esta forma, una misma observación podría utilizarse en varios modelos, lo que introduce más variabilidad entre ellos.
Cuando combinamos las predicciones de todos los modelos entrenados con estos subconjuntos de datos, obtenemos un modelo más robusto, capaz de hacer predicciones más precisas que cualquier modelo individual.
Esta técnica de combinar varios modelos entrenados a partir de subconjuntos de datos se conoce como bagging.
El ejemplo más popular de bagging es el Random Forest, donde entrenamos varios árboles de decisión utilizando diferentes subconjuntos de datos (usando bootstraping en este caso) y luego combinamos las predicciones de esos árboles. Esto ayuda a corregir la inestabilidad que pueden tener los árboles de decisión individuales, haciéndolos menos sensibles a pequeños cambios en los datos de entrenamiento.
Lo bueno del bagging es que genera modelos diversos que capturan distintos patrones en los datos, y esta diversidad es clave para mejorar el rendimiento final del conjunto.
El boosting es como una cadena de modelos donde cada uno trata de corregir los errores del anterior.
Entrenamos un modelo sencillo, observamos en qué falló y luego entrenamos otro modelo que intenta mejorar esos errores.
Repetimos este proceso varias veces y, al final, combinamos las predicciones de todos.
Ejemplos populares de boosting: AdaBoost, Gradient Boosting y, por supuesto, XGBoost, que es uno de los favoritos cuando trabajamos con datos estructurados, como los que están en tablas.
Finalmente, tenemos el stacking.
La idea es simple: entrenamos varios modelos (llamados modelos base) y luego usamos un meta-modelo que combina las predicciones de esos modelos para tomar la decisión final.
Lo interesante del stacking es que se pueden tener varios niveles de modelos.
Por ejemplo, las predicciones de los modelos base pueden alimentar a un segundo conjunto de modelos, y las salidas de estos pueden pasar a un meta-modelo final.
Para que los métodos de ensemble learning funcionen de manera efectiva, no vale sólo con combinar varios modelos y esperar lo mejor.
Hay ciertos factores que son clave para aprovechar al máximo esta técnica y obtener una predicción final más precisa.
Dos elementos esenciales son la diversidad entre los modelos y un rendimiento equilibrado entre ellos.
¡Aquí viene el "pero"! Aunque los métodos de ensemble son una maravilla para mejorar el rendimiento final, tienen un pequeño problema en el mundo real: el mantenimiento.
Como estamos utilizando varios modelos en lugar de uno solo, esto significa más trabajo a la hora de desplegar y mantener el sistema.
Hay que re-entrenar y ajustar varios modelos, lo cual puede ser costoso y complejo.
Aumentar un 0.1% la precisión de un modelo puede ser crucial en una competición como las de Kaggle, pero en producción, ese pequeño aumento puede no justificar el esfuerzo extra.
Hoy hemos visto cómo los métodos de ensemble combinan la fuerza de varios modelos de Machine Learning para mejorar las predicciones.
Desde el bagging con sus Random Forests hasta el boosting con su enfoque secuencial y el stacking como la torre de modelos, cada técnica tiene su propia forma de aprovechar la diversidad.
Sin embargo, no olvides que en la práctica, la simplicidad y el coste de mantenimiento pueden ser factores muy importantes para elegir qué técnica aplicar.
Espero que te guste el episodio.
Si es así, no olvides dejar un «Me gusta» y algún comentario al episodio en Ivoox o una valoración de 5 estrellas del podcast en Apple podcasts, en Spotify, en Youtube o donde quiera que escuches el podcast.
Recuerda que si tienes cualquier duda o pregunta puedes contactar conmigo a través del formulario de contacto o podemos seguir la conversación en Twitter.
Muchas gracias por estar ahí y te espero en el próximo episodio de Un Podcast Ninja sobre Big Data.