Machine Learning de la Idea a Producción en menos de 3 meses
En diversos post he descrito varias de las etapas que conllevan crear modelos de ml y teorizar sobre diversos pasos cómo llevarlo a producción, en la empresa Simpliroute en el área de aprendizaje en el dominio de Machine Learning donde estoy estrenando mi nuevo rol de MLE/MlOps (Machine Learning Engineer) se nos presenta el desafío de productivizar un modelo de ML en solo 14 semanas.
El Desafío
Sin profundizar en la necesidades de negocio y necesidades técnicas por performance e implementación en una arquitectura ya de por sí compleja, surge la necesidad de crear uno o más modelos de ML donde es necesaria la predicción de data para un servicio interno el cual posteriormente hace uso de heurística y así entregar resultados online, El problema requiere estimar y categorizar múltiples features para proveer optimizaciones de ruta a clientes múltiples veces en un dia y con entregas ya previamente ingresadas.
Primer Acercamiento
Ciertamente una de las primeras conversaciones fueron sobre cómo abordar este problema, como hacer conversar diversos sistemas, en que instancias se deben generar estas comunicaciones y más importante aún, cómo resolver nuestro problema con ML ( aquí cabe recalcar que la naturaleza del problema es claramente un candidato perfecto para ML ).
Una vez entendido el alcance del problema y analizado factores internos se generó una propuesta de flujos interna y externa para nuestra solución, en la siguiente imagen veremos el flujo interno de la solución.
Ideando soluciones
En el paper Predicting Crime Using Time and Location Data Yuki et al. ( dada la naturaleza del problema esto es similar en la utilización de tiempos, lat y long.) utilizan diferentes métodos de predicción tales como Random Forest, Decision Tree, AdaBoost, Bagging y Extra Tree para predecir qué tipo de crimen ocurrirá basado en la ubicación y el tiempo en que ocurrió. En el dataset utilizado consideran las variables latitud, longitud, año, mes, día, hora, minuto, segundo en el que ocurrió el crimen históricamente (Series de tiempo).
Este paper fue el inicio de la presunta solución, el cual expandió nuestros posibles modelos a 3 tipos de predicciones, y es por esto que se decide ensamblar métodos para solucionar la problemática de Predicción, Ubicación en grilla (cluster) y Tiempos de servicio con las predicciones anteriores.
Modelo 1: Forecast
Para el forecast se realizará un modelo ARIMA y en paralelo utilizando soluciones de AutoML en BigQuery
Modelo 2: Ubicación (Latitud-Longitud)
Para identificar la ubicación donde se realizará la visita se considerará una densidad de visitas históricas en diferentes zonas, y se busca predecir dicha densidad, además de entregar como parámetro la ubicación.
Modelo 3: Tiempo de Servicio dependiente de Carga Vehicular
Este modelo es más complejo, debido a que puede considerarse como una regresión o una clasificación, dependiendo de lo que se busque predecir. Estas 3 variables son dependientes una de otra, el tiempo de servicio puede venir definido por el tamaño de la carga, lo que se considera como una skill del vehículo, si es pequeño, o grande, son 2 skills diferentes, 2 tiempos de servicio (definidos por el cliente como 5 o 10 min) diferentes. Por otro lado, las cargas pueden definir realmente el skill.
Ensamble de modelos
Estos modelos se desarrollaran en forma lineal, es decir, es necesario el output del modelo 1 previo a entrenar el modelo 2 y previo a entrenar el modelo 3.
Preparación de la potencial solución técnica
Al poseer madurez en los procesos de ML y la puesta en producción de esta. se conocen ciertos patrones y al unirlos se genera una receta para esta serie de problemas, se coordinaron 3 tareas fundamentales, tareas de obtención de data (y su debida automatización), la creación del modelo y la exposición a nuestros stakeholder (consumidor).
En el diagrama vemos como con el Apoyo de ETL vamos a generar datasets con la información necesaria y una vez esta sea almacenada en bigquery (en Raw) y una vez se complete su EDA generar un dataset target el cual saldrá del mismo proceso anterior.
En paralelo se generan 2 formas de crear modelos, al ingestar la data histórica se procede a generar un modelo via automl (bigquery ml) el cual como era de esperar se obtuvieron pésimas métricas, las cuales se mantendrán como baseline, y desde ahí intensificar el trabajo para que performe nuestro modelo. en paralelo una vez obtenido cierto nivel de resultados aceptable desde nuestro workbench (Nuestro Data Garage me gustaría llamarlo) veremos si nuestro Flask responderá predicciones desde bigquery o de maneras más tradicionales (pickle).
Para finalizar en procesos de reentreno y análisis de métricas, se decidió una simple forma de registro en Bigquery de resultados predichos y según el flujo de la imagen 1.1 se guardarán estos resultados en bigquery y una vez el flujo diario se cierre obtendremos métricas reales para analizar los resultados los cuales debieran ser visibles de manera diaria en dashboards para la organización, claramente en D-1 (el dia anterior)
Conclusiones
Hasta aquí quedará la primera parte, como cierre quiero comentar, que algunas ideas expandidas de automl por ejemplo son probar soluciones all in one tales como vertex ai o incluso databricks, creemos que poseemos la madurez tecnológica/procesos suficiente para generar un cambio de este tipo dentro de los límites que poseemos.
También cabe recalcar que algunos procesos en lo inmediato fueron omitidos, dando prioridad a proveer un endpoint con una predicción (en este caso fue bigquery ML) para asi generar comunicación entre las 3 areas (data, machine learning y stakeholder) involucradas en el menor tiempo y generar un time to market auspicioso pese a tener un mal modelo y proceso.
El proceso es totalmente mejorable y automatizable, pero elegir que tiene prioridad o no es totalmente nuestra responsabilidad, y creemos en nuestra receta o al menos sabemos que nos permitirá mejorarla. (y por eso vendrán mas post)
Creditos y agradecimientos a Javiera Morales TL & Ai/Ml developer en SimpliRoute en todo el pipeline y desarrollo de estas tareas.
Los invito a visitar mi web https://www.feedingthemachine.ai/ y mi linkedin
Proximamente en https://www.youtube.com/playlist?list=PLEPrRvB1uAOBSxuq6jWLt2HONrB0U4SbG mas contenido practico :)