Este proyecto consiste en el desarrollo e implementación de una API REST que predice la disponibilidad de bicicletas en las estaciones del sistema de bicicletas públicas Ecobici de la Ciudad de México. El sistema utiliza técnicas de aprendizaje automático y aprendizaje profundo para realizar predicciones a corto plazo (20, 40 y 60 minutos), facilitando la planificación de viajes para los usuarios del sistema.
El sistema Ecobici es un servicio de movilidad urbana sostenible que opera en la Ciudad de México. Uno de los principales desafíos para los usuarios es la incertidumbre sobre la disponibilidad de bicicletas en las estaciones de origen y destino. Este proyecto aborda este problema mediante la implementación de un sistema predictivo que permite a los usuarios planificar mejor sus viajes.
Desarrollar un sistema de predicción en tiempo real de la disponibilidad de bicicletas en las estaciones de Ecobici, utilizando modelos de aprendizaje automático y proporcionando acceso a través de una API REST.
-
Recolección y almacenamiento de datos: Implementar un sistema automatizado de captura de datos del feed GBFS (General Bikeshare Feed Specification) con frecuencia de un minuto.
-
Desarrollo de modelos predictivos: Entrenar modelos XGBoost (gradient boosting) para prediccion de disponibilidad de bicicletas
-
Implementación de API REST: Desarrollar una interfaz de programación de aplicaciones robusta y escalable que sirva las predicciones en tiempo real.
-
Sistema de análisis histórico: Proporcionar acceso a datos históricos agregados para análisis de patrones temporales.
- Captura automática de datos cada minuto, sincronizada al segundo 0
- Almacenamiento en formato Parquet particionado por fecha
- Reintentos automáticos en caso de fallos de conexión
- Estructura de datos: disponibilidad, estado, coordenadas, capacidad
- Modelos XGBoost: Tres modelos independientes para horizontes de 20, 40 y 60 minutos
- Vector de características con 35 dimensiones:
- Características temporales cíclicas (hora del día, día de la semana)
- Disponibilidad actual y capacidad
- Puntos de interés (comercios, cultura, educación, etc.)
- Datos meteorológicos (temperatura, precipitación, presión, etc.)
- Lags históricos (10, 20, 60, 120, 1380 y 1440 minutos)
- Características de flujo y ubicación
- Procesamiento y agregación de datos históricos
- Cálculo de promedios separados para días laborables y fines de semana
- Sistema de caché con diferentes TTL según tipo de datos:
- Datos del día actual: 10 minutos
- Datos del día anterior: permanente
- Promedios históricos: 24 horas
- Cálculo de valores históricos de disponibilidad
- Recuperación de snapshots de hasta 24 horas atrás
- Manejo de valores faltantes con estrategias de fallback
Endpoints principales:
POST /api/v1/predict/{station_code}: Predicción de disponibilidadGET /api/v1/history/{station_code}/yesterday: Datos del día anteriorGET /api/v1/history/{station_code}/today: Datos del día actualGET /api/v1/history/{station_code}/average: Promedios históricos
- Almacenamiento: UTC para consistencia global
- Particionado: Hora de CDMX para organización lógica de archivos
- Cálculos: Conversión a hora local para patrones temporales
- API: Timestamps con zona horaria explícita
- Optimización de consultas frecuentes
- Reducción de carga en procesamiento de datos
- Limpieza automática de cache obsoleto
- TTL diferenciados según inmutabilidad de datos
- Parquet: Formato columnar comprimido
- Particionado: Por año y mes para queries eficientes
- Compresión: Snappy para balance entre velocidad y tamaño
- Esquema: Tipado fuerte con validación
- FastAPI: Framework web asíncrono de alto rendimiento
- Python 3.11: Lenguaje de programación principal
- Polars: Procesamiento de datos con alto rendimiento
- XGBoost: Modelos de gradient boosting
- Pydantic: Validación de datos y configuración
- Docker: Contenedorización de la aplicación
- GitHub Actions: CI/CD automatizado
- APScheduler: Programación de tareas periódicas
- Uvicorn: Servidor ASGI de alto rendimiento
- GBFS: Especificación estándar para sistemas de bicicletas compartidas
- Open-Meteo: API de datos meteorológicos
- Captura: El recolector obtiene datos de GBFS cada minuto
- Almacenamiento: Datos se guardan en Parquet particionado por fecha
- Procesamiento: Agregación cada 10 minutos para análisis histórico
- Predicción:
- Usuario solicita predicción para una estación
- Sistema obtiene estado actual de GBFS
- Calcula lags desde snapshots históricos
- Obtiene datos meteorológicos
- Construye vector de características
- Ejecuta modelos XGBoost
- Retorna predicciones con validación de capacidad
- 00:05 hrs: Precálculo de datos del día anterior para todas las estaciones
- 00:30 hrs: Precálculo de promedios históricos de 30 días
- Registro automático de todas las peticiones
- Almacenamiento en Parquet particionado por fecha
- Buffer en memoria con flush periódico
- Métricas: método, ruta, tiempo de respuesta, códigos de estado
- Recolección de opiniones de usuarios
- Rate limiting por IP
- Almacenamiento estructurado para análisis posterior
- Tiempo de respuesta API: < 200ms (percentil 95)
- Disponibilidad: 99.5%
- Captura de datos: 99.8% de éxito
- XGBoost: MAE promedio de 1.2 bicicletas
- Cobertura: 480+ estaciones activas
Solución: Estrategia de fallback en lags, usando valor actual cuando no hay histórico disponible.
Solución: Logging detallado de features y valores raw para diagnóstico, validación de variabilidad en datos de entrada.
Solución: Recolección sincronizada al cambio de minuto con reintentos automáticos.
Solución: Sistema de caché multinivel, procesamiento asíncrono, formato Parquet particionado.
- Mejoras en Modelos: Incorporar más características contextuales (eventos, clima histórico)
- Optimización: Implementar batch prediction para múltiples estaciones
- Monitoreo: Dashboard de métricas en tiempo real
- Expansión: Soporte para otros sistemas de bicicletas compartidas
- Mobile: Desarrollo de aplicación móvil nativa
Este proyecto demuestra la viabilidad de aplicar técnicas de aprendizaje automático para mejorar la experiencia de usuarios en sistemas de movilidad urbana compartida. La arquitectura implementada es escalable, mantenible y proporciona predicciones precisas que pueden ayudar a optimizar el uso del sistema Ecobici.
La combinación de recolección automatizada de datos, modelos predictivos de última generación y una API REST bien diseñada proporciona una base sólida para aplicaciones de usuario final que pueden mejorar significativamente la experiencia de movilidad urbana en la Ciudad de México.