Algorithme · Technique
Évolutions techniques de PasDeVélib
Juin 2026 · 6 min de lecture
Retour sur les principales évolutions de l'algorithme de prédiction et de l'infrastructure, depuis le lancement jusqu'à aujourd'hui.
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 (Haversine). 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 comme features avec poids fort dans la distance analogue
V4 : expérimentations (partiellement désactivées)
- Tendance réseau global — % de stations vides à l'échelle Paris par (weekday, hour). Désactivé : trop peu de données 2026 pour être fiable
- Graphe de flux — matrice de corrélations temporelles entre stations. Désactivé pour la même raison — sera réactivé à l'automne
- Détection d'anomalies — active : compare le fill_rate observé aux intervalles q05–q95 historiques. Si anomalie, la confiance de prédiction 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 du lendemain lit ces paramètres depuis le backup et les injecte dans AnalogConfigavant 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 toutes les 5 min, consolidation quotidienne, aggregate hebdomadaire, forecast quotidien)
- Stockage — GitHub Releases comme data store parquet (gratuit, versionné)
- Webapp — Next.js 15 sur Vercel Hobby (gratuit)
- 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%