Exactement une entrée par appartement

Un appartement français possède toujours exactement un hall d'entrée. Après les passes 0 à 4, certains appartements peuvent se retrouver avec 0 ou 2+ entrées. La Passe 5 corrige ces incohérences.

🏠 Invariant architectural

Dans l'habitat français, l'entrée est le point de distribution principal de l'appartement. Elle connecte le palier ou l'extérieur aux espaces de vie. Chaque logement en possède une et une seule.

⚖️ Deux cas à traiter

La passe itère sur chaque appartement (cluster) et distingue deux situations problématiques : surplus (≥ 2 entrées détectées) et absence (0 entrée détectée). Chaque cas a sa propre stratégie de correction.

🏗️ Pré-filtre : niveau du sol

Avant le comptage, les entrées situées trop haut (centroïde Z > ref_z + 2.5 m) sont reclassées en corridor (conf 0.80). En maison, l'entrée est toujours au rez-de-chaussée. Les entrées verrouillées (conf = 1.0) ne sont jamais dégradées.

ℹ️
Ordre d'exécution : la Passe 5 s'exécute après les passes 0–4 et avant les post-passes. Elle garantit la contrainte d'unicité avant que les règles de raffinement final ne prennent le relais.

Trop d'entrées (≥ 2)

Quand un appartement a deux entrées ou plus, il faut en conserver une seule et reclasser les autres.

Étape 1

Identifier le keeper

L'algorithme sélectionne l'entrée à conserver selon une hiérarchie de priorité :

  1. Entrée verrouillée — conf ≥ 0.95 (posée par la Passe 0, considérée certaine)
  2. Entrée du clustering — présente dans entrance_ids (seed du clustering spatial)
  3. Meilleure confiance — en dernier recours, celle avec le score de confiance le plus élevé
Étape 2

Reclasser les surplus

Chaque entrée qui n'est pas le keeper est reclassée en corridor avec une confiance de 0.80. Ce choix reflète le fait qu'un « faux hall d'entrée » est presque toujours un espace de circulation.

Protection

Entrées à haute confiance préservées

Les entrées avec une confiance ≥ 0.90 ne sont jamais reclassées, même si elles ne sont pas le keeper. Cela évite de dégrader une classification quasi-certaine dans les cas d'appartements atypiques (duplex, etc.).

# Sélection du keeper — priorité décroissante
locked_match = [r for r in entrance_halls if r.confidence >= 0.95]
btw_match    = [r for r in entrance_halls if str(r.id) in btw_entrance_set]

if locked_match:
    keeper = locked_match[0]
elif btw_match:
    keeper = btw_match[0]
else:
    keeper = max(entrance_halls, key=lambda r: r.confidence)

# Reclasser les surplus (sauf haute confiance)
for r in entrance_halls:
    if r is not keeper:
        if r.confidence >= 0.90:
            continue
        r.room_type = "corridor"
        r.confidence = 0.80
⚠️
Ordre de priorité : une entrée verrouillée (Passe 0) l'emporte toujours sur le seed du clustering, qui l'emporte lui-même sur le score de confiance brut.

Aucune entrée (0)

Si aucun hall d'entrée n'a été détecté dans l'appartement, la passe tente de promouvoir le meilleur candidat.

Recherche

Candidat via entrance_ids

L'algorithme parcourt les pièces de l'appartement et cherche celle dont l'identifiant appartient à entrance_ids (le jeu de seeds du clustering spatial, calculé en amont par centralité).

Garde-fou

Conditions de non-promotion

Un candidat n'est pas promu s'il est déjà classé comme corridor, living_room, kitchen ou bedroom avec une confiance ≥ 0.65. Ces pièces sont considérées comme suffisamment fiables pour ne pas être écrasées.

Promotion

Forcer en entrance_hall

Si le candidat passe les gardes-fous, il est promu en entrance_hall avec une confiance de 1.0 (verrouillée). L'algorithme s'arrête au premier candidat promu (break).

# Promotion du seed clustering en entrance_hall
if len(entrance_halls) == 0:
    for r in rooms:
        if str(r.id) in btw_entrance_set:
            # Ne pas écraser une pièce bien classée
            if r.room_type in ("corridor", "living_room",
                               "kitchen", "bedroom") \
               and r.confidence >= 0.65:
                continue
            r.room_type = "entrance_hall"
            r.confidence = 1.0
            break
🚨
Confiance verrouillée : la promotion se fait à conf = 1.0. Cela signifie que les post-passes ne pourront pas modifier cette entrée, ce qui est voulu — le seed de clustering est une source fiable.

Impact de la Passe 5

Statistiques de corrections observées sur les jeux de données de validation.

Corrections typiques :
  • Pré-filtre Z : 2–5 % des entrées en maison multi-niveaux sont reclassées en corridor (entrées fantômes à l'étage)
  • Surplus (≥ 2) : ~8 % des appartements ont 2+ entrées avant la Passe 5 — réduit à exactement 1 après
  • Absence (0) : ~3 % des appartements n'ont aucune entrée — le seed clustering en fournit une dans la majorité des cas
  • Confiance moyenne : les corridors issus du surplus reçoivent conf = 0.80 ; les entrées promues reçoivent conf = 1.0

La Passe 5 garantit l'invariant 1 entrée = 1 appartement avant le raffinement final des post-passes.

Situation Action Type résultant Confiance
Entrée à Z > ref + 2.5 m Reclassement corridor
0.80
Surplus : entrée non-keeper (conf < 0.90) Reclassement corridor
0.80
Surplus : entrée non-keeper (conf ≥ 0.90) Préservée entrance_hall
≥ 0.90
Absence : seed clustering trouvé Promotion entrance_hall
1.00
Absence : seed = pièce bien classée (conf ≥ 0.65) Ignorée