SAMUR.AI: optimización del uso de ambulancias mediante Inteligencia Artificial (Parte I)
Primera de las tres entradas dedicadas a este proyecto, donde hablamos de su motivación, el contexto y el problema de la asignación óptima de recursos.
Es un hecho que, independientemente de los recursos que una administración dedique a la atención sanitaria, y por muy eficiente que sea su gestión, éstos siempre serán limitados. Por esto, todo esfuerzo dedicado a la optimización de los mismos contribuirá a la hora de mejorar dicho servicio, y el última instancia, salvar vidas. Es por eso que cuando Saturdays AI nos encomendó realizar un proyecto final de nuestro curso de Inteligencia Artificial, no dejamos pasar la oportunidad de aportar algo en este área.
Saturdays AI es una iniciativa de formación sin ánimo de lucro que surgió en 2016 en Barcelona, fundada por Jan Carbonell y capitaneada en Madrid por Pablo Castañeda, y que está presente ya en más de 30 ciudades por todo el mundo. Su modelo, pensado para acercar la Inteligencia Artificial y el Aprendizaje Automático a todo aquel que le interese, atrae por igual a legos en la materia como a expertos científicos de datos con años de experiencia en el sector.
Sus cursos, centrados en el mantra learning by doing, son siempre finalizados con un proyecto en grupo, en el que se unen miembros de muy diversos perfiles, y dan completa libertada la hora de elegir la temática y metodología del mismo. En concreto, nuestro proyecto SAMUR.AI aunó los esfuerzos de 4 personas muy distintas:
- Miguel Blanco, ingeniero aeroespacial y Data Scientist.
- Borja Menéndez, doctor en investigación operativa.
- Alfonso Lagares, estudiante de 2º de bach. y miembro de Saturdays AI.
- Enrique Basañez, arquitecto y desarrollador Java y Python.
Contexto
Con motivo del primer brainstorming realizado en Saturdays AI con la intención de encontrar proyectos con impacto social, nos zambullimos, entre muchas otras fuentes de datos, en el Portal de datos abiertos del ayuntamiento de Madrid.
Allí encontramos un dataset que nos llamó la atención: Intervenciones del SAMUR -Protección Civil. El conjunto de datos se componía de un histórico de casi tres años de todas las intervenciones a las que el SAMUR y Protección Civil había dado respuesta.
Siendo conscientes de la situación que se estaba viviendo, estaba claro que un proyecto que pudiera ayudar a gestionar de forma más eficiente los recursos sanitarios era algo que no podíamos dejar pasar, por lo que decidimos dedicarnos de pleno a sacar provecho de esta información.
Para garantizar el anonimato de la información, muchos de los datos estaban omitidos, como es lógico, pero aun así, estaban presentes muchos campos útiles relacionados con las intervenciones:
- Mes y hora.
- Naturaleza médica.
- Hospital al que se derivó.
- Si se canceló o no.
- Distrito donde se produjo.
La primera idea que nos vino a la cabeza fue desarrollar un modelo predictivo para poder ayudar a los gestores en la distribución inicial de ambulancias, así como en la elección de vehículo a asignar en caso de llamada al servicio de emergencias.
Sin embargo, en Saturdays AI se había lanzado en esta última edición un grupo de aprendizaje por refuerzo (Reinforcement Learning o RL), donde estaban Miguel y Borja. La tarea principal de RL es la de entrenar a una inteligencia artificial, o agente, para que tome decisiones óptimas a lo largo del tiempo, por lo que parecía que esta aproximación podría ayudar a resolver el problema.
En concreto, pensamos que podíamos generar las emergencias que se producen en el día a día de una ciudad como Madrid con un modelo que primero aprenda de los datos pasados y después genere nuevas emergencias basándose en esta información, de tal forma que los datos generados artificialmente sean indistinguibles de datos reales. Esta misma aproximación se debía seguir con los datos de tráfico. Todo esto, en conjunto con la localización de los hospitales y el recurso escaso que son las ambulancias que gestiona el SAMUR se meterán en un entorno simulado para que el agente aprenda a gestionar estos recursos. Una vez entrenado, el agente debería ser capaz de realizar la tarea eficientemente.
Asignación (óptima) de recursos
Como se ha comentado anteriormente, el problema que se trata de abordar en este proyecto es un problema de asignación óptima de recursos; en este caso, de las ambulancias que tiene el SAMUR para atender a las emergencias diariamente.
Dado que aplica a muchas áreas de nuestro día a día, este problema aparece reflejado en multitud de ocasiones en la literatura sobre optimización matemática; por ejemplo, a la hora de hacer la planificación laboral óptima de trabajadores o en la asignación óptima de tareas a máquinas en factorías. Podemos ver un ejemplo en el que, mediante métodos heurísticos y el toolbox de Matlab para optimización convexa, se mejora el sistema de asignación de vacunas de la Reserva Estratégica Nacional de vacunas de Kentucky (EE.UU.). También podemos ver casos de uso en gestión de la cadena de suministro, por ejemplo cuando se trata de abrir o cerrar canales de distribución, o para minimizar los costes tanto de operaciones como de transporte de productos, también con técnicas heurísticas.
Como hemos visto, este tipo de problemas han sido resueltos históricamente con técnicas de optimización exactas (como programación lineal) o aproximadas (metaheurísticas). Sin embargo, el enfoque de este proyecto es el de usar otro tipo de técnicas más asociadas comúnmente con la Inteligencia Artificial. Dado este punto de vista, la idea es desarrollar un sistema simulado capaz de aprender respecto a los recursos disponibles, datos de emergencias y estado del tráfico para asignar la mejor ambulancia en cada momento, donde el concepto “mejor” responde al criterio de un agente (una IA) que distribuye los movimientos de las ambulancias para atender a todas las emergencias de una manera eficiente.
El enfoque es, entonces, el de utilizar algoritmos de Reinforcement Learning donde el agente interacciona con un entorno a base de tomar acciones sobre él para maximizar una recompensa acumulada a lo largo del tiempo. Así, el agente recibe observaciones del entorno y decide tomar acción, de manera que recibe (o no) recompensas por esas acciones que toma. Si la acción es buena, recibirá una recompensa positiva, mientras que si la acción es mala, recibirá una recompensa negativa, siendo el objetivo último del agente el de maximizar la recompensa que obtiene en el largo plazo. En este caso, el agente recibirá mayor recompensa cuanto menos tiempo tarden las ambulancias tanto en presentarse en el lugar del accidente como en llevar al paciente a un hospital.
El desarrollo de este sistema necesita de varias partes diferentes que tienen que interactuar entre sí:
- Por una parte, un generador de emergencias. Este generador de emergencias ha aprendido previamente en base al histórico de datos de emergencias que se tienen y es capaz de generar nuevas emergencias de una manera realista teniendo en cuenta localizaciones dentro de la ciudad y grado de emergencia.
- Por otra, un generador de datos de tráfico. Este generador de datos de tráfico ha aprendido también en base al histórico de datos que se tienen y es capaz de generar nuevos datos de tráfico para cada distrito de la ciudad de manera realista.
- Además, se hace necesario tener datos sobre los hospitales, empezando por su localización, así como de las ambulancias que gestiona el servicio de emergencias.
- Todo ello converge en el entorno de simulación, que es el que gestiona toda esta información y se la ofrece a cualquier sistema que quiera interactuar con él de manera sencilla.
- Para finalizar, dado que el objetivo último es tener un sistema que sea capaz de optimizar los recursos de ambulancias respecto de las emergencias que se generan en la ciudad de Madrid, se hace necesario el desarrollo de un agente capaz de aprender con el tiempo a realizar esta tarea. Este agente está basado en técnicas de Reinforcement Learning.
Todas estas características las vemos en los siguientes puntos de manera más detallada, pero ya en el siguiente post.