shly
Méthodologie · v2.3

Méthodologie État de santé batterie

Version v2.3 Mis à jour 2026-05-17 Statut Publique · audit-reproductible Read in English →

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

Mises en garde critiques


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


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

  1. Le client flotte installe Sohly depuis le Geotab Marketplace et approuve les scopes de données de l’add-in MyGeotab (StatusData, LogRecord pour les diagnostics listés au §1).
  2. 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.
  3. 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.
  4. 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 :

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 :

  1. 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).
  2. 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

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 :

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 :

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 :

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.