Ce que l'on peut apprendre d'un réseau de vélo-partage en écoutant simplement son flux public, station par station, quatre fois par minute.
Le réseau aVélo de Québec publie l'état de ses stations dans un flux GBFS public (PBSC — même fournisseur que BIXI) : pour chaque station, le nombre de vélos disponibles, mis à jour toutes les 12 à 15 secondes. Depuis le 23 juin 2026, une machine enregistre ce flux en continu. Les pages et figures ci-dessous sont ce qu'on en tire : de la carte d'occupation jusqu'à l'estimation du nombre de trajets d'une journée — un problème étonnamment subtil, parce que le flux ne montre que le solde des allées et venues.
Trois pages vivantes, régénérées automatiquement à partir des données fraîches.
Les « jours-types » du réseau, extraits sans hypothèse préalable.
Pour une journée donnée, chaque station fournit un vecteur de 1440 valeurs (les vélos disponibles, minute par minute, heure de Québec). On empile les ~226 stations et on fait l'ACP entre stations : les vecteurs propres sont donc des profils temporels — des journées types — et les valeurs propres disent quelle part de la variabilité du réseau chacune explique.
Après z-score par station (on retire le niveau et l'amplitude, il ne reste que la forme du jour), la première composante est l'axe origine ↔ destination : un score élevé = station qui se vide le matin et se remplit le soir (université, centres d'achat, parcs-O-bus) ; un score faible = le contraire, un quartier résidentiel. Les suivantes captent un renflement d'après-midi (PC2), une double pointe (PC3), un décalage de fin de journée (PC4).
Sans normalisation, l'ACP est dominée par une PC1 quasi plate qui n'exprime que la taille de la station (≈ 50 % de la variance) — utile pour vérifier, inutile pour comprendre. Les deux variantes sont produites pour chaque journée.
Une journée isolée porte son lot d'accidents : une averse, un événement, une panne de rééquilibrage. En mettant en commun les 26 journées complètes collectées (les journées partielles s'excluent d'elles-mêmes), le bruit se moyenne et l'axe principal ressort beaucoup plus net : PC1 = 60 % de la variance contre ~44 % sur un jour, et 82 % avec seulement deux composantes.
Et l'axe change de nature. Sur une journée de semaine, la PC1 est l'axe domicile-travail. Sur 26 jours d'été mis en commun, ce sont les pôles touristiques du Vieux-Québec qui occupent l'extrémité positive — Château Frontenac, Hôtel de ville, Musée des plaines d'Abraham, Cathédrale Holy Trinity — contre des stations résidentielles à l'autre bout : Bayard/Boisseau, Parc de l'Anse-à-Cartier, Chapdelaine/De Belmont, 26e Rue. L'été, le réseau sert d'abord la promenade, et ça se lit dans la première composante.
Combien de vélos sont hors des racks à un instant donné ?
Le flux ne dit pas la taille de la flotte, seulement ce qui est amarré. On l'estime par le maximum atteint la nuit, quand presque tout est stationné — puis, à chaque instant, en circulation = flotte − amarrés. C'est un plafond du nombre de trajets en cours : ça inclut les camions de rééquilibrage et les vélos en atelier.
Sur les 28 jours collectés : flotte estimée 2385 vélos, médiane 263 en circulation, pointe de soirée ordinaire vers 800, et des soirées d'événement qui dépassent 1300 — la Fête nationale et le Festival d'été se lisent directement dans la courbe. Ce sont des événements réels, pas des anomalies de mesure.
Traiter le taux de remplissage comme un champ scalaire sur la ville.
Le taux de remplissage d'une station (vélos disponibles / capacité) est
interpolé entre les stations — interpolation cubique, masquée au-delà de ~900 m d'une
station pour ne pas peindre le fleuve ni les zones sans réseau. Rouge = vide, vert = plein.
On voit alors où le réseau se vide, pas seulement de combien.
Le problème le plus intéressant du lot : on ne voit que le solde.
Compter les trajets semble facile : par station et par minute, une baisse du nombre de vélos est un départ, une hausse une arrivée. Le 10 juillet, ce comptage naïf donne 17 180 trajets, avec une concordance départs/arrivées de 0,4 % — rassurant. Mais le chiffre officiel du réseau ce jour-là est 19 628 : il manque 12,5 %.
La raison n'est pas le rééquilibrage, c'est le sous-échantillonnage. On n'observe
que la variation nette N = A − D ; or
Le terme 2·min(A,D) — une arrivée et un départ dans le même intervalle —
est strictement invisible. Il est d'autant plus gros que la station est brassée. D'où deux
façons de le récupérer :
En modélisant arrivées et départs comme deux Poisson indépendants, on ajoute
2·E[min(A,D)]. Limite intrinsèque : les taux sont estimés sur les nets déjà
tronqués, donc ce sont des bornes inférieures — la correction sous-corrige.
La différence de deux Poisson suit une loi de Skellam, dont la moyenne et la variance séparent proprement le solde et le débit :
La variance des nets donne donc le débit total α+δ même quand le solde
est nul : on récupère le trafic par les fluctuations plutôt que par la moyenne. Cet
estimateur surestime légèrement (non-stationnarité, scintillement ±1 du flux).
| Méthode | Toutes stations | Sans station 122 |
|---|---|---|
Brut Σ|N|/2 (borne basse) | 17 180 | 16 610 |
| Coïncidence Poisson | 18 800 | 18 000 |
| Chiffre officiel du réseau | 19 628 | — |
| Variance de Skellam (fenêtre 7 min) | 21 463 | 19 489 |
| Variance-différence (Allan) | ~24 900 | ~22 600 |
La vérité est donc encadrée : brut < coïncidence < officiel < variance. La moyenne sous-estime, la variance surestime, et la variance à fenêtre courte en écartant la station temporaire des Plaines (corrompue par du staging d'employés et un parc externe invisible au flux) tombe à 19 489, à 0,7 % du chiffre officiel.
Le vrai remède est expérimental, pas statistique. Le flux a un
ttl de 12 s et se rafraîchit toutes les 12–15 s : depuis le 11 juillet, la
collecte échantillonne à 15 secondes plutôt qu'à la minute. À ce rythme
min(A,D) → 0 et le comptage brut converge vers le vrai compte, sans aucun
modèle.
Rien d'autre qu'un flux public et un cron.
station_information + station_status), sans authentification,
sans limite de débit ; requêtes poliment identifiées.Toutes les heures sont en heure locale de Québec (UTC−4). Une station de test du fournisseur, aux coordonnées (0, 0), est écartée de toutes les analyses — laissée en place, elle écrasait à elle seule la première composante.