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_temperature et precip_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%

Voir les métriques détaillées →