Les 7 concepts structurants qui sous-tendent l'architecture du classifieur aveugle.
Le classifieur n'utilise que des features calculables sans connaître la réponse.
| Feature | Source | Pourquoi c'est « aveugle » |
|---|---|---|
area | Géométrie des segments | Mesurable physiquement, pas besoin de connaître le nom |
num_windows | Arêtes Window dans le graphe | Topologie pure — on compte les connexions |
sep_ratio | Segments WL vs SEP | Ratio calculé à partir de la géométrie des murs |
betweenness | Graphe du niveau | Centralité calculée sans labels |
wl_count | Nombre de segments de mur | Comptage géométrique pur |
| Donnée | Pourquoi interdite |
|---|---|
| Nom Revit de la pièce | C'est la réponse — l'utiliser serait tricher |
apt_id pour classifier | Utilisé uniquement pour grouper, jamais pour décider du type |
| Annotations manuelles | Toute info humaine viole le principe |
La confiance décroît avec les passes, reflétant l'incertitude épistémique croissante.
confidence = 1.0 sont protégées par la propriété unique is_locked (confidence >= 1.0). Aucune passe ultérieure ne peut les modifier. C'est un choix architectural fort : on sacrifie la possibilité de corriger une erreur en Passe 0 en échange de la garantie que les ancres fiables ne seront jamais corrompues par des passes moins sûres. Résultat : 0 faux positif sur 875 pièces verrouillées (P1+P2).Le classifieur combine trois natures d'information, dans un ordre de certitude décroissante.
Qui est connecté à qui ? Quelle position dans le graphe ? L'isomorphisme WL et la betweenness centrality exploitent la structure pure du réseau de pièces. C'est l'évidence la plus fiable (conf 1.0).
Features : betweenness, closeness, signature WL, template matching
Quelle surface ? Combien de fenêtres ? Quel ratio de séparateurs ? Les mesures physiques discriminent les types. C'est un arbre de décision classique avec 9 règles R1→R9.
Features : area, sep_ratio, num_windows, num_doors, glazing_ratio, wl_count, side
L'appartement a-t-il une cuisine ? Un WC ? La composition globale contraint les possibilités. Le profil de voisinage corrige les erreurs.
Features : cluster_label, profil voisinage, composition apt, constraints R4a-R4e
Chaque version est née de l'analyse des erreurs de la précédente — pas de l'ajout spéculatif de features.
Analyser la matrice de confusion. Identifier les transferts d'erreur les plus fréquents. Ex : « 14 fausses chambres avaient 0 porte ».
Identifier le discriminant qui sépare les erreurs des vrais positifs. Ex : « une chambre a toujours ≥1 porte ».
Ajouter le garde dans la règle appropriée avec le seuil le plus prudent. Ex : R4 += doors ≥ 1.
Lancer _baseline.py. Accepter uniquement si : P1 ≤ -0.5%, P2 ≤ -1.0%, score global ≤ 0. Sinon → discard.
doors=0 → ajout garde nd≥1 → 0 régressionglazing_ratio → seuil 0.23 → zone morte [0.20, 0.27]Chaque seuil est calibré avec un biais de prudence : mieux vaut un faux négatif qu'un faux positif.
| Seuil | Valeur | Alternative rejetée | Raison |
|---|---|---|---|
sep_ratio (terrasse étage) | ≥ 0.55 | ≥ 0.40 | Protège 6 loggias P2 à 0.50 |
btw_min (entrées) | ≥ 0.10 | ≥ 0.05 | Élimine 20 faux positifs, 0 vrai perdu |
glazing_ratio (séjour) | ≥ 0.23 | ≥ 0.20 | Zone morte [0.20, 0.27] sépare chambres/séjours |
area (WC) | ≤ 3.2 m² | ≤ 4.0 | Au-delà → confusion avec petites SDB |
area (garden) | ≥ 25 m² | ≥ 15 | Élimine petites terrasses de RDC |
Un WC et un placard sont topologiquement isomorphes. C'est une limite irréductible de l'approche.
22 versions, de 40.9% à 99.4% d'accuracy. Chaque point est une leçon.
| Version | P1 | P2 | Changement clé |
|---|---|---|---|
| v1 | 40.9% | — | Géométrie brute uniquement |
| v3 | 88.4% | 72.3% | + wl_count, sep_ratio |
| v4.2 | 92.8% | 76.6% | + leaf nodes + centralité de graphe |
| v4.6 | 97.8% | 86.2% | + R_kitchen_bedroom, Passe 3 aveugle |
| v5.2 | 99.4% | 90.9% | R5 supprimé, clustering v2 |
| v5.6 | 95.0% | 90.9% | ⚠️ Dataset P1 élargi 199→1402 pièces (pas une régression) |
| v5.8 | 92.2% | 91.7% | Passe 0.5 : templates partiels WL |
| v6.1 | — | 93.4% | R1 aveugle : Information Gain → garden 100% |
| v6.2 | 96.8% | 93.4% | Point-in-Polygon vertical overlap |
| v6.3 | 97.0% | 93.4% | glazing_ratio ≥ 0.23 |
| v7.1 | 97.5% | 93.4% | Palier par closeness centrality |
| v8.1 | 99.4% | 94.5% | 11 post-pass rules, WL local, motifs locaux, entrée coherence |
Ce qui a été essayé et abandonné — et pourquoi.
| Piste | Résultat | Raison du rejet |
|---|---|---|
| K-means clustering (k=9) | 60.6% | Fusionne toilet+laundry+storage en un seul cluster |
| 1-NN (leave-one-out) | 87.5% | Meilleur que K-means mais < règles manuelles |
| Hub seul (max degree) | 53% | Insuffisant sans filtrage par type |
| R_topo hub ≥ 3 types voisins | Instable | Dépend des types déjà prédits (récursion circulaire) |
| Ensemble multi-config WL | Abandonné | Complexité d'implémentation vs gain marginal (+0.2%) |
6 axes identifiés pour poursuivre l'optimisation.
32 hashes corridor purs, +0.3%. Cible 98.5% atteinte.
✅ TerminéExplorer d'autres combinaisons d'observables (W, D, S, A, WC).
✅ TerminéDistance topo à l'entrée, type de porte, longueur mur partagé.
🟡 Discovery doneCombiner les votes de N configs WL.
❌ AbandonnéMatrice de confusion multi-projets, zones de confusion features.
✅ TerminéAccuracy par typo, robustesse, sensitivity à la suppression de portes.
✅ Terminé