10 datasets, 10 iterations, 6300 records — how the data shapes the product
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.
| Iter | Train | Features | AUROC | Delta | Chaud | Tiede | Froid |
|---|---|---|---|---|---|---|---|
| 1 | 300 | 14 | 0.708 | — | 121 | 117 | 62 |
| 2 | 350 | 16 | 0.606 | -0.102 | 134 | 132 | 84 |
| 3 | 400 | 18 | 0.717 | +0.111 | 167 | 149 | 84 |
| 4 | 450 | 19 | 0.716 | -0.001 | 187 | 181 | 82 |
| 5 | 500 | 21 | 0.724 | +0.008 | 173 | 222 | 105 |
| 6 | 550 | 23 | 0.765 | +0.041 | 218 | 253 | 79 |
| 7 | 600 | 24 | 0.813 | +0.048 | 254 | 255 | 91 |
| 8 | 650 | 25 | 0.841 | +0.028 | 239 | 301 | 110 |
| 9 | 700 | 26 | 0.851 | +0.010 | 296 | 309 | 95 |
| 10 | 800 | 27 | 0.860 | +0.009 | 300 | 390 | 110 |
Les champs CRM classiques. Ce que tout commercial remonte apres une visite.
Listes pipe-delimited. Faibles individuellement, utiles a volume.
Discretisations, ratios, proxys. Compriment l'information pour les clauses SAT.
Combinaisons qui capturent "A ET B" — les signaux explosifs.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
| Trust axis | Quelles features | Lien avec les iterations |
|---|---|---|
extraction_quality0-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_density0-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_completeness0-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_confidence0-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_margin0-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. |
# 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")