El Monitoreo en el Machine Learning (MLOps)

En este tercer artículo de la serie Machine Learning Operations veremos en detalle en qué consiste el monitoreo de 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

En el Machine Learning Operations (o MLOps) se busca llevar un modelo de Machine Learning de la etapa de desarrollo a la etapa de producción.

En la etapa de desarrollo lo que hacemos es entrenar y validar el modelo, para luego llevarlo a la fase de producción donde lo desplegamos y lo ponemos a disposición del usuario final.

Y es en esta etapa de despliegue donde pueden surgir inconvenientes que hagan que el modelo no tenga el desempeño esperado.

Así que en este artículo veremos en qué consiste el monitoreo de un modelo de Machine Learning, que en últimas nos permite medir continuamente el desempeño del modelo, determinando cuándo y porqué funciona inadecuadamente, para luego tomar los correctivos necesarios.

¿Qué puede salir mal después del despliegue?

En artículos anteriores hemos hablado de qué es el Machine Learning Operations y en qué consiste el despliegue de un modelo de Machine Learning, que permite llevarlo de la etapa de desarrollo a la de producción poniéndolo a disposición de un usuario final.

Pero esto es sólo el comienzo de la historia, pues el reto es lograr que el modelo siga haciendo buenas predicciones incluso después de haber sido entrenado y de haberlo desplegado.

Para entender esto consideremos un ejemplo hipotético: supongamos que desarrollamos un modelo para una tienda por departamentos con el fin de predecir cuántos productos de cada categoría se necesitarán cada semana, de manera tal que los administradores de la tienda puedan tener con antelación la cantidad suficiente de productos en inventario.

Entrenamos, validamos y desplegamos nuestro modelo y todo funciona a la perfección. Durante los primeros meses de uso del modelo se evidencia un incremento en las ventas, pues siempre habrá una cantidad suficiente de productos en inventario para las diferentes categorías.

Pero aproximadamente un año después los números comienzan a bajar. La demanda de algunos productos era mayor que la predicha por el modelo y para esas categorías no se tenían suficientes productos en la tienda. Y en otros casos ocurría lo contrario: para algunos productos la demanda era menor que la predicha por el modelo, así que se tenía un exceso de esos productos en inventario.

En últimas, este modelo que al comienzo funcionó a la perfección, con el tiempo se fue degradando y en lugar de generar ingresos comenzó a generar pérdidas para la tienda.

Y esto es precisamente un ejemplo de lo que generalmente sucede en la práctica: desplegar un modelo no es el final del proceso, pues su desempeño se puede degradar con el tiempo.

Así que debemos monitorear continuamente su desempeño para detectar posibles fallos y tomar a tiempo los correctivos que sean necesarios.

¿Por qué puede fallar el modelo?

En esencia existen dos grandes grupos de situaciones que pueden explicar la degradación en el desempeño: los fallos de software y los fallos del modelo.

Fallos de software

Los fallos de software se deben, como su nombre lo indica, a elementos del software usado durante el despliegue que no funcionan de forma esperada.

Por ejemplo pueden ser debidos a ciertas librerías o paquetes que no fueron instalados correctamente durante el despliegue o también debidos a fallos en la CPU o GPU de los servidores.

Pero este tipo de fallos no es el que nos interesa, pues dependen de factores externos y podrían ser resueltos más por un Ingeniero de Software que por uno de Machine Learning.

Fallos del modelo

Los tipos de fallos que nos interesan son los relacionados directamente con el Machine Learning, que hacen que el modelo no genere buenas predicciones. Estos fallos son más difíciles de detectar y de manejar que los fallos de software, pero deben ser manejados para que el modelo pueda seguir en la etapa de producción.

Los fallos más comunes son los que se conocen como cambios en la distribución y pueden terminar afectando prácticamente a cualquier modelo de Machine Learning.

Cuando entrenamos el modelo (en la etapa de desarrollo) lo hicimos usando un set de entrenamiento y prueba. Idealmente en la etapa de producción los datos usados deberían tener las mismas características usadas en la etapa de desarrollo, pero esto es casi imposible de controlar, lo que hace que estas ligeras diferencias terminen afectando el desempeño del modelo.

Entre las variaciones en la distribución más comunes tenemos la “deriva de datos” y la “deriva de concepto”.

En la “deriva de datos” hay cambios, ligeros o significativos, en las características o distribución de los datos de entrada con respecto a los usados durante el entrenamiento.

Supongamos que entrenamos un modelo de reconocimiento facial pero únicamente con imágenes tomadas durante el día. Lo llevamos a producción e inicialmente funciona bastante bien. Pero de repente comenzamos a usarlo para detectar rostros en la noche y es acá donde comenzamos a ver una degradación del desempeño. En este caso tenemos precisamente una “deriva de datos” pues los datos de entrenamiento provienen de una distribución diferente de la de los datos recibidos por el modelo en producción.

Por otra parte, la “deriva de concepto” se da cuando la distribución de los datos de entrada permanece sin variación pero a pesar de ello las predicciones hechas por el modelo comienzan a cambiar.

Por ejemplo, supongamos que desarrollamos un modelo para predecir el precio de un inmueble con base en algunas de sus características como el área, el número de habitaciones y el número de baños.

Para un inmueble en particular el modelo predice un costo de 500.000 dólares. Pero resulta que tiempo después hubo una crisis inmobiliaria y el modelo, a pesar de usar datos de entrada con la misma distribución usada en el entrenamiento, predice ahora que el costo es de 200.000 dólares.

El monitoreo en detalle

Perfecto, ya tenemos claros los principales factores que pueden degradar el desempeño de un modelo.

Así que podemos definir el monitoreo como la fase del Machine Learning Operations en la cual medimos diferentes variables de desempeño del modelo y las comparamos con valores de referencia para determinar si continua generando predicciones adecuadas o si es necesario tomar acciones que busquen mejorar el desempeño.

Y hay varias formas de realizar este monitoreo, algunas bastante simples y otras más sofisticadas.

Monitoreo a través de métricas globales

La más sencilla de todas es registrando continuamente una métrica global del desempeño del modelo y comparándola con un nivel de referencia.

Por ejemplo, si tenemos un sistema de detección de rostros que en la etapa de desarrollo tenía una exactitud del 97% entonces podemos registrar periódicamente (por ejemplo a diario) este desempeño en el modelo desplegado y si se observa que cae debajo de este nivel de referencia se podría generar una alerta indicándonos que debemos tomar alguna acción antes de que las cosas sigan empeorando.

El inconveniente de realizar el monitoreo usando una métrica global de desempeño es que no podemos determinar las razones detrás de esa degradación, es decir si el problema de fondo es una “deriva de datos” o una “deriva de concepto”.

Monitoreo a través de métodos estadísticos

Una forma más sofisticada de realizar el monitoreo es por ejemplo obtener la distribución estadística de los datos de entrada antes del despliegue y periódicamente calcular esta distribución pero para los datos usados por el modelo desplegado, y luego aplicar una prueba estadística para determinar si existen diferencias significativas entre una y otra. En el caso de encontrar diferencias podríamos concluir que el origen de la degradación está en la “deriva de datos”.

O podemos hacer algo similar pero para las distribuciones de datos a la salida del modelo antes y después del despliegue, de tal forma que si encontramos diferencias estadísticamente significativas podemos concluir que la degradación del desempeño se debe en este caso a una “deriva de concepto”.

Conclusión

Muy bien, en este artículo hemos visto que después del despliegue es muy probable que el desempeño del modelo comience a decaer y esto se debe precisamente a tanto los datos como el entorno en el que está el modelo son dinámicos y continuamente pueden presentar variaciones.

Así que el monitoreo permite detectar esta degradación del desempeño, bien sea analizando métricas globales o usando técnicas más avanzadas como el uso de pruebas estadísticas aplicadas a los datos de entrada o de salida del modelo.

Pero este proceso no termina en el monitoreo, pues en caso de confirmar la degradación del desempeño se deben tomar acciones correctivas para que el modelo continúe en producción. Esta fase se conoce como el mantenimiento del modelo y de ella hablaremos en un próximo artículo.

Si tienes alguna duda de este artículo o tienes alguna sugerencia no dudes en contactarme diligenciando el siguiente formulario:

Debes introducir tu nombre.
Debes introducir tu apellido.
Debes introducir un email válido.
Debes introducir un mensaje.
Debes aceptar la política de privacidad.