← Retour

Training Data

10 datasets, 10 iterations, 6300 records — how the data shapes the product

Data → Product pipeline

What the commercial sees vs what trained it

Commercial
dicte ses notes
Extraction
keyword ou Haiku
27 features
meme schema
que les NDJSON
Snake SAT
entraine sur
iter10.ndjson
Chaud / Tiede / Froid
+ trust score

Les 27 features extraites a l'inference sont exactement les memes colonnes que dans les fichiers NDJSON d'entrainement. Meme noms, memes types, memes valeurs possibles. C'est le contrat : ce que Snake a vu a l'entrainement est ce qu'il voit en production.

Vue d'ensemble

IterTrainFeaturesAUROCDeltaChaudTiedeFroid
1300140.70812111762
2350160.606-0.10213413284
3400180.717+0.11116714984
4450190.716-0.00118718182
5500210.724+0.008173222105
6550230.765+0.04121825379
7600240.813+0.04825425591
8650250.841+0.028239301110
9700260.851+0.01029630995
10800270.860+0.009300390110

Les 27 features par famille

Core 14 features de base (iter 1)

Les champs CRM classiques. Ce que tout commercial remonte apres une visite.

segment activite volume_mensuel type_projet norme insatisfaction_concurrent motif_insatisfaction engagement_detecte decision_maker_present duree_visite_min n_signaux_achat n_objections n_besoins_techniques budget_specifie

Text 3 features textuelles (iter 2, 4)

Listes pipe-delimited. Faibles individuellement, utiles a volume.

signaux_liste objections_liste besoins_liste

Derived 6 features derivees (iter 3, 6, 7, 10)

Discretisations, ratios, proxys. Compriment l'information pour les clauses SAT.

volume_tier signal_objection_ratio duree_bucket budget_range proxy_temperature_hint ca_potentiel_mensuel

Interaction 4 features croisees (iter 5, 8, 9)

Combinaisons qui capturent "A ET B" — les signaux explosifs.

insatisfaction_x_volume decideur_x_engagement segment_activite engagement_grade

Les 10 iterations

01

Baseline — CRM fields only

300 train14 featuresAUROC 0.708layers=5 bucket=250 noise=0.25

Les 14 features de base : segment, activite, volume, signaux, objections, budget, duree. Le minimum viable d'un compte-rendu de visite.

Impact produit : Snake distingue Chaud de Froid (0.76 / 0.74) mais Tiede est flou (0.62). Le trust score sur un prompt riche en mode keyword = ~70.

02

+Textual lists — too sparse, performance drops

350 train+2 featuresAUROC 0.606-0.102

Ajout de signaux_liste et objections_liste — listes pipe-delimited. Chaque combinaison unique est une categorie rare.

Lecon : Les features textuelles brutes nuisent a petit volume. Snake ne generalise pas "insatisfaction|volume" vers "insatisfaction|volume|echantillons". Il faut soit plus de data, soit comprimer (ce que font les iters suivantes).

03

+Ratios — recovery via compression

400 train+2 featuresAUROC 0.717+0.111profile=industrial

volume_tier (high/mid/low) et signal_objection_ratio. Un nombre vaut mieux qu'une liste — Snake split dessus directement.

Impact produit : Le ratio signaux/objections est visible dans le trust_breakdown via signal_density. Un ratio eleve = plus de confiance.

04

+Besoins text — neutral, wrong target

450 train+1 featureAUROC 0.716-0.001

besoins_liste — ce que le client veut techniquement. Ne discrimine pas la temperature (un client Froid peut vouloir du triple vitrage).

Lecon : Ce feature serait utile pour le product recommendation model, pas pour le temperature model. Bonne feature, mauvais modele.

05

+Interactions — AND operator

500 train+2 featuresAUROC 0.724+0.008layers=20 bucket=150

insatisfaction_x_volume et decideur_x_engagement. Client mecontent + gros volume = signal explosif que ni l'un ni l'autre seul ne porte.

Impact produit : Quand /comprendre detecte insatisfaction ET volume >= 100, le trust_score monte. La combinaison est un signal plus fort que la somme des parties.

06

+Discretization — bucket-friendly features

550 train+2 featuresAUROC 0.765+0.041profile=balanced

duree_bucket (court/moyen/long) et budget_range. Les clauses SAT "duree_bucket contains long" sont plus propres que "duree > 45".

Impact produit : Le keyword extractor genere duree_bucket="moyen" par defaut. Si la duree est dans le texte ("visite de 1h30"), l'extracteur pourrait parser et discretiser — pas encore implemente.

07

+Proxy hint — the leakage incident

600 train+1 featureAUROC 0.813+0.048layers=25 bucket=100 noise=1.0

proxy_temperature_hint — proxy bruite, correle au label mais pas deterministe. Version originale (composite_score) etait la fuite : 100% accuracy instantanee, corrige.

Impact produit : En production, ce serait le "feeling du commercial" — une note 1-10 optionnelle. Le trust_score augmente quand le proxy aligne avec la prediction Snake.

08

+Segment x Activite — micro-profiling

650 train+1 featureAUROC 0.841+0.028noise=1.5

segment_activite = "menuisier_pvc_neuf collectif". Chaque profil client a son propre pattern de temperature.

Impact produit : Quand le keyword extractor detecte "PVC" + "neuf collectif", le croisement segment_activite donne a Snake un contexte fort. Le trust_score data_completeness monte quand segment ET activite sont remplis.

09

+Engagement grading — ordinal encoding

700 train+1 featureAUROC 0.851+0.010layers=30 bucket=80 profile=categorical

engagement_grade = faible/moyen/fort/tres_fort. "Demande devis" > "demande echantillons" > "aucun".

Impact produit : Le keyword extractor mappe directement les mots-cles vers les grades. "devis" → fort, "echantillons" → moyen. Snake voit la progression du funnel, pas juste la presence d'un engagement.

10

+CA potentiel — the money signal DEPLOYED

800 train27 featuresAUROC 0.860layers=30 bucket=50 noise=3.0

ca_potentiel_mensuel = volume x budget moyen. Un prospect a 300 vitrages/mois x 40 EUR/m2 = 12K EUR/mois. Le CA potentiel est le signal final : plus le deal est gros, plus le commercial s'engage, plus c'est chaud.

Impact produit : C'est le modele deploye. Quand /comprendre detecte volume ET budget, le CA potentiel est calcule et Snake l'utilise comme feature. Le trust_score est maximal quand les deux sont presents.

Comment les donnees alimentent le trust score

Trust axisQuelles featuresLien avec les iterations
extraction_quality
0-20
Toutes — haiku vs keyword Haiku remplit les 27 features avec precision. Keyword remplit les features core (iter 1) bien, les features derivees (iter 3-10) par calcul. Plus de features remplies = meilleur score.
signal_density
0-20
signaux_achat (iter 2), n_signaux_achat (iter 1) Le nombre de signaux detectes. Les datasets iter 1-5 montrent que AUROC monte avec la densite de signaux dans les records.
data_completeness
0-20
Les 10 champs cles verifies Chaque iteration ajoute des features. Un record iter 10 avec 27 features remplies a plus de signal qu'un record iter 1 avec 14. Le trust reflete ca.
prediction_confidence
0-20
Snake P(top class) Les 30 couches du modele iter 10 votent. 600 lookalikes. Si 580/600 disent Chaud, la confiance est 0.97 → score 19/20. Si c'est 250/600, confiance 0.42 → score 2/20.
prediction_margin
0-20
Snake P(#1) - P(#2) Tiede (AUROC 0.773) a souvent une marge faible — c'est la classe comprimee. Chaud (0.941) et Froid (0.864) ont des marges fortes. Le trust reflete cette realite des donnees.

Transition vers des donnees reelles

Ce qui est pret

Ce qu'il faut

# Export CRM → NDJSON (pseudo-code)
for visite in crm.export_visites(last_12_months):
    record = {
        "temperature": visite.label_retrospectif(),  # Chaud/Tiede/Froid
        "segment": visite.client.segment,
        "activite": visite.client.activite,
        "volume_mensuel": visite.client.volume_estime,
        ...  # memes 27 features
    }
    ndjson.write(record)

# Reentrainement
from algorithmeai import Snake
data = load_ndjson("export_crm.ndjson")
model = Snake(data, target_index="temperature", n_layers=30, bucket=50, noise=3.0)
model.to_json("opportunity_production.json")