Machine Learning de la Idea a Producción en menos de 3 meses

Felipe Veloso
5 min readMar 29, 2022

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.

What we do in SimpliRoute

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.

1.1 Flow Diagram of the solution

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).

1.2 ML Solution Architecture

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 :)

--

--

Felipe Veloso

Training to be a Dakar Pilot - ML Engineer and Data Engineer