Méthodologie de l'Observatoire ONLY VTC
Ce document définit précisément chaque indicateur publié sur l'Observatoire : population mesurée, horodatages utilisés, bornes de validité, seuils de publication. Il est versionné : chaque édition publiée référence la version de méthodologie qui l'a produite, et toute modification de définition incrémente le numéro — un chiffre publié reste donc interprétable avec les règles en vigueur à sa génération.
Les chiffres sont calculés directement depuis notre base d'exploitation (les réservations réelles de la plateforme), sans retraitement manuel, par un service en lecture seule.
1. Principes
- Non-sélection. Tout indicateur qui atteint le seuil d'échantillon sur une période est publié pour cette période, quelle que soit sa valeur — y compris défavorable. Un indicateur ne peut être retiré d'une édition que pour insuffisance d'échantillon, jamais parce que le chiffre déplaît. Retirer sélectivement un mauvais trimestre serait un mensonge par omission.
- Échantillon toujours affiché. Aucun chiffre n'est publié sans sa taille d'échantillon (« n ») visible à côté. Une (sous-)catégorie sous le seuil affiche « échantillon insuffisant », jamais un nombre.
- Pas de métrique business sensible. L'Observatoire ne publie ni marges, ni commissions, ni taux de remplissage, ni chiffre d'affaires, ni rémunération chauffeur. Uniquement des indicateurs de service et d'activité.
- Pas de donnée individuelle. Uniquement des agrégats. Aucun trajet, client ou chauffeur identifiable n'est exposé.
- Estimations libellées comme telles. Les distances et durées « estimées » sont les calculs d'itinéraire faits à la réservation, pas de la télémétrie embarquée. Le libellé public le dit.
2. Cadre commun
| Élément | Règle |
|---|---|
| Population de base | Courses au statut « terminée », avec une date de fin renseignée. |
| Fuseau | Europe/Paris pour tout découpage horaire ou calendaire (nuit, mois, trimestre). |
| Horodatages | Tous serveur, posés à l'instant de l'action (chauffeur, système ou tâche planifiée). Aucune ressaisie manuelle a posteriori. |
| Seuil de publication | 15 courses minimum. Toute (sous-)catégorie avec n < 15 → « échantillon insuffisant ». |
| Tendance centrale | On publie médiane (mise en avant, robuste aux aberrants) et moyenne, toujours accompagnées de n. |
| Bornes de validité | Chaque indicateur temporel a des bornes physiques (cf. §3). Toute valeur hors borne est exclue du calcul et réduit le n publié. |
| Immédiate vs réservée | Prise en charge prévue plus de 30 min après la demande ⇒ réservée à l'avance ; sinon demande immédiate. Seuil métier validé (2026-07). |
| Jalon d'arrivée (source) | Pour la ponctualité et l'attente, l'arrivée au point de prise en charge est l'horodatage mesuré côté serveur par géofence, pas le tap chauffeur. La série publique v2 repart le 4 août 2026 (00:00 UTC), avec version de mesure et rayon de déclenchement figés à 120 m. Les 9 observations exploratoires v1 restent en base pour l'audit mais sont exclues des statistiques. |
| Déclenchement avant acceptation du trajet d'approche | Une entrée dans la géofence survenue alors que la course est seulement « acceptée » n'est valide que si elle a lieu au plus 45 min avant l'heure prévue. Au-delà, la mesure est conservée en base mais invalide pour les statistiques publiques. |
| Couverture minimale (géofence) | Un indicateur à source géofence n'est publié que si le ratio exact mesuré/population couvre ≥ 80 % de sa population. L'arrondi à une décimale est réservé à l'affichage et ne décide jamais de la publication. Sous ce seuil, la valeur reste « — », avec la progression n/15 et la couverture publiées ; dès n ≥ 15, le résumé déjà mesuré est affiché en note, étiqueté provisoire — jamais en valeur principale ni dans les exports. |
2.1. Exclusions motivées
| Motif | Justification |
|---|---|
| Courses non terminées | Pas de fin de course mesurable. |
| Horodatages incomplets | Le jalon requis par l'indicateur est absent → délai non calculable. |
| Clôtures automatiques | Fin de course posée par le système (jusqu'à +6 h) — ne reflète pas la fin réelle. |
| Clôtures forcées par un opérateur | Fin administrative et non opérationnelle. |
| Mises à disposition | La durée est la durée louée ; fausserait les statistiques de trajet A→B. |
| Départs anticipés | Approche démarrée plus de 45 min avant l'heure prévue : mesure la marge de précaution du chauffeur, pas son trajet d'approche. |
Les mises à disposition et clôtures automatiques/forcées sont dénombrées dans le bloc public « exclusions » des exports. Les autres exclusions propres à chaque indicateur sont visibles par son n, toujours publié avec la valeur ou sa progression.
3. Indicateurs — définitions au timestamp près
Jalons du cycle de vie d'une course (tous horodatés serveur) : demande → acceptation chauffeur → départ du chauffeur (« en route ») → arrivée au point de prise en charge → prise en charge (client à bord) → fin de course. S'y ajoute l'heure de prise en charge prévue, fixée à la réservation.
3.0. État de publication (v1.3)
Vérifié en production le 28 juillet 2026 (script d'inspection en lecture seule, versionné dans notre dépôt) : les jalons de progression saisis par le chauffeur (arrivée, prise en charge, fin) sont partiellement tapés en rafale à la dépose. Sur 127 courses aux jalons complets, l'écart arrivée → prise en charge a une médiane de 10 secondes (48,8 % à moins de 10 s) et 21 % des courses ont arrivée/départ/fin en moins de 2 minutes. Le tap chauffeur « arrivé » marque donc l'embarquement (voire la dépose), pas l'arrivée au point de rendez-vous : il ne mesure pas ce qu'il prétend mesurer.
Correctif de collecte v2 (série active à partir du 4 août 2026, 00:00 UTC) : l'arrivée au point de prise en charge est mesurée côté serveur par géofence à un rayon public figé de 120 m, et versionnée au premier déclenchement. Sur cette source homogène, la ponctualité et l'attente en demande immédiate sont réactivées à partir de 15 mesures valides et seulement si le ratio exact de couverture atteint 80 %. Restent suspendus : le temps d'approche et les durées. Toute réactivation applique le principe de non-sélection (§1) : dès le seuil atteint, l'indicateur se publie chaque période, y compris défavorable — un « 98 % à l'heure » issu de cette même source serait publié tout autant qu'un mauvais chiffre.
| Indicateur | Défini sur | v1.3 |
|---|---|---|
| Délai d'acceptation | demande → acceptation (action dans l'app) | ✅ publié |
| Part acceptée en moins de 60 s | demande → acceptation (action dans l'app) | ✅ publié (v1.3) |
| Délai de réservation à l'avance | demande → prise en charge prévue | ✅ publié (v1.3) |
| Distance estimée | estimation d'itinéraire à la réservation | ✅ publié |
| Part longue distance (> 50 km) | estimation d'itinéraire à la réservation | ✅ publié (v1.3) |
| Parts aéroport / nuit / à l'avance / B2B / assistance | champs de réservation | ✅ publié |
| Communes de prise en charge | adresse de départ | ✅ publié (v1.3, agrégats n ≥ 15 par commune) |
| Annulations chauffeur après acceptation | statut et auteur d'annulation, sur courses acceptées | ✅ publié (v1.3, série depuis le 4 juin 2026) |
| Volume mensuel / cumulatif | comptage | ✅ publié |
| Attente demande immédiate | demande → arrivée mesurée par géofence | ✅ publié dès n ≥ 15 et couverture exacte ≥ 80 % |
| Ponctualité | arrivée mesurée par géofence vs heure prévue | ✅ publié dès n ≥ 15 et couverture exacte ≥ 80 % |
| Temps d'approche | départ chauffeur → arrivée | ⏸ suspendu |
| Durée de trajet / transfert aéroport | prise en charge → fin de course | ⏸ suspendu |
| Écart estimé / réalisé | distance et durée réelles | ⏸ suspendu (non collecté) |
3.1. Délais
| Indicateur | De → à | Population | Bornes valides |
|---|---|---|---|
| Attente client (demande immédiate) | demande → arrivée mesurée par géofence | demandes immédiates terminées après la bascule v2, arrivée mesurée automatiquement | 0 – 360 min |
| Temps d'approche (suspendu) | départ chauffeur → arrivée | réservées à l'avance uniquement | 0,5 – 180 min |
| Délai d'acceptation | demande → acceptation | courses diffusées aux chauffeurs uniquement | 0 – 7 jours |
| Délai de réservation à l'avance (v1.3) | demande → prise en charge prévue | courses réservées à l'avance uniquement | 0,5 h – 180 jours |
L'attente client est le délai complet vécu par le client, recherche du chauffeur comprise — pour une course réservée à l'avance le client n'« attend » pas, le chauffeur vient pour l'heure convenue. Le temps d'approche n'est pas publié pour les demandes immédiates : l'app chauffeur déclenche l'approche automatiquement à l'acceptation, le « trajet d'approche » mesuré serait donc le délai acceptation→arrivée, déjà contenu dans l'attente publiée — redondant et systématiquement gonflé. Le délai d'acceptation exclut les attributions directes du dispatch : quasi instantanées, elles ne mesurent pas la décision d'un chauffeur — sans cette exclusion, le chiffre deviendrait ininterprétable. À côté de la médiane est publiée (v1.3) la part acceptée en moins de 60 secondes — même population, même n. Le délai de réservation à l'avance (v1.3) mesure combien de temps à l'avance le client commande : une demande immédiate n'a pas de délai choisi (l'heure prévue y est posée par le système) → exclue ; la médiane est mise en avant, la distribution étant très étalée (de quelques heures à plusieurs semaines).
3.2. Trajet
La distance estimée (itinéraire routier calculé à la réservation, hors mises à disposition, bornes 0,5 – 500 km) est publiée. La durée de trajet réelle et la durée de transfert aéroport sont suspendues : définies sur les jalons prise en charge → fin de course, agglutinés (cf. §3.0). Note d'échantillon : la distance estimée n'est renseignée que sur une partie des courses terminées (les imports d'assistance et les anciennes réservations en sont dépourvus) — ces indicateurs atteignent donc le seuil de 15 plus tard que les indicateurs de délai. C'est une conséquence assumée du seuil, pas un choix éditorial.
3.3. Ponctualité
Réservées à l'avance uniquement — une demande immédiate n'a pas d'heure promise.
- Une course est « à l'heure » si l'arrivée mesurée par géofence survient au plus tard 5 minutes après l'heure prévue (tolérance).
- Publiés : % de courses à l'heure, médiane de l'écart signé arrivée − heure prévue (en minutes ; négatif = en avance) et taux de couverture de la mesure. L'écart médian publié à côté du taux rend le seuil de tolérance transparent.
- Ampleur des retards : moyenne des écarts au-delà de la tolérance (« retard moyen quand il survient ») et nombre de retards, publiées à côté du taux avec le même seuil (n ≥ 15, couverture ≥ 80 %).
- Affichage provisoire : dès n ≥ 15 mais sous le seuil de couverture, le résumé déjà mesuré est affiché dans la note de la carte, étiqueté « chiffre provisoire ». La valeur principale reste « — » et les exports JSON/CSV n'exposent pas le provisoire.
- Couverture = part de la population éligible dont l'arrivée est mesurée automatiquement ; une course non couverte (app fermée, géofence non déclenchée) est comptée au dénominateur, jamais au numérateur. Bornes de l'écart : −180 à +180 min.
3.4. Parts d'activité
Dénominateur = population de base de la période, sauf mention contraire dans la règle. Publiées seulement si le dénominateur ≥ 15.
| Part | Règle |
|---|---|
| Aéroport | Type de lieu « aéroport » enregistré au départ ou à l'arrivée ; à défaut, analyse de l'adresse (Saint-Exupéry, aéroport, LYS…). |
| Nuit (19 h – 7 h) | Heure de prise en charge prévue entre 19 h et 7 h, heure de Paris (cf. §4). |
| Réservée à l'avance | Prise en charge prévue plus de 30 min après la demande (cf. §2). |
| B2B | Course rattachée à un compte entreprise. |
| Assistance | Mission rattachée à un dossier ou partenaire d'assistance. |
| Longue distance (v1.3) | Distance estimée à la réservation supérieure à 50 km. Dénominateur propre : les courses avec distance estimée valide (0,5 – 500 km, hors mises à disposition) — la même population que la statistique de distance (cf. §3.2). Publiée avec une décimale : la part est faible et l'arrondi entier la déformerait. |
3.5. Volume
Volume mensuel : nombre de courses terminées par mois calendaire (Europe/Paris), sur les 6 derniers mois — le mois en cours est marqué « en cours » (volume partiel). Volume de la période / cumulatif : cf. §5.
3.6. Indicateurs suspendus — en attente de fiabilisation de la collecte
Suspendus = définis (ci-dessus) mais non rendus sur la page ni dans les exports, tant que la donnée sous-jacente n'est pas fiable. La définition reste figée pour que la réactivation soit sans ambiguïté.
Cause A — jalons chauffeur non fiables (mesuré le 28 juillet 2026) : les jalons d'arrivée, de prise en charge et de fin sont partiellement saisis en bloc à la dépose. La pollution est biaisée dans un seul sens — elle gonfle l'attente et l'approche, écrase la durée — donc une médiane calculée sur 80 % de données propres et 20 % de données décalées dans la même direction est déplacée, pas « robuste ». Levés en v1.2 grâce à la géofence : attente immédiate et ponctualité (ils ne dépendaient que de l'arrivée). Toujours suspendus : temps d'approche (dépend du tap « en route »), durées de trajet et de transfert aéroport (dépendent des taps de prise en charge et de fin).
Cause B — donnée non collectée : la distance et la durée réellement parcourues ne sont pas capturées par l'app chauffeur (0 course renseignée sur 191 vérifiées). Suspendu à ce titre : l'écart estimé / réalisé.
Règles de réactivation (strictes) :
- Pas de filtrage a posteriori. On ne republie pas ces indicateurs en ne gardant que les courses « proprement saisies » : sélectionner sur la qualité de saisie introduit un biais invisible (les chauffeurs qui saisissent correctement ne sont pas représentatifs des autres). La seule sortie honnête est de fiabiliser la collecte à la source.
- Fiabilisation : jalons automatiques mesurés côté serveur (géofence horodatant l'arrivée ; détection du départ et de la fin à venir) ; capture automatique de la distance/durée réelle via la trace GPS.
- Garde-fou de couverture : restreindre un indicateur aux courses mesurées par géofence est une sélection sur la méthode de mesure, pas sur le résultat — légitime à condition que la mesure couvre presque toute la population. Sinon les courses non mesurées (app fermée) reformeraient un « filtrage a posteriori » déguisé, corrélé au retard. D'où l'exigence de couverture ≥ 80 % (§2), taux publié à côté de l'indicateur pour que le lecteur juge lui-même.
- Réactivation : sur les données postérieures au correctif de collecte, avec une rupture méthodologique datée matérialisée par un incrément de version. Dès réactivation, le principe de non-sélection (§1) s'applique.
3.7. Communes de prise en charge (v1.3)
- Source : l'adresse de départ, champ texte libre — il n'existe pas de champ commune structuré en base. La commune est extraite par règle fixe : dernier segment de l'adresse (séparateur virgule) avant « France », code postal retiré ; un segment restant contenant un chiffre est rejeté (adresse non parsable → exclue du comptage, jamais devinée).
- Population : population de base de la période (courses terminées).
- Publication : agrégats uniquement. Une commune n'est listée que si elle compte au moins 15 prises en charge sur la période (le seuil habituel, appliqué par commune). Publié par commune : nombre de prises en charge et part du total. Aucune adresse individuelle, aucune destination, aucun croisement (commune × heure, commune × client…) n'est publié — protection des personnes transportées avant tout.
- Limite assumée : deux graphies d'une même commune (« St-Priest » / « Saint-Priest ») peuvent scinder un comptage ; l'agrégation est insensible à la casse mais ne normalise pas les abréviations. L'aéroport Lyon-Saint-Exupéry apparaît sous sa commune réelle, Colombier-Saugnieu.
3.8. Annulations chauffeur après acceptation (v1.3)
L'indicateur répond à une question client précise : une fois ma course acceptée, le chauffeur peut-il me lâcher ?
- Population : toutes les courses acceptées de la période — et non les seules courses terminées : une course annulée ne termine jamais, la population de base §2 ne peut donc pas la voir. C'est le seul indicateur de l'Observatoire classé sur la date d'acceptation (une annulée n'a pas de date de fin).
- Numérateur : courses annulées dont l'auteur enregistré de l'annulation est le chauffeur qui avait accepté.
- Rupture datée : la série démarre au 4 juin 2026 (00:00 UTC), date à partir de laquelle l'auteur d'annulation est renseigné de façon fiable en production. Jamais rétro-appliquée ; audité sur l'historique complet le 19 septembre 2026.
- Ce qui ne compte pas : le no-show d'un client constaté par le chauffeur (client absent au point de rendez-vous) n'est pas une annulation chauffeur ; une annulation par le client, un opérateur ou un partenaire non plus. Une réattribution par le dispatch (retrait administratif de la course à un chauffeur pour l'affecter à un autre) n'est pas une annulation de la course.
- Limite assumée : l'indicateur mesure les annulations enregistrées comme telles. Un désistement négocié par téléphone et traité par le dispatch comme une réattribution n'apparaît pas au numérateur — mais le client, lui, a été pris en charge : c'est la promesse mesurée.
- Publication : part en pourcentage (une décimale), avec numérateur, dénominateur et date de début de série. Seuil habituel : dénominateur ≥ 15. Principe de non-sélection (§1) : l'indicateur restera publié même si le chiffre devient défavorable.
4. Nuit et tarification
Le découpage 19 h – 7 h (Europe/Paris) n'est pas arbitraire : c'est la période tarifaire « nuit » du moteur de prix de la plateforme. Vérifié en production le 28 juillet 2026, une majoration nocturne au kilomètre est active (de +17 % à +27 % selon la gamme). Classer la part de nuit sur l'heure prévue est donc cohérent avec le tarif effectivement appliqué au client. La promesse publique est le prix fixé à la réservation, connu d'avance — pas l'absence de grille nocturne.
5. Éditions et versionnement
Éditions par trimestre civil (ex. « 2026-T3 », Europe/Paris) : les métriques d'une édition sont calculées sur les courses terminées pendant ce trimestre. Une archive = une période — c'est ce qui fait une source primaire, pas une brochure. Conséquence assumée : au démarrage, plusieurs sous-catégories trimestrielles affichent « échantillon insuffisant ». C'est une fonctionnalité (§1), pas un défaut.
Édition cumulative « depuis le début » affichée en vitrine sur /observatoire : les chiffres consolidés (couverture temporelle indiquée), régénérés et republiés automatiquement chaque jour — les garde-fous de publication (n ≥ 15, couverture ≥ 80 %) s'appliquent à chaque recalcul.
Cycle de vie : une édition trimestrielle est générée en brouillon (recalcul idempotent), puis publiée manuellement. Une édition trimestrielle publiée est immuable et référence la version de méthodologie qui l'a produite.
6. Publication
- /observatoire : vitrine cumulative + édition trimestrielle publiée courante + taille d'échantillon sur chaque chiffre.
- /observatoire/2026-t3 (etc.) : archives permanentes des éditions publiées, listées sur la page principale.
- Export JSON et export CSV (lecture seule) : mêmes chiffres que la page, format machine, licence et attribution incluses. Paramètre
?period=AAAA-TNpour une édition archivée.
7. Limites et biais (affichés publiquement)
- Composition de l'activité : l'activité numérisée est aujourd'hui majoritairement composée de courses entreprises et de missions d'assistance. Ces chiffres décrivent la plateforme ONLY VTC, pas l'ensemble du marché lyonnais.
- Échantillons modestes : la plateforme numérique monte en charge en 2026 (société active depuis 2016, mais les courses téléphoniques n'étaient pas horodatées). Les échantillons vont de quelques dizaines à quelques centaines de courses selon l'indicateur — et sont affichés.
- Estimations ≠ télémétrie : distances et durées estimées sont les calculs d'itinéraire faits à la réservation.
- Couverture partielle de certains champs : la distance estimée n'est renseignée que sur une partie des courses (cf. §3.2).
- Jalons chauffeur non fiables : le temps d'approche, les durées de trajet et l'écart estimé/réalisé restent suspendus (cf. §3.0 / §3.6). Une source qui suspend ce qu'elle ne peut pas mesurer honnêtement, plutôt que de le publier avec un astérisque, est précisément ce qui la distingue d'une brochure.
8. Reproductibilité
Toutes les définitions ci-dessus sont implémentées dans le service de calcul de notre backend (lecture seule, agrégations directes sur la base d'exploitation) et couvertes par des tests automatisés versionnés avec le code. Les bornes, seuils et exclusions y sont des constantes nommées correspondant à ce document. Journalistes et chercheurs : pour un échange sur la méthodologie ou des données détaillées, écrivez à contact@onlyvtc.fr.
9. Journal des versions
| Version | Date | Changements |
|---|---|---|
| 1.0 | 28 juillet 2026 | Version initiale gelée. Seuil de publication porté à 15. Publiés : délai d'acceptation, distance estimée, parts d'activité, volumes. Suspendus (définis, non rendus) : attente immédiate, temps d'approche, ponctualité, durées — jalons chauffeur agglutinés à la dépose (mesuré en production le 28/07) ; écart estimé/réalisé — non collecté. Réactivation uniquement après fiabilisation de la collecte à la source, sur données postérieures, avec incrément de version — jamais par filtrage a posteriori. |
| 1.1 | 29 juillet 2026 | Réactivation de la ponctualité et de l'attente en demande immédiate sur le jalon d'arrivée mesuré côté serveur par géofence, sans tap chauffeur. Rupture datée : calcul uniquement sur les courses terminées après la bascule de la mesure automatique, jamais rétro-appliqué. Publication conditionnée à une couverture ≥ 80 %, taux de couverture publié à côté de chaque indicateur. |
| 1.2 | 3 août 2026 | Nouvelle série géofence v2 à partir du 4 août 2026 (00:00 UTC) : les 9 observations exploratoires v1 restent conservées pour audit mais sont exclues. Version de mesure et rayon 120 m figés au premier déclenchement ; déclenchement avant acceptation valide uniquement dans les 45 min précédant l'heure prévue. Couverture comparée sur le ratio exact avant arrondi. Sous n = 15 ou couverture < 80 %, la page affiche « — », la progression n/15 et la couverture. Addendum du 7 septembre 2026 (aucune définition existante modifiée) : publication de l'ampleur moyenne des retards à côté du taux ; dès n ≥ 15 sous le seuil de couverture, le résumé mesuré est affiché en note comme chiffre provisoire (valeur principale « — », exports inchangés). |
| 1.3 | 19 septembre 2026 | Cinq indicateurs ajoutés, aucune définition existante modifiée. (1) Annulations chauffeur après acceptation (§3.8) : population = courses acceptées, série depuis le 4 juin 2026 (fiabilité de l'auteur d'annulation, auditée sur l'historique complet le 19 septembre 2026) — seul indicateur classé sur la date d'acceptation. (2) Délai de réservation à l'avance (§3.1) : demande → prise en charge prévue, réservées à l'avance uniquement, bornes 0,5 h – 180 jours. (3) Part longue distance > 50 km (§3.4) : dénominateur propre = courses avec distance estimée valide, une décimale. (4) Part acceptée en moins de 60 s (§3.1) : même population que le délai d'acceptation. (5) Communes de prise en charge (§3.7) : extraites de l'adresse de départ, agrégats uniquement, seuil de 15 appliqué par commune, aucun croisement publié. Correctif de collecte associé : l'annulation chauffeur enregistre désormais son auteur sur la réservation elle-même (jusqu'ici uniquement dans le journal d'événements interne). |
Licence et citation
Les données de l'Observatoire sont publiées sous licence CC BY 4.0 : citez « Observatoire ONLY VTC — onlyvtc.fr/observatoire ». Le mode d'emploi complet de citation est sur la page de l'Observatoire.