¿Cómo seleccionar el mejor modelo en un problema de Machine Learning?

En este artículo veremos los pasos que se deberían llevar a cabo para seleccionar el modelo más adecuado al momento de resolver un problema de Machine Learning.

¡Así que listo, comencemos!

Video

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

Introducción

Una de las principales decisiones que debemos tomar al momento de resolver un problema de Machine Learning es elegir el modelo más adecuado para los datos que estamos procesando.

Es decir que el objetivo es encontrar el modelo que, una vez entrenado, genere las mejores predicciones posibles.

Así que en este artículo veremos la serie de pasos que deberíamos llevar a cabo para poder seleccionar el modelo más adecuado para nuestro problema de Machine Learning.

Aclaraciones iniciales

Antes de ver este paso a paso es importante hacer varias aclaraciones.

En primer lugar, cuando digo “elegir el mejor modelo” me estoy refiriendo únicamente al modelo que genera las mejores predicciones.

Es decir que en lo que vamos a discutir a continuación no vamos a tener en cuenta por ejemplo variables como que el modelo que requiera menos tiempo de cómputo o menos espacio en memoria.

En segundo lugar es importante tener claros varios conceptos que hemos visto en otros artículos pero que resultan esenciales para entender el procedimiento paso a paso que vamos a ver en un momento.

El primero de ellos son los parámetros e hiper-parámetros de un modelo de Machine Learning: los parámetros de un modelo son las variables numéricas internas que el modelo aprende con el algoritmo de entrenamiento, mientras que los hiper-parámetros son las variables numéricas externas que nosotros debemos fijar al momento de programar dicho algoritmo.

Por otra parte, existe algo que se conoce como la afinación o ajuste de hiper-parámetros que nos permite encontrar los valores más adecuados que deben tener los hiper-parámetros para lograr generar las mejores predicciones posibles.

Y tanto para entrenar el modelo como para ajustar sus hiper-parámetros y evaluar su desempeño podemos usar dos enfoques: la partición del set de datos en los sets de entrenamiento, validación y prueba o usando lo que se conoce como la validación cruzada.

Así que con estas aclaraciones iniciales ya estamos listos para entender cómo realizar la selección del modelo. Entonces comencemos viendo cuál es el problema que queremos resolver.

El problema a resolver

Supongamos este problema hipotético: queremos predecir la eficiencia en el consumo de gasolina de un vehículo, es decir la cantidad de litros de gasolina que consume por cada kilómetro recorrido.

Esta eficiencia en el consumo es simplemente un número. Por ejemplo, una eficiencia de 0.5 L/Km indica que para recorrer 1 Km en promedio el vehículo requerirá un consumo de medio litro de combustible.

Y supongamos que esta eficiencia depende de variables como el tamaño del motor del vehículo (en centímetros cúbicos), su potencia (en caballos de potencia), su peso (en kilogramos) así como el número de cilindros y la edad misma del vehículo.

Así que el objetivo es construir un modelo de Machine Learning que tome estas variables numéricas de entrada y que aprenda a la salida a generar una predicción del valor que tendría la eficiencia en el consumo.

Esto se conoce como una tarea de regresión, que quiere decir que el modelo debe aprender a predecir una cantidad numérica. Y la idea es que esta predicción sea lo más cercana posible al valor real de la eficiencia del consumo.

Así que con este panorama ahora sí podemos ver el procedimiento paso a paso para seleccionar el mejor modelo para este problema en particular.

Pasos para seleccionar el mejor modelo

La idea básica de la selección del mejor modelo consiste en construir diferentes modelos, usar el set de datos para evaluar su desempeño y elegir aquel modelo que genere las mejores predicciones.

Y para esto sugiero una serie de 5 pasos:

Paso 1: definir la métrica de desempeño

Y el primer paso es establecer la métrica de desempeño que usaremos para comparar los diferentes modelos.

Esta métrica de desempeño es simplemente una fórmula matemática que nos arrojará un número que nos indicará qué tan buenas o malas predicciones está generando el modelo.

Y esta fórmula en esencia lo que hace es comparar las predicciones hechas por el modelo con los valores de referencia. Es decir que en este caso comparará el valor predicho para la eficiencia en el consumo con el valor real.

Y la fórmula (o métrica) que escojamos dependerá del tipo de problema a resolver. En nuestro caso, por ser un problema de regresión, tenemos diferentes métricas disponibles pero en nuestro caso podemos escoger por ejemplo lo que se conoce como la Raíz Cuadrada del Error Cuadrático Medio (o RMSE por sus siglas en Inglés: Root Mean Square Error).

Para entender en qué consiste este RMSE supongamos que tenemos 200 datos de prueba para verificar el desempeño del modelo que estamos construyendo.

Y supongamos que ingresamos al modelo entrenado cada uno de estos 200 datos, generando 200 predicciones. Pero además, por cada uno de estos datos, tenemos el valor real de la eficiencia en el consumo.

Así que en últimas tendremos 200 predicciones y 200 valores reales de eficiencia. Así que para obtener el RMSE debemos hacer estos cálculos:

La ecuación correspondiente a este RMSE sería entonces la siguiente:

$RMSE = \sqrt{\frac{\sum_i (y_i - \hat{y}_i)^2}{N}}$

donde:

La lógica de elevar al cuadrado cada diferencia es para evitar que al hacer la suma se anulen mutuamente errores individuales, lo que podría llevar a la obtención de errores aparentemente más pequeños de lo que realmente son.

Además, al dividir la suma de estas diferencias cuadráticas entre el número total de datos lo que estamos es calculando el valor promedio de estas diferencias.

Y finalmente, al obtener la raíz cuadrada estamos garantizando que el resultado final tendrá las mismas unidades originales de cada una de las variables que estamos comparando (que en este caso será la eficiencia del consumo, medida en litros por Km).

Por ejemplo, si al hacer este cálculo para un modelo determinado encontramos que el RMSE es de 0.1 L/Km quiere decir que, en promedio, para dicho modelo las predicciones se alejarán del valor real aproximadamente 0.1 L/Km.

Esto quiere decir que entre más pequeño sea el valor del RMSE para un modelo en particular, mejores serán las predicciones generadas.

Paso 2: seleccionar los posibles modelos a entrenar

Ahora el segundo paso es determinar qué tipos de modelos tienen el potencial de resultar más adecuados para el problema que queremos resolver.

Y esto es un desafío por sí mismo, pues elegir los mejores modelos entre una variedad amplia de opciones requiere un conocimiento detallado de los diferentes algoritmos y arquitecturas existentes.

Como guía les sugiero el artículo sobre algoritmos y modelos de Machine Learning, en donde hago un tour por las diferentes familias de algoritmos y modelos que existen, para que tengan una idea general de los criterios a tener en cuenta para esta elección.

Supongamos que consideramos tres opciones para este caso: máquina de soporte vectorial, bosque aleatorio y Red Neuronal. Aunque podríamos elegir más, aquí nos centraremos en este ejemplo sólo en estas tres.

En este punto no podemos decir con antelación cuál de estos modelos resultará más adecuado, pues para ello debemos entrenarlos y medir su desempeño, que es precisamente el siguiente paso.

Paso 3: entrenar, afinar y validar cada modelo

Bien, en este paso lo que debemos hacer ahora es entrenar cada modelo (es decir encontrar sus parámetros), afinarlo (es decir encontrar el set de hiper-parámetros que genera las mejores predicciones) y luego validarlo (es decir calcular su RMSE).

Para lograr esto podemos usar o los sets de entrenamiento, validación y prueba o la validación cruzada, y al final del procedimiento el objetivo es tener una medida de qué tan buenas predicciones genera cada modelo con datos que nunca ha visto.

Así que supongamos que nos enfocamos en el primer modelo, la máquina de soporte vectorial. Tomamos el set de datos original, entrenamos el modelo, ajustamos sus hiper-parámetros y tras este procedimiento lo validamos y obtenemos un RMSE de 0.23 L/Km.

Ahora vamos al segundo modelo, el bosque aleatorio. Y supongamos que tras entrenarlo, afinarlo y calcular su error de validación obtenemos un RMSE de 0.26 L/Km.

Y finalmente repetimos el mismo procedimiento para el tercer modelo: la Red Neuronal. La entrenamos y ajustamos sus hiper-parámetros y luego la validamos, obteniendo un RMSE de 0.19 L/Km.

Y después de este procedimiento ya tenemos tres diferentes modelos entrenados, para cada uno hemos obtenido el set de hiper-parámetros que genera las mejores predicciones y hemos medido su desempeño.

Así que sólo nos resta el último paso: seleccionar el mejor modelo.

Paso 4: seleccionar el mejor modelo

Recordemos que cuando nos referimos al “mejor modelo” nos estamos enfocando únicamente en las predicciones que este genere.

Y recordemos que precisamente el RMSE es un número que nos indica qué tan buenas predicciones está generando cada modelo.

Así que volviendo al paso anterior, recordemos que al final de cada validación obtuvimos valores de 0.23 L/Km para la máquina de soporte vectorial, 0.26 L/Km para el bosque aleatorio y 0.19 L/Km para la Red Neuronal.

Así que sólo nos resta decidir, con base en este desempeño, cuál de los tres modelos es el mejor.

Y para ello recordemos que el RMSE mide en últimas el error promedio que tendrá la predicción hecha por cada modelo, así que entre más pequeño sea el RMSE mejores serán las predicciones generadas por el modelo.

Así que, para este caso en particular, el mejor modelo será aquel con el menor RMSE, que corresponde a la Red Neuronal que en promedio genera un error de 0.19 L/Km al momento de predecir la eficiencia en el consumo de combustible.

¡Y listo, en este punto, y siguiendo los pasos que les acabo de mencionar, ya hemos logrado seleccionar el modelo que genera las mejores predicciones posibles para el problema que estamos analizando!

Conclusión

Muy bien, acabamos de ver en qué consiste el proceso de selección de un modelo de Machine Learning, teniendo como único criterio el desempeño al momento de hacer las predicciones.

Y este procedimiento es bastante simple: se elige una métrica de desempeño, se seleccionan las posibles arquitecturas más adecuadas, entrenamos, afinamos y validamos cada modelo y al final elegimos aquel con la mejor métrica de desempeño.

Sin embargo, cuando tenemos restricciones como el tiempo de cómputo o el tamaño en memoria que pueda tener el modelo, tendremos que considerar otros elementos al momento de realizar la selección del mejor modelo.

Entonces espero que puedan aplicar estos sencillos pasos de selección del mejor modelo al momento de implementar sus proyectos de Machine Learning.