Métodos de conjunto: el campeón del aprendizaje automático de Kaggle

Publicado: 2022-03-11

El proverbio "Dos cabezas piensan mejor que una" adquiere un nuevo significado cuando se trata de conjuntos de aprendizaje automático. Los métodos de conjunto son algunas de las familias de ML más condecoradas en las competencias de Kaggle, donde a menudo ganan concursos con sus impresionantes resultados.

Pero fue un siglo antes de Kaggle cuando el estadístico Sir Francis Galton notó la potencia de la inteligencia agregada. Se encontró con una competencia en una feria de ganado donde los participantes tenían que adivinar el peso de un buey. Ochocientas personas enviaron conjeturas, pero sus niveles de habilidad variaban: granjeros y carniceros adivinaban junto con habitantes de la ciudad que nunca habían visto un buey de cerca, por lo que Galton pensó que la conjetura promedio sería bastante incorrecta.

Resultó que la media de las conjeturas de la multitud estaba errada en menos de una libra (<0,1 %). Sin embargo, incluso las mejores predicciones individuales estaban fuera de lugar.

¿Cómo es posible? ¿Qué hizo posible un resultado tan inesperado?

Qué hace que los conjuntos de máquinas sean tan efectivos

El evento que obligó a Galton a cuestionar sus creencias también ilustra lo que hace que los conjuntos sean tan poderosos: si tiene modelos diferentes e independientes , entrenados usando diferentes partes de datos para el mismo problema, funcionarán mejor juntos que individualmente. ¿La razón? Cada modelo aprenderá una parte diferente del concepto. Por lo tanto, cada modelo producirá resultados válidos y errores basados ​​en su “conocimiento”.

Pero lo más interesante es que cada parte verdadera complementará a las demás mientras que los errores se anulan entre sí:

Una imagen que representa el concepto de ocho modelos diferentes, cada uno de los cuales aprende un conjunto diferente de hechos que pueden o no superponerse. El resultado combina lo aprendido por cada modelo y elimina algunos de sus errores.

Debe entrenar modelos con una gran varianza (como árboles de decisión) sobre distintos subconjuntos de datos. Esta varianza añadida significa que cada modelo sobreajusta diferentes datos, pero cuando se combinan, la varianza desaparece, como por arte de magia. Esto crea un nuevo modelo más robusto.

Al igual que en el caso de Galton, cuando se combinan todos los datos de todas las fuentes, el resultado es "más inteligente" que los puntos de datos aislados.

Una mirada más cercana al aprendizaje por conjuntos en las competencias de Kaggle

En el desafío de clasificación de productos de Otto Group, los participantes tuvieron que construir un modelo predictivo que pudiera distinguir entre las principales categorías de productos.

Aquí puedes ver cómo se construyó el modelo ganador. Fue un apilamiento de tres capas: la primera tenía 33 modelos, la segunda agregó tres más (XGBoost, una red neuronal y AdaBoost) y la tercera era la media ponderada de los resultados de la capa anterior. Era a la vez un modelo muy complejo y un conjunto.

Otro éxito de Kaggle es el modelo creado por Chenglong Chen en la competencia Crowdflower Search Results Relevance. El desafío era crear un predictor que pudiera usarse para medir la relevancia de los resultados de búsqueda. Puede leer la explicación completa de su método, pero como nuestro punto de interés son los conjuntos, la parte crítica de la historia es que la solución ganadora utilizó un conjunto de 35 modelos, muchos de los cuales también eran conjuntos: un meta-conjunto, por lo que hablar.

Métodos de conjunto

Hay muchas formas de implementar métodos de conjunto en el aprendizaje automático. Exploraremos algunos de los métodos más populares:

  • Harpillera
    • Bosque aleatorio
  • impulsar
    • AdaBoost
    • Aumento de degradado y XGBoost
  • Métodos de conjunto híbrido
    • Votación
    • Apilado
    • en cascada

Harpillera

Como se mencionó, necesita entrenar muchos modelos sobre diferentes subconjuntos de datos. En la práctica, esto no es fácil porque necesitará muchos más datos para muchos modelos que para un solo modelo y, a veces, no es fácil obtener conjuntos de datos de alta calidad. Aquí es cuando el embolsado (agregación de arranque) es útil, ya que divide los datos a través del arranque: una muestra aleatoria con un reemplazo, lo que da como resultado diferentes subconjuntos que se superponen.

Una vez que haya entrenado sus modelos de conjunto, construye su predicción final agregando cada predicción del modelo a través de cualquier métrica que prefiera: la media, la mediana, la moda, etc. También puede usar las probabilidades de predicción del modelo para hacer una métrica ponderada:

Diagrama que muestra el uso de la técnica de embolsado para dividir datos a través de Bootstrap, agregó cada predicción del modelo de varios subconjuntos para producir el resultado final.

Si queremos usar árboles de decisión como modelos pero tenemos pocos atributos predictivos fuertes en nuestros datos, todos los árboles serán similares. Esto se debe a que los mismos atributos tenderán a estar en el nodo raíz, produciendo resultados similares en cada rama del árbol.

Bosque aleatorio

Una técnica para abordar este problema es el bosque aleatorio . Hace un conjunto de embolsado utilizando árboles, pero cada nodo restringe sus posibles atributos a un subconjunto aleatorio. Esto obliga a que los modelos sean diferentes, resolviendo el problema anterior. También hace que el bosque aleatorio sea un muy buen modelo para la selección de características.

Random forest es uno de los modelos de ML más populares porque ofrece un buen rendimiento con poca varianza y tiempo de entrenamiento.

impulsar

Boosting también usa bootstrapping para entrenar los modelos, con la principal diferencia de que agrega pesos a cada instancia en función de los errores de predicción del modelo. Mientras que el embolsado es un proceso paralelo, el impulso es secuencial, en el que cada modelo tiene más probabilidades. Esto le permite acceder a algunas instancias de predicciones de modelos anteriores.

Con esta modificación, boosting intenta aumentar el enfoque sobre las instancias mal clasificadas para lograr un mejor rendimiento global:

Un diagrama que representa los diferentes enfoques utilizados por embolsado y potenciado, que ilustra la naturaleza paralela del embolsado y la naturaleza secuencial del impulso.

También agrega pesos a los modelos. Los predictores con mejor desempeño en el momento del entrenamiento tendrán un mayor peso en la etapa de predicción.

Echemos un vistazo más de cerca a algunos de los modelos de refuerzo más populares:

AdaBoost

AdaBoost fue una de las primeras implementaciones de impulso. Hace casi exactamente lo que describimos sobre impulsar en general y utiliza árboles de decisión como modelos. Expliquemos la fase de entrenamiento con algo de pseudocodificación:

 For each instance i Assign w[i] (weight, same for all) For each iteration t Generate a subset s[t] by weighted boosting (using the w[i] weights) Train model m[t] using s[t] Store m[t] Calculate e[t] (error rate of m[t]) Assign error rate e[t] to stored m[t] model If (e[t] <= a_threshold) Exit for Update weights using m[t] errors

En el momento de la predicción, pondera cada predicción en función de la tasa de error e[t] calculada para cada una. Los resultados con una alta tasa de error tendrán menos peso que otros con mayor precisión.

Aumento de degradado y XGBoost

Uno de los principales problemas al entrenar tantos modelos y hacer que funcionen juntos es encontrar la mejor configuración de hiperparámetros. Es difícil encontrar la mejor configuración para un solo modelo; encontrar la mejor configuración para n modelos aumenta la complejidad exponencialmente. La configuración ideal para un modelo aislado probablemente no sea la misma que la configuración para un modelo que tiene que funcionar con otros. Como tal, debe buscar la configuración de todos los modelos al mismo tiempo, pero ¿cómo?

El aumento de gradiente brinda una solución elegante a este problema. Crea una función de pérdida que tiene como entrada todos los valores de hiperparámetros de todos los modelos y como salida el error de todo el conjunto. A través del descenso de gradiente, encuentra el valor mínimo de la función (es decir, el error más bajo) y, por lo tanto, la mejor configuración de hiperparámetros para cada modelo.

Este enfoque introduce un problema de escala. Ingrese al rey del aprendizaje automático para datos estructurados: aumento de gradiente extremo, XGBoost para abreviar. Es una implementación increíblemente eficiente del aumento de gradiente, gracias a varias técnicas, como la computación en paralelo, la capacidad de validación cruzada incorporada, la regularización para evitar el sobreajuste y la optimización del hardware. XGBoost ofrece un rendimiento excepcional.

XGBoost se hizo popular cuando su creador lo usó para un desafío de Kaggle y ganó por un amplio margen. Publicó el resultado y creó un contenedor de Python para permitir que más personas lo usen. Cuando muchas personas reconocieron su potencial, XGBoost se convirtió rápidamente en un campeón de ML.

Métodos de conjunto híbrido

Pero la historia no termina ahí. Hemos visto muchos tipos de conjuntos que usan el mismo tipo de modelo, ¿por qué no probar combinaciones de diferentes modelos? Si lo hace bien, puede crear un método ML aún más poderoso: un conjunto híbrido .

Votación

Votar es uno de los enfoques más simples para crear un conjunto híbrido. Entrena muchos algoritmos de modelos diferentes y los hace "votar" en la fase de predicción:

Diagrama que muestra el flujo de datos en tres modelos entrenados: Máquina de vectores de soporte, Regresión logística y KNN. La salida para el primero y el último es 1, mientras que la salida para la regresión logística es 0. El resultado final es 1.

Puede agregar pesos a cada modelo en función de su rendimiento o probabilidades de predicción y generar un voto ponderado.

Apilado

El apilamiento promueve la idea de votar al agregar una nueva capa sobre los modelos base para hacer la predicción final en lugar de simplemente calcular la media o la mayoría. Agrega el concepto de metaaprendizaje, ya que la nueva capa no aprende de los datos sino de las predicciones del modelo:

Diagrama que muestra el flujo de datos en tres modelos base entrenados, combinando su salida en un modelo apilado antes de mostrar la salida final.

Puede apilar todas las metacapas que desee, lo que da como resultado un modelo con muchos niveles. Para modelos apilados, recomiendo usar árboles de decisión, SVM o perceptrones. Para los modelos base, puede usar cualquier método que desee, incluso otro conjunto, creando un conjunto de conjuntos. El apilamiento funciona incluso mejor con modelos base como árboles de decisión que generan no solo una predicción de valor, sino también la probabilidad de que sea correcta.

El apilamiento es menos popular que el embolsado o el impulso porque es más difícil interpretar lo que aprenden los modelos apilados y porque hay una cantidad mucho mayor de variantes: puede jugar con muchas combinaciones de algoritmos de modelo, configuraciones de hiperparámetros y capas de apilamiento. Sin embargo, con la combinación correcta de modelos, el apilamiento puede ser incluso más fuerte que el impulso y el ensacado.

en cascada

La cascada se utiliza cuando desea tener un alto grado de certeza en la predicción. Utiliza un enfoque de apilamiento pero solo tiene un modelo en cada capa. En cada nivel, los modelos descartan instancias que consideran que no son de la clase deseada.

Con la cascada, los modelos simples evalúan los datos antes que los modelos complejos. En el paso de predicción, el primer modelo recibe los datos. Si la certeza no es mayor que x (el valor tiene que ser alto, algo mayor a 0.9), pasa la instancia al siguiente modelo. De lo contrario, la cascada devuelve la salida prevista de ese modelo. Si ninguna capa puede predecir la clase deseada con un alto grado de certeza, el conjunto devuelve la clase negativa.

Un caso de uso clásico para este modelo es predecir cuándo es probable que una transacción sea fraudulenta. Supongamos que un sistema computa millones de transacciones por día y que es imposible controlar cada una de ellas manualmente. El uso de un conjunto en cascada puede descartar transacciones que no son fraudulentas con una probabilidad muy alta, dejando solo un pequeño subconjunto de transacciones para verificar manualmente:

Diagrama que representa el uso de cascada para detectar transacciones fraudulentas. Dos modelos descartan la posibilidad de fraude con una certeza superior a 0,9, mientras que uno de los modelos posteriores detecta una certeza menor, lo que provoca una verificación manual.

Estos modelos son buenas opciones cuando necesita una excelente métrica de recuperación.

A diferencia de la votación y el apilamiento, un conjunto en cascada utiliza un enfoque multiestado en lugar de un enfoque multiexperto. Es importante tener cuidado con las cascadas muy profundas porque podría producir un sobreajuste.

El valor de los métodos de conjunto

La combinación de muchos modelos nos permite crear predictores mejores y más potentes, como sucede cuando los humanos trabajan juntos. Describimos tres familias de conjuntos (empaquetado, refuerzo e híbridos) y vimos cómo entrenan y predicen.

Un árbol de decisión podría ser un modelo muy débil e inestable (con una varianza alta), pero una multitud de árboles diferentes (bosque aleatorio) puede ser un predictor muy preciso y estable. Una de las principales ventajas de los conjuntos es que construyen modelos con baja varianza y bajo sesgo, una de las mayores compensaciones en el aprendizaje automático. En la mayoría de los casos, superan a otros métodos y, a veces, son incluso mejores que el aprendizaje profundo. Tienden a ser más débiles que las redes neuronales profundas solo cuando operan con datos no estructurados.

Si continuamos con la comparación con las redes neuronales profundas, también podemos decir que los conjuntos tienden a ser más ligeros y rápidos en las fases de entrenamiento y prueba. Además, no requieren hardware costoso para ejecutarse, como GPU independientes y potentes.

Es cierto que los conjuntos carecen de la posibilidad de ser entendidos intuitivamente por humanos porque tener decenas o cientos de modelos trabajando al mismo tiempo crea una herramienta enorme y compleja. Afortunadamente, algunas técnicas nos permiten comprender cómo estos métodos toman sus decisiones. Uno de los más populares es LIME, un método que crea explicaciones interpretables para una instancia particular sobre cualquier modelo de aprendizaje automático.

Las competencias de Kaggle no existen únicamente para que los desarrolladores puedan divertirse, aprender nuevas habilidades o ganar premios. El objetivo final es crear modelos fuertes y liberarlos en la naturaleza, para que puedan hacer su magia en escenarios del mundo real. Este tipo de modelos son utilizados por organizaciones que manejan problemas críticos. Por ejemplo, la detección de fraude es un caso de uso común en industrias como la banca y los viajes, que manejan grandes cantidades de dinero que se mueven en transacciones únicas.

Los conjuntos producen mejores predicciones con una varianza y un sesgo más bajos que otros modelos. Sin embargo, es difícil interpretar lo que están aprendiendo y eso puede ser de importancia crítica en algunas aplicaciones delicadas. Un ejemplo de esto es la industria de préstamos personales: un modelo de ML podría determinar si una persona es elegible o no para un préstamo. Sin embargo, si el cliente pregunta por qué la institución financiera negó el préstamo, debe haber una explicación detallada, no solo "Porque nuestro modelo ML lo dijo".

En última instancia, ya sea que desee crear modelos ML potentes para aplicaciones empresariales, grandes bancos o pequeñas empresas, o simplemente participar en concursos para mejorar su reputación profesional, los conjuntos deben ser su herramienta preferida.