Post Invitado: Azure Machine Learning, "En busca del Fuego"

Tenemos un nuevo post invitado, cuyos autores son Eugenio López de Elorriaga y Pedro Serrano de Ilitia technologies.

Un nombre curioso para un artículo…

Escribimos este articulo para compartir la experiencia vivida desarrollando un sistema de predicción del número de resfriados diagnosticados por centro de salud, empleando AzureML.

¿Por qué lo de “En busca del fuego”?

Bueno, porque en ciertas cosas nuestro proceso de desarrollo ha sido similar al viaje de los homínidos de la película del mismo nombre. De la oscuridad a la luz.
¡Comenzamos el viaje!

 

 

1

 

Oscuridad

Ilitia (nuestra empresa), está realizando una serie de pruebas de concepto para la sanidad pública vasca (Osakidetza), donde demostrarle las potencialidades de multitud de tecnologías en Azure entre otras Machine Learning.

Nos embarcamos en este viaje dos desarrolladores de aplicaciones de gestión sin experiencia previa en Machine Learning.

Resumiendo:

  • PoC = poco tiempo de desarrollo.
  • ML = ¿¿?? Móvil Launcher??, Main Library??, Memory Load?? … a no, es ¡¡Machine Learning!!

Es importante entender este contexto porque demuestra que AzureML hace posible “democratizar” los procesos de machine learning a equipos pequeños, no especialistas, con pocos recursos y tiempo.

 

 

  2

"Stonehenge” por Les Haines (licencia CC BY 2.0).

Se enciende una chispa

Entonces, ¡Salta la idea!, vamos a correlacionar los datos de clima con la incidencia de algunas enfermedades comunes (catarros, gripe, o gastroenteritis).

Una investigación rápida (Wikipedia), nos dice que el riesgo de resfriado común depende, de alguna forma, con algunas variables climáticas (humedad relativa, temperatura). Es importante tener como punto de partida un “escenario probable” y no ir dando palos de ciego. Si ya sabemos que hay algún tipo de relación clima-resfriados, mejor que si lo sospechamos, y si lo sospechamos mejor que si vamos a ciegas. Esto se traduce también en un ahorro inmenso de tiempos (apuntamos un poco antes de disparar, que las balas son caras).

Además, estamos de suerte, buscamos en internet y encontramos que hay disponibilidad gratuita de los datos climáticos de las estaciones de Euskadi; esto promete.

Así mismo, encontramos datos genéricos del número de casos de catarro atendidos en cada centro de salud, en los últimos años.

Empezamos a ver las posibilidades para empezar a desarrollar esto que nos ofrece Azure: HDInsight-Spark, HDInsight-R-Server...
Todas las opciones suponen aprender lenguajes de programación, paradigmas distintos, frameworks, herramientas… y aprender nos encanta, pero el proyecto tiene que salir en días. Entonces, de forma natural, aparece AzureML al rescate: no hace falta montar un entorno, te das de alta en el servicio y accedes. Promete facilidades para gente como nosotros (developers). De hecho, vemos una demo de 60 minutos, nos damos de alta en el servicio, y empezamos a jugar con los ejemplos.

 

3

Ejemplo en Microsoft Azure Machine Lerning Studio

 

¡Y además, cumple lo que promete! Con la documentación, y las ayudas, así como la interface, en cuestión de horas estemos montando los primeros experimentos. Ya nos vemos como “auténticos expertos". 

 

4

Y con la chispa el humo: primeros problemas

Pero claro, no todo va a ser color de rosa. Estamos utilizando datos del mundo real y, ni el mundo real, ni sus datos son perfectos. Las estaciones meteorológicas a veces se rompen y, esos días, no dan datos o dan datos erróneos.

Tampoco contamos con la posición geográfica de los centros de salud. La forma más rápida que tenemos de conseguirlos es mediante scraping de la web, sumado a un largo y tedioso trabajo a mano (al tener doble idioma Euskera/Castellano hay municipios y centros de salud con nombres distintos).

 

5

Problemas con los datos

Además, las lecturas de las estaciones son horarias, y para obtener las diarias debemos hacer distintos procesos según el dato buscado (temperaturas máximas, mínimas, media diaria, precipitación acumulada, …).

 

14

Por fin una llama

Como resultado de todo este trabajo obtenemos una base de datos, una tabla, en SQL Azure, donde cada registro contiene los datos del número de pacientes atendidos por resfriado en cada centro de salud, junto con la temperatura máxima, media, mínima, humedad relativa, precipitación acumulada en 24 horas (extrapolando a partir de las estaciones meteorológicas más cercanas que tengan datos para estos días).

 

7

Distintos pasos como experimentos de AzureML

Ahora sí que avanzamos. Empezamos a entrenar con los distintos algoritmos de regresión empleando las distintas variables. En cada prueba entrenamos con los datos de cuatro años y luego

8

comprobamos los resultados con los datos reales del quinto año. De nuevo ante las dudas sale en nuestra ayuda la documentación y los ejemplos.

9

¡¡Aahhh, esto quema!!

Pero ojo, cada prueba tarda horas en ejecutarse y el consumo de la cuenta se dispara. Por ahí vamos mal. Empezamos a probar con subconjuntos de datos menores.

Montamos un único experimento que pruebe todos los algoritmos y deje los resultados de cada uno en un fichero diferente, así podemos lanzar este experimente y olvidarnos hasta que termine.

Con unas pocas pruebas vamos afinando el algoritmo, los datos de entrada a emplear, la parametrización requerida … y todo eso con sin apenas conocimientos de Machine Learning, ni de climatología, ni de medicina.

Por fin, el fuego es nuestro: ya lo tenemos, los parámetros serán la temperatura media, el día, y el mes.

El algoritmo empleado será “Decision Forest Regression”.  Publicamos como un servicio (trivial, el wizard funciona fenomenal), con lo que podemos pedirle la previsión para un centro de salud para un día determinado, pasándole la temperatura media esperada para ese día.

  10

Y llenamos la noche de antorchas

El resto es ya transitar por caminos conocidos. Construimos un servicio .Net que recoge de AEMET (Agencia Estatal de Meteorología) las previsiones de temperatura por municipios, y lanza a través del servicio web del experimento, el cálculo del número de pacientes por centro de salud, y deja los resultados en AzureSQL.

Programamos la ejecución de este proceso a través del servicio de Scheduler Jobs de Azure y lo tenemos funcionando integrado en nuestra aplicación sobre Power BI.

 

 

  11

PowerBI Mostrando predicción de casos por centro de salud para el próximo 11 de diciembre del 2016

12

Power BI mostrando la evolución de casos de catarro y temperatura (valores reales frente a valores predichos).

13

Ya reconfortados por el calor y la luz del fuego, llega el momento de recopilar algunas de las lecciones aprendidas por el camino:

  • Trabaja sobre escenarios “probables”: en esto el conocimiento del área de negocio te puede ahorrar un montón de trabajo y de dolores de cabeza.
  • Acudir a la documentación: en este caso, como en tantos otros, es tu mejor compañera de viaje.
  • Dedicar todo el trabajo que sea necesario a la obtención, limpieza y preparación de los datos: de esto va a depender más que de nada el que puedas obtener los resultados deseados.
  • Hacer las pruebas iniciales con subconjuntos de datos: al reducir el tamaño del problema, reduces el tiempo a emplear en cada prueba.
  • Prueba y afina: te ayudará a elegir el algoritmo adecuado, así como su parametrización.
  • El conocimiento nunca sobra: aunque Azure Machine Learning rebaja considerablemente la curva de entrada, todo el conocimiento que poseas o adquieras entorno al área de aprendizaje automático te será más que útil.