PasDeVélib V1 → V5 : toutes les évolutions techniques
18 juin 2026 · 6 min de lecture
Algorithme de base : k-NN journées analogues
Le modèle repose sur les journées analogues (k-Nearest Neighbors). Pour prédire la disponibilité d'une station à une heure donnée, on recherche dans les 6 derniers mois les journées les plus similaires selon plusieurs critères : jour de semaine, météo (température ressentie, précipitations sur 3h), vacances scolaires, jours fériés. La prédiction est la distribution des valeurs observées ces jours-là.
V2 : calibration et robustesse
- Platt Scaling par tranche horaire — recalibration des probabilités brutes pour corriger le biais optimiste en heure de pointe (16h–19h)
- Pondération temporelle exponentielle — les données récentes ont plus de poids (demi-vie 365 jours)
- Shrinkage vers la climatologie — quand les voisins analogues sont rares, on tire la prédiction vers la moyenne historique
- k adaptatif — le nombre de voisins s'ajuste selon la densité locale via analyse des gaps dans les distances
- Météo enrichie — ajout de
apparent_temperatureetprecip_3h_max
V3 : spatial layer et événements
- Spatial layer géographique — lissage avec les 3–5 stations voisines dans un rayon de 400m. Poids : 80% station propre + 20% voisines
- Profils de station — classification automatique : bureau, résidentiel, touristique, mixte selon les ratios flux matin/soir
- Événements perturbateurs — grèves RATP/SNCF, marathons, Fête de la Musique intégrés avec poids fort dans la distance analogue
V4 : expérimentations (partiellement désactivées)
- Tendance réseau global — désactivé : trop peu de données 2026 pour être fiable, réactivation prévue à l'automne
- Graphe de flux — matrice de corrélations temporelles entre stations. Désactivé pour la même raison
- Détection d'anomalies — active : compare le fill_rate observé aux intervalles q05–q95 historiques. Si anomalie, la confiance est réduite
V5 : recalibration automatique Platt
Chaque nuit, l'évaluation quotidienne calcule les paramètres (a, b) optimaux par tranche horaire en minimisant le Brier Score sur les 30 derniers jours (grid search + affinage local). Le workflow forecast.yml lit ces paramètres depuis le backup et les injecte dans AnalogConfig avant de générer les prédictions.
Nowcast temps réel
En plus de la prédiction k-NN, un nowcast combine la prédiction statique avec la tendance des 30 dernières minutes :
- Extrapolation linéaire du fill_rate à l'horizon voulu
- Conversion en probabilité via sigmoïde centrée sur 0.15 (seuil de présence d'un vélo)
- Poids adaptatif : fort trend + horizon court → jusqu'à 40% de poids au trend
- Shrink factor : le trend est fiable à 0–15 min, quasi nul à 45 min
Infrastructure zéro coût
- Bot — GitHub Actions (scrape 5 min, consolidation quotidienne, aggregate hebdo, forecast quotidien)
- Stockage — GitHub Releases comme data store parquet (gratuit, versionné)
- Webapp — Next.js 15 sur Vercel Hobby
- Auth / DB — Supabase Free tier
Métriques actuelles (30 jours)
Précision binaire : 94.8% · MAE : 5.84 vélos · Faux positifs : 3.25% · Dans ±2 vélos : 36.4%