Los sets de entrenamiento, validación y prueba

En este artículo veremos qué son los sets de entrenamiento, validación y prueba que convencionalmente debemos usar al entrenar un modelo de Machine Learning.

¡Así que listo, comencemos!

Video

Como siempre, en el canal de YouTube se encuentra el video de este post:

Introducción

Cuando abordamos un proyecto de Machine Learning usualmente debemos elegir entre múltiples modelos y determinar cuál de ellos generará las mejores predicciones.

Y generalmente lo que tenemos que hacer es entrenar múltiples modelos y ponerlos a prueba para determinar cuál de ellos tiene el mejor desempeño, garantizando a la vez que el modelo seleccionado funcione adecuadamente con datos que nunca antes ha visto.

Y para lograr todo esto usualmente debemos usar tres sets de datos: entrenamiento, validación y prueba.

Así que en este artículo veremos qué son y porqué son necesarios estos sets de datos al momento de implementar una solución de Machine Learning.

Los parámetros e hiperparámetros de un modelo

En un artículo anterior hablamos en detalle de los parámetros e hiperparámetros de un modelo, dos conceptos que resultan fundamentales para entender qué son los sets de entrenamiento, validación y prueba.

En esencia los parámetros son los coeficientes internos del modelo, es decir, son cantidades numéricas que no podemos controlar y que en su lugar el modelo aprende a partir de los datos. Y después del entrenamiento el modelo usa estos parámetros para generar las predicciones.

Y por otro lado tenemos los hiperparámetros que son unos coeficientes externos al modelo y que debemos definir al momento de programar el algoritmo de entrenamiento.

Por ejemplo, en un bosque aleatorio los parámetros son los umbrales internos que usa el modelo para clasificar un dato en una u otra categoría, mientras que los hiperparámetros son por ejemplo el número de árboles que contendrá el bosque o el número máximo de características usado en la clasificación.

Con estos conceptos claros ya estamos listos para comenzar a ver en qué consisten los sets de entrenamiento, validación y prueba.

El problema a resolver y la selección del modelo

Partamos de un problema hipotético que nos permitirá ver el papel que juegan los sets de entrenamiento, validación y prueba en el desarrollo de un modelo.

Supongamos en este sencillo ejemplo que hemos recolectado datos de 10.000 sujetos con información sobre su peso, nivel de glucosa en sangre y si la persona es o no hipertensa.

Y supongamos que a partir de este set de datos queremos entrenar un modelo de clasificación que tome como entrada las variables peso y nivel de glucosa en sangre y que prediga si una persona es o no es hipertensa.

Al intentar resolver este problema nos enfrentaremos a una situación que usualmente encontraremos en diferentes proyectos de Machine Learning, que es elegir cuál es el modelo más adecuado para generar las predicciones.

En este caso podríamos preguntarnos qué modelo resultará más adecuado ¿Una Red Neuronal, un bosque aleatorio, un modelo de regresión logística?

Realmente no podemos saberlo con antelación y la única forma de determinar qué tipo de modelo resulta más adecuado consiste en entrenar varios tipos de modelos y luego ponerlos a prueba.

Así que veamos, para este ejemplo hipotético, cuál sería el procedimiento a seguir, usando precisamente los sets de entrenamiento, validación y prueba.

Paso 1: encontrar los parámetros de cada modelo

Supongamos que para este problema entrenaremos los tres tipos de modelos mencionados anteriormente: la red neuronal, un bosque aleatorio y un modelo de regresión logística.

La primera pregunta que debemos resolver es ¿cómo encontramos los parámetros de cada modelo? y ¿cuáles datos debemos usar en este caso?

Si usamos la totalidad de los datos tendríamos un inconveniente, pues la idea es no sólo entrenar el modelo sino también ponerlo a prueba en un escenario real.

Es decir que una vez entrenado el modelo, nos interesa también presentarle unos datos que no haya visto previamente para determinar si logra clasificar adecuadamente a los sujetos.

Así que en lugar de entrenar los modelos candidatos con la totalidad de los datos, lo que haremos será una primera partición: tomaremos por ejemplo de forma aleatoria un 70% de los datos y se los presentaremos a cada modelo durante el entrenamiento para que logre calcular sus parámetros, mientras que el 30% restante lo mantendremos por ahora oculto.

Y a este set usado para obtener los parámetros, usado durante el entrenamiento de cada modelo, lo llamaremos precisamente el set de entrenamiento.

Paso 2: encontrar los hiperparámetros de cada modelo y elegir el mejor modelo

Pero recordemos que cada modelo tiene unos hiperparámetros, y recordemos que dependiendo de estos hiperparámetros podremos mejorar o empeorar el desempeño de cada clasificador.

Y recordemos además que nos interesa elegir el mejor modelo de los tres que estamos considerando.

Así que en este segundo paso debemos responder dos preguntas: ¿cómo elegir los hiperparámetros de cada modelo para que tenga el máximo desempeño posible? Y ¿cómo elegir cuál es el mejor modelo de todos los modelos considerados?

De nuevo, para responder estas preguntas necesitamos recurrir a los datos. Pero no podemos usar el set de entrenamiento, pues al hacerlo tendríamos varios inconvenientes.

En primer lugar, si afinamos los hiperparámetros de cada modelo con el mismo set de entrenamiento podríamos llegar a una situación de sobre-ajuste (u overfitting): cada modelo tenderá a “memorizar” los datos de entrenamiento, aparentemente tendrá un buen desempeño, pero en realidad no generará buenas clasificaciones cuando le presentemos datos que nunca antes ha visto.

En segundo lugar, para elegir de todos los modelos posibles cuál es el mejor, deberíamos tomar cada modelo entrenado y, con sus hiperparámetros afinados, presentarle los datos y generar predicciones con cada clasificador y simplemente elegir aquel que tenga el mayor porcentaje de aciertos.

Pero al usar el set de entrenamiento para generar estas predicciones tendríamos el mismo inconveniente mencionado anteriormente: el desempeño obtenido para cada modelo no sería una medida fiable de su verdadero comportamiento. De nuevo, la idea es ponerlo a prueba con un set de datos que no haya visto previamente.

Así que la forma adecuada de afinar los hiperparámetros de cada modelo y de elegir el modelo más adecuado es usando un set de datos que no haya sido visto previamente por ninguno de los modelos.

Y recordemos que en el problema que estamos resolviendo, habíamos ocultado el 30% de los datos. Así que vamos a tomar este subset, lo vamos a mezclar aleatoriamente y lo vamos a partir en dos. Y vamos a tomar la mitad de estos datos (es decir el 15% del set de datos total) y lo vamos a usar para afinar los hiperparámetros y para elegir el mejor modelo.

Este subset se conoce precisamente con el nombre de set de validación y nos permitirá obtener los mejores hiperparámetros de cada modelo y seleccionar el mejor modelo, de todos los que hayamos entrenado, de una manera objetiva.

Paso 3: poner a prueba el modelo seleccionado

Muy bien, hasta este punto ya hemos entrenado los diferentes modelos (usando el set de entrenamiento) y ya hemos realizado la afinación de sus hiperparámetros y hemos seleccionado el mejor modelo usando el set de validación.

Así que en este punto ya hemos elegido el mejor modelo que permitiría generar las mejores predicciones posibles para nuestro problema en particular.

Y sólo nos resta entonces responder una pregunta: ¿cómo se comportaría el modelo seleccionado con datos que nunca ha visto?

Es decir, la idea es poder usar nuestro modelo en el mundo real, con datos nuevos. Así que si tenemos nuevos sujetos deberíamos medir su nivel de glucosa en sangre y su peso y usar el modelo para predecir, con un alto grado de fiabilidad, si el paciente tiene o no tiene hipertensión.

Y para poner a prueba el modelo seleccionado no podemos usar ni el set de entrenamiento ni el de validación, porque se trata de datos que el modelo ya ha analizado previamente.

De nuevo, debemos ser totalmente imparciales y objetivos en este punto, para que al poner a prueba el modelo tengamos una medida certera de cuál sería su desempeño con datos que nunca antes había visto.

Y ¿cuáles son los datos que aún no ha visto el modelo seleccionado? Pues recordemos que habíamos tomado un 70% de los datos para el entrenamiento y un 15% como set de validación, así que aún tenemos un 15% de los datos ocultos.

Pues podemos precisamente usar estos datos restantes para poner a prueba el modelo y determinar cuál sería su desempeño en condiciones reales. Y este set se conoce precisamente con el nombre de set de prueba.

Y acá es importante hacer hincapié en que este set lo debemos mantener en todo momento oculto al modelo y sólo se lo debemos presentar al final de todo el proceso, cuando ya hayamos realizado el entrenamiento, seleccionado el mejor modelo y afinado sus hiperparámetros.

Si no hacemos esto podríamos obtener una medida poco fiable del desempeño real del modelo y esto podría afectar su fiabilidad al momento de hacer predicciones con datos totalmente nuevos.

Conclusión

Muy bien, acabamos de entender qué son los sets de entrenamiento, validación y prueba usados convencionalmente al momento de construir modelos de Machine Learning.

En esencia el set de entrenamiento permite obtener los parámetros de cada modelo candidato, mientras que el de validación permite ajustar los hiperparámetros de cada uno de estos modelos así como elegir el modelo más con el mejor desempeño para el problema que estamos resolviendo.

Y una vez elegido el mejor modelo podemos ponerlo a prueba precisamente con el set de prueba, lo que nos dará una medida de cuál sería su desempeño una vez llevemos el modelo a producción y éste comience a generar predicciones con datos nunca antes vistos.

Esta partición del set de datos en entrenamiento, validación y prueba es un enfoque muy utilizado sobre todo en Deep Learning, cuando contamos con miles, cientos de miles o incluso millones de datos, y generalmente podemos usar proporciones como 70/15/15 u 80/10/10.

Sin embargo este enfoque no resulta adecuado cuando tenemos un set de datos relativamente pequeño, con unos cuantos cientos o unos pocos miles de datos. En este caso resulta más adecuado usar la validación cruzada, una técnica de la que hablaremos más adelante en otro artículo.

Si quieres profundizar en los temas que acabamos de ver en este post te invito a leer estos artículos relacionados que encontrarás acá en el blog: