Aperçu du Projet
Ce projet de machine learning vise à prédire la demande horaire de vélos pour le système de vélos en libre-service Divvy de Chicago, qui compte plus de 700 stations et enregistre plus de 6 millions de trajets par an. L'objectif est d'anticiper les fluctuations de demande pour optimiser la redistribution des vélos, la planification de la maintenance et améliorer l'expérience utilisateur.
J'ai développé un pipeline complet de machine learning de bout en bout : de l'analyse de 11,3 millions de trajets historiques jusqu'au déploiement d'une application interactive avec Docker. Le modèle final atteint 90% de précision (R²) en combinant des données temporelles, météorologiques et calendaires.
Le projet inclut une analyse exploratoire approfondie révélant les patterns d'usage (pics aux heures de pointe, impact de la météo), l'ingénierie de 15 features prédictives, la comparaison de 3 algorithmes de ML, et une validation rigoureuse sur des données de 2025 non vues. L'application Streamlit déployée permet de visualiser les prédictions et explorer les insights découverts.
Ce projet a été réalisé dans le cadre du cours de Machine Learning du M1 Data & AI à Ynov Paris (Janvier 2026) et a fait l'objet d'un rapport académique complet et d'une présentation orale.
Date de réalisation: Janvier 2026
Type: Projet d'école (M1 Data & AI - Ynov Paris)
Statut: Complété & Présenté
Technologies Utilisées
Python
Pandas
NumPy
Scikit-learn
Matplotlib
Seaborn
Streamlit
XGBoost
Docker
Jupyter Lab
Résultats et Performances
🎯 Performances du Modèle
±122
Erreur Moyenne (MAE)
Fonctionnalités du Pipeline ML
- Analyse exploratoire approfondie - Découverte des patterns temporels (pics 8h/17h), impact météo (température optimale 15-25°C, pluie -30-50%), et saisonnalité (été 3x hiver)
- Ingénierie de features avancée - Création de 15 variables prédictives incluant encodage cyclique (sin/cos), features météo, calendrier (jours fériés), et variables temporelles
- Comparaison de 3 algorithmes ML - Régression Linéaire (baseline), Random Forest (sélectionné, R²=0.90), XGBoost (R²=0.896) avec évaluation sur 5 métriques
- Validation temporelle rigoureuse - Entraînement sur 2024 (5,8M trajets), test sur 2025 (5,5M trajets) pour validation sur données futures non vues
- Dashboard interactif Streamlit - 4 pages (Accueil, Prédictions, Analyse, Visualisations) avec graphiques interactifs Plotly
- Déploiement conteneurisé - Docker Compose orchestrant dashboard + Jupyter Lab pour un déploiement production-ready
- Documentation académique complète - Rapport LaTeX (15+ pages), présentation Beamer (12 slides), notebooks commentés
Pipeline Machine Learning
Le projet suit une méthodologie rigoureuse de data science end-to-end en 4 phases :
Phase 1 : Acquisition & Exploration des Données
- Téléchargement de 24 fichiers CSV mensuels via l'API Divvy (5,8M trajets 2024 + 5,5M trajets 2025)
- Intégration de données météorologiques historiques via Meteostat (730 jours)
- Génération du calendrier des jours fériés fédéraux américains
- Insights clés : Pics d'usage à 8h et 17h en semaine, forte corrélation avec la température, baisse de 30-50% lors de pluie
Phase 2 : Feature Engineering
- Agrégation des trajets individuels en buckets horaires (8 782 heures d'entraînement)
- Création de features temporelles avec encodage cyclique (hour_sin, hour_cos pour la continuité 23h→0h)
- Fusion des données météo (journalières → horaires) : température, précipitations, vent
- Ajout de features calendaires : weekends, jours fériés, saison
- Résultat : Dataset ML-ready avec 15 features prédictives structurées
Phase 3 : Entraînement & Sélection de Modèles
- Entraînement de 3 modèles : Régression Linéaire (baseline), Random Forest (200 arbres, profondeur 15), XGBoost
- Évaluation multi-critères : R², RMSE, MAE, MAPE, temps d'entraînement
- Modèle sélectionné : Random Forest (meilleure généralisation sans surapprentissage)
- Analyse d'importance des features : Heure (45%), Température (18%), Jour de semaine (12%)
Phase 4 : Déploiement & Documentation
- Dashboard Streamlit multi-pages avec visualisations interactives (Plotly)
- Conteneurisation Docker avec multi-stage build pour optimisation
- Orchestration Docker Compose (services dashboard + Jupyter Lab)
- Documentation académique : rapport LaTeX complet + présentation Beamer avec script oral
- Livrable : Application production-ready déployable en un clic
Défis Techniques Surmontés
Gestion de Données Massives
Défi : Traiter 11,3 millions de lignes avec des contraintes mémoire
Solution : Utilisation d'opérations pandas optimisées (vectorisation), chargement par chunks, et agrégation précoce des données brutes en format horaire pour réduire de 11M à 8,8K lignes d'entraînement
Validation Temporelle
Défi : Éviter le data leakage et valider sur des données futures réalistes
Solution : Split strict train/test respectant l'ordre temporel (2024 → 2025) sans mélange aléatoire, simulant une vraie mise en production avec prédictions sur données non vues
Intégration Multi-Sources
Défi : Fusionner des données de granularités différentes (trajets individuels + météo journalière + jours fériés)
Solution : Pipeline ETL structuré avec broadcast des données journalières vers résolution horaire, gestion des valeurs manquantes par interpolation, et création de clés de jointure temporelles cohérentes
Features Cycliques
Défi : Représenter la continuité temporelle (23h proche de 0h, décembre proche de janvier)
Solution : Encodage trigonométrique (sin/cos) pour les variables cycliques (heure, mois) permettant au modèle de capturer la continuité naturelle du temps
Déploiement Reproductible
Défi : Garantir la reproductibilité et faciliter le déploiement pour les évaluateurs
Solution : Conteneurisation complète avec Docker (multi-stage build), Docker Compose pour orchestration, sauvegarde des modèles avec scalers (joblib), et documentation détaillée du setup
Performance vs Complexité
Défi : Choisir entre précision maximale et généralisation robuste
Solution : Analyse comparative rigoureuse montrant que Random Forest (R²_test=0.899) surpasse XGBoost (R²_test=0.896) en évitant le surapprentissage visible dans les écarts train/test, privilégiant la robustesse opérationnelle