El sobreajuste (overfitting) es un concepto importante con el que todos los profesionales de datos necesitan lidiar tarde o temprano, especialmente si tienes la tarea de construir modelos. Una buena comprensión de este fenómeno te permitirá identificarlo y arreglarlo, ayudándote a crear mejores modelos y soluciones.
En resumen, el sobreajuste ocurre cuando tus modelos fallan en aprender solo los patrones generales más importantes ocultos dentro de tus datos. Un modelo muy poderoso puede aprender incluso los patrones que existen solo en tu conjunto de entrenamiento. Cuando estos modelos se usan en datos reales, sus resultados usualmente son subóptimos, así que es importante detectar el sobreajuste durante el entrenamiento y tomar acción tan pronto como sea posible.
En este artículo, discutiremos cómo detectar y arreglar problemas de sobreajuste.
Si buscas lo suficiente, encontrarás patrones
Discutiremos el sobreajuste en el contexto del aprendizaje supervisado, que es el escenario más común.
Como podrías recordar, en el aprendizaje supervisado usas datos de entrenamiento para enseñar a un modelo cómo hacer algo. Algunas de las tareas más comunes son regresión y clasificación, que discutimos en un artículo anterior.
También, podrías recordar que apartamos otros dos conjuntos de datos importantes antes del paso de entrenamiento: los conjuntos de validación y entrenamiento. Estos datos se usarán para evaluar el rendimiento del modelo.
Usas el entrenamiento junto con diferentes algoritmos para crear modelos con la esperanza de encontrar tendencias específicas o patrones que generalicen bien en datos reales. Si el modelo falla en encontrar suficientes patrones útiles, no tendrá suficiente poder predictivo para ser útil en la práctica. Se dice que un modelo que falla en capturar los patrones y estructura subyacentes de los datos tiene subajuste.
Puedes resolver este problema aumentando la complejidad del modelo o encontrando datos más significativos. Los modelos más poderosos pueden encontrar patrones más sutiles en los datos, y para muchos problemas, esto es necesario para evitar el subajuste. El problema principal es que el conjunto de entrenamiento puede tener peculiaridades específicas o patrones que no existen en ejemplos del mundo real de tu problema.
Un modelo que busca patrones de una manera muy agresiva puede terminar aprendiendo estas peculiaridades y reducir su rendimiento en ejemplos reales. Cuando los modelos aprenden demasiados de estos patrones, se dice que tienen sobreajuste. Un modelo con sobreajuste se desempeña muy bien en los datos usados para entrenarlo pero se desempeña pobremente en datos que no ha visto antes.
El proceso de entrenar un modelo se trata de lograr un equilibrio entre subajuste y sobreajuste. Porque los modelos no pueden diferenciar entre patrones que solo existen en el conjunto de entrenamiento y patrones que generalizan bien, es tu responsabilidad regular el proceso de aprendizaje. Si usas un modelo muy débil arriesgas subajuste, pero si usas uno muy poderoso puedes sobreajustar.
Un ejemplo de la vida real: elecciones presidenciales
Uno de mis ejemplos favoritos para ilustrar la idea de sobreajuste es el siguiente cómic hecho por Randall Munroe:
Créditos: XKCD, naturalmente
Este cómic representa una serie de patrones en elecciones presidenciales que fueron ciertos pero no proporcionaron ningún poder predictivo significativo para la tarea de predecir el próximo presidente de EE.UU.
Un modelo predictivo que toma en consideración estos patrones se desempeñaría pobremente. El modelo creería que representan tendencias significativas y aprendería a detectarlos para hacer predicciones. Cosas como Nadie con dos segundos nombres se ha convertido en presidente son ciertas en el conjunto de datos, pero tienen poca o ninguna relación con el problema real que se está resolviendo.
Un conjunto de datos del mundo real puede tener peculiaridades o patrones similares debido a muchas razones. Es importante entender que el hecho de que existan patrones no significa que proporcionen información significativa para nuestras tareas. Un algoritmo no puede hacer esta distinción por sí mismo, así que depende de nosotros ayudarlos a encontrar los patrones que generalizan bien.
Idealmente, tu modelo solo aprendería patrones significativos que te permitan predecir o clasificar instancias que no ha visto antes.
Entonces, en la práctica, ¿cómo podemos detectar el sobreajuste?
Averiguando si tu modelo tiene sobreajuste
Un modelo que tiene sobreajuste se desempeña muy bien en los datos con los que ha sido entrenado, pero peor en datos que no ha visto antes. La mejor manera de averiguar si tu modelo tiene sobreajuste es evaluando su rendimiento tanto en los conjuntos de entrenamiento como de validación. Esto es mucho más fácil de ver con un ejemplo:
La gráfica anterior representa los resultados de exactitud de un clasificador de imágenes construido con Keras. En el eje X ves el número de epochs (ciclos de entrenamiento) y en el eje Y la exactitud del clasificador.
Después de cada epoch, el clasificador aprende patrones más profundos en los datos. Puedes notar una tendencia interesante:
- Conforme pasan más epochs, el rendimiento en el conjunto de entrenamiento mejora. Esto sucede porque el clasificador aprende más complejidades del conjunto de entrenamiento y puede realizar mejores predicciones.
- Conforme pasan más epochs, el clasificador se desempeña mejor en el conjunto de validación. Esto sucede porque aprende patrones generales que se aplican bien a datos que no ha visto aún. Después de un punto específico (alrededor de 20 epochs), el rendimiento en el conjunto de validación deja de mejorar. Este es el resultado de aprender a reproducir idiosincrasias en el conjunto de entrenamiento que no generalizan bien. Después de este punto, vemos que el modelo tiene sobreajuste.
La forma más fácil de averiguar si tu modelo tiene sobreajuste es midiendo su rendimiento en tus conjuntos de entrenamiento y validación. Si tu modelo se desempeña mucho mejor con datos de entrenamiento que con datos de validación, tienes sobreajuste.
Ahora que sabes cómo detectar el sobreajuste, hablemos sobre cómo arreglarlo.
Lidiando con el sobreajuste
Hay varias formas de lidiar con el sobreajuste. Qué técnica es más efectiva depende de tu tarea, datos y algoritmos, pero eso no significa que puedas aplicar solo una de ellas.
Todas las técnicas usadas para reducir el sobreajuste se centran alrededor de una sola idea: aumentar la influencia de patrones que generalizan bien y reducir la influencia de patrones menos significativos. Exploremos 4 de las formas más comunes de lograr esto:
1. Obtener más datos
Obtener más datos usualmente es una de las formas más efectivas de combatir el sobreajuste. Tener más datos de calidad reduce la influencia de patrones peculiares en tu conjunto de entrenamiento, y lo acerca más a la distribución de los datos en el mundo real.
A veces, encontrar datos no es fácil, así que necesitas verlo como una inversión, ya que podrías necesitar gastar tiempo y dinero para obtenerlos. En este sentido, es mejor ver los datos como un activo, y no como un recurso natural que simplemente puedes tomar.
2. Regularización
La regularización es un conjunto de técnicas usadas para reducir la capacidad del modelo de aprender patrones complejos. Estas técnicas usualmente encogen el espacio de hipótesis del modelo reduciendo su complejidad, asegurando que aprenda principalmente patrones generales.
Las técnicas usualmente son específicas del modelo. Por ejemplo, en un modelo tipo árbol, reducirías la profundidad del árbol o el número total de hojas. En redes neuronales, puedes reducir el número de pesos entrenables o capas, o insertar capas de dropout en diferentes partes de la red.
Otra forma de aplicar regularización es entrenando diferentes modelos de complejidades variables y comparando su rendimiento y qué tan fuertemente sobreajustan.
3. Parada temprana
Detener el proceso de aprendizaje a la mitad puede asegurar que el modelo aprenda justo suficiente información sobre el conjunto de entrenamiento para desempeñarse bien pero no sobreajustar.
En el ejemplo anterior del clasificador de Keras, vemos cómo nuestra red comienza a sobreajustar después de alrededor de 20 epochs.
Una forma de asegurar que la red no sobreajuste es detener el entrenamiento cuando alcanzamos el número de epochs donde la red comienza a sobreajustar. Esta es una solución simple (pero efectiva) para el sobreajuste, y aplica a otros algoritmos.
4. Modelos de conjuntos
Los modelos de conjunto (ensembles) son colecciones de modelos más pequeños cuyos resultados se promedian para hacer predicciones. Son muy buenos resistiendo el sobreajuste, ya que distribuyen errores entre sub-modelos de diferentes complejidades.
Puedes pensar en los ensembles como grupos de expertos cuya opinión promedias para llegar a un consenso general. Esta es una de las razones por las que los modelos de ensemble ganaron mucha popularidad en los últimos años.
Random Forest (y sus variantes) es una de las formas más populares de modelos de ensemble, y se aplica ampliamente a muchos problemas diferentes con usualmente muy buenos resultados.
Hay muchas otras técnicas que puedes usar, pero estas cuatro representan las formas más comunes de lidiar con el sobreajuste. La mejor forma de aprender cómo usar estas técnicas es aplicándolas en proyectos reales usando tus librerías y herramientas de ML favoritas.
Lo que necesitas recordar sobre el sobreajuste
El sobreajuste es un tema extremadamente importante para cualquier científico de datos profesional o ingeniero de machine learning, pero puede ser un poco desalentador al principio. Este es un resumen de las ideas más importantes que necesitas recordar:
- Los patrones existen en tu conjunto de datos de entrenamiento. Algunos de estos patrones representan tendencias reales en el espacio del problema, mientras que otros son solo peculiaridades de tu conjunto de entrenamiento. Fallar en aprender patrones significativos resulta en subajuste, y aprender demasiados de los patrones peculiares resulta en sobreajuste. Ambos escenarios llevan a modelos que se desempeñan pobremente en datos reales.
- Entrenar un modelo se trata de balancear dos fuerzas competidoras: subajuste y sobreajuste. Quieres aprender patrones de tu conjunto de entrenamiento, pero solo los que generalizan bien. La línea divisoria es imposible de calcular teóricamente, así que se necesita mucha experimentación para encontrar el compromiso correcto.
- Puedes detectar fácilmente el sobreajuste comparando las métricas de rendimiento de ejecutar tu modelo contra el conjunto de validación y el conjunto de entrenamiento. Un modelo que se desempeña mucho mejor en los datos de entrenamiento que en los datos de validación tiene sobreajuste.
- Hay muchas técnicas usadas para lidiar con el sobreajuste. Usualmente, aumentas la cantidad de datos disponibles o reduces el poder de aprendizaje del modelo. Un modelo que busca demasiado fuerte por patrones probablemente terminará aprendiendo peculiaridades sin importancia.
Si mantienes estas cosas en mente cuando entrenes tus modelos será mucho más fácil detectar y arreglar el sobreajuste.
¡Gracias por leer!
Qué hacer después
- Comparte este artículo con amigos y colegas. Gracias por ayudarme a llegar a personas que podrían encontrar útil esta información.
- Este artículo está basado en el libro: Data Science for Business: What You Need to Know about Data Mining and Data-Analytic Thinking.
- Envíame un email con preguntas, comentarios o sugerencias (está en la página Autor)