Cómo debes validar los modelos de aprendizaje automático

Validación de modelos de aprendizaje automático

Aprende a construir confianza en tus soluciones de aprendizaje automático

https://www.shutterstock.com/image-photo/desert-island-palm-tree-on-beach-71305345

Los grandes modelos de lenguaje ya han transformado la industria de la ciencia de datos de una manera importante. Una de las mayores ventajas es el hecho de que, para la mayoría de las aplicaciones, se pueden utilizar tal como están, sin necesidad de entrenarlos nosotros mismos. Esto nos obliga a reconsiderar algunas de las suposiciones comunes sobre todo el proceso de aprendizaje automático: muchos profesionales consideran que la validación es “parte del entrenamiento”, lo que sugeriría que ya no es necesaria. Esperamos que el lector haya sentido un escalofrío ante la sugerencia de que la validación sea obsoleta, porque definitivamente no lo es.

Aquí examinamos la idea misma de la validación y prueba del modelo. Si te consideras totalmente familiarizado con los fundamentos del aprendizaje automático, puedes saltarte este artículo. De lo contrario, prepárate, porque tenemos algunos escenarios difíciles de creer para ti.

Este artículo es un trabajo conjunto de Patryk Miziuła, PhD y Jan Kanty Milczek.

Aprendiendo en una isla desierta

Imagina que quieres enseñar a alguien a reconocer los idiomas de los tweets en Twitter. Así que lo llevas a una isla desierta, le das 100 tweets en 10 idiomas, le dices en qué idioma está cada tweet y lo dejas solo durante un par de días. Después de eso, regresas a la isla para comprobar si realmente ha aprendido a reconocer los idiomas. Pero, ¿cómo puedes examinarlo?

Lo primero que se te ocurre es preguntarle sobre los idiomas de los tweets que recibió. Así que lo desafías de esta manera y él responde correctamente para los 100 tweets. ¿Realmente significa que es capaz de reconocer los idiomas en general? Posiblemente, ¡pero tal vez solo se haya memorizado estos 100 tweets! ¡Y no tienes forma de saber cuál de los dos escenarios es cierto!

Aquí no verificaste lo que querías verificar. Basándote en tal examen, simplemente no puedes saber si puedes confiar en sus habilidades de reconocimiento de idioma de los tweets en una situación de vida o muerte (que tienden a ocurrir cuando hay islas desiertas involucradas).

¿Qué debemos hacer en su lugar? ¿Cómo asegurarnos de que haya aprendido en lugar de simplemente memorizar? ¡Dale otros 50 tweets y haz que te diga en qué idioma están! Si los acierta, realmente es capaz de reconocer el idioma. Pero si falla por completo, sabes que simplemente se aprendió de memoria los primeros 100 tweets, lo cual no era el punto de todo esto.

La historia anterior describe figurativamente cómo los modelos de aprendizaje automático aprenden y cómo debemos verificar su calidad:

  • El hombre en el cuento representa un modelo de aprendizaje automático. Para desconectar a un ser humano del mundo, necesitas llevarlo a una isla desierta. Para un modelo de aprendizaje automático es más fácil, solo es un programa de computadora, por lo que no comprende inherentemente la idea del mundo.
  • Reconocer el idioma de un tweet es una tarea de clasificación, con 10 posibles clases, es decir, categorías, ya que elegimos 10 idiomas.
  • Los primeros 100 tweets utilizados para el aprendizaje se llaman el conjunto de entrenamiento. Los idiomas correctos adjuntos se llaman etiquetas.
  • Los otros 50 tweets solo se utilizan para examinar al hombre/modelo y se llaman el conjunto de prueba. Ten en cuenta que conocemos sus etiquetas, pero el hombre/modelo no.

El gráfico a continuación muestra cómo entrenar y probar correctamente el modelo:

Imagen 1: esquema para entrenar y probar correctamente el modelo. Imagen del autor.

Entonces, la regla principal es:

Prueba un modelo de aprendizaje automático en un conjunto de datos diferente al que lo entrenaste.

Si el modelo se desempeña bien en el conjunto de entrenamiento, pero tiene un rendimiento pobre en el conjunto de pruebas, decimos que el modelo está sobreajustado. “Sobreajuste” significa memorizar los datos de entrenamiento. Eso definitivamente no es lo que queremos lograr. Nuestro objetivo es tener un modelo entrenado, bueno tanto para el conjunto de entrenamiento como para el conjunto de pruebas. Solo este tipo de modelo puede ser confiable. Y solo entonces podemos creer que se desempeñará tan bien en la aplicación final para la cual se está construyendo como lo hizo en el conjunto de pruebas.

Ahora llevémoslo un paso más allá.

1000 hombres en 1000 islas desiertas

Imagina que realmente quieres enseñar a un hombre a reconocer los idiomas de los tweets en Twitter. Entonces encuentras 1000 candidatos, llevas a cada uno a una isla desierta diferente, les das los mismos 100 tweets en 10 idiomas, les dices en qué idioma está cada tweet y los dejas solos durante un par de días. Después de eso, examinas a cada candidato con el mismo conjunto de 50 tweets diferentes.

¿Qué candidato elegirás? Por supuesto, al que le fue mejor en los 50 tweets. Pero, ¿qué tan bueno es realmente? ¿Podemos creer realmente que va a desempeñarse tan bien en la aplicación final como lo hizo en estos 50 tweets?

¡La respuesta es no! ¿Por qué no? Para decirlo simplemente, si cada candidato sabe algunas respuestas y adivina algunas de las otras, entonces eliges al que obtuvo más respuestas correctas, no al que sabía más. Él es realmente el mejor candidato, pero su resultado está inflado por “adivinanzas afortunadas”. Es probable que sea una gran parte de la razón por la que fue elegido.

Para mostrar este fenómeno en forma numérica, imagina que 47 tweets fueron fáciles para todos los candidatos, pero los 3 mensajes restantes fueron tan difíciles para todos los competidores que todos simplemente adivinaron los idiomas a ciegas. La probabilidad dice que la posibilidad de que alguien (posiblemente más de una persona) obtenga los 3 tweets difíciles es superior al 63% (información para los amantes de las matemáticas: es casi 1-1/e). Por lo tanto, probablemente elijas a alguien que obtuvo una puntuación perfecta, pero en realidad no es perfecto para lo que necesitas.

Tal vez 3 de 50 tweets en nuestro ejemplo no suenan asombrosos, pero para muchos casos de la vida real esta discrepancia tiende a ser mucho más pronunciada.

Entonces, ¿cómo podemos comprobar qué tan bueno es realmente el ganador? ¡Sí, tenemos que obtener otro conjunto de 50 tweets y examinarlo una vez más! Solo de esta manera obtendremos una puntuación en la que podamos confiar. Este nivel de precisión es lo que esperamos de la aplicación final.

Volviendo a la terminología de aprendizaje automático

En términos de nombres:

  • El primer conjunto de 100 tweets sigue siendo el conjunto de entrenamiento, ya que lo usamos para entrenar los modelos.
  • Pero ahora el propósito del segundo conjunto de 50 tweets ha cambiado. Esta vez se utilizó para comparar diferentes modelos. A dicho conjunto se le llama conjunto de validación.
  • Ya entendemos que el resultado del mejor modelo examinado en el conjunto de validación está artificialmente aumentado. Por eso necesitamos otro conjunto de 50 tweets para desempeñar el papel del conjunto de pruebas y brindarnos información confiable sobre la calidad del mejor modelo.

Puedes encontrar el flujo de uso del conjunto de entrenamiento, validación y pruebas en la siguiente imagen:

Imagen 2: esquema para entrenar, validar y probar los modelos correctamente. Imagen por el autor.

Muy bien, ¿y por qué usamos conjuntos de exactamente 100, 50 y 50 tweets?

Aquí están las dos ideas generales detrás de estos números:

Pon la mayor cantidad de datos posible en el conjunto de entrenamiento.

Cuanto más datos de entrenamiento tengamos, más amplia será la visión que tengan los modelos y mayores serán las posibilidades de entrenamiento en lugar de sobreajuste. Los únicos límites deben ser la disponibilidad de datos y los costos de procesamiento de los datos.

Pon la menor cantidad de datos posible en los conjuntos de validación y prueba, pero asegúrate de que sean lo suficientemente grandes.

¿Por qué? Porque no quieres desperdiciar muchos datos en algo que no sea entrenamiento. Pero por otro lado, probablemente sientas que evaluar el modelo basado en un solo tweet sería arriesgado. Entonces necesitas un conjunto de tweets lo suficientemente grande como para no tener miedo de que puntajes extraños afecten el resultado en caso de un número pequeño de tweets realmente extraños.

¿Y cómo convertir estas dos pautas en números exactos? Si tienes disponibles 200 tweets, entonces una división de 100/50/50 parece estar bien, ya que cumple con ambas reglas anteriores. Pero si tienes 1,000,000 de tweets, entonces fácilmente puedes optar por una división de 800,000/100,000/100,000 o incluso 900,000/50,000/50,000. Tal vez hayas visto algunas pistas porcentuales en algún lugar, como 60%/20%/20% más o menos. Bueno, son solo una simplificación exagerada de las dos reglas principales mencionadas anteriormente, así que es mejor adherirse a las pautas originales.

OK, pero ¿cómo elegir qué tweets irán en el conjunto de entrenamiento/validación/prueba?

Creemos que esta regla principal te queda clara en este punto:

Usa tres conjuntos de datos diferentes para entrenar, validar y probar los modelos.

Entonces, ¿qué pasa si se rompe esta regla? ¿Qué pasa si los mismos datos o casi los mismos, ya sea por accidente o por falta de atención, se incluyen en más de uno de los tres conjuntos de datos? Esto es lo que llamamos fuga de datos. Los conjuntos de validación y prueba ya no son confiables. No podemos decir si el modelo está entrenado o sobreajustado. Simplemente no podemos confiar en el modelo. No es bueno.

Tal vez pienses que estos problemas no conciernen a nuestra historia de la isla desierta. Simplemente tomamos 100 tweets para entrenamiento, otros 50 para validación y otros 50 para prueba, y eso es todo. Desafortunadamente, no es tan simple. Tenemos que tener mucho cuidado. Veamos algunos ejemplos.

Ejemplo 1: muchos tweets aleatorios

Supongamos que has recopilado 1,000,000 de tweets completamente aleatorios de Twitter. Diferentes autores, tiempos, temas, localizaciones, números de reacciones, etc. Simplemente aleatorios. Y están en 10 idiomas y quieres usarlos para enseñar al modelo a reconocer el idioma. Entonces no tienes que preocuparte por nada y simplemente puedes seleccionar 900,000 tweets para el conjunto de entrenamiento, 50,000 para el conjunto de validación y 50,000 para el conjunto de prueba. Esto se llama división aleatoria.

¿Por qué seleccionar al azar y no poner los primeros 900,000 tweets en el conjunto de entrenamiento, los siguientes 50,000 en el conjunto de validación y los últimos 50,000 en el conjunto de prueba? Porque los tweets pueden estar inicialmente ordenados de una manera que no ayudaría, como alfabéticamente o por el número de caracteres. Y no nos interesa poner solo tweets que comiencen con ‘Z’ o los más largos en el conjunto de prueba, ¿verdad? Así que es más seguro seleccionarlos al azar.

Imagen 3: división aleatoria de datos. Imagen del autor.

La suposición de que los tweets son completamente aleatorios es fuerte. Siempre piensa dos veces si eso es cierto. En los próximos ejemplos verás qué sucede si no lo es.

Ejemplo 2: no tantos tweets aleatorios

Si solo tenemos 200 tweets completamente aleatorios en 10 idiomas, aún podemos dividirlos al azar. Pero entonces surge un nuevo riesgo. Supongamos que un idioma es predominante con 128 tweets y hay 8 tweets para cada uno de los otros 9 idiomas. La probabilidad dice que entonces la posibilidad de que no todos los idiomas vayan al conjunto de prueba de 50 elementos es superior al 61% (información para nerds de matemáticas: usa el principio de inclusión-exclusión). Pero definitivamente queremos probar el modelo en los 10 idiomas, así que definitivamente necesitamos todos ellos en el conjunto de prueba. ¿Qué debemos hacer?

Podemos seleccionar los tweets clase por clase. Entonces toma la clase predominante de 128 tweets, selecciona 64 tweets para el conjunto de entrenamiento, 32 para el conjunto de validación y 32 para el conjunto de prueba. Luego haz lo mismo para todas las otras clases: selecciona 4, 2 y 2 tweets para entrenamiento, validación y prueba respectivamente. De esta manera, formarás tres conjuntos del tamaño que necesitas, cada uno con todas las clases en las mismas proporciones. Esta estrategia se llama división aleatoria estratificada.

La división aleatoria estratificada parece ser mejor/más segura que la división aleatoria ordinaria, entonces ¿por qué no la usamos en el Ejemplo 1? ¡Porque no era necesario! Lo que a menudo desafía la intuición es que si el 5% de 1,000,000 de tweets están en inglés y extraemos 50,000 tweets sin tener en cuenta el idioma, entonces el 5% de los tweets extraídos también estarán en inglés. Así es como funciona la probabilidad. Pero la probabilidad necesita números lo suficientemente grandes para funcionar correctamente, así que si tienes 1,000,000 de tweets, no importa, pero si solo tienes 200, ten cuidado.

Ejemplo 3: tweets de varias instituciones

Ahora supongamos que tenemos 100,000 tweets, pero provienen solo de 20 instituciones (digamos un canal de televisión de noticias, un gran club de fútbol, etc.), y cada una de ellas tiene 10 cuentas de Twitter en 10 idiomas. Y nuevamente, nuestro objetivo es reconocer el idioma de Twitter en general. ¿Podemos simplemente usar la división aleatoria?

Tienes razón, si pudiéramos, no lo habríamos preguntado. ¿Pero por qué no? Para entender esto, primero consideremos un caso aún más simple: ¿qué pasaría si entrenáramos, validáramos y probáramos un modelo solo con tweets de una institución? ¿Podríamos usar este modelo en tweets de cualquier otra institución? ¡No lo sabemos! Tal vez el modelo se ajustaría demasiado al estilo único de publicación de esta institución. ¡No tendríamos herramientas para comprobarlo!

Volviendo a nuestro caso. El punto es el mismo. El número total de 20 instituciones es relativamente pequeño. Entonces, si usamos datos de las mismas 20 instituciones para entrenar, comparar y evaluar los modelos, es posible que el modelo se ajuste en exceso a los 20 estilos únicos de estas 20 instituciones y falle con cualquier otro autor. Y nuevamente no hay forma de comprobarlo. No es bueno.

Entonces, ¿qué hacer? Sigamos una regla principal más:

Los conjuntos de validación y prueba deben simular el caso real en el que se aplicará el modelo de la manera más fiel posible.

Ahora la situación está más clara. Dado que esperamos diferentes autores en la aplicación final a los que tenemos en nuestros datos, ¡también deberíamos tener diferentes autores en los conjuntos de validación y prueba que en el conjunto de entrenamiento! ¡Y la forma de hacerlo es dividir los datos por instituciones! Si seleccionamos, por ejemplo, 10 instituciones para el conjunto de entrenamiento, otras 5 para el conjunto de validación y las últimas 5 para el conjunto de prueba, el problema está resuelto.

Imagen 4: división estratificada de datos. Imagen del autor.

Ten en cuenta que cualquier división menos estricta por institución (como poner la totalidad de 4 instituciones y una pequeña parte de las otras 16 en el conjunto de prueba) sería una fuga de datos, lo cual es malo, así que debemos ser inflexibles cuando se trata de separar las instituciones.

Una nota final triste: para una división de validación correcta por institución, podemos confiar en nuestra solución para tweets de diferentes instituciones. Pero los tweets de cuentas privadas pueden —y lo hacen— verse diferentes, así que no podemos estar seguros de que el modelo que tenemos funcionará bien para ellos. Con los datos que tenemos, no tenemos herramientas para comprobarlo…

Ejemplo 4: mismos tweets, objetivo diferente

El Ejemplo 3 es difícil, pero si lo has seguido cuidadosamente, este será bastante fácil. Entonces, supongamos que tenemos exactamente los mismos datos que en el Ejemplo 3, pero ahora el objetivo es diferente. Esta vez queremos reconocer el idioma de otros tweets de las mismas 20 instituciones que tenemos en nuestros datos. ¿La división aleatoria funciona ahora?

La respuesta es: sí. La división aleatoria cumple perfectamente con la última regla principal mencionada anteriormente, ya que solo estamos interesados en las instituciones que tenemos en nuestros datos.

Los Ejemplos 3 y 4 nos muestran que la forma en que debemos dividir los datos no depende solo de los datos que tenemos. Depende tanto de los datos como de la tarea. Por favor, tenlo en cuenta siempre que diseñes la división de entrenamiento/validación/prueba.

Ejemplo 5: aún los mismos tweets, otro objetivo

En el último ejemplo, mantengamos los datos que tenemos, pero ahora intentemos enseñarle a un modelo a predecir la institución a partir de tweets futuros. Una vez más, tenemos una tarea de clasificación, pero esta vez con 20 clases, ya que tenemos tweets de 20 instituciones. ¿Qué pasa en este caso? ¿Podemos dividir nuestros datos al azar?

Como antes, pensemos en un caso más simple por un momento. Supongamos que solo tenemos dos instituciones: una estación de noticias de televisión y un gran club de fútbol. ¿Sobre qué tuitean? Ambos les gusta saltar de un tema candente a otro. Tres días sobre Trump o Messi, luego tres días sobre Biden y Ronaldo, y así sucesivamente. Claramente, en sus tweets podemos encontrar palabras clave que cambian cada par de días. ¿Y qué palabras clave veremos en un mes? ¿Qué político o villano o jugador de fútbol o entrenador de fútbol estará “de moda” entonces? Posiblemente uno que sea completamente desconocido en este momento. Entonces, si quieres aprender a reconocer la institución, no debes enfocarte en palabras clave temporales, sino intentar captar el estilo general.

OK, volvamos a nuestras 20 instituciones. La observación anterior sigue siendo válida: los temas de los tweets cambian con el tiempo, por lo que si queremos que nuestra solución funcione para futuros tweets, no debemos enfocarnos en palabras clave de corta duración. Pero un modelo de aprendizaje automático es perezoso. Si encuentra una manera fácil de cumplir la tarea, no busca más allá. Y ceñirse a las palabras clave es solo una manera fácil. Entonces, ¿cómo podemos verificar si el modelo aprendió correctamente o simplemente memorizó las palabras clave temporales?

Estamos bastante seguros de que te das cuenta de que si usas la división aleatoria, debes esperar tweets sobre cada héroe de la semana en los tres conjuntos. De esta manera, terminas con las mismas palabras clave en los conjuntos de entrenamiento, validación y prueba. Esto no es lo que nos gustaría tener. Necesitamos dividir de manera más inteligente. Pero, ¿cómo?

Cuando volvemos a la última regla principal, se vuelve fácil. Queremos usar nuestra solución en el futuro, ¡así que los conjuntos de validación y prueba deben ser el futuro con respecto al conjunto de entrenamiento! Deberíamos dividir los datos por tiempo. Entonces, si tenemos, por ejemplo, 12 meses de datos, desde julio de 2022 hasta junio de 2023, poner julio de 2022 – abril de 2023 en el conjunto de prueba, mayo de 2023 en el conjunto de validación y junio de 2023 en el conjunto de prueba debería hacer el trabajo.

Imagen 5: división de datos por tiempo. Imagen del autor.

Tal vez te preocupe que con la división por tiempo no verifiquemos la calidad del modelo a lo largo de las estaciones. Tienes razón, eso es un problema. Pero aún es un problema menor que el que tendríamos si dividiéramos aleatoriamente. También puedes considerar, por ejemplo, la siguiente división: del 1 al 20 de cada mes para el conjunto de entrenamiento, del 20 al 25 de cada mes para el conjunto de validación, del 25 al último de cada mes para el conjunto de prueba. En cualquier caso, elegir una estrategia de validación es un equilibrio entre posibles fugas de datos. Mientras lo entiendas y elijas conscientemente la opción más segura, lo estás haciendo bien.

Resumen

Establecimos nuestra historia en una isla desierta e intentamos evitar cualquier complejidad, aislando el problema de validación y prueba del modelo de todas las posibles consideraciones del mundo real. Aún así, nos encontramos con un obstáculo tras otro. Afortunadamente, las reglas para evitarlos son fáciles de aprender. Como probablemente aprenderás en el camino, también son difíciles de dominar. No siempre notarás la fuga de datos de inmediato. Tampoco siempre podrás evitarlo. Sin embargo, la consideración cuidadosa de la credibilidad de tu esquema de validación seguramente dará como resultado mejores modelos. Esto es algo que sigue siendo relevante incluso cuando se inventan nuevos modelos y se lanzan nuevos marcos de trabajo.

Además, tenemos a 1000 hombres varados en islas desiertas. Un buen modelo podría ser justo lo que necesitamos para rescatarlos de manera oportuna.