GithubHelp home page GithubHelp logo

afroefras / ecobici_forecast Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 1.0 1.14 MB

Tiene sentido que la demanda de bicis en CDMX tenga una estacionalidad por horas del día y días de la semana. Pero ¿es posible predecir la demanda futura? ¡Claro que sí! 🚴🏾

Jupyter Notebook 97.95% Python 2.05%
bike-data forecasting-models machine-learning

ecobici_forecast's Introduction

ecobici_forecast

Tiene sentido que la demanda de bicis en CDMX tenga una estacionalidad por horas del día y días de la semana. Pero ¿es posible predecir la demanda futura? ¡Claro que sí! 🚴🏾

Estructura del repositorio:

.
├── ...
├── media                           # Directorio con imágenes para README
│   └── ...
├── scripts                         # Directorio con el código necesario para analizar y modelar demanda en ventanas de tiempo
│   ├── ecobici                     # Directorio para ocupar clases y métodos
│   │   ├── __init__.py             # Para que el folder "ecobici" se puede trabajar de forma modular
│   │   ├── utils.py                # Clase base, con métodos como importar, creación de variables, reestructuración de datos, etcétera
│   │   └── models.py               # Clase hija de BaseClass, con métodos adicionales específicos para tratamientos de los datos Ecobici
│   │
│   └── EcoBici_Model.ipynb         # Modelo de pronóstico para demanda de viajes en Ecobici
└── requirements.txt                # Instalar las librerías necesarias con el comando: pip install -r requirements.txt

Fuente de datos

Se obtienen los datos abiertos de Ecobici mes con mes desde 2018. La estructura de cada archivo csv es la siguiente:

Genero_Usuario Edad_Usuario Bici Ciclo_Estacion_Retiro Fecha_Retiro Hora_Retiro Ciclo_Estacion_Arribo Fecha_Arribo Hora_Arribo
M 39 10849 430 30/11/20 23:45:01 166 01/12/20 0:27:25
F 24 9943 122 01/12/20 5:55:41 326 01/12/20 6:21:13

Importar

Al leer los 48 archivos csv se reestructura por chunks tal que la tabla final indica la demanda de cada estación para cada ventana de tiempo en la respectiva fecha:

Estacion_Retiro fecha 00 a 09 10 a 12 13 a 14 15 a 17 18 a 20 >= 21
1 01/01/18 1 10 9 15 8 0
1 02/01/18 40 30 22 34 54 8
1 03/01/18 51 37 43 53 59 8
1 04/01/18 67 18 44 46 61 9
1 05/01/18 62 36 44 56 27 11
1 06/01/18 13 25 16 19 17 7
1 07/01/18 12 22 18 29 22 7
1 08/01/18 79 38 37 56 95 11
1 09/01/18 83 33 33 52 99 18

Transformar

Para cada estación, se "recorre" la demanda que tuvo en cada ventana de tiempo para que el próximo modelo "aprenda" la estacionalidad y tendencia de la demanda, es decir, podrá contestar la pregunta: ¿Cuántos viajes tendré en mi estación hoy? Porque ahora sabemos cómo fueron los viajes de los últimos 40 días en cada ventana de tiempo.

La estructura de esta tabla queda de la siguiente forma, siendo el subíndice "_n" la demanda hace n-días en la misma ventana de tiempo:

Alt text


Modelo

Se compara el score R2 de tres modelos:

Modelo R2 test R2 train
Regresión Lineal 88.70% 88.65%
Bosque Aleatorio 88.03% 98.26%
Red Neuronal (SKlearn) 87.65% 96.40%

Por lo tanto, se elige la Regresión Lineal tanto por contar con el mejor score en el conjunto de test (generaliza correctamente porque es prácticamente el mismo score en el conjunto de entrenamiento) como por la baja complejidad del modelo (y peso del mismo para poner en Producción).


Resultado

Aún cuando en el entrenamiento contamos con temporadas atípicas derivadas de la pandemia COVID-19, la demanda estimada es muy parecida a la real:

Alt text


Siguientes pasos

Se plantea la posibilidad de predecir no sólo la demanda total de hoy con info de los 40 días pasados, sino segmentada por ventana de tiempo. Pruebas preliminares no resultan en R2 mayor a 65%, se utilizarán modelos de Deep Learning para mejorar este resultado.



¡GRACIAS!


Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.