Como científico de datos, siempre intentas obtener el mejor modelo para tu problema. Obtener un gran modelo, entrenarlo y ajustarlo a la perfección es solo una parte de un proyecto más grande. A la medida que vas exponiéndote a algunos proyectos de aprendizaje automático y leyendo algunos de los ciclos de desarrollo de los científicos de datos, descubres que hay un ciclo de desarrollo parecido. En general para nuestro equipo se ve así:
Como muchos en la escena tecnológica, he tenido una experiencia autodidacta en aprendizaje automático. Cuando me estaba introduciendo en esta muy joven práctica, y en todas las palabras de moda asociadas, encontré mucha información, libros, videos, publicaciones, MOOC y tutoriales sobre los algoritmos de creación de modelos. Pero, cuando llegas a construir esos modelos con tus datos reales; datos que no están completos, disponibles, estandarizados, actuales, y una lista de etcéteras que podemos resumir en … datos que no están limpios; te das cuenta de que la mayoría de tu tiempo la pasas limpiando tus conjuntos de datos. Mientras que la creación de tu modelo es algo que toma una fracción de ese tiempo. Adicionalmente, cuando terminas de entrenar esos modelos y deben estar disponibles para clientes/sistemas en producción, resulta que el video tutorial que viste en Coursera / Youtube o el repositorio de Github que te guiaba ya no contaba con esa sección.
No me malinterpreten, creo que encontrar una arquitectura adecuada y ajustar correctamente los hiperparámetros puede mejorar un modelo. Sin embargo, considero que es la calidad y la cantidad de datos lo que más impacta para hacer buenos modelos.
Además, aunque un modelo que solo se puede utilizar en una máquina local es un buen punto de partida, hay muchos pasos a seguir. Pero, como se comentó anteriormente, la limpieza, el aumento de datos y la implementación de un modelo no son temas tan populares como los algoritmos de aprendizaje automático.
Una y otra vez, el equipo y yo descubrimos que estábamos haciendo el mismo proceso de limpieza para nuestros conjuntos de datos, aún haciendo modelos completamente diferentes. Mismos métodos de limpieza para diferentes datos.
Descubrimos también que no era un problema exclusivo de nuestro equipo, sino un problema para muchos científicos de datos:
“The reason data scientists are hired in the first place is to develop algorithms and build machine learning models — and these are typically the parts of the job that they enjoy most. Yet in most companies today, 80 percent of a data scientist’s valuable time is spent simply finding, cleaning and reorganizing huge amounts of data. Without the right cloud tools, this task is insurmountable.” Infoworld
Así que, pensando como ingenieros, decidimos automatizar la parte repetitiva del trabajo, y no solo eso, sino todo lo que pudieramos del ciclo. Ahí fue cuando comenzó la idea de hacer AutoML.
Algunas consideraciones antes de comenzar…
Al momento de iniciar este proyecto, los modelos desarrollados por el equipo eran en su mayoría de datos estructurados. Puede pensarse como datos que pueden estar en una hoja de cálculo simple. Cosas como números, fechas y cadenas de texto. Contrario a los datos no estructurados (imágenes, audio, video, texto). Además, los modelos creados eran para resolver problemas de clasificación.
Obtén datos primero
La primera parte fue conseguir los datos con los que vamos a trabajar. Afortunadamente, ya habíamos centralizado la mayor parte de nuestros datos en un solo data warehouse, por lo que solo tuvimos que consultarlo. Entonces, lo primero que necesita la biblioteca para trabajar es la capacidad de hacer consultarlo.
Lavar y enjuagar
Una vez que tenemos los datos que necesitamos, es buena idea deshacerse de las cosas que pueden confundir el algoritmo en la etapa de entrenamiento. Para limpiar los datos utilizamos algunas técnicas realmente simples para excluir variables:
- Eliminación de constantes
- Valores faltantes dentro de un umbral de
x
% - variables con más de
y
categorías, por ejemplo.
Nos aseguramos de que todos los datos que obtengamos estén en el formato y tipo que esperamos. Por ejemplo, nos aseguramos de que las fechas estén en un formato correcto y no como cadenas de texto.
Datos ++
Una vez que hayamos limpiado los datos, avancemos un poco más y aumentemos las variables que tenemos con algunas transformaciones simples:
- Discretización de variables categóricas
- Sumas, multiplicaciones y uso de algunas expresiones lógicas
- Extracciones de fecha: día /día de la semana /mes
Teniendo una buena relación
Ya tenemos una gran cantidad de datos para entrenar, pero para determinar si una variable es útil usamos un análisis de correlación para eliminar las variables que no están tan relacionadas con la variable objetivo (la información que queremos predecir), el factor de inflación de varianza (VIF) para reducir la multicolinealidad e identificamos posibles fugas de datos (data leakage).
Análisis de correlación — este es un método estadístico de evaluación utilizado para estudiar la fuerza de la relación lineal entre dos variables continuas (por ejemplo, altura y peso)
El factor de inflación de varianza (VIF) — es otro método estadístico de evaluación que cuantifica el grado de correlación entre un predictor y los otros predictores en un modelo.
Fuga de datos (data leakage) — cuando una característica está demasiado relacionada con la variable objetivo esta puede ser un mal predictor. Un tipo de data leakage común es el caso en que son datos que no están al momento que usarías tu modelo de predicción. (por ejemplo, tomó_antibiótico= True, cuando se quiere predecir enfermedad. La persona puede estar tomando medicina porque ya sabe que está enferma.)
Es importante realizar este tipo de controles para ofrecer a un modelo (por ejemplo, una red neuronal) una mejor oportunidad de rendir mejor y converger. También crea una pausa saludable para que el científico de datos reflexione sobre las variables seleccionadas y una oportunidad para reducir la dimensionalidad de las entradas para el modelo. Un modelo más simple es más fácil de entender y mantener.
Creación de modelos
Hasta este punto (si todo ha salido bien) deberíamos tener un conjunto de datos limpio con variables aumentadas y relacionadas con nuestra variable objetivo. ¡Genial!
Primero hemos encontrado que es muy útil para hacer un modelo de clasificación muy simple. Solo para tener un ‘modelo base’ que dibuje una línea en la arena como el mínimo estándar de desempeño.
Para buscar un modelo que pueda superar al modelo base, utilizamos tres estrategias:
- Algoritmos genéticos evolutivos
- Búsqueda aleatoria
- Tpot
Sacamos al mejor modelo de cada estrategia y los evaluamos con algunas métricas:
- AUC (área bajo la curva)
- F1 score
- MCC score
¡El que mejor desempeño tenga bajo estos parámetros es el ganador!
Compartamos con el equipo.
Para este momento hemos creado un modelo con los mejores datos, limpios y aumentados; con la mejor arquitectura y parámetros; además lo hemos comparado con con al menos otros tres modelos. ¡Muy bien!
Pero un modelo que se ejecuta en tu computadora no es de mucha ayuda para el equipo. Aún menos útil para la organización. Entonces, deberíamos desplegarlo donde todos puedan utilizarlo.
Actualmente, AutoML puede desplegar un modelo entrenado localmente en el motor de ML de Google, creando un servicio dedicado, auto-escalado y con un endpoint para atender todas las solicitudes que sean necesarias.
Pensamientos y trabajos futuros.
Si bien estamos muy orgullosos del resultado de AutoML, y lo hemos utilizado para desarrollar dos modelos en producción. Encontramos muchas áreas de oportunidad y ‘bugs’ que pueden (y deben) solucionarse para hacer un producto más robusto, más rápido y mejor para todos. Algunas ideas son:
- Opción de hacer modelos regresivos.
- Opción para hacer una mayor variedad de modelos (CNN, RNN, Arima, árboles de decisión, etc.)
- Comprobación de correlación de datos más eficiente
- Mayor variedad para comprobar correlación de datos
- Implementación para otros proveedores de la nube
- Despliegue agnóstico de infraestructura
AutoML es un trabajo en equipo de Francisco Serrano y Dudley Díaz (yo) en el equipo de AI en Resuelve tu Deuda en la Ciudad de México, México.
Síguenos