The London Cycle Hire Scheme Prediction is an end to end toy MLOps project
MIT License
[!WARNING] Esta documentación fue traducida automáticamente del archivo original readme.md.
El objetivo de este proyecto es predecir la tasa de ocupación de cada estación en la red de Alquiler de Bicicletas de Londres, utilizando datos históricos de TFL y un algoritmo de pronóstico para calcular qué tan llena estará una estación de acoplamiento en el futuro.
Vea una captura de pantalla del resultado a continuación:
Hay más de 800 estaciones de acoplamiento en toda la red, por lo tanto, el enfoque que seguimos es dividir las estaciones en regiones según su ubicación geográfica, dividiendo el área de cobertura en una cuadrícula, donde cada cuadrícula tiene su propio modelo:
Como se muestra arriba, para cada una de las regiones se calcula la media y se selecciona la estación más cercana.
Este proyecto utiliza Prophet de Facebook. De su sitio web:
Prophet es un procedimiento para pronosticar datos de series temporales basado en un modelo aditivo donde las tendencias no lineales se ajustan con estacionalidad anual, semanal y diaria, más efectos de días festivos. Funciona mejor con series temporales que tienen fuertes efectos estacionales y varios años de datos históricos. Prophet es robusto frente a datos faltantes y cambios en la tendencia, y típicamente maneja bien los valores atípicos.
Los datos para este proyecto provienen de las APIs de TFL, recolectados regularmente en estos repositorios: fferegrino/london-cycles-db y fferegrino/weekly-london-cycles-db
El modelo se sirve para producir predicciones bajo demanda, cada vez que un usuario selecciona una estación, el modelo produce nuevos valores para presentar al usuario.
Como se muestra arriba, las predicciones se sirven a través de una interfaz web.
Este diagrama ilustra la arquitectura y el flujo de trabajo de la aplicación de predicción de ocupación de la red de Alquiler de Bicicletas de Londres.
Esta arquitectura permite la integración y despliegue continuos de la aplicación, con componentes separados para entrenar el modelo de predicción, servir las predicciones y presentar los resultados a los usuarios. Incorpora prácticas modernas de DevOps y MLOps para asegurar un desarrollo y despliegue eficientes del modelo de aprendizaje automático para predecir las tasas de ocupación de las estaciones de alquiler de bicicletas.
A continuación se presenta una lista no exhaustiva de las limitaciones actuales de esta solución.
Actualmente, se seleccionan datos de un solo punto para construir un modelo, este único punto de datos puede no ser representativo de su región, algunas propuestas de mejora son:
Crear clusters de estaciones que comparten patrones de comportamiento
Crear clusters más pequeños basados en divisiones geográficas
Una vez que hemos determinado qué modelos se necesitan, se entrenan uno tras otro, sin embargo, esta acción podría realizarse en paralelo para acelerar el paso de entrenamiento.
El modelo elegido, Prophet de Facebook, se basa en una sola característica para pronosticar el futuro; sin embargo, creo que podríamos usar algunos datos meteorológicos para informar mejor las predicciones.
Actualmente, todas las solicitudes de predicciones se sirven frescas, pero almacenarlas en caché sería una buena opción para evitar sobrecargar el servicio de predicción.
A pesar de recopilar algunos logs, no estamos realizando ningún análisis post-despliegue del modelo para evaluar su rendimiento en solicitudes iniciadas por usuarios en el mundo real.
No se han hecho previsiones para ejecutar este proyecto utilizando ninguna infraestructura en la nube.
[!NOTA] Este proyecto fue creado originalmente en una Mac usando Apple Silicon, así que ten en cuenta que es posible que necesites eliminar algunas referencias a la plataforma
linux/amd64
dispersas en el código base.
Crea un entorno virtual de Python e instala las dependencias en model/requirements.txt
:
pip install -r model/requirements.txt
Crea una red de docker:
docker network create shared_network
Inicia la infraestructura de entrenamiento con:
docker compose --env-file training.env -f training.docker-compose.yml up
Inicia la infraestructura de servicio con:
docker compose -f serving.docker-compose.yml up
Crea un patrón de índice en Elastic:
python monitoring/create_index_pattern.py
Inicia el entrenamiento usando act
para simular GitHub Actions con:
act --container-architecture linux/amd64 --env-file actions.env
O usando el flujo de trabajo de entrenamiento local con:
./model/training.sh