Pourquoi ça fonctionne

Dans la conception résidentielle française, la moitié des T2/T3 suivent seulement 3 topologies. Deux T2 « classiques » au 3e et 7e étage ont exactement les mêmes pièces, dans le même agencement.

1

Calculer un HASH unique par pièce

Chaque pièce reçoit une empreinte encodant ses features + celles de ses voisins (algorithme WL, 2 itérations).

2

Assembler la signature de l'appartement

Trier tous les hashs → signature unique. Deux appartements identiques = même signature.

3

Lookup dans GLOBAL_TEMPLATES

Si la signature existe dans le dictionnaire → labelliser chaque hash clean avec confiance 1.0.

WL pas à pas — T2 classique (7 pièces)

Itération 0 — Labels initiaux

PièceFenêtresSurfaceLabel
Entrée02.5 m²W0_A0
Chambre113.0 m²W1_A2
WC02.1 m²W0_A0
Placard00.7 m²W0_A0
SDB04.7 m²W0_A1
Couloir03.2 m²W0_A0
Séjour322.0 m²W3_A3
💡
Le WC, le placard, l'entrée et le couloir ont le même label (W0_A0). Le raffinement va les séparer — sauf le WC et le placard.

Itération 1 — Intégration des voisins

// Nouveau label = MD5(mon_label + "::" + labels_voisins_triés)
label_entrée = MD5("W0_A0::W0_A0-W0_A0-W0_A1-W1_A2") = "f5efd9bf"
label_wc = MD5("W0_A0::W0_A0") = "0db99f58"
label_placard = MD5("W0_A0::W0_A0") = "0db99f58" ← même hash !
⚠️
Collision toilet/storage — Le WC et le placard ont les mêmes features et le même profil de voisinage. Leur hash est identique à toutes les itérations. C'est une limite théorique irréductible.

Itération 2 — Signature finale

signature = ('0db99f58', '0db99f58', '15335fa1', '2150baa1', '79de77cc', 'ed8f3ded', 'f5efd9bf')
# WC/PL WC/PL Couloir Chambre SDB Séjour Entrée

Templates partiels

Les hashs clean (1 seul type) sont labellisés. Les hashs ambigus (2+ types) sont laissés aux passes suivantes.

Impact mesuré — Sans Passe 0.5 : 85.1% accuracy. Avec : 91.0% (+5.9 pts). -39% d'erreurs. L'effet cascade : 627 pièces fixées à conf 1.0 améliorent le contexte pour toutes les passes suivantes.

6 templates principaux

Sur 44 templates, voici les 6 plus fréquents. Les nœuds gris en pointillés sont ambigus.

Template 1 — T2 (P1 × 26 appartements)

7 pièces · 3 labellisées · 3 ambiguës (WC/placard, couloir/entrée)

Template 2 — T3 (P1 × 26 appartements)

10 pièces · 6 labellisées · 3 ambiguës · Cuisine isolée (sep = ouverture, pas porte)

Template 3 — T3 (P1 × 8 appartements)

12 pièces · 8 labellisées · Entrée hub (9 portes !) · Cuisine isolée

Template 4 — T4 (P1 × 7 appartements)

12 pièces · 10 labellisées · 1 ambiguë · WC distingué (grâce à un voisin différent)

Template 5 — T2 (P2 × 6 appartements)

5 pièces · 5 labellisées · 0 ambiguë — Template parfait ! Toutes fenêtrées.

Template 13 — T2 (P2 × 3 appartements)

6 pièces · 6 labellisées · 0 ambiguë — WC distingué par ses fenêtres

📚
18 autres templates existent — Templates 6-12 et 14-24 couvrent des T1, T2, T3, T4 et T5 moins fréquents (2-5 occurrences). Voir DOC_PASSE_0_5.md pour le catalogue complet.

Couverture et portabilité

MétriqueValeur
Templates retenus24 (14 P1 + 10 P2)
Apts P1 couverts102/114 (89%)
Pièces labellisées (P1)627
Pièces laissées aux passes suivantes~200 (principalement toilet/storage)
Critère de rétention≥ 2 occurrences ET ≥ 50% hashs clean
🔄
Apprentissage incrémental — Pour ajouter un nouveau projet, lancer python src/regenerate_templates.py avec le nouveau JSON. Les templates existants restent valides, on ne fait qu'en ajouter.