1. Ce que fournit le Geotab Data Feed
La distribution principale de Sohly est le Geotab Marketplace. Chaque client flotte autorise Sohly comme intégration MyGeotab ; la télémétrie pertinente arrive dans sa base MyGeotab et Sohly s’abonne à deux types d’objets via le Data Feed.
| Donnée | Source | Disponible | Qualité |
|---|---|---|---|
| État de charge (SoC) | StatusData (DiagnosticId
BatteryStateOfChargeId) |
Oui | Reporté par le BMS ; précision ±1–3 % |
| Tension pack | StatusData (PrimaryBatteryVoltageId) |
Oui | Reportée par le BMS ; le signal qui porte la forme de la courbe |
| Courant pack | StatusData (diagnostic courant de charge) |
Oui (la plupart des VE modernes) | Le signe distingue charge vs décharge |
| Température pack / cellule | StatusData (diagnostic température batterie) |
La plupart des VE modernes | Reportée par le BMS ; la température physiquement correcte pour la correction chimique |
| Odomètre | StatusData (OdometerId) |
Oui | Fiable |
| GPS / position | LogRecord |
Oui | Cadence 1–60 s selon le profil d’équipement |
| État du contact | LogRecord |
Oui | Distingue trajet vs clé-off vs charge |
| Frontières de session de charge | Dérivées (contact + signe du courant de charge) | Calculées | L’unité d’analyse du régime Courbe (§4.1) |
| Énergie ajoutée par session (kWh) | Dérivée (∫ I dt sur la session) | Calculée | Remplace les charge/records Smartcar limités à
BMW/MINI |
| Capacité nominale batterie | Table OEM spécifiée par {marque, modèle, année} |
Statique | Spec usine — pas la capacité dégradée actuelle |
| Résistance interne / impédance | Estimée à partir de l’ordonnée à l’origine de la phase CC (§9.2) | Calculée | Signature directe de dégradation |
Ce qui change par rapport au régime consommateur-Smartcar
- Flux continu, pas snapshots à la demande.
StatusDatapousse une ligne quand un diagnostic change ; Sohly ne polle pas. Une session de charge produit des dizaines à des milliers de points selon le profil d’équipement et le delta de SoC, pas « une estimation d’autonomie par appel OAuth ». - Tension et courant pack sont visibles. C’est la
différence la plus importante. La méthodologie courbe de charge (§9) est
débloquée parce que Sohly voit
V(t)etI(t)pendant la charge, pas seulement le delta de SoC. - La température pack est reportée par le BMS. Plus besoin de trianguler la température de l’air ambiant pour la correction chimique (voir §7) — Sohly utilise toutefois l’ambiant comme repli quand le diagnostic BMS est absent.
- Pas d’OAuth par véhicule. L’autorisation est unique par flotte au moment de l’intégration MyGeotab, pas une fois par véhicule par un consommateur (voir §5).
Mises en garde critiques
- Tables de capacité statiques, pas reportées par le
BMS. La capacité nominale par
{marque, modèle, année}provient des spécifications OEM publiques. Certains OEM publient la capacité « utilisable » vs « totale » ; Sohly stocke les deux et préfère « utilisable » pour le modèle de valeur résiduelle. - Inconnue pré-intégration — cadence de
StatusData. Le rythme de push de tension/courant pendant une session de charge n’est pas documenté ; il varie selon le profil d’équipement (GO9, GO RUGGED, etc.) et la couverture du bus de données OEM. La méthodologie gère cela via le gate de régime (§4) : chaque session est auto-classée Courbe / Snapshot / Démarrage-à-froid selon la densité des points produits. - La couverture véhicule est bornée par le support d’équipement MyGeotab. Un véhicule sans diagnostic de courant batterie retombe en régime Snapshot (§4.2). Un véhicule avec seulement contact + GPS retombe en Démarrage-à-froid (§4.3).
2. Pourquoi un snapshot autonomie/SoC unique ne suffit pas
La formule consommateur-Smartcar d’origine était :
SoH = Range / (SoC × NominalRange)
Équivaut à : AutonomieTotaleEstimée / AutonomieNominale.
Elle paraît plausible mais souffre d’un problème fatal de rapport
signal/bruit. La physique reste la même sous Geotab — la différence est
que Geotab streame la courbe, donc Sohly ne dépend pas de cette formule.
Cette section est conservée parce qu’elle justifie pourquoi le
régime Courbe existe (§4.1, §9) et pourquoi le régime Snapshot
(§4.2) nécessite moyenne multi-échantillons et filtrage par température
pour être défendable.
Facteurs de confusion et amplitudes mesurées
| Facteur | Impact sur l’autonomie | Source |
|---|---|---|
| Température : -7 °C avec chauffage | -41 % | Tests AAA |
| Température : -18 °C en ville | -50 à -59 % | U.S. DOE 2024 |
| Température : +35 °C avec clim | -17 % | Consumer Reports |
| Vitesse : 110 km/h vs 105 km/h | -25–30 % vs estimation EPA | Geotab |
| Style de conduite : agressif vs souple | -10–30 % | données terrain |
| Topographie : montée chargée vs plat | -20–40 % | données terrain |
| HVAC sans pompe à chaleur | -41 % | DOE |
| Batterie froide (non préchauffée) | -10–15 % | études BMS |
Pire des cas combiné : une batterie en bonne santé par temps froid à grande vitesse peut afficher 60–70 % de l’autonomie nominale. La formule produirait un SoH ≈ 65 % — un faux positif massif de dégradation.
Meilleur des cas combiné : une batterie en bonne santé par une journée printanière douce, en circulation urbaine avec récupération d’énergie, peut afficher 110 %+ de l’autonomie nominale. La formule produirait un SoH > 100 % — physiquement non interprétable.
Le problème de fond
- Signal à détecter : 2,3 % de dégradation par an (Geotab, 22 700 véhicules). Une voiture de 5 ans ≈ 88 % de SoH.
- Bruit dû aux facteurs de confusion : ±30–50 % par snapshot unique.
- Rapport signal/bruit : ~0,1:1. Le bruit est 10× plus grand que le signal de dégradation.
3. Ce que dit la science
Geotab (22 700 VE, plusieurs années) : calcul du SoH à partir de l’énergie entrante/sortante sur des milliers de sessions — jamais à partir d’un snapshot unique.
Recurrent Auto : comparaison longitudinale de flotte, plusieurs lectures par jour, milliers de véhicules pairs par zone climatique. Leur propre documentation indique qu’une lecture unique peut varier à cause du style de conduite ou d’un long trajet autoroutier — sans aucune dégradation cellulaire.
Nature Communications (2025) : 300 VE, 3 ans, 1,2 M de fragments de charge, approche multi-modale en deep learning — un SoH significatif uniquement via des données longitudinales à grande échelle.
Consensus IEEE/SAE : les méthodes basées sur OCV nécessitent 2 h+ de repos. Le coulomb counting nécessite de nombreux cycles. Les modèles ML nécessitent des courbes de tension, du courant, de la température et de nombreux cycles de charge.
Standards légaux (ISO 12405, SAE J2950, UL 1974) : tous nécessitent des tests de cycle complets, des mesures d’impédance, ou un monitoring continu. Aucun standard ne reconnaît l’estimation par snapshot range/SoC comme suffisante pour une certification.
4. Régimes de données — automatique, par session
Un véhicule sur la plateforme Sohly ne choisit pas un « palier » — chaque session (ou chaque fenêtre de scoring) est classée par un gate de régime selon ce que le data feed a effectivement livré. La surface produit côté client est la même ; la méthodologie qui sous-tend chaque prédiction dépend du régime et est étiquetée dans le rapport.
Les trois régimes, par qualité de données croissante :
4.1 Régime Courbe (préféré) — ML sur courbe de charge complète
Déclencheur : une session de charge a produit ≥0,1 Hz d’échantillons de tension + courant pack, ≥20 % de delta SoC, ≥10 minutes de durée, et aucune interruption du contact.
Méthode : les cinq features physique du §9.2 (pente CC, durée jusqu’à la CV, constante de temps du taper CV, estimation de résistance interne, pic de montée en température) alimentent trois boosters LightGBM de régression quantile indépendants ; le calibrateur CQR élargit la sortie jusqu’à une couverture garantie (§9.4).
Sortie : triplet P05/P50/P95 SoH plus une bande de risque (LOW / MEDIUM / HIGH selon §9.6). Précision : largeur moyenne d’intervalle 1,73 pp SoH sur le jeu de validation (§9.5). Suffisamment serrée pour sous-écrire la tarification de la valeur résiduelle. Cadence : une fois par session de charge qualifiante — typiquement quotidienne ou tous les deux jours pour un véhicule de flotte actif.
4.2 Régime Snapshot (repli) — moyenne multi-échantillons continue
Déclencheur : le flux a livré SoC, odomètre et
(idéalement) température pack BMS, mais la densité de tension/courant
par session est insuffisante pour le régime Courbe — par exemple un OEM
dont StatusData ne publie le SoC que sur des événements de
contact, ou une session de charge avec <10 minutes d’activité
bus.
Méthode : 1. Collecter ≥10 snapshots SoC + autonomie sur une fenêtre glissante (aucun plafond fixe à 14 jours — les véhicules Geotab streament en continu, la fenêtre glisse jusqu’à accumuler assez de points qualifiants). 2. Appliquer le filtrage par température en utilisant la température pack BMS quand disponible, sinon la requête Open-Meteo géolocalisée par GPS (§7, §7bis). 3. Écarter les valeurs aberrantes (>2 σ). 4. Moyenner l’autonomie filtrée en température par rapport à la table d’autonomie nominale OEM. 5. Croiser avec la cohorte inter-flottes (§8).
Sortie : Score d’Autonomie avec bande de confiance
qui dépend de la disponibilité de la température BMS (la bande se
resserre quand elle l’est). Pas de garantie CQR — le rapport porte un
flag explicite regime = snapshot et le pipeline de valeur
résiduelle (§11) traite P05 comme
score − band/2, pas comme un quantile calibré.
4.3 Régime Démarrage-à-froid — prior cohorte uniquement
Déclencheur : données insuffisantes pour l’un ou
l’autre des régimes précédents (< 3 sessions qualifiantes de quelque
nature, véhicule venant de rejoindre la flotte, ou cohorte inter-flottes
< 10 pairs dans cette bande
{marque, modèle, année}).
Méthode : la courbe linéaire de dégradation Geotab à 2,3 %/an (§8) sert de prior, conditionné uniquement par l’âge et la table de capacité OEM statique. Aucun signal spécifique au véhicule n’est utilisé.
Sortie : estimation ponctuelle présentée comme « SoH attendu pour un véhicule de cet âge, pas encore de données spécifiques ». Le percentile est masqué. Le pipeline de pricing (§11) élargit substantiellement la bande de valeur résiduelle pour absorber l’absence de preuve.
Transitions et étiquetage du rapport
Le régime d’un véhicule est par session, pas par véhicule. Un même véhicule peut atterrir en Démarrage-à-froid lundi, Courbe à la session de charge de mardi, et Snapshot mercredi si une coupure partielle du bus a tronqué la courbe. La couche de pricing de Sohly agrège sur les N dernières sessions par véhicule, en pondérant plus lourdement les preuves Courbe que Snapshot, et en retombant sur le prior quand l’agrégat courant est encore mince.
Chaque certificat / rapport porte un champ regime, plus
le décompte des sessions de chaque régime qui ont contribué à la
fourchette SoH affichée. Les auditeurs voient ce qui a produit chaque
nombre.
5. Onboarding & consentement — flotte B2B via Geotab Marketplace
La surface produit est de la télémétrie SoH continue, pas un certificat ponctuel, et le contrat est au niveau flotte, pas par véhicule.
Onboarding côté client
- Le client flotte installe Sohly depuis le Geotab Marketplace et
approuve les scopes de données de l’add-in MyGeotab
(
StatusData,LogRecordpour les diagnostics listés au §1). - Un compte Sohly est provisionné pour la flotte. Les véhicules existants effectuent un backfill depuis la base MyGeotab du client (typiquement 90 jours d’historique selon le plan de rétention) ; les nouveaux véhicules commencent à streamer dès le premier contact.
- Le scoring par véhicule démarre en régime Démarrage-à-froid (§4.3) ; chaque véhicule transite automatiquement vers Snapshot ou Courbe à mesure que le flux produit des données qualifiantes.
- Un dashboard flotte expose les fourchettes SoH par véhicule, les prévisions de valeur résiduelle (§11) et le classement « vendre ceux-ci en premier ». Le flux JSON déterministe est le produit canonique ; les rapports PDF et le paragraphe rédigé par LLM (§11.6) sont des sorties optionnelles.
Pas de checkout consommateur Stripe. Pas d’OAuth par véhicule. Pas de compteur de collecte passive 14 jours. La facturation est par véhicule-année selon le contrat, facturée à la flotte.
Accord de Traitement des Données (DPA)
Le DPA conclu entre la flotte et Sohly établit :
- Périmètre de données :
LogRecord(GPS, contact, vitesse, odomètre) etStatusData(diagnostics batterie énumérés au §1). Sohly ne demande jamais le GPS trajet-par-trajet pour l’analytique au-delà de ce qui est nécessaire pour rechercher la température ambiante au lieu d’une session de charge (§7). - Rétention : flux brut d’événements conservé pendant
la durée du contrat plus 30 jours ; snapshots SoH dérivés conservés
pendant la durée plus 7 ans afin de soutenir les réclamations de
garantie de valeur résiduelle et l’audit EU Battery Passport (horizon
réglementaire 2027-02-18, voir BACKLOG.md
[REGULATORY]). - Sous-traitants : Google Cloud Platform (zone UE —
europe-west1), Anthropic (pour le NarratorSkill optionnel du §11.6 ; désactivable selon le contrat d’audit). - Clause de contribution à la cohorte : par défaut,
des snapshots SoH anonymisés (pas de VIN, pas de GPS, pas d’identifiant
client — seulement
{marque, modèle, année, bucket_age, bucket_kilométrage, triplet_quantile_soh, regime}) sont contribués à la baseline de la cohorte inter-flottes (§8) afin que Sohly puisse construire un percentile par paire{marque, modèle, année}pour chaque client. Opt-out disponible au moment de l’onboarding pour les clients dont la politique interne de classification des données exclut tout partage avec un tiers — l’opt-out restreint le reporting de percentile du client à « vs la courbe Geotab 2,3 %/an publiée uniquement », mais ne change rien à la méthodologie par véhicule. - Droit d’accès et de suppression : les conducteurs ne sont pas des sujets de données de Sohly (la flotte est le responsable du traitement). Sohly répond aux demandes de suppression routées par l’opérateur de flotte, en purgeant notamment les snapshots de cohorte contribués quand un véhicule sort du contrat.
Pourquoi cela remplace la collecte passive de 14 jours
La fenêtre 14 jours n’existait que pour collecter assez de lectures Smartcar sur des conditions météo et SoC variées et lutter contre le rapport signal/bruit de la formule snapshot. Le feed Geotab dissout cette contrainte : un véhicule de flotte produit en continu des données qualifiantes, et le gate de régime (§4) le déplace vers la méthodologie de meilleure qualité dès que les données le permettent. Il n’existe plus de point dans le temps où « le score est final » — le score est l’agrégat glissant des dernières sessions qualifiantes, rafraîchi à mesure que de nouvelles sessions arrivent.
6. Impact produit & marketing
Sohly est vendu à des loueurs, assureurs, opérateurs de flotte, et marketplaces de VE d’occasion (voir STRATEGY.md §4 pour les segments classés). Le marketing doit s’aligner avec la méthodologie et le contrat — pas un certificat grand public, pas une revendication SoH à un seul nombre.
| Ne pas dire | Dire |
|---|---|
| « Certificat Santé Batterie » | « Télémétrie SoH continue » / « Flux Santé Batterie » |
| « State of Health : 92 % » | « Triplet P05/P50/P95 SoH, couverture conformelle 90 % » |
| « Certifié par Sohly » | « Fourchette SoH produite indépendamment, méthodologie transparente, provenance rejouable » |
| « Score d’Autonomie Batterie » | « Prévision de valeur résiduelle par véhicule aux horizons 3/6/12/24 mois » |
Le rapport PDF optionnel par véhicule existe pour la documentation de fin de location, les pages de listing VE d’occasion et le packaging de réclamation de garantie — mais c’est une sortie mince du flux, pas le produit. Le produit est le flux JSON déterministe, le dashboard et la liste flotte « vendre ceux-ci en premier ».
Pourquoi « flux » bat « certificat » dans ce segment
Un client loueur ou assureur sous-écrit des portefeuilles, pas des
véhicules un par un. Il consomme le flux programmatiquement, le passe
dans ses propres modèles de pricing et produit des décisions sur des
milliers de véhicules. Un PDF certificat statique par véhicule est de la
friction, pas de la valeur. Le PDF survit comme artefact réglementaire
(préparation au Battery Passport européen — voir BACKLOG.md [REGULATORY]) et comme
document de remise au client, pas comme unité de vente.
7. Source de température — BMS d’abord, Open-Meteo en repli
La température est un déterminant de premier ordre à la fois des estimations d’autonomie et de la chimie de batterie. Sohly utilise la meilleure source disponible par session, dans cet ordre de préférence :
- Température pack BMS depuis
StatusData(diagnostic de température batterie, disponible sur la plupart des VE modernes). C’est l’entrée physiquement correcte — elle mesure les cellules elles-mêmes, pas l’air extérieur. Utilisée directement dans le filtre de température (§7bis) et comme feature dans le régime Courbe (§9.2,peak_temp_rise_c). - Température ambiante via Open-Meteo, géolocalisée
par les coordonnées GPS du
LogRecordà l’horodatage de début de session. Utilisée uniquement quand le diagnostic BMS est absent ou trop clairsemé pour la session.
Les deux sont enregistrées dans la ligne de feature par session afin qu’un audit puisse tracer la source qui a alimenté le filtre et le modèle.
Plan, endpoint et attribution Open-Meteo
Fournisseur : Open-Meteo, licence commerciale — plan API Standard (29 €/mois HT, 1M appels/mois, basé en Suisse, zone d’adéquation RGPD). Requise même si la voie BMS couvre la plupart des sessions : Sohly est un produit commercial selon les CGU d’Open-Meteo dès qu’il y a des clients payants.
Vérification de volume : à l’échelle d’un pilote flotte (≈500 véhicules × ≈1 session de charge/jour × ≈30 % de taux BMS-absent × ≈1 appel fractionnel par session) nous consommons ≈4 500 appels/mois — encore <0,5 % du tier Standard. À réévaluer quand le volume mensuel dépasse ~500k appels (typique uniquement au-dessus d’environ 50k véhicules en monitoring continu à taux BMS-absent constant).
Gestion TVA : Open-Meteo facture via Stripe. Fournir le numéro de TVA intracommunautaire de Sohly à la facturation pour déclencher l’autoliquidation — sinon 20 % de TVA s’ajoutent (34,80 €/mois TTC).
Endpoint :
GET https://customer-archive-api.open-meteo.com/v1/archive
avec query param apikey.
Dataset : Météo-France AROME (résolution 1,3 km) pour les sessions en France métropolitaine, inclus dans le plan Standard. ERA5-Land (~9 km, retard de 5 jours) est le fallback hors couverture AROME. Le retard de 5 jours est acceptable — Sohly agrège sur des fenêtres glissantes de plusieurs sessions, les recherches par session peuvent donc attendre la finalisation ERA5 sans bloquer les rapports côté client.
Forme de requête pour une session-avec-BMS-absent :
?latitude={lat}&longitude={lon}
&start_date={date_session}&end_date={date_session}
&hourly=temperature_2m
&timezone=auto
&apikey={secret}
Source de localisation : coordonnées GPS depuis
LogRecord à l’horodatage du premier point de la session,
arrondies à 4 décimales (≈11 m de précision — suffisant pour la
température ambiante, assez grossier pour partager des hits de cache sur
un dépôt).
Cache : objet GCS clé
gs://sohly-prod-data/weather_cache/{lat_4dp}/{lon_4dp}/{date}.json.
Immuable une fois écrit (ERA5 finalisé après 5 jours). Les véhicules de
flotte rechargent souvent au même dépôt jour après jour, donc le taux de
hit du cache est matériellement plus élevé que dans le cas consommateur
— la plupart des lookups dépôt-par-jour sont gratuits après le premier
appel.
Attribution : CC-BY 4.0 — attribution requise en bas de page du PDF quand les données Open-Meteo ont contribué au score de ce véhicule : « Données météo : Open-Meteo.com ».
Région : lancement France-first. AROME (Météo-France) offre une résolution de 1,3 km sur la France métropolitaine. Pas d’endpoint régional spécifique requis — Open-Meteo sélectionne le modèle selon les coordonnées de la requête.
Courbe de correction de température : voir §7bis ci-dessous.
7bis. Stratégie de correction de température
Les chiffres AAA/DOE du §2 combinent trois effets sans rapport — ralentissement chimique de la batterie, charge du chauffage habitacle, et résistance au roulement à froid. Les appliquer comme une correction multiplicative unique gonflerait les estimations d’autonomie par temps froid et masquerait la dégradation réelle. La méthodologie exige une incertitude honnête, pas une précision blanchie. Cette section ne s’applique qu’au régime Snapshot (§4.2). Le régime Courbe (§4.1, §9) consomme directement la température pack comme feature et ne nécessite aucune couche de correction.
Filtrer d’abord, ne corriger qu’en repli
Voie principale — filtrer, ne pas corriger. Pour
chaque snapshot candidat, lire son entrée température (température pack
BMS quand disponible selon §7, sinon Open-Meteo ambiant). Écarter le
snapshot quand T < 5 °C ou T > 30 °C.
Moyenner les snapshots restants par rapport à l’autonomie nominale OEM.
Le filtre est conservateur dans les deux directions — sous le régime
Courbe on n’entre jamais dans cette branche, donc le coût de jeter des
snapshots froids/chauds est seulement que le régime Snapshot prend une
fenêtre glissante plus longue pour accumuler des points qualifiants.
Repli — correction douce, uniquement quand moins de 5 snapshots passent le filtre dans la fenêtre courante. Appliquer une correction linéaire batterie-chimie aux snapshots froids écartés pour les récupérer :
si T < 5 °C :
facteur_correction = 1 + min(0,01 × (5 - T), 0,25) # +1 % par °C en dessous de 5 °C, plafonné à +25 %
autonomie_corrigée = autonomie_observée × facteur_correction
Cette courbe est calibrée sur les données publiées Recurrent / Geotab de SoH vs température (perte de capacité batterie ~5–8 % à 0 °C, ~15 % à -20 °C), pas sur les chiffres AAA d’autonomie globale (qui incluent les accessoires). Elle corrige moins que ce que suggéreraient les chiffres AAA, intentionnellement — sous-corriger est l’erreur la plus sûre.
Pas de repli côté chaud. Au-dessus de 30 °C est rare en France et le confound de la charge clim n’est pas séparable des effets chimiques avec les données dont nous disposons.
Report de confiance (régime Snapshot)
| Scénario | Flag temperature_corrected |
Source température | Bande de confiance |
|---|---|---|---|
| ≥5 snapshots dans la fenêtre 5–30 °C, temp BMS disponible | false |
bms |
±12 |
| ≥5 snapshots dans la fenêtre 5–30 °C, Open-Meteo seul | false |
open_meteo |
±15 |
| <5 dans la fenêtre, repli appliqué | true |
mixte | ±20 |
| <5 même après repli | false |
n/d | le régime retombe en Démarrage-à-froid (§4.3) |
Les entrées de température BMS resserrent la bande de confiance de 3 pp parce qu’elles éliminent le confound température-ambiante-vs-température-cellule.
Implication produit
Dans une flotte qui streame en continu, le problème du « véhicule d’hiver coincé en repli » disparaît largement : la fenêtre glissante dépasse janvier–février et accumule des snapshots qualifiants de printemps/été. L’arbitrage est désormais « latence du premier rapport en hiver » plutôt que « qualité du score en hiver » — un véhicule rejoignant la plateforme en janvier peut rester en Démarrage-à-froid plus longtemps qu’un véhicule rejoignant en mai.
Ce que ce n’est pas
Ce n’est pas un vrai modèle SoH–température. C’est un filtre défensif qui préserve l’intégrité de la moyenne multi-échantillon dans le régime Snapshot. Le régime Courbe (§9) remplace cette section par de la physique de premier principe — la température est une feature de modèle, pas un bouton de filtre.
8. Stratégie de démarrage à froid de la cohorte
Le reporting de percentile (« ce véhicule est dans le top 35 % des
pairs MG MG4 2023 ») nécessite une cohorte de pairs. La recherche
cohorte échoue tant qu’il n’y a pas assez de véhicules du même
{marque, modèle, année} mesurés. Cette section définit le
repli au démarrage à froid et la politique de transition vers une
cohorte réelle.
Périmètre de la cohorte — mutualisée sur l’ensemble des clients Sohly
La cohorte de Sohly est mutualisée sur l’ensemble de la base
clients, pas construite par flotte. Une flotte unique de 200
véhicules ne peut pas produire un percentile pair crédible pour une
Renault Megane E-Tech 2023 si elle n’opère que deux
véhicules de ce type ; la mutualisation entre clients amène la cohorte
par {marque, modèle, année} à N ≥ 10 en quelques mois
plutôt qu’en années.
La mutualisation stocke des snapshots anonymisés :
{marque, modèle, année, bucket_age, bucket_kilométrage, triplet_quantile_soh, regime, mois_de_capture}
— pas de VIN, pas de GPS, pas d’identifiant client. Les clients
consentent à la contribution anonymisée par défaut au moment de
l’onboarding ; l’opt-out est documenté au §5 et restreint seulement le
reporting de percentile du client (sa mesure de SoH par véhicule reste
inchangée). Sohly ne ressurface jamais les données d’un contributeur à
un autre client au niveau ligne — uniquement comme percentile sur la
distribution mutualisée.
Qu’est-ce que le « prior Geotab »
Geotab a publié en 2020 une étude sur 22 700 VE sur plusieurs années avec un résultat phare : les batteries VE se dégradent en moyenne d’environ 2,3 % par an (public, peer-reviewed). Cela donne une courbe de dégradation contre laquelle on peut situer le SoH attendu de n’importe quel véhicule : un VE de 3 ans ≈ 93 %, de 5 ans ≈ 88 %, de 10 ans ≈ 77 %.
Un prior bayésien est une croyance de départ utilisée avant d’avoir les données spécifiques au véhicule. Ici :
En l’absence de données pairs réelles, supposer que ce véhicule devrait être à
100 % − (2,3 % × âge_en_années)de la valeur nominale.
Sohly démarre avec cette croyance publiée, puis glisse vers la cohorte mutualisée à mesure qu’elle grandit.
Politique
- < 10 pairs dans la cohorte → masquer le percentile dans le rapport ; afficher uniquement la fourchette SoH absolue avec une note explicite : « Percentile indisponible — moins de 10 véhicules pairs pour ce make / model / year. » Ajouter une phrase relative au prior Geotab situant le score contre la dégradation attendue pour l’âge du véhicule (par ex. « Attendu ≈93/100 à 3 ans selon les moyennes flotte VE publiées ; le P50 de ce véhicule est de 89. »).
- Amorcer chaque cohorte avec la courbe Geotab à 2,3 %/an comme prior.
- Mettre à jour vers les données réelles mutualisées
à mesure que la mutualisation grandit. Une fois N ≥ 10 pour un
{marque, modèle, année}, le percentile est calculé à partir des données mutualisées réelles et le prior Geotab est abandonné. Le rapport passe en mode pair : « Top 35 % des 14 véhicules MG MG4 2023 de la cohorte Sohly. »
Le seuil N=10 et la courbe linéaire à 2,3 %/an sont des hypothèses de travail — à réévaluer si les percentiles sont instables en production, ou si une courbe de dégradation spécifique au modèle devient disponible.
Pourquoi le prior est abandonné à N = 10
Le chiffre Geotab 2,3 %/an est une moyenne sur tous les
VE. La cohorte Sohly est spécifique à un
{marque, modèle, année}. Une fois la cohorte
spécifique stable, elle est plus informative que la moyenne large — le
prior a rempli son rôle.
9. Méthodologie ML dérivée des courbes — régression quantile + prédiction conformelle
Statut : pipeline fonctionnel (données CC-CV
synthétiques), câblé de bout en bout avec validation empirique dans
voltcheck-api/ml/. Validation sur flottes réelles en
attente de l’intégration Geotab Data Feed (BACKLOG
[VENDOR/GEOTAB]).
Cette section précise la méthodologie sous-jacente au régime Courbe (§4.1). Lorsque le Geotab Data Feed délivre tension et courant pack à ≥0,1 Hz pendant une session de charge — accompagnés de la température pack BMS lorsque disponible (§7) — Sohly extrait cinq features dérivées de la physique et les injecte dans un pipeline de régression quantile conformalisée. Le régime Snapshot (§4.2) est le repli gracieux lorsque la densité de courbe est insuffisante. Les flux constructeur directs (article 5 du Data Act européen, post septembre 2026) sont un substitut interchangeable au feed Geotab à la frontière d’entrée. C’est la méthodologie que Sohly publie sur le Geotab Marketplace et contre laquelle les flottes, loueurs et assureurs sous-écrivent leurs décisions.
9.1 Ce qui change avec la courbe de charge complète
Une session de charge CC-CV (le protocole standard de charge rapide Li-ion) comporte deux phases : - Courant Constant (CC) : le chargeur maintient le courant fixe ; la tension terminale monte à mesure que SoC et résistance interne croissent tous deux. - Tension Constante (CV) : lorsque la tension terminale atteint la limite supérieure, le chargeur fige la tension et le courant décroît exponentiellement jusqu’à coupure.
L’État de Santé pilote la forme de cette courbe via deux effets
couplés : 1. La capacité utile diminue avec l’âge — le
même chargeur remplit un pack à 70 % SoH plus vite qu’un pack à 100 %
SoH, donc la courbe de tension est plus raide. 2. La résistance
interne croît — un pack à 70 % SoH a environ 1,8× la résistance
interne d’un pack neuf, ce qui élève la ligne de base de tension
terminale (de I × R_int) et avance la transition CV à un
SoC plus bas.
Les features agrégées qu’un pipeline snapshot peut extraire (« énergie totale ajoutée », « durée de charge ») jettent quasiment tout ce signal. La courbe complète le préserve.
9.2 Cinq features dérivées de la physique
L’extracteur de features
(voltcheck-api/ml/feature_extraction.py) calcule cinq
scalaires par session de charge :
| Feature | Ce qu’elle mesure | Direction avec le vieillissement |
|---|---|---|
cc_slope_v_per_min |
Vitesse de montée de tension durant la phase CC | ↑ (capacité plus petite → montée SoC plus rapide → dV/dt plus raide) |
time_to_cv_min |
Minutes entre début de charge et transition CV | ↓ (R_int plus élevée atteint v_max plus tôt) |
cv_taper_tau_min |
Constante de temps de la décroissance exponentielle du courant CV | ↑ (τ ∝ R_int × capacité ; le produit croît avec l’âge) |
internal_resistance_est_ohm |
R_int estimée depuis l’ordonnée à l’origine de la phase CC | ↑ (signature directe de dégradation) |
peak_temp_rise_c |
Pic de température cellule moins ligne de base | ↑ (les packs vieillis dissipent davantage de chaleur I²R) |
Chaque feature est une signature électrochimique directe de la dégradation, pas un proxy. Le test à blanc sur courbes simulées à SoH ∈ {100, 90, 80, 70} % montre que les cinq features varient monotoniquement dans la direction physiquement attendue sur la plage 70–100 %.
9.3 Pourquoi nous publions une fourchette, pas un nombre unique
Une estimation ponctuelle (« SoH = 87 % ») a l’air précise. Elle est trompeuse. Le résultat phare de Geotab à 2,3 %/an de dégradation est une moyenne ; les packs individuels s’écartent de ±5 points autour de cette ligne à un âge donné. Style de conduite, zone climatique, habitudes de profondeur de décharge, fréquence de charge rapide DC comptent tous, et aucun n’est résumé par un nombre unique.
Sohly publie trois nombres, ajustés par des boosters LightGBM de régression quantile indépendants aux quantiles 0,05, 0,50 et 0,95 : - P50 — estimation médiane. Le SoH le plus probable étant donné les entrées. - P05 — borne pessimiste. Le vrai SoH est au moins à ce niveau avec 95 % de confiance. - P95 — borne optimiste. Le vrai SoH n’est pas plus élevé que cela avec 95 % de confiance.
L’intervalle [P05, P95] est l’entrée actionnable pour
les décisions en aval : - Tarification de la valeur
résiduelle utilise le P05 (capacité au pire
cas). - Souscription de fin de police d’assurance
utilise la largeur de l’intervalle comme prime
d’incertitude. - Décisions opérationnelles
(planification de remplacement, rotation de flotte) utilisent le
P50.
9.4 Pourquoi la fourchette est fiable : la prédiction conformelle
La régression quantile seule ne donne qu’une couverture
marginale en espérance : sur une population de tests
held-out, environ 90 % des vrais SoH tombent dans
[P05, P95]. Pas de garantie en échantillon fini — et «
environ 90 % » n’est pas un nombre contre lequel un assureur peut
souscrire.
La Régression Quantile Conformelle (Romano, Patterson, Candès, NeurIPS 2019) enveloppe l’estimateur quantile et fournit une garantie de couverture sans hypothèse de distribution :
Pour toute distribution de données, étant donné un ensemble de calibration i.i.d., l’intervalle calibré contient le vrai SoH avec probabilité marginale ≥ 90 %.
Mécaniquement : 1. Le corpus d’entraînement est partitionné 80/20 en
une tranche d’entraînement et une tranche de
calibration held-out. 2. Les trois boosters quantiles sont
ajustés uniquement sur la tranche d’entraînement. 3. Sur la tranche de
calibration held-out, on calcule le score de
non-conformité pour chaque exemple — de combien le vrai SoH
dépasse le P95 prédit ou tombe sous le P05 prédit. 4. On prend le
quantile empirique à 90 % (corrigé en échantillon fini) de ces scores :
c’est q_hat, un scalaire unique. 5. À l’inférence, chaque
intervalle est élargi de q_hat des deux côtés :
[P05 − q_hat, P95 + q_hat].
La garantie découle d’un théorème d’une page sur les séquences échangeables (Vovk, Gammerman & Shafer, Algorithmic Learning in a Random World, 2005 ; Romano et al. 2019 pour la variante régression quantile). Aucune hypothèse gaussienne, aucun modèle paramétrique des résidus, aucun argument asymptotique. La garantie tient en échantillon fini, sur toute distribution de données, avec tout prédicteur de base.
9.5 À quoi ressemblent les chiffres empiriques
Validation sur un held-out de 2 000 sessions CC-CV simulées,
distribution de température ambiante alignée sur le prior d’entraînement
(seed=2026, couverture cible 90 %, calibrateur n=400) :
| Métrique | Valeur | Référence |
|---|---|---|
| Couverture empirique de l’intervalle 90 % | 88,1 % ± 1,4 % | Cible 90 % (IC 95 % [86,7 %, 89,5 %] inclut la cible) ; plancher d’acceptation ≥87 % selon AI_ML_ROADMAP §6 |
| Erreur absolue médiane du P50 | 0,05 pp SoH | L’estimation ponctuelle est essentiellement non biaisée |
| Largeur moyenne d’intervalle (P95 − P05) | 1,73 pp SoH | Suffisamment serrée pour tarifer la valeur résiduelle sans revue manuelle |
| P50 au-dessus du vrai (bien centré si ≈50 %) | 47 % | Aucun biais systématique |
La largeur moyenne de 1,73 pp se compare avantageusement aux chiffres de bruit ±30–50 % des autonomies snapshot AAA / U.S. DOE (voir §2) : une équipe actuariat peut tarifer la valeur résiduelle à partir d’un intervalle de 2 pp ; elle ne le peut pas avec 50 pp.
9.6 Exposer la limite de la garantie : la bande de risque
La garantie de couverture CQR est conditionnée à l’échangeabilité — les données de test doivent provenir de la même distribution que l’ensemble de calibration. Quand une flotte opère dans un régime de température ou de style de conduite sous-représenté dans les données de calibration, la couverture chute et l’intervalle s’élargit.
Chaque prédiction Sohly inclut un champ catégoriel
risk_band dérivé de la largeur d’intervalle :
| Bande | Largeur d’intervalle | Action recommandée |
|---|---|---|
| LOW | < 3 pp SoH | Utiliser le P50 directement pour les décisions opérationnelles ; tarifer la valeur résiduelle au P05. |
| MEDIUM | 3–8 pp SoH | Revue manuelle ou collecte de données additionnelles avant décision à fort enjeu. |
| HIGH | ≥ 8 pp SoH | Ne pas tarifer automatiquement. Tirer davantage de télémétrie ; relancer ; remonter à l’ingénierie. |
Sous données de test in-distribution, ~97 % des prédictions tombent en LOW. Sous stress out-of-distribution lourd (60 % de courbes à températures extrêmes, double le taux d’entraînement), le taux de bande HIGH monte à ~7 % et la couverture globale chute à 79,5 %. C’est par conception : la bande de risque est le signal d’incertitude auto-déclaré du modèle, et il devient plus bruyant lorsque les hypothèses du modèle se rompent. Un assureur devrait traiter une bande HIGH comme il traite un sinistre signalé — travailler le dossier manuellement, ne pas tarifer automatiquement.
9.7 Auditabilité et reproductibilité
Chaque certificat Sohly est reproductible :
- Le calibrateur CQR est persisté comme fichier JSON
lisible (
models/conformal.json) contenantq_hat,alphaetn_calibration. Quiconque a le fichier peut reproduire l’étape d’élargissement bit-à-bit. - Les cinq features physiques sont extraites par une fonction
pure de la courbe d’entrée
(
ml/feature_extraction.py) — pas d’état caché, pas de pré-traitement appris. - L’entraînement des boosters, l’ajustement du calibrateur et l’inférence sont tous déterministes étant donnée une seed (par défaut 42). Relancer le pipeline produit des artefacts identiques au bit près.
- Chaque certificat porte un champ
scoring_method_version(selon AI_ML_ROADMAP §7) — les auditeurs peuvent associer tout certificat historique à la version exacte du pipeline qui l’a produit. - La méthodologie elle-même est ouverte : ce document, le dépôt de code et les références d’algorithme (Romano et al. 2019 ; Vovk, Gammerman & Shafer 2005) sont publics. Le seul actif propriétaire est la donnée de calibration — et celle-ci est remplaçable par toute partie disposant de l’accès aux courbes de charge d’une flotte.
C’est l’inverse du pitch « IA boîte noire » sur lequel s’appuient nombre d’incumbents. Nous exposons les mathématiques parce qu’une équipe actuariat ou risque ne peut pas souscrire ce qu’elle ne peut pas auditer.
10. Résumé en langage clair
Bloc réutilisable d’environ 200 mots pour decks de pitch, sections de landing page, dossiers de candidature incubateur et conversations partenaires. Public : techniquement alphabétisé mais non spécialiste ML — gestionnaire de flotte, analyste de portefeuille leasing, souscripteur assurance, directeur de programme d’incubateur.
Comment Sohly produit un État-de-Santé batterie contre lequel vous pouvez souscrire.
Sohly ne publie jamais un pourcentage de SoH unique. Sohly publie une fourchette à trois points : une estimation médiane (P50), une borne inférieure pessimiste (P05) et une borne supérieure optimiste (P95). Les bornes proviennent de modèles de régression quantile indépendants entraînés sur cinq features dérivées de la physique et extraites des courbes de charge de chaque véhicule — pente de tension durant le courant constant, durée jusqu’à la transition CV, constante de temps du taper, estimation de résistance interne, pic de montée en température. Ces features sont des signatures électrochimiques directes de la dégradation cellulaire, pas des proxies.
L’intervalle est ensuite calibré par Régression Quantile Conformelle (Romano, Patterson & Candès, NeurIPS 2019), une méthode dotée d’une garantie de couverture sans hypothèse de distribution : sur données held-out, l’intervalle à 90 % contient le vrai SoH au moins 90 % du temps, quelle que soit la distribution sous-jacente. Sur le jeu de validation Sohly (2 000 sessions de charge simulées, in-distribution), la couverture empirique est de 88,1 % ± 1,4 %, l’erreur absolue médiane de l’estimation ponctuelle est de 0,05 point de pourcentage et la largeur moyenne d’intervalle est de 1,73 pp SoH — assez serrée pour tarifer la valeur résiduelle directement.
Chaque prédiction porte également une bande de risque — LOW, MEDIUM ou HIGH — qui signale lorsque la largeur d’intervalle dépasse ce qui est sûr pour un usage non supervisé. Souscrire la bande LOW, revoir manuellement la bande MEDIUM, ne jamais tarifer automatiquement la bande HIGH. La méthodologie, les références d’algorithme et les artefacts de calibration sont publics ; seules les données de calibration spécifiques à la flotte sont propriétaires.
11. Tarification du risque — des quantiles SoH aux décisions financières de flotte
Statut : design verrouillé le 2026-05-16,
implémentation en attente (BACKLOG [PRICING],
[NARRATOR]). Cette section est la méthodologie que les
gestionnaires de flotte et les évaluateurs d’incubateur doivent étudier
avant de sous-écrire toute décision de pricing produite par Sohly.
L’intervalle de quantiles SoH du §9 est une sortie d’ingénierie. Il ne dit pas à un gestionnaire de flotte quoi faire. La section 11 est la couche de traduction : quantiles SoH → prévision de dégradation → valeur résiduelle en € → recommandation d’action (HOLD / SELL_NOW / SELL_BEFORE).
11.1 Pourquoi nous publions des € et pas seulement un % de SoH
Un gestionnaire de flotte n’achète pas des nombres de SoH — il achète des décisions d’arbitrage. La question actionnable est « si je garde ce véhicule six mois de plus au lieu de le vendre aujourd’hui, quel est le manque à gagner financier ? » La réponse est en euros, pas en points de pourcentage.
La régression quantile conformelle (§9.4) fournit exactement les entrées dont cette question a besoin : - P05 répond à « à quel point le pire cas plausible est-il mauvais ? » — le risque qu’un assureur ou un trésorier tarife. - P50 répond à « quel est le résultat le plus probable ? » — l’entrée de planification opérationnelle. - P95 répond à « combien d’upside je laisse sur la table en vendant trop tôt ? » — l’entrée de coût d’opportunité.
La fonction de valeur résiduelle RV(soh, age, mileage)
est monotone en SoH, donc le triplet de quantiles SoH
se propage proprement en un triplet de quantiles de valeur résiduelle.
La garantie de couverture du §9.4 est préservée de bout en bout : si
l’intervalle SoH à 90 % couvre la vérité 90 % du temps, l’intervalle de
valeur résiduelle à 90 % aussi.
11.2 Vue d’ensemble du pipeline
┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐
│ Historique SoH │ → │ forecast_soh() │ → │ SoH projetée │
│ (longitudinal │ │ pente par véhicule │ │ aux horizons │
│ via Geotab │ │ OU prior cohorte │ │ 3/6/12/24 mois │
│ Marketplace, │ └──────────────────────┘ │ avec P05/P50/P95 │
│ ou snapshot unique)│ └──────────┬───────────┘
└──────────────────────┘ │
▼
┌──────────────────────┐ ┌──────────────────────┐ ┌──────────────────────┐
│ Métadonnées │ → │ rv() │ ← │ pousser les │
│ véhicule (marque/ │ │ baseline × g(soh) │ │ quantiles SoH au │
│ modèle/année/km/ │ │ marche de garantie │ │ travers de RV() │
│ prix neuf) │ │ │ │ (monotone) │
└──────────────────────┘ └──────────┬───────────┘ └──────────────────────┘
│
▼
┌──────────────────────┐ ┌──────────────────────┐
│ decide() │ → │ VehiclePricingReport│
│ HOLD / SELL_NOW / │ │ (structuré) │
│ SELL_BEFORE │ │ │
└──────────────────────┘ └──────────┬───────────┘
│
▼
┌──────────────────────┐
│ NarratorSkill (LLM) │
│ paragraphe, FR/EN, │
│ nombres verbatim │
│ depuis le rapport │
└──────────────────────┘
Chaque boîte est une fonction pure. La sortie de chaque étape est reproductible à partir de l’entrée plus une version de code identifiée. Pas d’état, pas d’entrées cachées, pas de valeurs échantillonnées jusqu’à l’étape NarratorSkill optionnelle — et le narrateur est contraint de ne citer que le rapport structuré (voir §11.6).
11.3 Prévoir le SoH à partir de données longitudinales
Dans un déploiement Geotab Marketplace, un véhicule accumule plusieurs snapshots SoH dans le temps à mesure que les sessions de charge arrivent dans le flux de données. Deux régimes :
Pente par véhicule (≥3 snapshots). Régression OLS
sur (captured_at, soh_p50). La pente ajustée
μ_dot est le taux de dégradation mesuré du véhicule ;
l’erreur standard de la pente quantifie la confiance accordée.
Projection des trois lignes quantiles vers chaque horizon cible,
indépendamment :
soh_q(horizon) = soh_q(aujourd'hui) + μ_dot × (horizon − aujourd'hui)
où q ∈ {p05, p50, p95}
Élargir la bande de slope_se × horizon_années pour
absorber l’incertitude d’extrapolation. C’est le régime dans lequel
Geotab Marketplace nous place pour tout véhicule qui stream depuis plus
de quelques semaines.
Prior cohorte (<3 snapshots). Repli sur la courbe linéaire Geotab à 2,3 %/an déjà utilisée comme prior de démarrage à froid au §8. La prévision porte un terme d’incertitude fixe additionnel qui croît avec l’horizon — on extrapole depuis une moyenne de population, pas depuis la trajectoire propre de ce véhicule.
Limitation V0 connue : la garantie CQR snapshot
(§9.4) repose sur l’échangeabilité. La projeter linéairement ne
préserve pas la garantie de couverture à l’horizon de prévision —
l’hypothèse i.i.d. casse selon l’axe temporel. V1 ré-calibrera CQR sur
des paires historiques (t, t+Δ) pour restaurer une garantie
de couverture sensible à l’horizon. V0 ship avec la propagation simple
et la limitation est divulguée dans chaque rapport.
11.4 Modèle de valeur résiduelle — courbe de base et marche de garantie
RV(soh, âge_mois, km, prix_neuf) = prix_neuf × baseline(âge, km) × g(soh)
Deux facteurs, tous deux transparents et remplaçables.
baseline(âge, km) — courbe de
dépréciation publiée, paramétrique :
baseline(âge_mois, km) = exp(−α · âge_mois / 12) · exp(−β · km / 10_000)
avec α ≈ 0.18 (≈ 17 % de dépréciation la première année,
en s’atténuant) et β ≈ 0.025. Les constantes V0 proviennent
de données publiques Geotab et de l’index mensuel français Autobiz. V1
remplace ces constantes par des données marché payantes (Argus / La
Centrale / Indicata) lorsqu’un client exige des chiffres de qualité
marché — la signature de la fonction reste inchangée.
g(soh) — pénalité SoH par morceaux avec
la marche de garantie :
| Bande SoH | Multiplicateur | Raison |
|---|---|---|
| ≥ 85 % | 1,00 | Aucune préoccupation acheteur ; autonomie conforme aux attentes |
| 75 – 85 % | 1,00 → 0,92 linéaire | Légère préoccupation d’autonomie |
| 70 – 75 % | 0,92 → 0,70 raide | Proximité de garantie — les acheteurs intègrent la perte de couverture |
| < 70 % | 0,70 × (soh / 70) | Régime coût-remplacement — le swap de pack est un risque réel |
La marche à 70 % SoH est le plancher de garantie OEM des constructeurs européens dominants (Renault, Stellantis, Tesla). Quand le P05 de la prévision SoH d’un véhicule franchit ce seuil, la borne basse de la prévision de valeur résiduelle chute fortement — cette chute est le signal d’arbitrage dont le gestionnaire de flotte a besoin.
Ces constantes sont des placeholders à valider. Elles seront révisées par marque dès qu’un pilote B2B accumulera assez de données de revente pour calibrer la marche. La structure par morceaux ne change pas ; seuls les seuils et multiplicateurs évoluent.
11.5 Règles de décision — HOLD, SELL_NOW, SELL_BEFORE
La fonction decide() retourne une action parmi trois plus un motif. Deux paramètres contrôlent le seuil :
tolerance— perte maximale acceptable vs valeur résiduelle d’aujourd’hui (5 % par défaut).holding_cost_pct_per_year— dépréciation + assurance + parking + financement (8 % par défaut, surchargeable par flotte client).
La logique parcourt chaque horizon de prévision dans l’ordre :
pour horizon T dans [3, 6, 12, 24] mois:
si rv_p05(T) < rv_aujourd_hui × (1 − tolerance):
retourner SELL_NOW
motif = "P05 RV à {T} mois est {x} € sous la RV d'aujourd'hui"
eur_at_risk = rv_aujourd_hui − rv_p05(T)
si la P50 prévue de SoH franchit le plancher de garantie 70 % dans T:
date_franchissement = solve(soh_p50(t) == 70)
retourner SELL_BEFORE(date_franchissement − 30 jours)
motif = "P50 SoH franchit le plancher de garantie 70 % le {date}"
si aucun horizon ne déclenche:
retourner HOLD
motif = "Tous les horizons restent dans {tolerance}% de la RV d'aujourd'hui"
La chaîne de motif est déterministe — générée à partir de la branche qui s’est déclenchée et des nombres qui ont franchi le seuil. Elle contient les mêmes chiffres en € que le rapport structuré. Le narrateur LLM optionnel (§11.6) ne fait que reformuler ce motif pour le ton et la langue ; il ne régénère pas les nombres.
11.6 Moteur déterministe + narrateur LLM — le contrat d’audit
Un gestionnaire de flotte regardant 200 véhicules ne lira pas 200 blobs JSON. Il lira 200 courts paragraphes. Les paragraphes sont la surface produit. Sohly les produit donc — mais sous une contrainte stricte qui maintient la garantie de couverture conformelle intacte de bout en bout.
Le découpage :
| Couche | Ce qu’elle produit | Comment | Auditabilité |
|---|---|---|---|
| PricingSkill (déterministe) | Tous les chiffres, dates, l’étiquette d’action | Fonctions pures versionnées sur entrée structurée | Re-run → identique au bit près |
| NarratorSkill (LLM, Claude Haiku) | Le paragraphe destiné au gestionnaire de flotte | Génération sous prompt contraint sur le rapport structuré | Le LLM ne peut inventer aucun chiffre absent de l’entrée |
Le prompt système du narrateur exprime la règle :
« Tu es un analyste financier expert en dépréciation de flottes automobiles. Tu reçois un rapport structuré (quantiles SoH, RV projetée P05/P50/P95, action recommandée, dates clés, montant à risque). Rédige un paragraphe d’action directe pour le gestionnaire de flotte. Règle absolue : n’invente aucun chiffre — n’utilise que les valeurs présentes dans le rapport, citées au centime près. Ton : direct, sans hedging, max 4 phrases. »
La règle est appliquée après la génération par une vérification regex : chaque chiffre en euros, pourcentage et date dans le paragraphe doit apparaître verbatim dans l’entrée structurée. Les paragraphes qui échouent au contrôle sont rejetés et remplacés par un template déterministe de repli.
Pourquoi le découpage compte :
- Reproductibilité. Même véhicule → mêmes chiffres, à chaque run. Les chiffres sont ce contre quoi on souscrit.
- Garantie conformelle. La couverture à 90 % du §9.4 ne tient que si les chiffres couverts proviennent du pipeline déterministe. Un chiffre inventé par le LLM n’a aucune couverture.
- Repli. Les clients en contexte audit-lourd (assurance, loueurs régulés) peuvent désactiver l’étape LLM entièrement — le rapport structuré et un paragraphe template déterministe restent inchangés.
- Coût. À l’échelle d’une flotte (500 véhicules × refresh quotidien), le calcul déterministe est en microsecondes ; les appels LLM par véhicule sont une ligne de coût réelle. Le découpage garde la couche chère optionnelle.
- Responsabilité. Un gestionnaire de flotte qui agit sur un chiffre en € dispose d’une provenance documentée et rejouable pour ce chiffre. « Le LLM l’a dit » n’est pas une piste d’audit défendable.
Le contrôle de contrainte sert aussi de filet de sécurité de régression : si un changement de prompt futur laissait accidentellement le modèle paraphraser un chiffre (« environ 2 300 € » au lieu du « 2 317 € » exact), le contrôle l’attrape et le repli déterministe est expédié à la place.
12. Résumé en langage clair — tarification du risque
Bloc réutilisable d’environ 200 mots pour decks de pitch, sections de landing page, dossiers de candidature incubateur et conversations partenaires avec des publics flotte, leasing et assurance.
Comment Sohly transforme un intervalle de SoH batterie en une décision de pricing de flotte sur laquelle vous pouvez agir.
La fourchette SoH calibrée de Sohly (P05 / P50 / P95) est l’entrée, pas le produit. Le produit est une recommandation financière par véhicule — HOLD, SELL NOW, ou SELL BEFORE une date donnée — appuyée par une prévision de valeur résiduelle en euros aux horizons 3, 6, 12 et 24 mois. Le pipeline de prévision est entièrement déterministe : une courbe de dépréciation de base publiée est multipliée par une pénalité SoH par morceaux avec une marche au plancher de garantie 70 %, le point où un acheteur de VE d’occasion intègre le coût d’un futur remplacement de pack. Les quantiles SoH sont propagés de façon monotone, donc la garantie de couverture conformelle du modèle SoH se prolonge aux chiffres en euros.
Pour chaque véhicule, le rapport classe le downside (
rv_aujourd_hui − rv_p05_horizon) par rapport à la valeur résiduelle d’aujourd’hui ; la vue flotte renvoie les véhicules triés par euros à risque, de sorte que le gestionnaire voit la liste « vendre ceux-ci en premier » plutôt que 200 PDFs individuels. Le paragraphe d’accompagnement est rédigé par un petit LLM (Claude Haiku) sous une contrainte stricte de non-invention de chiffres — chaque chiffre de la prose vient verbatim du rapport structuré, et un contrôle post-génération l’impose. La recommandation en euros, l’étiquette d’action et l’intervalle SoH sous-jacent sont tous reproductibles, versionnés et auditables. La méthodologie, les références d’algorithme et les constantes de courbe de dépréciation sont publiques.