SPB Git

Ch. 17 livré et validé (compilation isolée, tests, fusion des registres)

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Oct 31, 2026) parent 2160326 Browse files

15 changed files +1,269 −9

modified analysis/python/cases/ch15_segmentation.py +6 −1
@@ -289,10 +289,14 @@ def tout() -> dict:
289 289 ch_kmeans = chow(v, pd.Series(lab_km + 1, index=v.index), f"k-moyennes (k = {k})")
290 290 ch_ward = chow(v, pd.Series(lab_w, index=v.index), f"Ward (k = {k})")
291 291 lab_km5 = cl["labels_kmeans"][5]
292 + ch_kmeans5 = chow(v, pd.Series(lab_km5 + 1, index=v.index), "k-moyennes (k = 5)")
293 + prof5 = profil_segments(v, lab_km5 + 1); croise5 = pd.crosstab(pd.Series(lab_km5 + 1, index=v.index, name="segment"), v["secteur"])
294 + ari_secteur5 = float(adjusted_rand_score(v["secteur"], lab_km5))
292 295 cv = validation_croisee(v, {"secteur": v["secteur"].values, f"k-moyennes, k = {k}": lab_km + 1, "k-moyennes, k = 5": lab_km5 + 1})
293 296 loc = etude_locative_cas3()
294 297 return {"ventes": v, "sujet": d["sujet"], "indicateurs": ind, "parts_gatineau": parts, "reference": ref,
295 − "chow": {"secteur": ch_secteur, "secteur4": ch_secteur4, "type": ch_type, "periode": ch_periode, "kmeans": ch_kmeans, "ward": ch_ward},
298 + "chow": {"secteur": ch_secteur, "secteur4": ch_secteur4, "type": ch_type, "periode": ch_periode, "kmeans": ch_kmeans, "ward": ch_ward, "kmeans5": ch_kmeans5},
299 + "labels_kmeans5": lab_km5, "profil5": prof5, "croise5": croise5, "ari_secteur5": ari_secteur5,
296 300 "Z": Z, "classification": cl, "k_opt": k, "labels_kmeans": lab_km, "labels_ward": lab_w, "silhouette_i": sil_i, "profil": prof,
297 301 "croise": croise, "ari_secteur": ari_secteur, "ari_kmeans_ward": ari_ward, "jeux": jeux, "cv": cv, "locatif": loc}
298 302
@@ -315,6 +319,7 @@ def main():
315 319 print(" silhouette moyenne par segment :", pd.Series(r["silhouette_i"]).groupby(r["labels_kmeans"] + 1).mean().round(3).to_dict())
316 320 print("\n--- Profil des segments k-moyennes :\n", r["profil"].round(2).to_string())
317 321 print("\n--- Segments × secteurs :\n", r["croise"].to_string())
322 + print(f"\n--- k = 5 : ARI(k-moyennes, secteurs) = {r['ari_secteur5']:.3f}\n", r["profil5"].round(2).to_string(), "\n", r["croise5"].to_string())
318 323 print("\n--- Jeux de variables :\n", pd.DataFrame(r["jeux"]).T.round(3).to_string())
319 324 print("\n--- Validation croisée (10 plis) :\n", r["cv"].round(4).to_string(index=False))
320 325 L = r["locatif"]
modified analysis/python/cases/ch22_metre.py +6 −6
@@ -30,7 +30,7 @@ MULT = None # (1+τI)(1+τE) du cas de base, rempli par cout_neuf_sujet
30 30 PLAN = {
31 31 "L": 12.00, # façade (m), face externe des murs
32 32 "W": 7.92, # profondeur (m)
33 − "gx": 3.96, "gy": 6.20, # garage intégré (coin avant gauche), face externe
33 + "gx": 3.96, "gy": 6.30, # garage intégré (coin avant gauche), face externe
34 34 "t_ext": 0.30, # épaisseur des murs extérieurs hors sol (ossature 2×6, revêtement, finition)
35 35 "t_sep": 0.15, # séparation garage / maison
36 36 "t_int": 0.10, # cloisons intérieures
@@ -61,8 +61,8 @@ PLAN = {
61 61 # nom, type de plancher. Les cloisons sont déduites des limites communes entre pièces d'un même niveau.
62 62 PIECES = {
63 63 "rez": [
64 − (0.00, 0.00, 3.96, 6.20, "Garage", "béton"),
65 − (0.00, 6.20, 3.96, 7.92, "Buanderie", "céramique"),
64 + (0.00, 0.00, 3.96, 6.30, "Garage", "béton"),
65 + (0.00, 6.30, 3.96, 7.92, "Buanderie", "céramique"),
66 66 (3.96, 0.00, 6.30, 3.10, "Vestibule et escaliers", "céramique"),
67 67 (3.96, 3.10, 5.60, 4.70, "Salle d'eau", "céramique"),
68 68 (5.60, 3.10, 6.30, 4.70, "Garde-robe", "bois franc"),
@@ -83,11 +83,11 @@ PIECES = {
83 83 (0.00, 4.10, 4.90, 7.92, "Chambre 4", "bois franc"),
84 84 ],
85 85 "soussol": [ # sous la partie habitable seulement (le garage est sur dalle au sol)
86 − (0.00, 6.20, 3.96, 7.92, "Rangement", "flottant"),
86 + (0.00, 6.30, 3.96, 7.92, "Rangement", "flottant"),
87 87 (3.96, 0.00, 5.00, 3.10, "Escalier", "escalier"),
88 + (3.96, 3.10, 5.00, 7.92, "Hall", "flottant"),
88 89 (5.00, 0.00, 12.00, 4.70, "Salle familiale", "flottant"),
89 − (3.96, 3.10, 7.50, 5.60, "Hall", "flottant"),
90 − (3.96, 5.60, 7.50, 7.92, "Salle mécanique", "béton"),
90 + (5.00, 4.70, 7.50, 7.92, "Salle mécanique", "béton"),
91 91 (7.50, 4.70, 12.00, 7.92, "Bureau", "flottant"),
92 92 ],
93 93 }
added analysis/python/cases/ch23_structure_couts.py +425 −0
@@ -0,0 +1,425 @@
1 +#!/usr/bin/env python3
2 +"""Chapitre 23 — coûts directs et indirects : structure complète du coût neuf du sujet du cas 1 (DONNÉES SYNTHÉTIQUES),
3 +financement intérimaire, taxes de vente, incitatif, multilogement (cas 3) et conjoncture IPCB (données RÉELLES).
4 +
5 +Réutilise les fonctions du chapitre 21 (analysis/python/cases/ch21_cout_neuf.py : devis, regroupement, coût neuf, IPCB)
6 +et la bibliothèque traite (cout.cout_neuf, finance.interets_intermediaires, finance.marge_sur_prix) ; aucune formule financière
7 +n'est réécrite ici. Imprime tous les chiffres cités dans le chapitre 23 ; testé par analysis/python/tests/test_ch23.py.
8 +
9 +Usage (racine du dépôt) : PYTHONPATH=analysis/python python3 analysis/python/cases/ch23_structure_couts.py
10 +
11 +Paramètres documentés (data/raw et sources/notes-*.md) et hypothèses pédagogiques (déclarées comme telles dans le texte) :
12 + * taux d'intérêt intérimaire de référence : taux hypothécaire affiché 5 ans, prêt conventionnel, banques à charte,
13 + 6,19 % au 2026-10-28 (Banque du Canada, série V80691335, data/raw/bdc_valet/V80691335.csv) — lu dans le fichier brut ;
14 + un prêt de construction est en pratique tarifé autrement (taux variable + prime), ce taux sert de référence documentée ;
15 + * TPS 5 % et TVQ 9,975 % (ARC, page « Calculatrice de la TPS/TVH et taux », modifiée le 2025-04-01) ;
16 + * remboursement TPS habitation neuve : 36 % de la TPS, max. 6 300 $, plein jusqu'à 350 000 $, nul à 450 000 $ et plus
17 + (ARC, guide RC4028 Rév. 10/2026) ; remboursement premiers acheteurs : 100 % de la TPS jusqu'à 1 M$, nul à 1,5 M$,
18 + travaux commencés le 20 mars 2025 ou après ; remboursement TVQ : 50 %, max. 9 975 $, réduit au-delà de 200 000 $,
19 + nul à 300 000 $ (Revenu Québec, page citée par moteur de recherche ; page elle-même inaccessible, HTTP 403) ;
20 + * hypothèses : durée de chantier 26 semaines (= supervision du devis) ; valeur de terrain 180 000 $ (exercice 21.7, en
21 + attente du ch. 25) ; part de la main-d'œuvre dans les coûts directs λ ∈ [0,35 ; 0,50] ; multilogement : efficacité
22 + locative 85 %, durée 12 mois, prêt 75 %."""
23 +from __future__ import annotations
24 +import sys, csv, pathlib
25 +import numpy as np, pandas as pd
26 +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1]))
27 +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parent))
28 +from traite import cout as ct, finance as fin
29 +import ch21_cout_neuf as c21
30 +
31 +ROOT = pathlib.Path(__file__).resolve().parents[3]
32 +RAW_IPCB = ROOT / "data/raw/statcan_18100289/18100289.csv"
33 +RAW_BDC_AFFICHE = ROOT / "data/raw/bdc_valet/V80691335.csv"
34 +RAW_BDC_A4 = ROOT / "data/raw/bdc_valet/A4_RATES_MORTGAGES.csv"
35 +
36 +PI2_PAR_M2 = c21.PI2_PAR_M2
37 +TAUX_INCITATIF = c21.TAUX_INCITATIF # 10 % sur D + I (convention de l'ouvrage, hypothèse pédagogique du ch. 21)
38 +TPS, TVQ = 0.05, 0.09975 # ARC, page « Calculatrice de la TPS/TVH et taux » (2025-04-01)
39 +REMB_TPS = {"taux": 0.36, "max": 6300.0, "plein": 350000.0, "nul": 450000.0} # RC4028 Rév. 10/2026
40 +REMB_TPS_PREMIER = {"plein": 1_000_000.0, "nul": 1_500_000.0, "debut_travaux": "2025-03-20"} # RC4028 Rév. 10/2026
41 +REMB_TVQ = {"taux": 0.50, "max": 9975.0, "plein": 200000.0, "nul": 300000.0} # Revenu Québec (partiellement vérifié)
42 +VALEUR_TERRAIN_HYP = 180000.0 # hypothèse (exercice 21.7) ; le ch. 25 établit la valeur du terrain
43 +DUREE_CHANTIER_ANS = 26 / 52 # 26 semaines de supervision dans le devis
44 +POSTE_FIN = "Financement intérimaire"
45 +
46 +# Nature dominante de chaque poste du devis (convention du chapitre : matériaux / main-d'œuvre / mixte / équipement / services)
47 +NATURE = {
48 + "Excavation et remblai": "équipement", "Fondations béton (semelles, murs)": "mixte", "Dalle de sous-sol": "mixte",
49 + "Drain français et imperméabilisation": "mixte", "Raccordements aqueduc/égout": "services", "Charpente murs et planchers": "mixte",
50 + "Fermes de toit": "matériaux", "Escaliers": "mixte", "Couverture bardeaux d'asphalte": "mixte",
51 + "Revêtement extérieur (brique 40 % / fibrociment 60 %)": "mixte", "Isolation et pare-vapeur": "mixte",
52 + "Fenêtres (PVC double vitrage)": "matériaux", "Portes extérieures": "matériaux", "Porte de garage": "matériaux",
53 + "Gouttières et solins": "mixte", "Gypse et tirage de joints": "main-d'œuvre", "Peinture intérieure": "main-d'œuvre",
54 + "Planchers bois franc": "mixte", "Planchers céramique": "mixte", "Planchers flottants (sous-sol)": "mixte",
55 + "Portes intérieures et moulures": "mixte", "Armoires de cuisine et comptoirs": "matériaux", "Vanités et accessoires (2 sdb)": "matériaux",
56 + "Plomberie brute et finition": "mixte", "Chauffe-eau": "matériaux", "Électricité (entrée 200 A, filage, appareils)": "mixte",
57 + "Ventilation (VRC) et conduits": "mixte", "Thermopompe centrale et plinthes": "matériaux", "Éclairage et finition électrique": "mixte",
58 + "Balcon et perron": "mixte", "Entrée asphaltée": "mixte", "Aménagement paysager de base": "mixte", "Nettoyage et conteneurs": "services",
59 + "Permis et études (arpentage, sol)": "indirect", "Supervision de chantier (salaires)": "indirect",
60 + "Assurances chantier et cautionnement": "indirect", "Plans et honoraires professionnels": "indirect", "Financement intérimaire": "indirect",
61 +}
62 +
63 +
64 +# ----------------------------------------------------------------------------- structure complète du devis (cas 1)
65 +
66 +def structure(devis: pd.DataFrame, cn: dict) -> pd.DataFrame:
67 + """Tableau complet des 38 postes : corps, nature, montant, part des directs (ou des indirects), part de C_N."""
68 + d = devis.copy()
69 + d["nature"] = d["poste"].map(NATURE)
70 + assert d["nature"].notna().all()
71 + D, I, CN = cn["direct"], cn["indirects"], cn["total"]
72 + d["part_bloc"] = np.where(d["indirect"], d["montant"] / I, d["montant"] / D)
73 + d["part_D"] = d["montant"] / D
74 + d["part_CN"] = d["montant"] / CN
75 + d["ordre_corps"] = d["corps"].map({k: i for i, k in enumerate(c21.ORDRE_CORPS)})
76 + return d.sort_values(["ordre_corps", "montant"], ascending=[True, False]).reset_index(drop=True)
77 +
78 +
79 +def ratios_indirects(devis: pd.DataFrame, cn: dict) -> pd.DataFrame:
80 + """Les cinq postes indirects : montant, % des directs, % de D+I, % de C_N."""
81 + ind = devis[devis["indirect"]].copy()
82 + D, I, CN = cn["direct"], cn["indirects"], cn["total"]
83 + ind["pct_D"] = ind["montant"] / D
84 + ind["pct_DI"] = ind["montant"] / (D + I)
85 + ind["pct_CN"] = ind["montant"] / CN
86 + return ind[["poste", "montant", "pct_D", "pct_DI", "pct_CN"]].sort_values("montant", ascending=False).reset_index(drop=True)
87 +
88 +
89 +def parts_nature(d: pd.DataFrame) -> pd.Series:
90 + """Montants des coûts directs par nature dominante (convention du chapitre)."""
91 + return d[~d["indirect"]].groupby("nature")["montant"].sum().sort_values(ascending=False)
92 +
93 +
94 +# ----------------------------------------------------------------------------- données Banque du Canada (réelles)
95 +
96 +def taux_affiche_5ans(date: str = "2026-10-28") -> float:
97 + """Taux hypothécaire affiché 5 ans (prêt conventionnel), % → proportion, lu dans le CSV Valet brut."""
98 + with open(RAW_BDC_AFFICHE, encoding="utf-8-sig") as f:
99 + rows = [r for r in csv.reader(f) if len(r) == 2 and r[0][:4].isdigit()]
100 + d = {r[0]: float(r[1]) for r in rows}
101 + return d[date] / 100.0
102 +
103 +
104 +def taux_fonds_avances(date: str = "2026-08-01") -> dict:
105 + """Taux effectifs des fonds avancés (groupe A4), août 2026 : non assuré fixe ≥ 5 ans (V122667786), non assuré total (V122667781),
106 + assuré total (V122667775), non assuré variable (V122667782)."""
107 + with open(RAW_BDC_A4, encoding="utf-8-sig") as f:
108 + lines = list(csv.reader(f))
109 + hdr = next(i for i, r in enumerate(lines) if r and r[0] == "date")
110 + cols = lines[hdr]
111 + row = next(r for r in lines[hdr + 1:] if r and r[0] == date)
112 + g = lambda v: float(row[cols.index(v)]) / 100.0
113 + return {"non_assure_fixe_5ans_plus": g("V122667786"), "non_assure_total": g("V122667781"),
114 + "assure_total": g("V122667775"), "non_assure_variable": g("V122667782")}
115 +
116 +
117 +# ----------------------------------------------------------------------------- financement intérimaire
118 +
119 +def financement_cas1(devis: pd.DataFrame, cn: dict, taux: float, duree_ans: float = DUREE_CHANTIER_ANS) -> dict:
120 + """Vérifie le forfait « Financement intérimaire » du devis par la formule L·i·T/2 (prêt = 100 % des coûts hors financement)."""
121 + forfait = float(devis.loc[devis["poste"] == POSTE_FIN, "montant"].iloc[0])
122 + base = cn["direct"] + cn["indirects"] - forfait # coûts directs + indirects hors financement
123 + cont = fin.interets_intermediaires(base, taux, duree_ans, "continu")
124 + mens = fin.interets_intermediaires(base, taux, duree_ans, "mensuel")
125 + cap = fin.interets_intermediaires(base, taux, duree_ans, "mensuel", capitaliser=True)
126 + iT = fin.taux_duree_implicites(forfait, base)
127 + return {"forfait": forfait, "base_hors_financement": base, "interets_continu": cont["interets"], "interets_mensuel": mens["interets"],
128 + "interets_capitalise": cap["interets"], "iT_implicite": iT, "duree_implicite_mois": iT / taux * 12,
129 + "taux_implicite_6mois": iT / duree_ans, "taux": taux, "duree_ans": duree_ans}
130 +
131 +
132 +def cout_neuf_avec_financement(devis: pd.DataFrame, cn: dict, interets: float, taux_incitatif: float = TAUX_INCITATIF) -> dict:
133 + """Coût neuf recalculé en remplaçant le forfait de financement du devis par un montant d'intérêts calculé."""
134 + forfait = float(devis.loc[devis["poste"] == POSTE_FIN, "montant"].iloc[0])
135 + I = cn["indirects"] - forfait + interets
136 + taux_ind = I / cn["direct"]
137 + out = ct.cout_neuf(cn["direct"], taux_ind, taux_incitatif)
138 + out["taux_indirects"] = taux_ind
139 + out["interets"] = interets
140 + return out
141 +
142 +
143 +def grille_financement(base: float, durees_mois: list[int], taux: list[float]) -> np.ndarray:
144 + """Intérêts intérimaires (tirage uniforme, continu) pour chaque couple (durée, taux)."""
145 + return np.array([[fin.interets_intermediaires(base, i, m / 12, "continu")["interets"] for i in taux] for m in durees_mois])
146 +
147 +
148 +# ----------------------------------------------------------------------------- taxes de vente et remboursements
149 +
150 +def remboursement_tps(jvm: float, premier_acheteur: bool = False, travaux_apres_20mars2025: bool = True) -> dict:
151 + """Remboursement fédéral TPS/TVH pour habitation neuve (RC4028 Rév. 10/2026).
152 + Remboursement général : 36 % de la TPS, maximum 6 300 $, plein jusqu'à une JVM de 350 000 $, nul à 450 000 $ et plus ;
153 + la règle de réduction entre 350 001 et 449 999 $ n'est pas écrite explicitement dans le guide (il renvoie au formulaire) :
154 + une réduction linéaire est appliquée ici et SIGNALÉE comme interprétation. Premiers acheteurs (travaux commencés le
155 + 20 mars 2025 ou après) : 100 % de la TPS jusqu'à 1 M$, réduit graduellement, nul à 1,5 M$ et plus (interpolation linéaire)."""
156 + tps = jvm * TPS
157 + general = min(REMB_TPS["taux"] * tps, REMB_TPS["max"])
158 + if jvm > REMB_TPS["plein"]:
159 + general *= max((REMB_TPS["nul"] - jvm) / (REMB_TPS["nul"] - REMB_TPS["plein"]), 0.0)
160 + premier = 0.0
161 + if premier_acheteur and travaux_apres_20mars2025:
162 + premier = tps if jvm <= REMB_TPS_PREMIER["plein"] else tps * max((REMB_TPS_PREMIER["nul"] - jvm) / (REMB_TPS_PREMIER["nul"] - REMB_TPS_PREMIER["plein"]), 0.0)
163 + return {"tps": tps, "remboursement_general": general, "remboursement_premier_acheteur": premier,
164 + "remboursement": max(general, premier), "interpolation_appliquee": REMB_TPS["plein"] < jvm < REMB_TPS["nul"]}
165 +
166 +
167 +def remboursement_tvq(jvm: float) -> dict:
168 + """Remboursement TVQ habitation neuve (paramètres Revenu Québec, partiellement vérifiés) : 50 % de la TVQ, max. 9 975 $,
169 + réduit au-delà de 200 000 $, nul à 300 000 $ et plus (réduction linéaire = interprétation)."""
170 + tvq = jvm * TVQ
171 + r = min(REMB_TVQ["taux"] * tvq, REMB_TVQ["max"])
172 + if jvm > REMB_TVQ["plein"]:
173 + r *= max((REMB_TVQ["nul"] - jvm) / (REMB_TVQ["nul"] - REMB_TVQ["plein"]), 0.0)
174 + return {"tvq": tvq, "remboursement": r}
175 +
176 +
177 +def taxes_profils(cn_total: float, valeur_terrain: float = VALEUR_TERRAIN_HYP) -> pd.DataFrame:
178 + """Coût toutes taxes comprises d'une habitation neuve (bâtiment + terrain) selon le profil de l'acheteur :
179 + occupant (non premier acheteur), premier acheteur (travaux après le 20 mars 2025), investisseur inscrit (taxes récupérées)."""
180 + jvm = cn_total + valeur_terrain
181 + rows = []
182 + for profil, premier, inscrit in [("Occupant (acheteur subséquent)", False, False), ("Premier acheteur (travaux ≥ 2025-03-20)", True, False), ("Investisseur inscrit aux taxes", False, True)]:
183 + rt, rq = remboursement_tps(jvm, premier), remboursement_tvq(jvm)
184 + tps_nette = 0.0 if inscrit else rt["tps"] - rt["remboursement"]
185 + tvq_nette = 0.0 if inscrit else rq["tvq"] - rq["remboursement"]
186 + rows.append({"profil": profil, "prix_avant_taxes": jvm, "tps": rt["tps"], "tvq": rq["tvq"], "remb_tps": rt["remboursement"],
187 + "remb_tvq": rq["remboursement"], "taxes_nettes": tps_nette + tvq_nette, "cout_ttc": jvm + tps_nette + tvq_nette,
188 + "taux_effectif": (tps_nette + tvq_nette) / jvm})
189 + return pd.DataFrame(rows)
190 +
191 +
192 +# ----------------------------------------------------------------------------- incitatif
193 +
194 +def incitatif_rendement_implicite(incitatif: float, valeur_terrain: float, couts_di: float, duree_ans: float) -> float:
195 + """Rendement annuel implicite du capital engagé : ρ = E / [T (V_L + (D+I)/2)] (terrain payé au départ, travaux tirés uniformément)."""
196 + return incitatif / (duree_ans * (valeur_terrain + couts_di / 2.0))
197 +
198 +
199 +def effet_hausse_salariale(direct: float, part_mo: float, hausse: float) -> float:
200 + """ΔD = λ · Δw/w · D : effet d'une hausse salariale sur les coûts directs pour une part λ de main-d'œuvre (hypothèse déclarée)."""
201 + return direct * part_mo * hausse
202 +
203 +
204 +# ----------------------------------------------------------------------------- multilogement (cas 3, hypothèses déclarées)
205 +
206 +def multilogement_cas3(devis: pd.DataFrame, cn: dict, sup: dict, ipcb: pd.DataFrame, taux: float, duree_ans: float = 1.0,
207 + efficacite: float = 0.85, part_pret: float = 0.75, periode: str = "2026-07") -> dict:
208 + """Coût neuf INDICATIF d'un immeuble de 12 logements (cas 3 : 825 m² locatifs, 3 étages) par transposition du devis du cas 1 :
209 + coût direct unitaire = D / aire brute du cas 1 × (IPCB immeuble < 5 étages / IPCB maison individuelle, Montréal, même trimestre) ;
210 + aire brute = superficie locative / efficacité ; indirects hors financement aux ratios du devis du cas 1 ;
211 + financement : prêt = part_pret × (D + I hors financement), mise de fonds d'abord, durée `duree_ans`, taux documenté ;
212 + incitatif 10 % sur D + I. Tout chiffre produit est une HYPOTHÈSE pédagogique (aucun barème multilogement public n'existe)."""
213 + import json
214 + sujet3 = json.loads((ROOT / "data/synthetic/cas3_montreal_sujet.json").read_text())
215 + s_loc = float(sujet3["superficie_locative_m2"]); n_log = int(sujet3["nb_logements"])
216 + s_brute = s_loc / efficacite
217 + r_type = c21.indice(ipcb, "Immeuble à hauteur restreinte (moins de cinq étages) [62111]", periode) / c21.indice(ipcb, "Maison individuelle [621112]", periode)
218 + cu_direct_cas1 = cn["direct"] / sup["brute_etages_m2"]
219 + cu_direct = cu_direct_cas1 * r_type
220 + D = cu_direct * s_brute
221 + ind = devis[devis["indirect"] & (devis["poste"] != POSTE_FIN)]
222 + ratios = (ind.set_index("poste")["montant"] / cn["direct"]).to_dict()
223 + I_hors_fin = {k: v * D for k, v in ratios.items()}
224 + base = D + sum(I_hors_fin.values())
225 + pret = part_pret * base
226 + f = fin.interets_intermediaires(pret, taux, duree_ans, "continu", mise_de_fonds=base - pret, cout_total=base)
227 + I = sum(I_hors_fin.values()) + f["interets"]
228 + res = ct.cout_neuf(D, I / D, TAUX_INCITATIF)
229 + return {"n_logements": n_log, "s_locative": s_loc, "s_brute": s_brute, "ratio_ipcb": r_type, "cu_direct_cas1": cu_direct_cas1, "cu_direct": cu_direct,
230 + "direct": D, "indirects_detail": I_hors_fin, "financement": f, "pret": pret, "indirects": I, "taux_indirects": I / D,
231 + "incitatif": res["incitatif"], "total": res["total"], "par_logement": res["total"] / n_log, "par_m2_locatif": res["total"] / s_loc,
232 + "par_m2_brut": res["total"] / s_brute, "duree_ans": duree_ans, "taux": taux}
233 +
234 +
235 +# ----------------------------------------------------------------------------- IPCB : types, régions, divisions (réelles)
236 +
237 +TYPES_RES = ("Bâtiments résidentiels [621]", "Maison individuelle [621112]", "Maison en rangée [621112]",
238 + "Immeuble à hauteur restreinte (moins de cinq étages) [62111]", "Tour d'habitations (cinq étages ou plus) [621111]",
239 + "Immeubles d'appartements", "Bâtiments non résidentiels [622]")
240 +GEOS = ("Montréal, Québec", "Québec, Québec", "Ottawa–Gatineau, partie ontarienne, Ontario/Québec", "Composite de quinze régions métropolitaines de recensement")
241 +
242 +
243 +def ipcb_long(geos: tuple[str, ...] = GEOS, types: tuple[str, ...] = TYPES_RES, divisions: tuple[str, ...] | None = ("Agrégat des divisions",)) -> pd.DataFrame:
244 + """Lecture du CSV brut 18-10-0289-01 (2023 = 100) : géographie × type × division × trimestre."""
245 + rows = []
246 + with open(RAW_IPCB, encoding="utf-8-sig") as f:
247 + for r in csv.DictReader(f, delimiter=";"):
248 + if r["GÉO"] in geos and r["Type d'immeuble"] in types and (divisions is None or r["Division"] in divisions) and r["VALEUR"]:
249 + rows.append({"geo": r["GÉO"], "type": r["Type d'immeuble"], "division": r["Division"], "periode": r["PÉRIODE DE RÉFÉRENCE"],
250 + "indice": float(r["VALEUR"]), "vecteur": r["VECTEUR"]})
251 + df = pd.DataFrame(rows)
252 + df["date"] = pd.PeriodIndex(df["periode"].str.replace("-01", "Q1").str.replace("-04", "Q2").str.replace("-07", "Q3").str.replace("-10", "Q4"), freq="Q").to_timestamp()
253 + return df.sort_values(["geo", "type", "division", "date"]).reset_index(drop=True)
254 +
255 +
256 +def val(df: pd.DataFrame, geo: str, type_: str, periode: str, division: str = "Agrégat des divisions") -> float:
257 + v = df[(df["geo"] == geo) & (df["type"] == type_) & (df["division"] == division) & (df["periode"] == periode)]["indice"]
258 + if v.empty:
259 + raise KeyError((geo, type_, periode, division))
260 + return float(v.iloc[0])
261 +
262 +
263 +def variations_annuelles(df: pd.DataFrame) -> pd.DataFrame:
264 + """Variation sur quatre trimestres (a/a) de chaque série."""
265 + out = df.copy()
266 + out["var_aa"] = out.groupby(["geo", "type", "division"])["indice"].pct_change(4)
267 + return out
268 +
269 +
270 +def tableau_types_regions(df: pd.DataFrame) -> pd.DataFrame:
271 + """T3 2025, T3 2026, variation a/a et variation depuis le T1 2020 (ou début de série) pour les séries résidentielles par région et type."""
272 + rows = []
273 + for geo in GEOS:
274 + for t in TYPES_RES:
275 + s = df[(df["geo"] == geo) & (df["type"] == t) & (df["division"] == "Agrégat des divisions")]
276 + if s.empty:
277 + continue
278 + try:
279 + v25, v26 = val(df, geo, t, "2025-07"), val(df, geo, t, "2026-07")
280 + except KeyError:
281 + continue
282 + debut = s.iloc[0]
283 + v20 = val(df, geo, t, "2020-01") if (s["periode"] == "2020-01").any() else None
284 + rows.append({"geo": geo, "type": t, "debut": debut["periode"], "t3_2025": v25, "t3_2026": v26, "var_aa": v26 / v25 - 1,
285 + "var_2020": (v26 / v20 - 1) if v20 else np.nan, "depuis_debut": v26 / debut["indice"] - 1})
286 + return pd.DataFrame(rows)
287 +
288 +
289 +def divisions_maison(df_div: pd.DataFrame, type_: str = "Maison individuelle [621112]", geo: str = "Montréal, Québec",
290 + p0: str = "2020-01", p1: str = "2022-10", p2: str = "2025-07", p3: str = "2026-07") -> pd.DataFrame:
291 + """Variation par division (indices de division, SANS pondération : ce ne sont pas des contributions) sur deux périodes."""
292 + rows = []
293 + for d in sorted(df_div[(df_div["geo"] == geo) & (df_div["type"] == type_)]["division"].unique()):
294 + try:
295 + a, b, c, e = (val(df_div, geo, type_, p, d) for p in (p0, p1, p2, p3))
296 + except KeyError:
297 + continue
298 + rows.append({"division": d, p0: a, p1: b, p2: c, p3: e, "var_2020_2022": b / a - 1, "var_aa": e / c - 1})
299 + return pd.DataFrame(rows).sort_values("var_2020_2022", ascending=False).reset_index(drop=True)
300 +
301 +
302 +# ----------------------------------------------------------------------------- sensibilité
303 +
304 +def tornade(devis: pd.DataFrame, cn: dict, taux: float, part_mo: float = 0.40) -> list[dict]:
305 + """Variation du coût neuf du cas 1 quand un seul paramètre bouge (les autres restant au cas de base = devis) :
306 + durée du chantier (6 → 18 mois), taux intérimaire (4 → 9 %), indirects hors financement (−5 → +5 points de D),
307 + hausse salariale (0 → 8 % avec λ = part_mo), incitatif (5 → 15 %)."""
308 + base = cn["total"]
309 + forfait = float(devis.loc[devis["poste"] == POSTE_FIN, "montant"].iloc[0])
310 + base_hf = cn["direct"] + cn["indirects"] - forfait
311 + def cn_fin(m, i): return cout_neuf_avec_financement(devis, cn, fin.interets_intermediaires(base_hf, i, m / 12)["interets"])["total"]
312 + I_hf = cn["indirects"] - forfait
313 + def cn_ind(delta): return ct.cout_neuf(cn["direct"], (I_hf + delta * cn["direct"] + forfait) / cn["direct"], TAUX_INCITATIF)["total"]
314 + def cn_sal(h):
315 + D2 = cn["direct"] + effet_hausse_salariale(cn["direct"], part_mo, h)
316 + return ct.cout_neuf(D2, cn["indirects"] / D2, TAUX_INCITATIF)["total"]
317 + out = [
318 + {"param": "Durée du chantier (taux 6,19 %)", "bas": cn_fin(6, taux), "haut": cn_fin(18, taux), "etiquette": "6 → 18 mois"},
319 + {"param": "Taux intérimaire (12 mois)", "bas": cn_fin(12, 0.04), "haut": cn_fin(12, 0.09), "etiquette": "4 % → 9 %"},
320 + {"param": "Indirects hors financement", "bas": cn_ind(-0.05), "haut": cn_ind(0.05), "etiquette": "−5 → +5 points de D"},
321 + {"param": f"Hausse salariale (λ = {part_mo:.0%})", "bas": cn_sal(0.0), "haut": cn_sal(0.08), "etiquette": "0 → +8 %"},
322 + {"param": "Taux d'incitatif", "bas": ct.cout_neuf(cn["direct"], cn["taux_indirects"], 0.05)["total"], "haut": ct.cout_neuf(cn["direct"], cn["taux_indirects"], 0.15)["total"], "etiquette": "5 % → 15 %"},
323 + ]
324 + for o in out:
325 + o["base"] = base
326 + return out
327 +
328 +
329 +# ----------------------------------------------------------------------------- impression
330 +
331 +def main() -> dict:
332 + f = lambda x: f"{x:,.2f}".replace(",", " ")
333 + g = lambda x: f"{x:,.0f}".replace(",", " ")
334 + devis, sujet = c21.charger()
335 + cn = c21.cout_neuf_sujet(devis)
336 + sup = c21.superficies(sujet, devis)
337 + st = structure(devis, cn)
338 + ri = ratios_indirects(devis, cn)
339 + print("== DONNÉES SYNTHÉTIQUES — devis du cas 1 (38 postes), chiffres du ch. 21 réutilisés :")
340 + print(f" D = {f(cn['direct'])} $ ; I = {f(cn['indirects'])} $ ({cn['taux_indirects']*100:.2f} % de D) ; E = {f(cn['incitatif'])} $ ; C_N = {f(cn['total'])} $")
341 + print("== Structure complète (poste, corps, nature, montant, part du bloc, part de C_N) :")
342 + for _, r in st.iterrows():
343 + print(f" {r['poste'][:52]:52s} {r['corps'][:24]:24s} {r['nature']:12s} {f(r['montant']):>12s} {r['part_bloc']*100:6.2f} % {r['part_CN']*100:6.2f} %")
344 + pn = parts_nature(st)
345 + print("== Coûts directs par nature dominante :", {k: f"{g(v)} $ ({v/cn['direct']*100:.1f} %)" for k, v in pn.items()})
346 + print("== Ratios des cinq postes indirects (montant ; % D ; % D+I ; % C_N) :")
347 + for _, r in ri.iterrows():
348 + print(f" {r['poste']:42s} {f(r['montant']):>12s} {r['pct_D']*100:5.2f} {r['pct_DI']*100:5.2f} {r['pct_CN']*100:5.2f}")
349 + print(f" total indirects : {ri['pct_D'].sum()*100:.2f} % de D ; {ri['pct_DI'].sum()*100:.2f} % de D+I ; {ri['pct_CN'].sum()*100:.2f} % de C_N")
350 + print(f" hors supervision : {(ri['pct_D'].sum() - ri.loc[ri['poste']=='Supervision de chantier (salaires)', 'pct_D'].iloc[0])*100:.2f} % de D")
351 + # Banque du Canada
352 + i_aff = taux_affiche_5ans(); fa = taux_fonds_avances()
353 + print(f"== Banque du Canada : taux affiché 5 ans conventionnel {i_aff*100:.2f} % (2026-10-28) ; fonds avancés août 2026 : non assuré fixe ≥ 5 ans {fa['non_assure_fixe_5ans_plus']*100:.2f} %, non assuré total {fa['non_assure_total']*100:.2f} %, variable non assuré {fa['non_assure_variable']*100:.2f} %, assuré total {fa['assure_total']*100:.2f} %")
354 + # financement
355 + fc = financement_cas1(devis, cn, i_aff)
356 + print(f"== Financement intérimaire : forfait du devis {f(fc['forfait'])} $ ; base hors financement {f(fc['base_hors_financement'])} $")
357 + print(f" formule continue L·i·T/2 (L = 100 % base, i = {i_aff*100:.2f} %, T = 26 sem.) : {f(fc['interets_continu'])} $ ; mensuelle : {f(fc['interets_mensuel'])} $ ; capitalisée : {f(fc['interets_capitalise'])} $")
358 + print(f" produit i·T impliqué par le forfait : {fc['iT_implicite']:.5f} → durée {fc['duree_implicite_mois']:.1f} mois à {i_aff*100:.2f} %, ou taux {fc['taux_implicite_6mois']*100:.2f} % sur 6 mois")
359 + base_hf = fc["base_hors_financement"]
360 + eq = fin.interets_intermediaires(0.75 * base_hf, i_aff, 0.75, "continu", mise_de_fonds=0.25 * base_hf, cout_total=base_hf)
361 + print(f" variante mise de fonds d'abord (prêt 75 %, T = 9 mois) : t0 = {eq['t0']*12:.2f} mois, intérêts {f(eq['interets'])} $ (vs prêt 100 % sur 9 mois : {f(fin.interets_intermediaires(base_hf, i_aff, 0.75)['interets'])} $)")
362 + durees = [6, 9, 12, 18]; taux_g = [0.04, 0.05, round(i_aff, 4), 0.07, 0.09]
363 + G = grille_financement(base_hf, durees, taux_g)
364 + print(" grille intérêts (durée mois \\ taux) :", [f"{t*100:.2f} %" for t in taux_g])
365 + for k, m in enumerate(durees):
366 + cns = [cout_neuf_avec_financement(devis, cn, G[k, j])["total"] for j in range(len(taux_g))]
367 + print(f" {m:2d} mois : ", [g(v) for v in G[k]], " → C_N :", [g(v) for v in cns])
368 + cn_6 = cout_neuf_avec_financement(devis, cn, fc["interets_continu"])
369 + print(f" C_N avec intérêts calculés (6 mois, {i_aff*100:.2f} %) : {f(cn_6['total'])} $ (écart vs devis {f(cn_6['total']-cn['total'])} $)")
370 + # taxes
371 + tp = taxes_profils(cn["total"])
372 + print(f"== Taxes de vente (TPS {TPS*100:.0f} %, TVQ {TVQ*100:.3f} %) sur bâtiment + terrain hypothétique {g(VALEUR_TERRAIN_HYP)} $ :")
373 + for _, r in tp.iterrows():
374 + print(f" {r['profil']:42s} prix {g(r['prix_avant_taxes'])} ; TPS {g(r['tps'])} ; TVQ {g(r['tvq'])} ; remb. TPS {g(r['remb_tps'])} ; remb. TVQ {g(r['remb_tvq'])} ; taxes nettes {g(r['taxes_nettes'])} ({r['taux_effectif']*100:.2f} %) ; TTC {g(r['cout_ttc'])}")
375 + print(f" taxes sur le seul C_N : TPS {g(cn['total']*TPS)} $, TVQ {g(cn['total']*TVQ)} $, total {g(cn['total']*(TPS+TVQ))} $ ({(TPS+TVQ)*100:.3f} %)")
376 + ex = remboursement_tps(400000.0); print(f" exemple RC4028 : JVM 400 000 $ → TPS {g(ex['tps'])} $, remboursement général {f(ex['remboursement_general'])} $ (interpolation linéaire signalée) ; JVM 340 000 $ → {f(remboursement_tps(340000.0)['remboursement_general'])} $ ; TVQ JVM 250 000 $ → {f(remboursement_tvq(250000.0)['remboursement'])} $")
377 + # incitatif
378 + rho = incitatif_rendement_implicite(cn["incitatif"], VALEUR_TERRAIN_HYP, cn["direct"] + cn["indirects"], 0.75)
379 + print(f"== Incitatif : marge sur coût 10 % = marge sur prix {fin.marge_sur_prix(0.10)*100:.2f} % ; rendement implicite du capital (V_L {g(VALEUR_TERRAIN_HYP)} $, T = 9 mois) : {rho*100:.1f} %/an ; sur 6 mois : {incitatif_rendement_implicite(cn['incitatif'], VALEUR_TERRAIN_HYP, cn['direct']+cn['indirects'], 0.5)*100:.1f} %/an")
380 + print(f" parcs (LAU 117.4, ≤ 10 % de la valeur du site) : si applicable, au plus {g(0.10*VALEUR_TERRAIN_HYP)} $ pour un site de {g(VALEUR_TERRAIN_HYP)} $")
381 + # salaires
382 + for lam in (0.35, 0.40, 0.50):
383 + dD = effet_hausse_salariale(cn["direct"], lam, 0.08)
384 + print(f" hausse salariale 8 % avec λ = {lam:.2f} : ΔD = {g(dD)} $ ({dD/cn['direct']*100:.2f} % de D) → ΔC_N = {g(dD*(1+cn['taux_indirects'])*1.10)} $")
385 + # IPCB
386 + df = ipcb_long()
387 + tt = tableau_types_regions(df)
388 + print("== IPCB (18-10-0289-01, 2023 = 100) par région et type : T3 2025, T3 2026, a/a, depuis T1 2020, depuis début :")
389 + for _, r in tt.iterrows():
390 + v20 = f"{r['var_2020']*100:+.1f} %" if not np.isnan(r["var_2020"]) else " n.d."
391 + print(f" {r['geo'][:28]:28s} {r['type'][:40]:40s} {r['debut']} {r['t3_2025']:6.1f} {r['t3_2026']:6.1f} {r['var_aa']*100:+5.1f} % {v20} {r['depuis_debut']*100:+6.1f} %")
392 + va = variations_annuelles(df)
393 + mi = va[(va["geo"] == "Montréal, Québec") & (va["type"] == "Maison individuelle [621112]")]
394 + pic = mi.loc[mi["var_aa"].idxmax()]
395 + print(f" pic de variation a/a, maison individuelle Montréal : {pic['var_aa']*100:.1f} % au {pic['periode']} ; minimum : {mi['var_aa'].min()*100:.1f} % au {mi.loc[mi['var_aa'].idxmin(), 'periode']}")
396 + df_div = ipcb_long(("Montréal, Québec",), ("Maison individuelle [621112]", "Immeuble à hauteur restreinte (moins de cinq étages) [62111]"), None)
397 + dv = divisions_maison(df_div)
398 + print("== Divisions, maison individuelle Montréal : T1 2020, T4 2022, T3 2025, T3 2026, var 2020→2022, var a/a :")
399 + for _, r in dv.iterrows():
400 + print(f" {r['division']:48s} {r['2020-01']:6.1f} {r['2022-10']:6.1f} {r['2025-07']:6.1f} {r['2026-07']:6.1f} {r['var_2020_2022']*100:+6.1f} % {r['var_aa']*100:+5.1f} %")
401 + dv_lr = divisions_maison(df_div, "Immeuble à hauteur restreinte (moins de cinq étages) [62111]")
402 + print("== Divisions, immeuble < 5 étages Montréal (var 2020→2022, var a/a) :", {r["division"][:20]: (f"{r['var_2020_2022']*100:+.1f}", f"{r['var_aa']*100:+.1f}") for _, r in dv_lr.iterrows() if r["division"] in ("Agrégat des divisions", "Béton", "Bois, plastiques et composites", "Chauffage, ventilation et conditionnement d’air")})
403 + # multilogement
404 + ipcb21 = c21.ipcb_montreal()
405 + ml = multilogement_cas3(devis, cn, sup, ipcb21, i_aff)
406 + print(f"== Multilogement cas 3 (HYPOTHÈSES) : {ml['n_logements']} log., {ml['s_locative']:.0f} m² locatifs → aire brute {ml['s_brute']:.1f} m² (efficacité 85 %) ; ratio IPCB <5 ét./maison {ml['ratio_ipcb']:.4f}")
407 + print(f" coût direct unitaire cas 1 {f(ml['cu_direct_cas1'])} $/m² brut → {f(ml['cu_direct'])} $/m² ; D = {f(ml['direct'])} $")
408 + for k, v in ml["indirects_detail"].items():
409 + print(f" {k:42s} {f(v):>12s} $")
410 + print(f" financement : prêt {f(ml['pret'])} $ (75 %), t0 = {ml['financement']['t0']*12:.1f} mois, durée effective {ml['financement']['duree_effective_ans']*12:.1f} mois, intérêts {f(ml['financement']['interets'])} $")
411 + print(f" I = {f(ml['indirects'])} $ ({ml['taux_indirects']*100:.2f} % de D) ; E = {f(ml['incitatif'])} $ ; C_N = {f(ml['total'])} $ ; {g(ml['par_logement'])} $/logement ; {g(ml['par_m2_locatif'])} $/m² locatif ; {g(ml['par_m2_brut'])} $/m² brut")
412 + ml18 = multilogement_cas3(devis, cn, sup, ipcb21, 0.07, duree_ans=1.5)
413 + print(f" variante 18 mois à 7 % : intérêts {f(ml18['financement']['interets'])} $, C_N {f(ml18['total'])} $ ({g(ml18['par_logement'])} $/log.)")
414 + # tornade
415 + torn = tornade(devis, cn, i_aff)
416 + print("== Tornade (C_N du cas 1) :")
417 + for o in torn:
418 + print(f" {o['param']:34s} {o['etiquette']:20s} bas {g(o['bas'])} haut {g(o['haut'])} (base {g(o['base'])}) ; étendue {(o['haut']-o['bas'])/o['base']*100:+.1f} %")
419 + return {"devis": devis, "sujet": sujet, "cn": cn, "sup": sup, "structure": st, "ratios": ri, "nature": pn, "taux_affiche": i_aff, "fonds_avances": fa,
420 + "financement": fc, "grille": (durees, taux_g, G), "taxes": tp, "ipcb": df, "types_regions": tt, "divisions": dv, "divisions_lr": dv_lr,
421 + "multilogement": ml, "tornade": torn}
422 +
423 +
424 +if __name__ == "__main__":
425 + main()
added analysis/python/figures/ch14_figures.py +114 −0
@@ -0,0 +1,114 @@
1 +#!/usr/bin/env python3
2 +"""Chapitre 14 — figures (données SYNTHÉTIQUES, graine 20261031). Idempotent.
3 +Usage (racine) : PYTHONPATH=analysis/python python3 analysis/python/figures/ch14_figures.py
4 +Produit assets/figures/ch14/ch14-fig-{avant-apres,scores-robustes,levier-cook,geocodage,sensibilite-seuils}.pdf"""
5 +from __future__ import annotations
6 +import sys, pathlib
7 +import numpy as np, pandas as pd
8 +import matplotlib.pyplot as plt
9 +from matplotlib.ticker import FuncFormatter
10 +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1]))
11 +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1] / "cases"))
12 +from traite.style import setup, palette, savefig, LARGEUR, fmt_dollars, fmt_milliers
13 +import ch14_nettoyage as c14
14 +
15 +def fig_avant_apres(R):
16 + b = R["brut"]; P = R["pipeline"]; j = P["journal"]
17 + excl = set(j.loc[j["action"] == "exclusion", "id_inscription"]); corr = set(j.loc[j["action"].isin(["correction"]), "id_inscription"]) - excl
18 + fig, axes = plt.subplots(1, 2, figsize=(LARGEUR, 3.4))
19 + ax = axes[0]
20 + for m, col, lab, z in [(~b["id_inscription"].isin(excl | corr), palette.grid, "inscription intacte", 1),
21 + (b["id_inscription"].isin(corr), palette.cat[0], "corrigée (R2, R3, R5, R6)", 2),
22 + (b["id_inscription"].isin(excl), palette.cat[1], "exclue (R1, R4, R7, S1, E1)", 3)]:
23 + w = b[m]; ax.scatter(w["superficie_habitable_m2"], w["prix_vente"].clip(lower=1), s=9 if z == 1 else 16, color=col, alpha=0.8, label=f"{lab} (n = {len(w)})", zorder=z)
24 + ax.set_yscale("log"); ax.set_xscale("log")
25 + ax.set_xlabel("Superficie habitable saisie (m², échelle log)"); ax.set_ylabel("Prix déclaré ($, échelle log)")
26 + ax.set_title("Jeu brut : 618 inscriptions", loc="left"); ax.legend(fontsize=6.8, loc="lower right")
27 + ax.annotate("prix symboliques (1 $)", (120, 1.6), fontsize=7, color=palette.ink2, xytext=(0, 8), textcoords="offset points")
28 + ax.annotate("superficies en pi²", (1600, 3.5e5), fontsize=7, color=palette.ink2, ha="center", xytext=(0, 10), textcoords="offset points")
29 + ax = axes[1]; d = P["propre"]
30 + ax.scatter(d["superficie_habitable_m2"], d["prix_vente"], s=9, color=palette.cat[0], alpha=0.7)
31 + ax.set_xlabel("Superficie habitable (m²)"); ax.set_ylabel("Prix net de meubles ($)")
32 + ax.yaxis.set_major_formatter(FuncFormatter(fmt_dollars)); ax.set_title(f"Jeu nettoyé : {len(d)} ventes", loc="left")
33 + savefig(fig, "ch14/ch14-fig-avant-apres.pdf")
34 +
35 +def fig_scores(R):
36 + M = R["masquage"]; df = M["df"]; hull = df[df["secteur"] == "Hull"]
37 + x = hull["lpm"].values; zc = (x - x.mean()) / x.std(ddof=1); zr = c14.z_robuste(x)
38 + fig, axes = plt.subplots(1, 2, figsize=(LARGEUR, 3.0), sharey=False)
39 + for ax, z, titre, col in [(axes[0], zc, "Score classique $(x-\\bar x)/s$", palette.cat[0]), (axes[1], zr, "Score robuste $(x-\\mathrm{méd})/(1{,}4826\\,\\mathrm{MAD})$", palette.cat[1])]:
40 + zz = np.clip(z, -8, 8); nb_hors = int((np.abs(z) > 8).sum())
41 + ax.hist(zz, bins=np.arange(-8.25, 8.5, 0.5), color=col, alpha=0.85, edgecolor=palette.surface)
42 + for s in (-3.5, 3.5): ax.axvline(s, color=palette.ink2, ls="--", lw=0.9)
43 + n_fl = int((np.abs(z) > 3.5).sum())
44 + ax.set_title(titre, loc="left", fontsize=8.5); ax.set_xlabel("score (tronqué à ±8)"); ax.set_ylabel("ventes")
45 + ax.text(0.02, 0.95, f"|z| > 3,5 : {n_fl} ventes\n(dont {nb_hors} au-delà de ±8)", transform=ax.transAxes, va="top", fontsize=7.5, color=palette.ink)
46 + ax.set_xlim(-8.5, 8.5)
47 + fig.suptitle("Secteur Hull, ln du prix au m², après R1–R3 (n = %d, dont 2 prix à 1 $)" % len(x), fontsize=8.5, x=0.01, ha="left")
48 + savefig(fig, "ch14/ch14-fig-scores-robustes.pdf")
49 +
50 +def fig_levier_cook(R):
51 + E = R["pipeline"]["regression"]; S = R["pipeline"]["scores"]["garde"].copy()
52 + X = c14.cas1.matrice(S); y = np.log(S["prix_vente"].astype(float)); dg = c14.diagnostics(X.values, y.values)
53 + n, k = dg["n"], dg["k"]
54 + fig, ax = plt.subplots(figsize=(LARGEUR, 3.6))
55 + size = 40 + 2500 * dg["cook"]
56 + ax.scatter(dg["h"], dg["t_ext"], s=size, facecolor=palette.cat[0], alpha=0.35, edgecolor=palette.cat[0], linewidth=0.5)
57 + for s in (-3, 3): ax.axhline(s, color=palette.ink2, ls="--", lw=0.9)
58 + ax.axvline(2 * k / n, color=palette.ink2, ls=":", lw=0.9)
59 + ax.text(2 * k / n, ax.get_ylim()[1] * 0.95 if False else 3.6, f" levier = 2k/n = {2*k/n:.3f}", fontsize=7.5, color=palette.ink2, va="top")
60 + ax.text(0.0, 3.1, " |t| = 3", fontsize=7.5, color=palette.ink2)
61 + excl = E["exclus"]
62 + for _, r in excl.iterrows():
63 + ax.annotate(r["id_inscription"], (r["levier"], r["t_ext"]), xytext=(8, -4), textcoords="offset points", fontsize=7.5, color=palette.ink)
64 + for ci in (0.01, 0.04):
65 + ax.scatter([], [], s=40 + 2500 * ci, facecolor="none", edgecolor=palette.ink2, label=f"Cook $D_i$ = {ci:.2f}")
66 + ax.legend(loc="upper right", fontsize=7.5, labelspacing=1.4, borderpad=1.0)
67 + ax.set_xlabel("Levier $h_{ii}$"); ax.set_ylabel("Résidu studentisé externe $t_i$")
68 + ax.set_title(f"Première itération E1 : n = {n}, k = {k} ; taille des points proportionnelle à la distance de Cook", loc="left", fontsize=8.5)
69 + savefig(fig, "ch14/ch14-fig-levier-cook.pdf")
70 +
71 +def fig_geocodage(R):
72 + G = R["geocodage"]; tab = G["tableau"]
73 + fig, axes = plt.subplots(1, 2, figsize=(LARGEUR, 3.2), gridspec_kw={"width_ratios": [1.25, 1]})
74 + ax = axes[0]
75 + for i, (nom, e) in enumerate(G["erreurs"].items()):
76 + xs = np.sort(e); ys = np.arange(1, len(xs) + 1) / len(xs)
77 + ax.plot(xs, ys, color=palette.cat[i], label=nom)
78 + ax.set_xscale("log"); ax.set_xlabel("Erreur de position (m, échelle log)"); ax.set_ylabel("Fonction de répartition")
79 + ax.axvline(3000 * 0.1, color=palette.ink2, ls=":", lw=0.8)
80 + ax.legend(fontsize=6.6, loc="upper left"); ax.set_title("Erreur simulée par technique", loc="left", fontsize=8.5)
81 + ax = axes[1]
82 + ypos = np.arange(len(tab))[::-1]
83 + ax.barh(ypos + 0.18, tab["pct_voisins_conserves"], height=0.36, color=palette.cat[0], label="8 plus proches voisins conservés")
84 + ax.barh(ypos - 0.18, 100 - tab["pct_rayon_change"], height=0.36, color=palette.cat[1], label="appartenance au rayon de 3 km inchangée")
85 + ax.set_yticks(ypos); ax.set_yticklabels([t.replace(" (", "\n(") for t in tab.index], fontsize=6.8)
86 + ax.set_xlabel("% des 600 ventes"); ax.set_xlim(0, 100); ax.legend(fontsize=6.6, loc="lower left")
87 + ax.set_title("Conséquences sur le voisinage", loc="left", fontsize=8.5)
88 + savefig(fig, "ch14/ch14-fig-geocodage.pdf")
89 +
90 +def fig_sensibilite(R):
91 + T = R["sensibilite"]
92 + fig, axes = plt.subplots(1, 2, figsize=(LARGEUR, 3.0))
93 + ax = axes[0]
94 + for i, zt in enumerate([2.5, 3.0]):
95 + w = T[T["seuil_t"] == zt]
96 + ax.plot(w["seuil_mad"], w["faux_positifs"], marker="o", color=palette.cat[i], label=f"faux positifs, seuil $|t|$ = {zt}")
97 + ax.plot(w["seuil_mad"], w["liees_detectees"], marker="s", ls="--", color=palette.cat[i], label=f"ventes liées détectées (sur 6), seuil $|t|$ = {zt}")
98 + ax.set_xlabel("Seuil du score robuste |z|"); ax.set_ylabel("Nombre de ventes"); ax.legend(fontsize=6.6); ax.set_title("Exclusions S1 + E1", loc="left", fontsize=8.5)
99 + ax = axes[1]
100 + for i, zt in enumerate([2.5, 3.0]):
101 + w = T[T["seuil_t"] == zt]
102 + ax.plot(w["seuil_mad"], w["sigma"], marker="o", color=palette.cat[i], label=f"seuil $|t|$ = {zt}")
103 + ax.axhline(0.0830, color=palette.ink2, ls=":", lw=0.9); ax.text(2.52, 0.0832, "σ du jeu propre (0,083)", fontsize=7, color=palette.ink2)
104 + ax.set_xlabel("Seuil du score robuste |z|"); ax.set_ylabel("σ du modèle hédonique"); ax.legend(fontsize=7); ax.set_title("Écart-type résiduel", loc="left", fontsize=8.5)
105 + savefig(fig, "ch14/ch14-fig-sensibilite-seuils.pdf")
106 +
107 +def main():
108 + setup()
109 + R = c14.main(ecrire=False, verbose=False)
110 + fig_avant_apres(R); fig_scores(R); fig_levier_cook(R); fig_geocodage(R); fig_sensibilite(R)
111 + print("figures écrites dans assets/figures/ch14/")
112 +
113 +if __name__ == "__main__":
114 + main()
added assets/figures/ch14/ch14-fig-avant-apres.pdf +0 −0

Binary file not shown.

added assets/figures/ch14/ch14-fig-geocodage.pdf +0 −0

Binary file not shown.

added assets/figures/ch14/ch14-fig-levier-cook.pdf +0 −0

Binary file not shown.

added assets/figures/ch14/ch14-fig-scores-robustes.pdf +0 −0

Binary file not shown.

added assets/figures/ch14/ch14-fig-sensibilite-seuils.pdf +0 −0

Binary file not shown.

modified manuscript/chapters/ch12.tex +557 −1
@@ -1,2 +1,558 @@
1 1 \chapter{Mesurage, superficies et plans}\label{ch:12}
2 −\stubchapter
2 +
3 +De toutes les caractéristiques d'une habitation, la superficie est celle qui pèse le plus sur le prix et celle que l'on croit connaître le mieux : elle figure sur la fiche de courtage, au rôle d'évaluation, dans l'acte de vente et sur les plans. Pourtant, quatre documents qui décrivent la même maison donnent couramment quatre superficies différentes, et aucun n'est faux : chacun mesure autre chose, selon une convention que son auteur n'a pas toujours énoncée. Le présent chapitre pose le vocabulaire et les règles qui permettent de savoir ce que mesure un chiffre de superficie, d'en produire un soi-même à partir d'un plan ou d'un relevé, et surtout de comprendre ce qu'une erreur ou une confusion de convention fait à une indication de valeur. Il se situe à la charnière de la partie consacrée aux données et des parties méthodologiques : la comparaison (\cref{ch:16,ch:17}), les modèles hédoniques (\cref{ch:18}) et la méthode du coût (\cref{ch:21,ch:22}) consomment toutes des superficies, et chacune hérite des défauts de la mesure. La maison du premier dossier de cas, un cottage à étages de Gatineau, sert d'exemple : son plan coté est reconstitué, ses superficies sont calculées selon chaque convention, puis l'effet d'une erreur de mesure sur sa valeur est dérivé et chiffré.
4 +
5 +\begin{objectifs}
6 +À la fin de ce chapitre, le lecteur sait :
7 +\begin{itemize}
8 +\item distinguer la superficie habitable, la superficie nette, l'aire brute des étages, l'aire au sol et les superficies du dossier de propriété du Manuel d'évaluation foncière du Québec, et nommer la convention derrière chaque chiffre qu'il utilise ;
9 +\item convertir exactement entre mètres carrés et pieds carrés, et reconnaître les unités anciennes des titres québécois ;
10 +\item appliquer les normes de mesurage du MEFQ, situer les usages du courtage et la norme américaine ANSI Z765 à titre comparatif ;
11 +\item lire un plan cadastral, un certificat de localisation et un plan d'architecte, et en extraire les dimensions utiles à l'évaluation ;
12 +\item dériver et calculer la propagation d'une erreur de superficie sur la valeur, $\sigma_V \approx \abs{\partial V/\partial S}\,\sigma_S$, et mesurer l'effet d'une erreur de \pct{5} ou d'un mélange de conventions ;
13 +\item comprendre pourquoi une erreur de mesure dans une base de ventes atténue le coefficient de la superficie d'un modèle hédonique, et ce que cela implique pour l'évaluation individuelle et de masse ;
14 +\item situer les apports et les limites de la photogrammétrie, du lidar et des données du rôle comme sources de superficies.
15 +\end{itemize}
16 +\end{objectifs}
17 +
18 +\section{La superficie : première variable, première source d'erreur}\label{sec:12:enjeu}
19 +
20 +\subsection{Ce que les modèles de prix disent de la superficie}
21 +
22 +La recension de \textcite{sirmansMacphersonZietz2005}, qui couvre 125 études hédoniques nord-américaines, place la superficie habitable au premier rang des variables explicatives du prix des maisons : elle est présente dans la quasi-totalité des modèles, son coefficient est presque toujours positif et significatif, et c'est la variable dont l'effet est le plus stable d'un marché à l'autre. La mise à jour de \textcite{khoshnoudSirmansZietz2023} sur les études publiées de 2005 à 2022 confirme ce constat, tout en soulignant que la façon de mesurer la taille, en niveau, en logarithme, en pieds carrés ou en nombre de pièces, varie d'une étude à l'autre et qu'elle n'est pas sans effet sur les résultats. \textcite{malpezzi2003} rappelle que, dans le cadre de \textcite{rosen1974}, le prix implicite d'une caractéristique n'a de sens que si celle-ci est mesurée de la même façon pour tous les biens de l'échantillon : une superficie qui désigne tantôt l'intérieur des murs, tantôt l'extérieur, tantôt le sous-sol compris, n'est plus une caractéristique mais un mélange de plusieurs.
23 +
24 +Le dossier synthétique du cas 1 illustre ces ordres de grandeur. Le modèle hédonique de référence de l'ouvrage, estimé sur les 600 ventes du jeu \texttt{cas1\_gatineau\_ventes.csv} et décrit au \cref{ch:18}, attribue au logarithme de la superficie habitable un coefficient de 0,539 : une maison 10 \% plus grande, toutes choses égales d'ailleurs, se vend environ 5,3 \% plus cher. Cette élasticité inférieure à un, déjà rencontrée au \cref{ch:16} à propos du prix au mètre carré et au \cref{ch:21} à propos des économies d'échelle du coût de construction, a une conséquence directe pour le présent chapitre : l'effet d'une erreur de superficie sur la valeur n'est pas proportionnel au prix unitaire, mais à un peu plus de la moitié de celui-ci. La \cref{sec:12:erreurs} en fait la démonstration.
25 +
26 +\subsection{Trois façons de se tromper}
27 +
28 +Une superficie erronée peut l'être pour trois raisons qu'il importe de distinguer, parce qu'elles n'appellent pas les mêmes remèdes. La première est l'erreur de \motcle{convention} : le chiffre est exact, mais il ne mesure pas ce que l'utilisateur croit. Une aire brute des étages de \msq{190} relevée au rôle d'évaluation et une superficie habitable de \msq{165} inscrite sur une fiche de courtage décrivent la même maison ; les comparer, ou appliquer à l'une un prix unitaire établi sur l'autre, produit une erreur de 15 \% qui n'a rien d'aléatoire. La deuxième est l'erreur de \motcle{mesure} proprement dite : le relevé est imprécis, un décroché a été oublié, une pièce mansardée a été comptée en entier, le télémètre a visé le mauvais mur. Ces erreurs sont généralement de quelques pour cent, de signe variable, et elles s'atténuent en moyenne sur un grand nombre de ventes. La troisième est l'erreur de \motcle{saisie} ou de \motcle{conversion} : une superficie en pieds carrés enregistrée dans un champ en mètres carrés, un zéro de trop, une inversion de chiffres. Ces erreurs sont grossières, rares et détectables ; le \cref{ch:14} montre comment les repérer dans une base de données. Le présent chapitre traite des deux premières, qui sont les plus insidieuses parce qu'elles passent tous les contrôles de vraisemblance.
29 +
30 +\section{Les conventions de superficie}\label{sec:12:conventions}
31 +
32 +\subsection{Cinq superficies pour un même bâtiment}
33 +
34 +Le vocabulaire des superficies n'est pas normalisé au Québec en dehors de l'évaluation foncière municipale, et les mêmes mots recouvrent parfois des réalités différentes d'un intervenant à l'autre. Les définitions qui suivent fixent celles de l'ouvrage ; elles sont construites pour être compatibles avec le Manuel d'évaluation foncière du Québec (MEFQ) là où celui-ci définit une mesure, et pour nommer explicitement ce que les autres usages laissent implicite.
35 +
36 +\begin{definition}{Superficie habitable}{habitable}
37 +La \emph{superficie habitable} d'une habitation est, dans l'ouvrage, la somme des aires de plancher des niveaux situés hors sol, mesurées à la face intérieure des murs extérieurs, cloisons intérieures comprises, à l'exclusion des ouvertures dans le plancher (cages d'escalier, puits de lumière), des garages, des espaces non finis et des espaces dont la hauteur libre est insuffisante pour l'occupation. Le sous-sol fini n'en fait pas partie ; sa superficie finie est indiquée séparément.
38 +\end{definition}
39 +
40 +\begin{definition}{Aire au sol et aire des étages (MEFQ)}{mefq}
41 +Au sens du Manuel d'évaluation foncière du Québec, l'\emph{aire au sol} d'un bâtiment est la surface brute totale que contiendrait la projection au sol de tous ses étages et sous-sols ; l'\emph{aire des étages} est la somme des aires brutes de chacun de ses étages, mezzanines et attiques exclus. Les mesures sont brutes, prises à la face externe des murs. Un niveau est un étage lorsque son plancher n'est pas plus bas que 0,4 mètre sous le niveau moyen du sol ; un garage intégré ou une verrière intégrée font partie de l'étage ; les murs mitoyens sont exclus du périmètre \parencite[partie 2C, bloc *07]{mefqpartie2}.
42 +\end{definition}
43 +
44 +Trois autres notions complètent le vocabulaire. La \motcle{superficie nette}, ou surface utile, retranche de la superficie habitable l'emprise des cloisons intérieures et des murs porteurs ; c'est la surface réellement disponible pour les occupants, celle qu'un architecte additionne pièce par pièce. La \motcle{superficie brute} ou \emph{hors tout} est mesurée à la face externe des murs extérieurs et inclut donc leur épaisseur ; pour un bâtiment dont tous les niveaux hors sol ont la même empreinte, elle coïncide avec l'aire des étages du MEFQ. Enfin, la \motcle{superficie habitable totale} de nombreuses fiches de courtage ajoute à la superficie habitable la partie finie du sous-sol, parfois sans le dire ; elle est la plus grande des cinq et celle dont la définition est la moins stable. Le \cref{tab:12:conventions} les compare.
45 +
46 +\begin{table}[tbp]
47 +\caption{Conventions de superficie comparées : ce que chacune inclut, où on la rencontre et ce qu'il faut vérifier avant de l'utiliser.}\label{tab:12:conventions}
48 +\centering\small
49 +\begin{tabularx}{\textwidth}{@{}L{27mm}YYL{34mm}@{}}
50 +\toprule
51 +Convention & Référence de mesure et inclusions & Exclusions & Où on la rencontre \\
52 +\midrule
53 +Aire au sol (MEFQ R0701A) & Face externe des murs ; projection au sol de tous les étages et sous-sols & Dépendances détachées & Dossier de propriété du rôle ; coefficient d'occupation du sol en urbanisme \\
54 +Aire des étages, brute (MEFQ R0702A) & Face externe des murs ; somme des étages dont le plancher est à moins de 0,4 m sous le sol ; garage intégré compris & Sous-sol (plancher à plus de 0,4 m sous le sol), mezzanine, attique & Rôle d'évaluation ; barèmes de coûts du MEFQ (\cref{ch:21}) ; données ouvertes des rôles \\
55 +Superficie habitable (ouvrage) & Face intérieure des murs extérieurs ; niveaux hors sol ; cloisons comprises & Trémies, garage, espaces non finis, sous-sol, hauteur insuffisante & Modèles de l'ouvrage (cas 1) ; la plupart des fiches de courtage pour la partie hors sol \\
56 +Superficie nette (utile) & Intérieur des pièces, cloisons et murs porteurs déduits & Tout ce qui précède, plus les cloisons & Plans d'architecte (tableau des pièces) ; baux commerciaux ; copropriétés (parties privatives) \\
57 +Habitable + sous-sol fini & Habitable, plus la partie finie du sous-sol & Partie non finie du sous-sol, garage & Fiches de courtage (« superficie habitable totale ») ; annonces \\
58 +\bottomrule
59 +\end{tabularx}
60 +\tabsource{synthèse de l'auteur ; définitions du MEFQ d'après \textcite[partie 2C, bloc *07]{mefqpartie2} ; les usages du courtage sont décrits à la \cref{sec:12:normes} et ne reposent pas sur une norme publique vérifiée.}
61 +\end{table}
62 +
63 +\subsection{Le calcul des aires et le lien entre conventions}
64 +
65 +Quelle que soit la convention, une superficie se calcule en décomposant l'empreinte en figures simples. Pour une empreinte polygonale dont les sommets $(x_1, y_1), \dots, (x_n, y_n)$ sont parcourus dans l'ordre, l'aire est donnée par la formule du lacet,
66 +\begin{equation}\label{eq:12:lacet}
67 +A = \frac{1}{2}\,\abs{\sum_{i=1}^{n} \left(x_i\, y_{i+1} - x_{i+1}\, y_i\right)}, \qquad (x_{n+1}, y_{n+1}) = (x_1, y_1),
68 +\end{equation}
69 +qui se réduit, pour un rectangle de côtés $a$ et $b$, à $A = ab$, et pour une empreinte en L à la somme de deux rectangles. Le MEFQ procède exactement ainsi dans son exemple de mesurage : un jumelé composé d'un corps principal de 8,53 sur 13,41 mètres et d'une annexe de 3,05 sur 4,87 mètres a une aire au sol de \msq{129.2}, un périmètre au sol de \qty{33.5}{\metre} une fois le mur mitoyen exclu, et, sur deux étages, une aire des étages de \msq{258.4} et un périmètre des étages de \qty{67}{\metre} \parencite[partie 2C, bloc *07]{mefqpartie2}.
70 +
71 +Le passage de l'aire brute à l'aire intérieure dépend de l'épaisseur des murs extérieurs et de la forme du bâtiment. Pour un niveau rectangulaire de côtés extérieurs $a$ et $b$, d'aire brute $A = ab$ et de périmètre $P = 2(a+b)$, dont les murs extérieurs ont une épaisseur $t$, l'aire mesurée à la face intérieure vaut $(a - 2t)(b - 2t)$, soit
72 +\begin{equation}\label{eq:12:murs}
73 +\frac{A_{\text{int}}}{A} = 1 - \frac{tP}{A} + \frac{4t^{2}}{A} \approx 1 - \frac{t\,\kappa}{\sqrt{A}}, \qquad P = \kappa\sqrt{A},
74 +\end{equation}
75 +où $\kappa$ est le facteur de forme introduit au \cref{ch:21} ($\kappa = 4$ pour un carré, $\kappa \approx 4{,}24$ pour un rectangle de proportion $1{:}2$). L'écart entre les deux mesures est donc d'autant plus grand que les murs sont épais, que le bâtiment est petit et que sa forme est allongée ou découpée : pour une empreinte de \msq{95} et des murs de \qty{0.28}{\metre}, il atteint 11 \% ; pour un bungalow de \msq{110} à murs de maçonnerie pleine de \qty{0.40}{\metre}, il dépasse 15 \%. Ce n'est qu'une première différence entre l'aire brute et la superficie habitable, à laquelle s'ajoutent les trémies, les garages intégrés et les espaces non finis ; la \cref{sec:12:plans} chiffre chacune pour le sujet du cas 1.
76 +
77 +\subsection{Mètres carrés, pieds carrés et unités anciennes}
78 +
79 +Le Québec vit dans deux systèmes d'unités. Les plans d'architecte, les certificats de localisation et le rôle d'évaluation sont en mètres depuis des décennies ; le marché, les fiches de courtage, les entrepreneurs et les acheteurs raisonnent encore largement en pieds et en pieds carrés. Le pied international est défini comme exactement \qty{0.3048}{\metre}, de sorte que le pied carré vaut exactement \qty{0.09290304}{\metre\squared} et que le mètre carré vaut $1/0{,}09290304 = 10{,}7639\ldots$ pieds carrés. L'ouvrage retient, conformément à ses conventions de calcul, la relation
80 +\begin{equation}\label{eq:12:conversion}
81 +\qty{1}{\metre\squared} = \qty{10.7639}{\piedcarre}, \qquad \qty{1}{\piedcarre} = \qty{0.092903}{\metre\squared},
82 +\end{equation}
83 +dont l'arrondi à quatre décimales introduit une erreur relative inférieure à un millionième, négligeable devant toute erreur de mesure. Deux pièges pratiques subsistent. Le premier est l'arrondi des dimensions avant conversion : une maison de « 26 par 40 pieds » mesure \msq{96.6}, mais si les dimensions réelles sont de 25 pieds 10 pouces sur 39 pieds 4 pouces, l'aire n'est que de \msq{94.4}, et l'écart de 2 \% vient entièrement de l'arrondi des cotes, non de la conversion. Le second est la double conversion : une superficie convertie de pieds carrés en mètres carrés, puis reconvertie après avoir été arrondie, dérive d'un ou deux pour cent à chaque aller-retour lorsque l'arrondi se fait à l'unité ; la règle est de conserver la mesure d'origine et de ne convertir qu'à la présentation.
84 +
85 +Les titres anciens et les descriptions de lots ruraux emploient encore des unités d'Ancien Régime : le pied français, ou pied de roi, plus long que le pied anglais, l'arpent de 180 pieds français comme unité de longueur, et l'arpent carré comme unité de superficie, qui vaut environ \msq{3419}. Ces équivalences sont relayées par des sources secondaires et ne sont données ici qu'à titre indicatif ; devant un titre en arpents et en pieds français, l'évaluateur s'en remet à la contenance du plan cadastral en vigueur, qui est la référence légale (\cref{sec:12:plans}), ou au certificat de localisation, dont la norme de pratique impose le système international d'unités à moins que le client ne demande expressément un autre système autorisé, auquel cas chaque mesure doit être accompagnée de son équivalent métrique. Le \cref{tab:12:conversions} rassemble les facteurs utiles.
86 +
87 +\begin{table}[tbp]
88 +\caption{Facteurs de conversion des longueurs et des superficies utilisés en évaluation résidentielle au Québec.}\label{tab:12:conversions}
89 +\centering\small
90 +\begin{tabular}{@{}l S[table-format=5.6] l l@{}}
91 +\toprule
92 +Unité & {Équivalent} & Unité d'arrivée & Statut du facteur \\
93 +\midrule
94 +1 pied (pi) & 0.3048 & mètre & exact par définition \\
95 +1 pouce (po) & 0.0254 & mètre & exact par définition \\
96 +1 pied carré (pi\textsuperscript{2}) & 0.092903 & mètre carré & exact : $0{,}3048^2 = 0{,}09290304$ \\
97 +1 mètre carré (m\textsuperscript{2}) & 10.7639 & pied carré & arrondi à quatre décimales (convention de l'ouvrage) \\
98 +1 acre & 4046.856 & mètre carré & exact : 43 560 pi\textsuperscript{2} \\
99 +1 hectare & 10000 & mètre carré & exact \\
100 +1 arpent (longueur) & 58.47 & mètre & usuel (180 pieds français) ; source secondaire \\
101 +1 arpent carré & 3418.89 & mètre carré & usuel ; source secondaire, à vérifier au titre \\
102 +\bottomrule
103 +\end{tabular}
104 +\tabsource{définitions du pied international (\qty{0.3048}{\metre}) ; arpent et pied français : équivalences usuelles relayées par des sources secondaires, inscrites comme partiellement vérifiées au registre du chapitre ; calculs \texttt{analysis/python/cases/ch12\_mesurage.py}.}
105 +\end{table}
106 +
107 +\section{Les normes de mesurage}\label{sec:12:normes}
108 +
109 +\subsection{Le Manuel d'évaluation foncière du Québec}
110 +
111 +La seule norme de mesurage des habitations ayant force obligatoire au Québec est celle du MEFQ, et elle ne s'impose qu'à l'évaluateur municipal. Le Règlement sur le rôle d'évaluation foncière renvoie au Manuel et dispose que tout renvoi signifie que l'évaluateur doit se conformer aux consignes qui y sont énoncées \parencite[art.~1 et 2]{reglrole} ; le dossier de propriété que le Règlement oblige à tenir pour chaque unité d'évaluation est décrit à la partie 2C du Manuel, dont le bloc *07 fixe les normes de mesurage des bâtiments résidentiels \parencite[art.~4]{reglrole}. L'édition 2026 du Manuel s'applique aux rôles entrant en vigueur le 1\ier{} janvier 2027 \parencite{mefq2026}.
112 +
113 +\begin{quebec}[Les normes de mesurage du MEFQ et leurs conséquences pour l'évaluateur privé]
114 +Le bloc *07 du dossier de propriété retient quatre mesures : l'aire au sol (renseignement R0701A), le périmètre au sol (R0701B), l'aire des étages (R0702A) et le périmètre des étages (R0702B). Toutes sont brutes et prises à la face externe des murs. Un niveau compte comme étage lorsque son plancher n'est pas plus bas que 0,4 mètre sous le niveau moyen du sol, ce qui range la plupart des sous-sols québécois hors de l'aire des étages mais y inclut les rez-de-jardin et les « split-level » dont le niveau inférieur est peu enfoui ; le garage intégré et la verrière intégrée font partie de l'étage ; les mezzanines et attiques sont exclus de l'aire des étages ; les murs mitoyens ne comptent pas dans le périmètre \parencite[partie 2C, bloc *07]{mefqpartie2}. Trois conséquences en découlent pour l'évaluateur privé qui consulte un rôle ou les données ouvertes qui en sont tirées \parencite{dqroles}. D'abord, la superficie du bâtiment qui y figure est une aire brute hors sol, systématiquement supérieure à la superficie habitable des fiches de courtage, de l'ordre de 10 à 20 \% pour une maison courante ; elle ne doit jamais être mélangée à celle-ci dans une grille ou un modèle. Ensuite, le nombre d'étages du rôle dépend de la règle des 0,4 mètre et peut différer du nombre d'étages « vécu » par l'occupant. Enfin, les barèmes de coûts de la partie 3E du Manuel sont construits sur ces mesures brutes ; un coût unitaire du Manuel appliqué à une superficie habitable sous-estime le coût neuf (\cref{ch:21}). Le pied de page des pages de normes de mesurage consultées porte la mention « 2022 » dans le PDF de l'édition 2026 : les définitions n'ont pas changé entre les deux éditions à la date de consultation.
115 +\end{quebec}
116 +
117 +\subsection{Les usages du courtage}
118 +
119 +Le courtage immobilier résidentiel n'applique pas, à la connaissance de l'auteur, de norme publique de mesurage. La Loi sur le courtage immobilier et son règlement d'application encadrent l'exactitude de l'information plutôt que sa méthode de production : le courtier doit vérifier, conformément aux usages et aux règles de l'art, les renseignements qu'il fournit \parencite[art.~5]{reglCourtageDeontologie}, et la fiche descriptive doit comporter les déclarations du propriétaire \parencite[art.~118]{reglCourtageDeontologie}. Les formulaires obligatoires élaborés par l'OACIQ et approuvés par le ministre \parencite[art.~129.1-129.2]{loiCourtage} portent sur la promesse d'achat et les déclarations du vendeur ; le formulaire de déclarations du vendeur recense l'état de l'immeuble et ses vices connus, non ses dimensions \parencite{oaciqFormulaireDV}. En pratique, la superficie « habitable » d'une fiche provient tantôt du rôle, tantôt d'un ancien certificat de localisation, tantôt d'un relevé du courtier ou d'un service de photographie, tantôt de la déclaration du propriétaire, et elle inclut ou non le sous-sol fini selon le rédacteur. Il est d'usage que les plateformes de diffusion distinguent la superficie habitable de la superficie du terrain et indiquent l'unité, mais aucune règle vérifiée n'impose une référence de mesure commune. L'évaluateur qui utilise des superficies de fiches comme données de comparaison doit donc les traiter comme des déclarations à vérifier, au même titre que les conditions de vente du \cref{ch:16}, et il doit s'attendre à une erreur de mesure de quelques pour cent, de signe variable, ainsi qu'à des erreurs de convention beaucoup plus grandes lorsque le sous-sol a été compté.
120 +
121 +\subsection{La norme américaine ANSI Z765 à titre comparatif}
122 +
123 +Les États-Unis disposent d'une norme nationale volontaire de calcul de la superficie des maisons unifamiliales, intitulée \emph{Square Footage -- Method for Calculating} et portant le numéro ANSI Z765 ; sa version courante a été approuvée le 29 mars 2021 et publiée par Home Innovation Research Labs, l'organisme de recherche issu de l'association américaine des constructeurs. L'ouvrage ne la cite pas comme référence bibliographique, faute d'avoir pu consulter le document original auprès de son éditeur ; sa description repose sur une copie diffusée par un service d'inscriptions immobilières et doit être tenue pour partiellement vérifiée. La norme illustre néanmoins ce qu'est une convention de mesurage complète, et la comparaison avec le MEFQ est instructive. La maison isolée y est mesurée à la face extérieure finie des murs, au pouce ou au dixième de pied près, et la superficie est rapportée au pied carré entier ; en unités métriques, la mesure se fait au centimètre et l'aire est rapportée au dixième de mètre carré. Seules les aires \emph{finies} comptent, c'est-à-dire les espaces clos utilisables toute l'année et dont les murs, planchers et plafonds sont semblables au reste de la maison ; les garages et les espaces non finis sont exclus, de même que les ouvertures vers l'étage inférieur, à l'exception des marches et paliers de l'escalier qui en descend. La hauteur libre minimale est de 7 pieds (\qty{2.13}{\metre}), ramenée à 6 pieds 4 pouces sous les poutres et conduits ; sous un plafond en pente, au moins la moitié de l'aire finie doit avoir 7 pieds de hauteur et aucune partie de moins de 5 pieds (\qty{1.52}{\metre}) n'est comptée. Surtout, la norme impose de déclarer séparément l'aire finie \emph{hors sol}, qui ne retient que les niveaux entièrement au-dessus du sol, et l'aire finie \emph{sous le sol}, qui regroupe les niveaux en tout ou en partie enfouis ; un niveau partiellement enterré est donc tout entier sous le sol, règle plus sévère que le seuil de 0,4 mètre du MEFQ. La norme ne s'applique ni aux immeubles d'appartements ni aux bâtiments multifamiliaux et ne couvre pas les dimensions des pièces.
124 +
125 +Deux leçons s'en dégagent pour la pratique québécoise. La première est que les deux conventions complètes dont on dispose, celle du MEFQ et celle de l'ANSI, mesurent toutes deux à la face externe des murs : la superficie « habitable » intérieure des fiches de courtage est l'exception, non la règle, et elle n'a pas d'équivalent normé. La seconde est que les points de divergence entre normes sont toujours les mêmes : le traitement du sous-sol et des niveaux partiellement enfouis, celui du garage intégré, celui des combles et des hauteurs sous plafond, et celui des trémies. C'est sur ces quatre points que l'évaluateur doit interroger toute superficie qu'on lui communique, et c'est sur eux que porte le \cref{tab:12:normes}.
126 +
127 +\begin{table}[tbp]
128 +\caption{Points de divergence entre les conventions de mesurage : MEFQ, norme américaine ANSI Z765 et convention de l'ouvrage.}\label{tab:12:normes}
129 +\centering\small
130 +\begin{tabularx}{\textwidth}{@{}L{30mm}YYY@{}}
131 +\toprule
132 +Point & MEFQ (aire des étages) & ANSI Z765-2021 (aire finie hors sol) & Convention de l'ouvrage (habitable) \\
133 +\midrule
134 +Référence de mesure & Face externe des murs & Face extérieure finie des murs & Face intérieure des murs extérieurs \\
135 +Sous-sol & Exclu si le plancher est à plus de 0,4 m sous le niveau moyen du sol ; étage sinon & Niveau en tout ou en partie sous le sol : déclaré à part comme aire finie sous le sol & Exclu ; partie finie indiquée séparément \\
136 +Garage intégré & Compris dans l'étage & Exclu & Exclu \\
137 +Espaces non finis & Compris (mesure brute) & Exclus & Exclus \\
138 +Trémie d'escalier & Comprise (mesure brute) & Exclue, sauf marches et paliers & Exclue \\
139 +Hauteur sous plafond & Mezzanine et attique exclus & 7 pi (2,13 m) ; pente : moitié à 7 pi, rien sous 5 pi & Espaces de hauteur insuffisante exclus \\
140 +Arrondi et unités & Mètres & Pouce ou 0,1 pi ; pi\textsuperscript{2} entier ; SI : 0,01 m et 0,1 m\textsuperscript{2} & Mètres ; m\textsuperscript{2} à une décimale \\
141 +Portée et statut & Obligatoire pour le rôle (Règlement F-2.1, r. 13) & Volontaire ; maisons unifamiliales isolées et attenantes ; exclut le multifamilial & Convention déclarée de l'ouvrage \\
142 +\bottomrule
143 +\end{tabularx}
144 +\tabsource{MEFQ : \textcite[partie 2C, bloc *07]{mefqpartie2} et \textcite[art.~1, 2 et 4]{reglrole} ; ANSI Z765-2021 : texte consulté dans une copie diffusée par un service d'inscriptions (partiellement vérifié, registre du chapitre) ; synthèse de l'auteur.}
145 +\end{table}
146 +
147 +\subsection{Les normes professionnelles et la responsabilité du mesurage}
148 +
149 +Les normes de pratique des évaluateurs n'imposent pas de convention de mesurage particulière, mais elles imposent l'inspection : tout immeuble évalué doit faire l'objet d'une inspection, à moins de circonstances exceptionnelles expliquées au rapport \parencite[règle~2.4]{oeaqNormes}. L'inspection est l'occasion de mesurer le bâtiment ou, à tout le moins, de vérifier par quelques cotes de contrôle les superficies tirées des documents. Le manuel de l'Appraisal Institute consacre à la description des améliorations un développement où la mesure de la superficie habitable brute (\emph{gross living area}) est présentée comme une étape de l'inspection et où la norme ANSI est citée comme référence de méthode \parencite{appraisal2026} ; le glossaire de la profession en fixe la définition \parencite{aiDictionary2022}. La règle qui s'en dégage, et que l'ouvrage fait sienne, tient en deux exigences : le rapport nomme la convention de mesure de chaque superficie qu'il utilise, et il indique la source de la mesure, relevé de l'évaluateur, plan, certificat de localisation, rôle ou déclaration d'un tiers. Une superficie dont on ne peut dire ni comment ni par qui elle a été mesurée n'est pas une donnée ; c'est une hypothèse, et elle doit être présentée comme telle.
150 +
151 +\section{Lire les plans et le certificat de localisation}\label{sec:12:plans}
152 +
153 +\subsection{Les documents et ce qu'ils mesurent}
154 +
155 +L'évaluateur rencontre cinq familles de documents qui portent des dimensions, et aucune ne mesure exactement la même chose. Le \cref{tab:12:documents} les résume. Le \motcle{plan cadastral} situe le lot, en donne les mesures linéaires et la contenance ; il ne dit rien du bâtiment. Le \motcle{certificat de localisation} montre le lot et les bâtiments qui s'y trouvent, leurs dimensions extérieures hors tout, leur position par rapport aux limites et les servitudes ; c'est la meilleure source d'une aire au sol. Les \motcle{plans d'architecte} ou de constructeur donnent les cotes de chaque niveau, extérieures et intérieures, et permettent de calculer toutes les conventions à la fois, mais ils décrivent le bâtiment projeté, non le bâtiment construit : les agrandissements, les finitions de sous-sol et les écarts de chantier n'y figurent pas. Le \motcle{dossier de propriété} du rôle d'évaluation contient l'aire au sol et l'aire des étages au sens du MEFQ, mesurées par l'évaluateur municipal ou tirées des permis. Le \motcle{relevé de l'évaluateur}, enfin, est la seule mesure dont celui-ci connaît la convention et la précision, parce qu'il l'a faite lui-même.
156 +
157 +\begin{table}[tbp]
158 +\caption{Documents porteurs de dimensions, grandeurs qu'ils fournissent et précautions d'emploi.}\label{tab:12:documents}
159 +\centering\small
160 +\begin{tabularx}{\textwidth}{@{}L{30mm}YYL{38mm}@{}}
161 +\toprule
162 +Document & Grandeurs fournies & Auteur et statut & Précautions \\
163 +\midrule
164 +Plan cadastral (rénové) & Limites, mesures linéaires et contenance du lot ; numéro de lot & Ministre responsable du cadastre ; présumé exact et prime sur les titres en cas de discordance (art.~3026-3027 C.c.Q.) & Ne décrit pas le bâtiment ; la contenance peut différer des titres anciens \\
165 +Certificat de localisation & Plan et rapport : limites, contenance, position et dimensions hors tout des bâtiments, dépendances, piscines, empiétements, servitudes, zonage, zone agricole & Arpenteur-géomètre, acte exclusif ; norme de pratique réglementaire ; remis par le vendeur avec les titres (art.~1719 C.c.Q.) & Opinion datée ; un créancier ou un notaire peut exiger un certificat à jour ; les dimensions sont extérieures \\
166 +Plans d'architecte ou de constructeur & Cotes extérieures et intérieures de chaque niveau, hauteurs, surfaces des pièces & Professionnel ou constructeur ; document du projet & Bâtiment projeté, non mesuré ; vérifier agrandissements, sous-sol, écarts de chantier \\
167 +Dossier de propriété du rôle (données ouvertes) & Aire au sol, aire des étages, nombre d'étages, année, usage & Évaluateur municipal ; conventions du MEFQ & Aire brute hors sol ; date de la dernière visite inconnue ; cadastre et propriétaires caviardés dans les données ouvertes \\
168 +Relevé de l'évaluateur & Toute convention choisie ; cotes de contrôle & L'évaluateur lui-même & Déclarer la convention, l'instrument et la précision ; conserver le croquis au dossier \\
169 +\bottomrule
170 +\end{tabularx}
171 +\tabsource{synthèse de l'auteur d'après \textcite[art.~1719-1720, 3026-3027]{ccq}, \textcite{loiCadastre}, \textcite{registreFoncier}, \textcite{dqroles} et la norme de pratique relative au certificat de localisation (registre du chapitre).}
172 +\end{table}
173 +
174 +\begin{quebec}[Le certificat de localisation et la contenance du lot]
175 +Le certificat de localisation est un acte réservé à l'arpenteur-géomètre, officier public dont l'exercice de la profession comprend les arpentages, mesurages, levés et plans, les certificats de localisation, les calculs de superficies des propriétés et toutes les opérations faites par méthode directe, photogrammétrique, électronique ou autre se rapportant au bornage, au lotissement et au piquetage (Loi sur les arpenteurs-géomètres, RLRQ, c. A-23, art.~34, à jour au 15 octobre 2026). La norme de pratique qui le régit (RLRQ, c. A-23, r.~10, à jour au 1\ier{} juillet 2026) le définit comme un document en minute comportant un rapport et un plan, dans lequel l'arpenteur-géomètre exprime son opinion sur la situation et la condition actuelles d'un bien-fonds par rapport aux titres, au cadastre et aux lois et règlements qui peuvent l'affecter (art.~2). Le rapport doit notamment indiquer la date du levé, la description actualisée du bien-fonds avec les mesures linéaires et la contenance de chaque lot, la concordance ou la discordance entre les marques d'occupation, le plan cadastral et les titres, les servitudes, les limites bornées, les empiétements apparents, les bâtiments, dépendances et structures, la situation en zone agricole et les avis publiés au registre foncier (art.~9) ; l'arpenteur-géomètre doit avoir visité les lieux ou validé personnellement les observations (art.~7), et le système international d'unités est la règle (art.~3). L'Ordre des arpenteurs-géomètres du Québec rappelle qu'un créancier ou un notaire peut exiger un certificat à jour lors de la vente d'une propriété, que le vendeur en paie habituellement les frais et que le certificat ne doit pas servir à établir les limites sur le terrain, ce qui relève du piquetage (page consultée le 31 octobre 2026, registre du chapitre). Du côté du Code civil, le vendeur remet à l'acheteur les titres et le certificat de localisation qu'il possède et doit délivrer la contenance indiquée, sauf vente sans égard à la contenance \parencite[art.~1719-1720]{ccq} ; le plan cadastral est présumé exact et prime les titres en cas de discordance \parencite[art.~3026-3027]{ccq}, de sorte que la contenance du lot rénové est la superficie de terrain de référence pour l'évaluateur, même lorsque les titres anciens en indiquent une autre \parencite{loiCadastre}. Pour les lots issus de la rénovation cadastrale, le certificat doit en outre établir la concordance avec le plan antérieur (r.~10, art.~9, par.~6\textsuperscript{o}) : c'est là que se résolvent la plupart des écarts de contenance rencontrés dans les dossiers.
176 +\end{quebec}
177 +
178 +Lire un certificat de localisation pour les besoins de l'évaluation suppose de distinguer trois choses que le document superpose : les limites et la contenance du lot, qui donnent la superficie de terrain ; la position du bâtiment, qui révèle les marges, les empiétements et les servitudes, donc les contraintes juridiques et urbanistiques traitées aux \cref{ch:7,ch:8} ; et les dimensions hors tout du bâtiment, qui permettent de reconstituer l'aire au sol et, connaissant le nombre d'étages, l'aire des étages. Le certificat ne dit rien de l'intérieur : ni la finition du sous-sol, ni les trémies, ni l'épaisseur des murs. Le passage à la superficie habitable exige soit un plan, soit un relevé intérieur, soit l'application de l'\cref{eq:12:murs} avec une épaisseur de mur estimée, méthode acceptable pour un contrôle mais non pour une mesure de référence.
179 +
180 +\subsection{Le plan coté du sujet du cas 1}
181 +
182 +\begin{synthetique}
183 +Le sujet est la maison fictive du premier dossier de cas (\texttt{data/synthetic/cas1\_gatineau\_sujet.json}) : cottage à étages construit en 1998 dans le secteur Hull de Gatineau, \msq{165} habitables, terrain de \msq{620}, garage simple, sous-sol fini. Le plan coté présenté ici est une reconstitution pédagogique cohérente avec ces données et avec le devis du \cref{ch:21} (dalle de sous-sol de \msq{95}, planchers flottants du sous-sol sur \msq{70}) ; ses dimensions, l'épaisseur des murs, le tracé des cloisons et l'implantation sur le lot sont des hypothèses déclarées dans \texttt{analysis/python/cases/ch12\_mesurage.py}, qui imprime tous les chiffres de cette section. Aucune propriété réelle n'est décrite.
184 +\end{synthetique}
185 +
186 +\begin{figure}[tbp]
187 +\centering
188 +\begin{tikzpicture}[x=0.42cm, y=0.42cm, font=\sffamily\tiny,
189 + mur/.style={draw=brandDark, line width=1.6pt}, cloison/.style={draw=brandGray, line width=0.5pt},
190 + cote/.style={<->, >={Stealth[length=1.2mm]}, draw=brandGray, line width=0.4pt},
191 + piece/.style={text=brandDark, align=center}]
192 +% ---------------- Rez-de-chaussée
193 +\begin{scope}
194 +\draw[mur] (0,0) rectangle (7.92,12.00);
195 +\draw[cloison] (0.28,0.28) rectangle (7.64,11.72);
196 +% cloisons
197 +\draw[cloison] (3.60,0.28) -- (3.60,4.80); % vestibule / salon
198 +\draw[cloison] (0.28,4.80) -- (7.64,4.80); % salon-vestibule / arrière
199 +\draw[cloison] (3.90,4.80) -- (3.90,11.72); % salle à manger / cuisine
200 +\draw[cloison] (3.60,0.28) -- (3.60,1.0);
201 +\draw[cloison] (5.30,0.28) -- (5.30,2.20) -- (7.64,2.20); % salle d'eau
202 +% escalier (trémie 1,00 x 3,40) le long du mur gauche
203 +\draw[cloison, fill=brandLight] (0.28,4.80) rectangle (1.28,8.20);
204 +\foreach \i in {1,...,10} \draw[cloison] (0.28,4.80+0.34*\i) -- (1.28,4.80+0.34*\i);
205 +\node[piece] at (1.95,2.5) {Salon};
206 +\node[piece] at (6.5,3.6) {Vestibule};
207 +\node[piece] at (6.45,1.2) {Salle\\d'eau};
208 +\node[piece] at (2.6,8.6) {Salle à\\manger};
209 +\node[piece] at (5.77,8.3) {Cuisine};
210 +\node[piece, rotate=90] at (0.78,6.5) {Escalier};
211 +% porte d'entrée et porte garage
212 +\draw[brandDark, line width=1pt] (6.0,0) -- (7.0,0);
213 +\node[below, font=\sffamily\tiny] at (6.5,-0.1) {entrée};
214 +% cotes
215 +\draw[cote] (0,-1.1) -- (7.92,-1.1) node[midway, below] {7,92 (hors tout)};
216 +\draw[cote] (-1.1,0) -- (-1.1,12.00) node[midway, above, rotate=90] {12,00 (hors tout)};
217 +\draw[cote] (0.28,12.6) -- (7.64,12.6) node[midway, above] {7,36 (intérieur)};
218 +\draw[cote] (8.6,0.28) -- (8.6,11.72) node[midway, below, rotate=90] {11,44 (intérieur)};
219 +\draw[cote] (0.28,4.3) -- (1.28,4.3) node[midway, below] {1,00};
220 +\draw[cote] (1.7,4.80) -- (1.7,8.20) node[midway, right] {3,40};
221 +\node[font=\sffamily\scriptsize\bfseries, text=brandDark] at (3.96,-2.4) {Rez-de-chaussée};
222 +\node[font=\sffamily\tiny, text=brandGray, align=center] at (3.96,-3.3) {aire brute 95,04 m\textsuperscript{2} ; intérieur 84,20 m\textsuperscript{2}};
223 +\end{scope}
224 +% ---------------- Étage
225 +\begin{scope}[xshift=13.2cm]
226 +\draw[mur] (0,0) rectangle (7.92,12.00);
227 +\draw[cloison] (0.28,0.28) rectangle (7.64,11.72);
228 +\draw[cloison] (3.96,0.28) -- (3.96,4.40); % ch. 1 / ch. 2
229 +\draw[cloison] (0.28,4.40) -- (7.64,4.40); % chambres avant / couloir
230 +\draw[cloison] (0.28,7.90) -- (7.64,7.90); % couloir / arrière
231 +\draw[cloison] (3.96,7.90) -- (3.96,11.72); % ch. 3 / ch. 4
232 +\draw[cloison] (4.60,4.40) -- (4.60,7.90); % salle de bain
233 +% trémie (ouverture dans le plancher)
234 +\draw[cloison, dashed, fill=white] (0.28,4.80) rectangle (1.28,8.20);
235 +\node[piece, rotate=90] at (0.78,6.5) {trémie};
236 +\node[piece] at (2.1,2.3) {Chambre 1};
237 +\node[piece] at (5.8,2.3) {Chambre 2};
238 +\node[piece] at (2.1,9.8) {Chambre 3};
239 +\node[piece] at (5.8,9.8) {Chambre 4};
240 +\node[piece] at (6.1,6.15) {Salle\\de bain};
241 +\node[piece] at (2.9,6.15) {Couloir};
242 +\draw[cote] (0,-1.1) -- (7.92,-1.1) node[midway, below] {7,92};
243 +\draw[cote] (-1.1,0) -- (-1.1,12.00) node[midway, above, rotate=90] {12,00};
244 +\draw[cote] (8.6,4.40) -- (8.6,7.90) node[midway, below, rotate=90] {3,50};
245 +\node[font=\sffamily\scriptsize\bfseries, text=brandDark] at (3.96,-2.4) {Étage};
246 +\node[font=\sffamily\tiny, text=brandGray, align=center] at (3.96,-3.3) {aire brute 95,04 m\textsuperscript{2} ; intérieur 84,20 m\textsuperscript{2} ; trémie 3,40 m\textsuperscript{2}};
247 +\end{scope}
248 +\node[font=\sffamily\tiny, text=brandGray, align=left, anchor=north west] at (-1.2,-4.3) {Cotes en mètres ; murs extérieurs de 0,28 m ; cloisons de 0,115 m ; échelle approximative 1:240. Sous-sol (non montré) : même empreinte, plancher à 1,90 m sous le niveau moyen du sol, 70 m\textsuperscript{2} finis.};
249 +\end{tikzpicture}
250 +\caption{Plan coté reconstitué du sujet du cas 1 : rez-de-chaussée et étage d'un cottage de 7,92 sur 12,00 mètres hors tout. Les cotes extérieures donnent l'aire brute de chaque niveau (\msq{95.04}), les cotes intérieures et la trémie donnent la superficie habitable (\msq{165.0} pour les deux niveaux). Les dimensions sont des hypothèses pédagogiques.}\label{fig:12:plan}
251 +\figsource{\synth{schéma de l'auteur (TikZ, \texttt{manuscript/chapters/ch12.tex}) ; dimensions déclarées dans \texttt{analysis/python/cases/ch12\_mesurage.py}}.}
252 +\end{figure}
253 +
254 +\begin{figure}[tbp]
255 +\centering
256 +\begin{tikzpicture}[x=0.22cm, y=0.22cm, font=\sffamily\tiny,
257 + lot/.style={draw=brandDark, line width=1pt}, bat/.style={draw=brandDark, fill=brandLight, line width=0.8pt},
258 + cote/.style={<->, >={Stealth[length=1.2mm]}, draw=brandGray, line width=0.4pt}]
259 +% lot 15,24 x 40,68 (façade en bas)
260 +\draw[lot] (0,0) rectangle (15.24,40.68);
261 +\fill[brandGray!25] (-6,-5) rectangle (21.24,0); \node[text=brandDark] at (7.62,-2.5) {rue (emprise publique)};
262 +% maison 7,92 x 12,00, marge avant 7,50, marge gauche 2,00
263 +\draw[bat] (2.00,7.50) rectangle (9.92,19.50);
264 +\node[align=center, text=brandDark] at (5.96,13.5) {Résidence\\2 étages\\7,92 × 12,00\\(95,04 m\textsuperscript{2})};
265 +% garage attaché 3,66 x 6,10, aligné sur la façade
266 +\draw[bat, fill=white] (9.92,7.50) rectangle (13.58,13.60);
267 +\node[align=center, text=brandDark] at (11.75,10.55) {Garage\\3,66 × 6,10\\(22,3 m\textsuperscript{2})};
268 +% balcon arrière
269 +\draw[cloison] (3.0,19.50) rectangle (6.5,21.5); \node[text=brandGray] at (4.75,20.5) {balcon};
270 +% servitude utilité publique arrière 3 m
271 +\draw[dashed, brandGray] (0,37.68) -- (15.24,37.68); \node[text=brandGray] at (7.62,39.2) {servitude d'utilité publique (3,00 m)};
272 +% cotes
273 +\draw[cote] (0,-6.5) -- (15.24,-6.5) node[midway, below] {15,24 (façade)};
274 +\draw[cote] (-2.5,0) -- (-2.5,40.68) node[midway, above, rotate=90] {40,68 (profondeur) — contenance 620,0 m\textsuperscript{2}};
275 +\draw[cote] (17.5,0) -- (17.5,7.50) node[midway, right] {7,50};
276 +\draw[cote] (17.5,7.50) -- (17.5,19.50) node[midway, right] {12,00};
277 +\draw[cote] (17.5,19.50) -- (17.5,40.68) node[midway, right] {21,18};
278 +\draw[cote] (0,23) -- (2.00,23) node[midway, above] {2,00};
279 +\draw[cote] (13.58,16) -- (15.24,16) node[midway, above] {1,66};
280 +\node[anchor=south west, text=brandDark, font=\sffamily\tiny] at (0.3,0.4) {lot 1 234 567 (fictif), cadastre du Québec};
281 +\end{tikzpicture}
282 +\caption{Plan d'implantation du sujet du cas 1 sur son lot de 15,24 sur 40,68 mètres (contenance \msq{620}), à la manière du plan d'un certificat de localisation : résidence, garage attaché, marges et servitude. L'aire au sol est celle de la résidence (\msq{95.04}) ; le garage attaché (\msq{22.3}) est mesuré à part. Toutes les données sont fictives.}\label{fig:12:implantation}
283 +\figsource{\synth{schéma de l'auteur (TikZ, \texttt{manuscript/chapters/ch12.tex})}.}
284 +\end{figure}
285 +
286 +\begin{exemple}{Mesurer le sujet du cas 1 selon chaque convention}{mesurage}
287 +Le sujet est un cottage de 7,92 sur 12,00 mètres hors tout, soit 26 pieds sur 39 pieds 4 pouces, à deux étages de même empreinte, sur un sous-sol complet dont le plancher est à 1,90 mètre sous le niveau moyen du sol. Les murs extérieurs ont une épaisseur moyenne de \qty{0.28}{\metre}, les cloisons de \qty{0.115}{\metre} sur une longueur cumulée de \qty{44}{\metre} (18 au rez-de-chaussée, 26 à l'étage) ; la cage d'escalier ouvre dans le plancher de l'étage une trémie de 1,00 sur 3,40 mètres ; le sous-sol est fini sur \msq{70} ; un garage simple attaché de 3,66 sur 6,10 mètres est accolé au côté droit, hors de l'empreinte principale ; le lot mesure 15,24 sur 40,68 mètres. Les \cref{fig:12:plan,fig:12:implantation} montrent le plan coté et l'implantation.
288 +
289 +\emph{Mesures du MEFQ.} L'aire au sol est l'aire de la projection de l'empreinte principale, $7{,}92 \times 12{,}00 = \msq{95.04}$, et le périmètre au sol vaut $2\,(7{,}92 + 12{,}00) = \qty{39.84}{\metre}$. Le sous-sol, dont le plancher est à 1,90 mètre sous le sol, n'est pas un étage ; les deux niveaux hors sol le sont, d'où une aire des étages de $2 \times 95{,}04 = \msq{190.08}$ et un périmètre des étages de \qty{79.68}{\metre}. C'est la mesure que retiendrait le dossier de propriété du rôle, et c'est l'aire brute de \msq{190} utilisée au \cref{ch:21} pour exprimer le coût neuf au mètre carré.
290 +
291 +\emph{Superficie habitable.} L'intérieur de chaque niveau mesure $(7{,}92 - 0{,}56) \times (12{,}00 - 0{,}56) = 7{,}36 \times 11{,}44 = \msq{84.20}$, soit 88,6 \% de l'aire brute, conformément à l'\cref{eq:12:murs} : $1 - 0{,}28 \times 39{,}84/95{,}04 + 4 \times 0{,}28^2/95{,}04 = 0{,}8859$. Deux niveaux donnent \msq{168.40} ; la trémie de \msq{3.40} est retranchée à l'étage, d'où une superficie habitable de \msq{165.0}, qui est celle du dossier. En pieds carrés, $165{,}0 \times 10{,}7639 = \pisq{1776}$.
292 +
293 +\emph{Superficie nette.} Les cloisons occupent $44 \times 0{,}115 = \msq{5.06}$ ; la superficie nette est de \msq{159.9}, soit 97 \% de l'habitable. Pour une maison de cette taille, l'écart entre habitable et nette est petit ; il devient important dans les copropriétés et les immeubles à couloirs.
294 +
295 +\emph{Superficie « habitable totale » des fiches.} En ajoutant les \msq{70} finis du sous-sol, on obtient \msq{235.0}, soit 42 \% de plus que la superficie habitable. C'est le chiffre qu'une fiche de courtage pourrait afficher sans préciser qu'il inclut le sous-sol.
296 +
297 +\emph{Autres grandeurs.} Le garage attaché mesure \msq{22.3} ; il n'entre dans aucune des superficies précédentes mais il est une caractéristique à part entière de la grille de comparaison. La contenance du lot est de $15{,}24 \times 40{,}68 = \msq{620.0}$.
298 +
299 +Le \cref{tab:12:sujet} rassemble ces mesures et leur associe le prix unitaire implicite obtenu en divisant la valeur hédonique du sujet, \dollars{637953} (\cref{ch:18}), par chaque superficie. Le même bâtiment et la même valeur donnent ainsi des prix unitaires allant de \parmsq{2715} à \parmsq{6712}, soit de \qty{252}{\dollar\per\piedcarre} à \qty{624}{\dollar\per\piedcarre}. La \cref{fig:12:conventions} en donne l'image.
300 +\end{exemple}
301 +
302 +\begin{table}[tbp]
303 +\caption{Superficies du sujet du cas 1 selon la convention et prix unitaire implicite pour une valeur de \dollars{637953}.}\label{tab:12:sujet}
304 +\centering\small
305 +\begin{tabular}{@{}l S[table-format=3.2] S[table-format=4.0] S[table-format=4.0] S[table-format=3.0]@{}}
306 +\toprule
307 +Convention & {m\textsuperscript{2}} & {pi\textsuperscript{2}} & {\$/m\textsuperscript{2}} & {\$/pi\textsuperscript{2}} \\
308 +\midrule
309 +Aire au sol (MEFQ R0701A) & 95.04 & 1023 & 6712 & 624 \\
310 +Superficie nette (utile) & 159.94 & 1722 & 3989 & 371 \\
311 +Superficie habitable (convention de l'ouvrage) & 165.00 & 1776 & 3866 & 359 \\
312 +Aire des étages, brute (MEFQ R0702A) & 190.08 & 2046 & 3356 & 312 \\
313 +Habitable + sous-sol fini (fiches de courtage) & 235.00 & 2529 & 2715 & 252 \\
314 +\midrule
315 +Garage attaché (hors superficies) & 22.33 & 240 & {---} & {---} \\
316 +Contenance du lot & 619.96 & 6673 & {---} & {---} \\
317 +\bottomrule
318 +\end{tabular}
319 +\tabsource{\synth{\texttt{analysis/python/cases/ch12\_mesurage.py}} ; valeur hédonique \texttt{traite.cas1.predire} ; conversion $1\,\text{m}^2 = 10{,}7639\,\text{pi}^2$.}
320 +\end{table}
321 +
322 +\begin{figure}[tbp]
323 +\centering
324 +\includegraphics[width=\linewidth]{ch12/ch12-fig-conventions-sujet.pdf}
325 +\caption{Le sujet du cas 1 mesuré selon cinq conventions : (a) la superficie va de \msq{95} (aire au sol) à \msq{235} (habitable avec sous-sol fini) ; (b) pour une même valeur de \dollars{637953}, le prix unitaire implicite varie du simple au double et demi. Un prix unitaire n'a de sens qu'accompagné de sa convention.}\label{fig:12:conventions}
326 +\figsource{\synth{script \texttt{analysis/python/figures/ch12\_figures.py}, graine 20261031}.}
327 +\end{figure}
328 +
329 +\section{Les erreurs de mesure et leur effet sur la valeur}\label{sec:12:erreurs}
330 +
331 +\subsection{La dérivée de la valeur par rapport à la superficie}
332 +
333 +Pour chiffrer l'effet d'une erreur de superficie, il faut savoir comment la valeur varie avec la superficie, toutes choses égales d'ailleurs. Le modèle hédonique de référence de l'ouvrage est semi-logarithmique en prix et logarithmique en superficie :
334 +\begin{equation}\label{eq:12:modele}
335 +\ln V = \alpha + \beta \ln S + \mathbf{x}\T\boldsymbol\gamma, \qquad V(S) = V_0 \left(\frac{S}{S_0}\right)^{\beta},
336 +\end{equation}
337 +où $\beta$ est l'élasticité de la valeur par rapport à la superficie et $V_0 = V(S_0)$ la valeur à la superficie de référence. La dérivée de la valeur par rapport à la superficie, c'est-à-dire le prix marginal du mètre carré, s'écrit
338 +\begin{equation}\label{eq:12:derivee}
339 +\frac{\partial V}{\partial S} = \beta\,\frac{V}{S},
340 +\end{equation}
341 +et elle est inférieure au prix moyen $V/S$ dès que $\beta < 1$. C'est la traduction mathématique d'une observation du \cref{ch:16} : le prix au mètre carré décroît avec la taille, parce qu'une partie de la valeur rémunère le terrain, les raccordements, la cuisine et les équipements, dont la quantité ne croît pas avec la surface. Le prix marginal est la grandeur pertinente pour ajuster une différence de superficie entre deux maisons (\cref{ch:17}) et pour mesurer l'effet d'une erreur ; le prix moyen ne l'est pas.
342 +
343 +\begin{proposition}{Propagation d'une erreur de superficie}{propagation}
344 +Soit $\hat S = S\,(1 + e)$ la superficie mesurée, où $e$ est une erreur relative d'espérance nulle et d'écart-type $\sigma_e$, et soit $\hat V = V(\hat S)$ la valeur calculée avec cette mesure selon l'\cref{eq:12:modele}. Au premier ordre,
345 +\begin{equation}\label{eq:12:delta}
346 +\hat V - V \approx \frac{\partial V}{\partial S}\,(\hat S - S) = \beta\,V\,e, \qquad \sigma_V \approx \abs{\frac{\partial V}{\partial S}}\,\sigma_S = \beta\,V\,\sigma_e,
347 +\end{equation}
348 +où $\sigma_S = S\,\sigma_e$ est l'écart-type de la superficie mesurée. L'erreur relative sur la valeur est donc l'erreur relative sur la superficie multipliée par l'élasticité $\beta$. L'effet exact d'une erreur $e$ est
349 +\begin{equation}\label{eq:12:exact}
350 +\frac{\hat V - V}{V} = (1 + e)^{\beta} - 1 = \beta e + \frac{\beta(\beta - 1)}{2}\,e^{2} + \cdots,
351 +\end{equation}
352 +et, pour $0 < \beta < 1$, il est légèrement inférieur à $\beta e$ pour une erreur positive et légèrement supérieur en valeur absolue pour une erreur négative : la fonction $V(S)$ est concave.
353 +\end{proposition}
354 +\begin{proof}
355 +Le développement de Taylor de $V(S(1+e))$ autour de $e = 0$ donne $V + V'(S)\,Se + \tfrac12 V''(S)\,S^2 e^2 + \cdots$ ; avec $V'(S) = \beta V/S$ et $V''(S) = \beta(\beta - 1)V/S^2$, on obtient \eqref{eq:12:exact}, dont le terme du premier ordre est \eqref{eq:12:delta}. L'écart-type suit de $\Var[\beta V e] = \beta^2 V^2 \sigma_e^2$ au premier ordre, ce qui est la méthode delta appliquée à la fonction $S \mapsto V(S)$. Le signe du terme du second ordre est celui de $\beta(\beta-1)$, négatif pour $0 < \beta < 1$.
356 +\end{proof}
357 +
358 +La proposition contient une leçon pratique immédiate. L'intuition du praticien est de multiplier l'erreur de superficie par le prix au mètre carré du marché : une maison « à \parmsq{3866} » mesurée avec \msq{8} de trop paraît surévaluée de \dollars{31000}. Ce raisonnement surestime l'effet d'un facteur $1/\beta$, soit près du double pour $\beta = 0{,}54$, parce que le prix moyen incorpore des composantes de valeur qui ne dépendent pas de la superficie. L'erreur de valeur réelle est le produit de l'erreur de superficie par le prix \emph{marginal}, et celui-ci se lit dans le coefficient d'un modèle hédonique ou dans un ajustement de superficie extrait du marché (\cref{ch:17}), jamais dans un prix moyen.
359 +
360 +\begin{exemple}{Effet d'une erreur de 5 \% sur la valeur du sujet du cas 1}{erreur}
361 +Le modèle hédonique de référence (\texttt{traite.cas1.hedonique}) donne $\beta = 0{,}539$ avec un écart-type robuste de 0,013, et la valeur prédite du sujet, corrigée du biais de retransformation, est $V = \dollars{637953}$ pour $S = \msq{165}$. Le prix marginal du mètre carré vaut, par l'\cref{eq:12:derivee},
362 +\begin{equation}\label{eq:12:derivee-cas1}
363 +\frac{\partial V}{\partial S} = 0{,}539 \times \frac{\dollars{637953}}{\msq{165}} = \parmsq{2084},
364 +\end{equation}
365 +contre un prix moyen de \parmsq{3866} : le rapport des deux est exactement $\beta$.
366 +
367 +Une erreur de mesure de \pct{5}, soit \msq{8.25}, produit par l'\cref{eq:12:delta} une erreur de valeur de $2\,084 \times 8{,}25 = \dollars{17195}$, soit \pct{2.70} de la valeur. L'effet exact de l'\cref{eq:12:exact} est de $+\dollars{17002}$ ($+\pct{2.67}$) si la superficie est surestimée et de $-\dollars{17398}$ ($-\pct{2.73}$) si elle est sous-estimée ; l'approximation linéaire est exacte à 1 \% près de l'effet, ce qui est largement suffisant. Le calcul naïf au prix moyen aurait donné \dollars{31898}, presque le double. Si l'on traite l'erreur de mesure comme aléatoire avec $\sigma_e = \pct{5}$, l'écart-type induit sur la valeur est de \dollars{17195}, à comparer à l'écart-type résiduel du modèle, environ \pct{8.3} du prix, soit \dollars{53000} : une erreur de mesure de 5 \% ajoute à l'incertitude de la prédiction, mais elle ne la domine pas. Pour une erreur de \pct{10}, l'effet atteint $+\pct{5.27}$ ou $-\pct{5.52}$, soit environ \dollars{34000} ; le \cref{tab:12:sensibilite} et la \cref{fig:12:erreur} détaillent la gamme.
368 +\end{exemple}
369 +
370 +\begin{table}[tbp]
371 +\caption{Sensibilité de la valeur du sujet du cas 1 (\dollars{637953}, \msq{165}, $\beta = 0{,}539$) à une erreur sur la superficie : approximation linéaire, effet exact et calcul naïf au prix moyen.}\label{tab:12:sensibilite}
372 +\centering\small
373 +\begin{tabular}{@{}S[table-format=-2.0] S[table-format=-2.2] S[table-format=-1.2] S[table-format=-6.0] S[table-format=-1.2] S[table-format=-6.0] S[table-format=-6.0]@{}}
374 +\toprule
375 +{Erreur sur $S$ (\%)} & {$\Delta S$ (m\textsuperscript{2})} & {Linéaire (\%)} & {Linéaire (\$)} & {Exact (\%)} & {Exact (\$)} & {Naïf, $V/S$ (\$)} \\
376 +\midrule
377 +-10 & -16.50 & -5.39 & -34390 & -5.52 & -35224 & -63795 \\
378 +-5 & -8.25 & -2.70 & -17195 & -2.73 & -17398 & -31898 \\
379 +-2 & -3.30 & -1.08 & -6878 & -1.08 & -6910 & -12759 \\
380 +2 & 3.30 & 1.08 & 6878 & 1.07 & 6847 & 12759 \\
381 +5 & 8.25 & 2.70 & 17195 & 2.67 & 17002 & 31898 \\
382 +10 & 16.50 & 5.39 & 34390 & 5.27 & 33634 & 63795 \\
383 +\bottomrule
384 +\end{tabular}
385 +\tabsource{\synth{\texttt{analysis/python/cases/ch12\_mesurage.py}, fonction \texttt{propagation}} ; modèle \texttt{traite.cas1.hedonique}.}
386 +\end{table}
387 +
388 +\begin{figure}[tbp]
389 +\centering
390 +\includegraphics[width=\linewidth]{ch12/ch12-fig-erreur-valeur.pdf}
391 +\caption{Propagation d'une erreur de superficie sur la valeur du sujet du cas 1 : (a) la courbe $V(S) = V_0 (S/S_0)^{\beta}$ et sa tangente en \msq{165}, avec l'effet d'une erreur de ±5 \% (bande) ; (b) erreur relative sur la valeur en fonction de l'erreur relative sur la superficie, selon l'effet exact, l'approximation linéaire $\beta e$ et le calcul proportionnel au prix moyen. Le point isolé est le biais d'un sujet mesuré en aire brute (\msq{190}) comparé à des ventes mesurées en superficie habitable.}\label{fig:12:erreur}
392 +\figsource{\synth{script \texttt{analysis/python/figures/ch12\_figures.py}, graine 20261031}.}
393 +\end{figure}
394 +
395 +\subsection{Le mélange de conventions : une erreur systématique}
396 +
397 +L'erreur de mesure aléatoire de quelques pour cent est bénigne au regard de l'erreur de convention, qui est systématique et beaucoup plus grande. Supposons qu'un modèle hédonique ou une grille de comparables ait été construit avec des superficies habitables, et que la superficie du sujet soit tirée du rôle, donc en aire brute des étages. Le sujet entre dans le calcul avec $S_{\text{brute}}$ au lieu de $S_{\text{hab}}$, et l'\cref{eq:12:modele} donne un biais de
398 +\begin{equation}\label{eq:12:melange}
399 +\ln \hat V - \ln V = \beta \ln \frac{S_{\text{brute}}}{S_{\text{hab}}}, \qquad \frac{\hat V}{V} = \left(\frac{S_{\text{brute}}}{S_{\text{hab}}}\right)^{\beta}.
400 +\end{equation}
401 +Pour le sujet du cas 1, le rapport des deux superficies est $190{,}08/165{,}0 = 1{,}152$ ; le biais vaut $1{,}152^{0{,}539} - 1 = +\pct{7.93}$, soit $+\dollars{50573}$. L'erreur inverse, un sujet mesuré en superficie habitable comparé à des ventes dont les superficies viennent du rôle, produit un biais de $-\pct{7.35}$, soit $-\dollars{46858}$. Ces montants sont trois fois ceux d'une erreur de mesure de 5 \%, et ils ne se compensent pas : toutes les évaluations faites avec la même confusion sont biaisées dans le même sens. Le point isolé de la \cref{fig:12:erreur}(b) les situe par rapport aux erreurs aléatoires. Le remède est purement documentaire : la source et la convention de chaque superficie, celle du sujet comme celle de chaque comparable, sont notées dans la grille, et toute superficie d'une autre convention est convertie avant usage, par un plan ou, à défaut, par un ratio déclaré comme celui de l'\cref{eq:12:murs}.
402 +
403 +\subsection{Les erreurs sur les comparables et la variance combinée}
404 +
405 +Dans la méthode de comparaison, la superficie intervient deux fois : celle du sujet et celle de chaque comparable, par l'ajustement de superficie. Avec le modèle multiplicatif retenu par l'ouvrage pour dériver les ajustements du marché (\cref{ch:17}), l'ajustement de superficie appliqué au comparable $j$ vaut
406 +\begin{equation}\label{eq:12:ajustement}
407 +A_{j} = P_j \left[\left(\frac{S_s}{S_j}\right)^{\beta} - 1\right] \approx \beta\, P_j\, \frac{S_s - S_j}{S_j},
408 +\end{equation}
409 +et une erreur $\Delta S_j$ sur la superficie du comparable fausse l'ajustement d'environ $-\beta P_j \Delta S_j / S_j$. Le comparable G0404 du \cref{ch:16}, vendu \dollars{506500} avec \msq{160} habitables, appelle pour le sujet de \msq{165} un ajustement de $+\dollars{8472}$ ; si sa superficie avait été enregistrée à \msq{170} par erreur, l'ajustement deviendrait $-\dollars{8086}$, une erreur de \dollars{16558} sur ce seul comparable, du même ordre qu'une erreur de 5 \% sur le sujet. L'approximation linéaire donne \dollars{17065}.
410 +
411 +Lorsque les erreurs relatives de mesure du sujet, $e_s$, et des $n$ comparables, $e_j$, sont indépendantes, de moyenne nulle et d'écarts-types $\sigma_s$ et $\sigma_c$, et que l'indication est la moyenne à poids égaux des prix ajustés, le logarithme de l'indication subit une erreur $\beta(e_s - \bar e)$ où $\bar e$ est la moyenne des $e_j$, d'où
412 +\begin{equation}\label{eq:12:variance}
413 +\frac{\sigma_{\hat V}}{\hat V} \approx \beta \sqrt{\sigma_s^{2} + \frac{\sigma_c^{2}}{n}} .
414 +\end{equation}
415 +La part du sujet dans la variance est $\sigma_s^2 / (\sigma_s^2 + \sigma_c^2/n)$ : avec des erreurs de même ampleur et cinq comparables, elle atteint $5/6$. Le \cref{tab:12:variance} chiffre quelques scénarios pour le sujet du cas 1 ; avec $\sigma_s = \sigma_c = \pct{2}$, l'écart-type induit sur l'indication est de \pct{1.18}, soit \dollars{7535}, dont \dollars{6878} viennent du sujet seul. La conclusion opérationnelle est nette : les erreurs sur les comparables se compensent partiellement en moyenne, celle sur le sujet ne se compense jamais. L'effort de mesure doit porter d'abord sur le sujet, que l'évaluateur a de toute façon l'obligation d'inspecter ; pour les comparables, une vérification de convention et de vraisemblance suffit souvent, l'effort de mesure étant réservé aux comparables les plus pondérés.
416 +
417 +\begin{table}[tbp]
418 +\caption{Écart-type de l'indication par comparaison imputable aux erreurs de mesure des superficies, sujet du cas 1 (\dollars{637953}, $\beta = 0{,}539$, cinq comparables à poids égaux).}\label{tab:12:variance}
419 +\centering\small
420 +\begin{tabular}{@{}l S[table-format=1.0] S[table-format=1.0] S[table-format=1.3] S[table-format=5.0] S[table-format=3.1]@{}}
421 +\toprule
422 +Scénario & {$\sigma_s$ (\%)} & {$\sigma_c$ (\%)} & {$\sigma_{\hat V}/\hat V$ (\%)} & {$\sigma_{\hat V}$ (\$)} & {Part du sujet (\%)} \\
423 +\midrule
424 +Sujet et comparables mesurés à 2 \% & 2 & 2 & 1.181 & 7535 & 83.3 \\
425 +Sujet seul entaché d'erreur & 2 & 0 & 1.078 & 6878 & 100.0 \\
426 +Comparables seuls entachés d'erreur & 0 & 2 & 0.482 & 3076 & 0.0 \\
427 +Sujet mal mesuré (5 \%), comparables à 2 \% & 5 & 2 & 2.738 & 17468 & 96.9 \\
428 +\bottomrule
429 +\end{tabular}
430 +\tabsource{\synth{\texttt{analysis/python/cases/ch12\_mesurage.py}, fonction \texttt{variance\_combinee}} ; \cref{eq:12:variance}.}
431 +\end{table}
432 +
433 +\subsection{L'erreur de mesure dans les bases de ventes : l'atténuation du coefficient}
434 +
435 +Les erreurs aléatoires de mesure des comparables se compensent dans une grille ; elles ne se compensent pas dans l'estimation d'un modèle hédonique, où elles produisent un biais systématique bien connu de l'économétrie. Si la superficie observée est $\ln \hat S = \ln S + u$, avec une erreur $u$ indépendante de la vraie superficie et du prix, la régression du logarithme du prix sur $\ln \hat S$ estime un coefficient atténué.
436 +
437 +\begin{proposition}{Atténuation du coefficient de la superficie}{attenuation}
438 +Dans le modèle \eqref{eq:12:modele} estimé par moindres carrés avec une superficie mesurée $\ln \hat S = \ln S + u$, où $u$ est une erreur classique de variance $\sigma_u^2$, indépendante de $\ln S$, des autres régresseurs et du terme d'erreur du modèle, le coefficient estimé converge vers
439 +\begin{equation}\label{eq:12:attenuation}
440 +\operatorname{plim} \hat\beta = \lambda\,\beta, \qquad \lambda = \frac{\sigma_{\tilde e}^{2}}{\sigma_{\tilde e}^{2} + \sigma_u^{2}} \in (0, 1),
441 +\end{equation}
442 +où $\sigma_{\tilde e}^{2}$ est la variance de la partie de $\ln S$ qui n'est pas expliquée par les autres régresseurs du modèle. Le coefficient est biaisé vers zéro, et le biais est d'autant plus grand que l'erreur de mesure est importante relativement à la variabilité propre de la superficie dans l'échantillon.
443 +\end{proposition}
444 +\begin{proof}
445 +En notant $\tilde e$ le résidu de la régression auxiliaire de $\ln S$ sur les autres régresseurs, le théorème de Frisch--Waugh ramène l'estimateur de $\beta$ à la régression simple de $\ln P$ sur $\tilde e + u$. Sa limite en probabilité est $\Cov(\ln P, \tilde e + u)/\Var(\tilde e + u) = \beta\,\sigma_{\tilde e}^2 / (\sigma_{\tilde e}^2 + \sigma_u^2)$, puisque $u$ est non corrélé avec $\ln P$ une fois les autres régresseurs pris en compte, et que $\Var(\tilde e + u) = \sigma_{\tilde e}^2 + \sigma_u^2$ par indépendance. Le traitement général des erreurs sur les variables se trouve chez \textcite[chap.~4]{wooldridge2010}.
446 +\end{proof}
447 +
448 +Le jeu du cas 1 permet d'illustrer la proposition par simulation. Dans les 600 ventes, l'écart-type du logarithme de la superficie habitable est de 0,249, et la variance de sa partie non expliquée par les autres régresseurs vaut $\sigma_{\tilde e}^2 = 0{,}0609$. En ajoutant au logarithme de la superficie une erreur gaussienne d'écart-type $\sigma_u$ et en réestimant le modèle 200 fois pour chaque valeur de $\sigma_u$, on obtient les coefficients du \cref{tab:12:attenuation} et de la \cref{fig:12:attenuation}. Une erreur de 5 \% ramène le coefficient de 0,539 à 0,518 ; une erreur de 10 \%, à 0,465 ; une erreur de 20 \%, comparable à un mélange non contrôlé de superficies brutes et habitables dans la base, à 0,328, soit une perte de 40 \% du coefficient. Les simulations suivent la courbe théorique à l'écart-type d'échantillonnage près.
449 +
450 +\begin{table}[tbp]
451 +\caption{Atténuation du coefficient de la superficie dans le modèle hédonique du cas 1 lorsqu'une erreur de mesure d'écart-type $\sigma_u$ affecte le logarithme de la superficie (200 réplications par niveau, graine 20261031).}\label{tab:12:attenuation}
452 +\centering\small
453 +\begin{tabular}{@{}S[table-format=1.2] S[table-format=1.3] S[table-format=1.3] S[table-format=1.3] S[table-format=1.4] S[table-format=6.0] S[table-format=6.0]@{}}
454 +\toprule
455 +{$\sigma_u$} & {$\lambda$ théorique} & {$\lambda\beta$} & {$\hat\beta$ moyen} & {Écart-type de $\hat\beta$} & {$\hat V$ sujet, 165 m\textsuperscript{2} (\$)} & {$\hat V$ maison de 120 m\textsuperscript{2} (\$)} \\
456 +\midrule
457 +0.00 & 1.000 & 0.539 & 0.539 & 0.0000 & 637953 & 537321 \\
458 +0.02 & 0.994 & 0.536 & 0.536 & 0.0020 & 637701 & 537701 \\
459 +0.05 & 0.961 & 0.518 & 0.518 & 0.0047 & 636467 & 539647 \\
460 +0.10 & 0.859 & 0.463 & 0.465 & 0.0083 & 631538 & 544589 \\
461 +0.15 & 0.730 & 0.394 & 0.396 & 0.0101 & 627003 & 552719 \\
462 +0.20 & 0.604 & 0.325 & 0.328 & 0.0095 & 622004 & 560306 \\
463 +\bottomrule
464 +\end{tabular}
465 +\tabsource{\synth{\texttt{analysis/python/cases/ch12\_mesurage.py}, fonction \texttt{attenuation}} ; $\sigma_{\tilde e}^2 = 0{,}0609$ ; estimation par \texttt{traite.hedonique.mco}.}
466 +\end{table}
467 +
468 +\begin{figure}[tbp]
469 +\centering
470 +\includegraphics[width=\linewidth]{ch12/ch12-fig-attenuation.pdf}
471 +\caption{Erreur de mesure et modèle hédonique du cas 1 : (a) le coefficient estimé de la superficie décroît avec l'écart-type de l'erreur de mesure, conformément à l'\cref{eq:12:attenuation} (courbe) ; les points sont les moyennes de 200 réestimations, avec leur écart-type ; (b) la valeur prédite d'une petite maison augmente et celle du sujet diminue : le gradient prix-taille s'aplatit et les ajustements de superficie dérivés du modèle sont sous-estimés.}\label{fig:12:attenuation}
472 +\figsource{\synth{script \texttt{analysis/python/figures/ch12\_figures.py}, graine 20261031}.}
473 +\end{figure}
474 +
475 +Les conséquences pratiques sont de deux ordres. Pour l'évaluation individuelle, un coefficient atténué sous-estime les ajustements de superficie dérivés du modèle (\cref{ch:17}) et déplace les prédictions : la maison de \msq{120} est surévaluée et le sujet de \msq{165} sous-évalué, et l'écart croît avec l'éloignement de la superficie moyenne de l'échantillon, comme le montre le volet (b) de la \cref{fig:12:attenuation}. Pour l'évaluation de masse, la norme de l'IAAO sur l'évaluation de masse insiste sur la qualité et l'uniformité des données descriptives, et en particulier des superficies, comme condition première de l'équité du rôle \parencite{iaaomass2025} ; \textcite{gloudemansAlmy2011} montrent que la révision périodique des mesures de bâtiments est l'un des investissements les plus rentables d'un service d'évaluation, précisément parce qu'elle restaure le gradient prix-taille que l'erreur de mesure aplatit. La parade méthodologique, au-delà de la qualité des données, consiste à utiliser des variables instrumentales lorsqu'une seconde mesure indépendante existe, par exemple la superficie du rôle comme instrument de la superficie déclarée, ou à corriger le coefficient par un facteur de fiabilité estimé sur un sous-échantillon remesuré ; le \cref{ch:14} revient sur la détection des superficies aberrantes et le \cref{ch:18} sur la spécification du modèle.
476 +
477 +\section{Photogrammétrie, lidar et données du rôle}\label{sec:12:technologies}
478 +
479 +\subsection{Instruments et méthodes de relevé}
480 +
481 +Le relevé traditionnel au ruban a cédé la place au télémètre laser, qui mesure une distance par le temps de vol ou la phase d'un faisceau et permet de relever les cotes extérieures d'un bâtiment depuis le sol, ou les cotes intérieures d'une pièce depuis un angle. Sa précision instrumentale dépasse de loin les besoins de l'évaluation ; les erreurs viennent de l'opérateur, qui vise un parement plutôt qu'un mur, oublie un décroché, mesure une pièce mansardée sur toute sa largeur ou confond la face du revêtement et celle de la maçonnerie, et surtout du passage des cotes à la superficie, qui exige un croquis complet et une convention explicite. Les appareils de relevé d'intérieur qui combinent télémètre, centrale inertielle et caméra produisent un plan d'étage en quelques minutes ; leur résultat est une superficie mesurée à la face intérieure des cloisons, pièce par pièce, c'est-à-dire une superficie nette, qu'il faut majorer des cloisons et des murs pour obtenir une superficie habitable au sens de l'ouvrage ou une aire brute au sens du MEFQ. Rapporter directement la somme des pièces comme « superficie habitable » sous-estime celle-ci de plusieurs pour cent ; l'exemple du sujet montre un écart de 3 \% entre nette et habitable, qui serait plus grand dans une maison cloisonnée.
482 +
483 +La photogrammétrie reconstitue la géométrie d'un objet à partir de photographies prises sous des angles différents ; appliquée à un bâtiment, depuis le sol ou depuis un drone, elle produit un modèle tridimensionnel dont on tire les dimensions extérieures et l'aire au sol. Le lidar aérien ou terrestre mesure directement des millions de points par balayage laser et fournit, pour un territoire entier, l'empreinte et la hauteur des bâtiments ; les nuages de points lidar sont désormais disponibles pour une large partie du Québec habité et servent, entre autres, à la mise à jour des rôles et à la cartographie des zones inondables (\cref{ch:38,ch:43}). La Loi sur les arpenteurs-géomètres mentionne expressément la méthode photogrammétrique parmi les procédés par lesquels l'arpenteur-géomètre exerce sa profession, ce qui rappelle que la technologie ne change pas la responsabilité : la mesure issue d'un modèle photogrammétrique ou lidar est une mesure extérieure, hors tout, dont la précision dépend de la résolution des données et de la qualité de la reconstitution, et qui ne distingue ni les niveaux, ni les sous-sols, ni les espaces finis. Elle fournit une aire au sol ; elle ne fournit pas une aire des étages sans une hypothèse sur le nombre de niveaux, ni une superficie habitable sans un relevé intérieur. L'ouvrage ne donne pas de chiffre de précision pour ces technologies, faute de source publique vérifiée qui en fournisse pour le contexte québécois ; la règle est de traiter toute superficie issue d'un relevé à distance comme une aire brute à confirmer par des cotes de contrôle au sol.
484 +
485 +\subsection{Les données du rôle comme source de superficies}
486 +
487 +Les données ouvertes des rôles d'évaluation diffusées par le ministère des Affaires municipales et de l'Habitation sous licence Creative Commons Attribution 4.0 couvrent l'ensemble des municipalités, avec les cadastres, les noms et les adresses des propriétaires caviardés et une interdiction expresse de réidentification \parencite{dqroles} ; la Ville de Montréal diffuse pour sa part ses unités d'évaluation avec la superficie du terrain, la superficie du bâtiment, le nombre d'étages hors sol, le nombre de logements et l'année de construction. Ces données sont une source de superficies à grande échelle, homogène dans sa convention puisqu'elle est celle du MEFQ, et donc particulièrement utile pour un modèle hédonique estimé sur un territoire entier (\cref{ch:18}) ou pour vérifier la vraisemblance des superficies déclarées dans une base de ventes (\cref{ch:14}). Elles ont trois limites que l'évaluateur doit garder à l'esprit. La convention est l'aire brute des étages, non la superficie habitable : toute comparaison avec des fiches de courtage exige une conversion. La date de la mesure est inconnue : un agrandissement récent, une finition de sous-sol ou une démolition peuvent n'être pas encore reflétés. Et la mesure a été faite aux fins de l'équité du rôle, dans un processus de masse, avec les tolérances de ce processus. L'usage prudent consiste à employer les superficies du rôle comme variable de contrôle et comme instrument, au sens de la \cref{sec:12:erreurs}, plutôt que comme mesure de référence du sujet.
488 +
489 +\begin{pratique}[Protocole de mesurage du sujet]
490 +Un dossier de mesurage défendable comprend : le croquis coté de chaque niveau avec l'indication de la face mesurée (interne ou externe) ; l'instrument utilisé et la date ; les cotes de contrôle croisées avec le certificat de localisation ou le rôle, et l'explication de tout écart supérieur à 2 \% ; le calcul de l'aire au sol, de l'aire des étages et de la superficie habitable, chacune nommée ; le traitement déclaré du sous-sol, du garage, des trémies et des espaces de hauteur réduite ; et, pour chaque comparable, la source et la convention de la superficie retenue, avec la conversion appliquée s'il y a lieu. Lorsque le sujet ne peut être mesuré, la superficie retenue et sa provenance sont énoncées comme une hypothèse du rapport.
491 +\end{pratique}
492 +
493 +\begin{erreurs}
494 +\begin{itemize}
495 +\item \emph{Mélanger les conventions.} Un sujet mesuré en aire brute du rôle comparé à des ventes en superficie habitable est surévalué d'environ 8 \% dans le cas 1 (\dollars{50000}) ; l'inverse le sous-évalue de 7 \%. C'est l'erreur la plus coûteuse du chapitre, et elle est systématique.
496 +\item \emph{Chiffrer une erreur de superficie au prix moyen.} L'effet d'une erreur de superficie sur la valeur est le prix \emph{marginal}, $\beta V/S$, non le prix moyen $V/S$ ; le calcul au prix moyen exagère l'effet d'un facteur $1/\beta$, près de deux pour les maisons.
497 +\item \emph{Compter le sous-sol fini dans la superficie habitable sans le dire}, ou comparer une fiche qui le compte à une fiche qui ne le compte pas.
498 +\item \emph{Additionner les pièces d'un relevé d'intérieur et appeler le résultat « superficie habitable »} : c'est une superficie nette, inférieure de plusieurs pour cent.
499 +\item \emph{Reporter la superficie d'un certificat de localisation ancien ou des plans de construction} sans vérifier les agrandissements et les finitions postérieurs.
500 +\item \emph{Convertir deux fois, ou arrondir les cotes avant de convertir} : deux pour cent d'écart peuvent naître d'un « 26 par 40 pieds » approximatif.
501 +\item \emph{Négliger la mesure du sujet au profit de celle des comparables} : dans une grille de cinq comparables, le sujet porte les cinq sixièmes de la variance due aux erreurs de mesure.
502 +\item \emph{Estimer un modèle hédonique sur des superficies de provenances mêlées} : le coefficient de la superficie est atténué, les petites maisons sont surévaluées et les grandes sous-évaluées.
503 +\end{itemize}
504 +\end{erreurs}
505 +
506 +\begin{limites}
507 +\begin{itemize}
508 +\item Les définitions du MEFQ sont citées d'après la partie 2C du Manuel, dont les pages de normes de mesurage consultées portent un pied de page « 2022 » dans le PDF de l'édition 2026 ; le traitement détaillé des garages attachés, des vérandas et des annexes partiellement chauffées n'a pas été dépouillé et le chapitre ne s'y prononce pas.
509 +\item Les usages du courtage en matière de superficie sont décrits comme des usages, non comme une norme : aucune règle publique de mesurage propre au courtage n'a été vérifiée, et les formulaires obligatoires consultés ne portent pas sur les dimensions.
510 +\item La norme ANSI Z765-2021 est décrite d'après une copie diffusée par un service d'inscriptions immobilières, non d'après le document de l'éditeur ; son statut est partiellement vérifié et elle n'est pas citée comme référence bibliographique. Les exigences des agences hypothécaires américaines à son égard, relayées par des sources secondaires, ne sont pas reprises.
511 +\item Les équivalences de l'arpent et du pied français proviennent de sources secondaires ; devant un titre ancien, seule la contenance du plan cadastral ou du certificat de localisation fait foi.
512 +\item Le plan coté du sujet est une reconstitution pédagogique ; l'épaisseur des murs, le tracé des cloisons, la trémie et l'implantation sont des hypothèses, et la coïncidence de la superficie habitable calculée avec les \msq{165} du dossier résulte de ces choix. Le garage attaché n'apparaît pas comme poste distinct du devis du \cref{ch:21}.
513 +\item La propagation d'erreur repose sur le modèle hédonique synthétique du cas 1 ; l'élasticité de 0,539 est une propriété du jeu de données généré et ne doit pas être transposée à un marché réel sans estimation. La variance combinée de l'\cref{eq:12:variance} suppose des erreurs indépendantes et des poids égaux ; des erreurs corrélées entre comparables, par exemple une même source de superficies, ne se compensent pas.
514 +\item Aucun chiffre de précision n'est donné pour la photogrammétrie et le lidar, faute de source publique vérifiée pour le contexte québécois.
515 +\end{itemize}
516 +\end{limites}
517 +
518 +\begin{synthese}
519 +\begin{itemize}
520 +\item Une superficie n'est une donnée que si sa convention et sa source sont connues : aire au sol et aire des étages du MEFQ (face externe, étage si le plancher est à moins de 0,4 m sous le sol), superficie habitable (face interne, hors sol, hors trémies), superficie nette (cloisons déduites), superficie habitable avec sous-sol fini.
521 +\item Les conversions sont exactes par définition, $\qty{1}{\piedcarre} = \qty{0.09290304}{\metre\squared}$ et $\qty{1}{\metre\squared} = \qty{10.7639}{\piedcarre}$ ; les erreurs viennent des arrondis de cotes et des doubles conversions, non du facteur.
522 +\item Le MEFQ est la seule norme de mesurage obligatoire, et seulement pour le rôle ; le courtage n'applique pas de norme publique vérifiée ; la norme américaine ANSI Z765 montre ce qu'une convention complète doit trancher : sous-sol, garage, hauteur, trémies.
523 +\item Le certificat de localisation, acte exclusif de l'arpenteur-géomètre régi par une norme de pratique, fournit la contenance du lot et les dimensions hors tout des bâtiments ; le plan cadastral présumé exact est la référence légale de la contenance ; aucun de ces documents ne donne la superficie habitable.
524 +\item L'effet d'une erreur de superficie sur la valeur est $\sigma_V \approx \beta V \sigma_S / S$ : avec $\beta = 0{,}539$, une erreur de 5 \% sur le sujet du cas 1 déplace la valeur d'environ \dollars{17000} (2,7 \%), soit la moitié de ce que donnerait le prix moyen ; un mélange de conventions brute/habitable la déplace de \dollars{50000} (8 \%).
525 +\item Dans une grille, l'erreur sur le sujet domine (cinq sixièmes de la variance pour cinq comparables) ; dans une base de ventes, l'erreur de mesure atténue le coefficient de la superficie d'un facteur $\lambda = \sigma_{\tilde e}^2/(\sigma_{\tilde e}^2 + \sigma_u^2)$ et aplatit le gradient prix-taille.
526 +\item Photogrammétrie, lidar et données du rôle fournissent des aires brutes extérieures à grande échelle, utiles comme contrôle et comme instrument, jamais comme mesure de référence du sujet sans cotes de contrôle au sol.
527 +\end{itemize}
528 +\end{synthese}
529 +
530 +\section*{Exercices}
531 +
532 +\begin{exercice}[1]{Conversions et aires brutes}{ex:12:1}
533 +Un bungalow mesure 28 pieds sur 42 pieds hors tout, avec un étage hors sol et un sous-sol dont le plancher est à 1,5 mètre sous le niveau moyen du sol. Calculez l'aire au sol et le périmètre au sol en pieds puis en mètres, l'aire des étages au sens du MEFQ, et la superficie en mètres carrés d'un cottage de mêmes dimensions à deux étages. Expliquez pourquoi le sous-sol n'entre pas dans l'aire des étages et ce qui changerait si le plancher du sous-sol était à 0,3 mètre sous le sol.
534 +\end{exercice}
535 +
536 +\begin{exercice}[1]{Classer les espaces}{ex:12:2}
537 +Pour chacun des espaces suivants, indiquez s'il est compris dans l'aire des étages du MEFQ, dans la superficie habitable au sens de l'ouvrage et dans l'aire finie hors sol de la norme ANSI Z765 : (a) un garage intégré au rez-de-chaussée ; (b) un sous-sol fini dont le plancher est à 1,2 mètre sous le sol ; (c) une véranda trois saisons non chauffée ; (d) une chambre mansardée dont la moitié de la surface a 2,2 mètres de hauteur et dont une bande de 1,2 mètre de hauteur borde le mur ; (e) la trémie d'un escalier ouvert ; (f) une mezzanine ouverte sur le salon. Justifiez chaque réponse par la règle applicable.
538 +\end{exercice}
539 +
540 +\begin{exercice}[2]{De l'aire brute à la superficie habitable}{ex:12:3}
541 +Un cottage à deux étages mesure 11,00 sur 9,00 mètres hors tout ; ses murs extérieurs ont 0,30 mètre d'épaisseur et la trémie de l'escalier mesure \msq{3.2}. Calculez l'aire brute et le périmètre d'un niveau, l'aire intérieure d'un niveau par l'\cref{eq:12:murs} en vérifiant le résultat par le calcul direct, puis la superficie habitable des deux niveaux. Quel est le rapport entre l'aire des étages et la superficie habitable ? Comparez-le à celui du sujet du cas 1 et expliquez la différence par la forme et l'épaisseur des murs.
542 +\end{exercice}
543 +
544 +\begin{exercice}[2]{Propagation d'une erreur de mesure}{ex:12:4}
545 +Une maison est évaluée à \dollars{520000} pour une superficie habitable de \msq{140}, dans un marché où l'élasticité de la valeur par rapport à la superficie est de 0,55. La superficie a été mesurée avec une incertitude de 3 \%. Calculez le prix marginal du mètre carré, l'écart-type induit sur la valeur par la \cref{prop:propagation}, l'effet exact d'une erreur de $+3$ \% et de $-3$ \%, et l'erreur qu'aurait donnée un calcul au prix moyen. Commentez l'écart entre les deux derniers résultats.
546 +\end{exercice}
547 +
548 +\begin{exercice}[3]{Mélange de conventions dans une grille}{ex:12:5}
549 +Un évaluateur retient comme superficie du sujet l'aire des étages du rôle, \msq{205}, alors que la superficie habitable du sujet est de \msq{178} et que les superficies de ses comparables sont des superficies habitables. Avec l'élasticité du cas 1 ($\beta = 0{,}539$), calculez le biais relatif de l'indication par l'\cref{eq:12:melange}. Pour un comparable vendu \dollars{560000} avec \msq{172} habitables, calculez l'ajustement de superficie correct par l'\cref{eq:12:ajustement} et celui qui résulte de l'erreur, puis l'écart entre les deux. Rédigez en 150 mots la note de dossier qui documente la correction et la convention retenue pour chaque superficie de la grille.
550 +\end{exercice}
551 +
552 +\begin{exercice}[3]{Atténuation et correction}{ex:12:6}
553 +Dans la base de ventes du cas 1, la variance de la partie du logarithme de la superficie non expliquée par les autres régresseurs est $\sigma_{\tilde e}^2 = 0{,}0609$. On apprend que les superficies proviennent de fiches de courtage dont l'erreur de mesure a un écart-type de 8 \% en logarithme. Calculez le facteur d'atténuation $\lambda$ de l'\cref{eq:12:attenuation} et le coefficient que l'on s'attend à estimer si le vrai coefficient est 0,539. À l'aide du script \texttt{analysis/python/cases/ch12\_mesurage.py}, vérifiez ce résultat par simulation, puis proposez et justifiez deux stratégies de correction (seconde mesure, instrument tiré du rôle), en précisant les hypothèses que chacune requiert et leurs conséquences pour les ajustements de superficie du \cref{ch:17}.
554 +\end{exercice}
555 +
556 +\section*{Pour aller plus loin}
557 +
558 +Sur la place de la superficie dans les modèles de prix et les conséquences de sa mesure, les recensions de \textcite{sirmansMacphersonZietz2005} et de \textcite{khoshnoudSirmansZietz2023} sont le point de départ ; \textcite{malpezzi2003} discute le choix et la mesure des variables de taille, et \textcite{rosen1974} fournit le cadre théorique qui exige l'homogénéité des caractéristiques. \textcite{krauseLipscomb2016} offrent un guide pratique de préparation des données immobilières où les unités, les doublons et les conversions occupent une place centrale ; leur lecture prépare le \cref{ch:14}. Le traitement des erreurs sur les variables et du biais d'atténuation est exposé par \textcite{wooldridge2010} ; \textcite{griliches1971} en avait déjà mesuré les effets dans les premiers indices hédoniques. Pour l'évaluation de masse, la norme de l'IAAO \parencite{iaaomass2025} et le manuel de \textcite{gloudemansAlmy2011} insistent sur la qualité des données descriptives, superficies en tête, et le manuel historique de \textcite{gloudemans1999} en détaille les contrôles. Les définitions professionnelles nord-américaines se trouvent chez \textcite{appraisal2026} et dans le glossaire \textcite{aiDictionary2022} ; la terminologie québécoise est celle de \textcite{achour1992}. Enfin, la partie 2C du Manuel d'évaluation foncière du Québec \parencite{mefqpartie2} reste la référence obligée pour les conventions du rôle, et la norme de pratique relative au certificat de localisation, mentionnée dans l'encadré de la \cref{sec:12:plans}, pour la lecture des certificats.
modified manuscript/chapters/ch17.tex +1 −1
@@ -74,7 +74,7 @@ Cet ordre n'est pas une exigence normative. Les Normes de pratique professionnel
74 74
75 75 \subsection{Les ajustements de transaction autres que le temps}
76 76
77 −Quatre ajustements de transaction précèdent celui des conditions du marché, et la pratique québécoise les rencontre moins souvent qu'on ne le croit, parce que la vérification du \cref{ch:16} conduit le plus souvent à écarter la vente plutôt qu'à l'ajuster. L'ajustement de \emph{droits transmis} corrige une vente qui n'a pas porté sur la pleine propriété libre de charges : un immeuble grevé d'un bail commercial de longue durée à loyer inférieur au marché, une emphytéose, une fraction indivise ; son montant est la valeur actualisée de l'écart de droits (\cref{ch:2,ch:6}) et, pour une maison unifamiliale, il est presque toujours préférable de remplacer le comparable. L'ajustement de \emph{conditions de vente} corrige une vente qui n'a pas été sincère ou pleinement exposée ; il ne se mesure pas directement, et le seul procédé défendable est de comparer la vente suspecte à des ventes sincères de biens semblables, ce qui revient à une analyse de paires. L'ajustement de \emph{dépenses après l'achat} ajoute au prix du comparable le coût des travaux que l'acheteur savait devoir engager immédiatement et dont il a tenu compte dans son offre : un toit à refaire, une installation septique à remplacer ; il est positif du point de vue du sujet si celui-ci n'exige pas ces travaux, et le dossier doit établir, par l'historique de courtage ou l'entretien avec une partie, que le prix convenu en tenait compte. L'ajustement d'\emph{éléments non immobiliers}, enfin, retranche du prix du comparable la contrepartie des meubles et des électroménagers compris dans la vente ; la valeur déclarée dans l'acte à cet effet est souvent fixée pour des raisons fiscales et ne lie pas l'évaluateur.
77 +Quatre ajustements de transaction précèdent celui des conditions du marché, et la pratique québécoise les rencontre moins souvent qu'on ne le croit, parce que la vérification du \cref{ch:16} conduit le plus souvent à écarter la vente plutôt qu'à l'ajuster. L'ajustement de \emph{droits transmis} corrige une vente qui n'a pas porté sur la pleine propriété libre de charges : un immeuble grevé d'un bail commercial de longue durée à loyer inférieur au marché, une emphytéose, une fraction indivise ; son montant est la valeur actualisée de l'écart de droits (\cref{ch:02,ch:06}) et, pour une maison unifamiliale, il est presque toujours préférable de remplacer le comparable. L'ajustement de \emph{conditions de vente} corrige une vente qui n'a pas été sincère ou pleinement exposée ; il ne se mesure pas directement, et le seul procédé défendable est de comparer la vente suspecte à des ventes sincères de biens semblables, ce qui revient à une analyse de paires. L'ajustement de \emph{dépenses après l'achat} ajoute au prix du comparable le coût des travaux que l'acheteur savait devoir engager immédiatement et dont il a tenu compte dans son offre : un toit à refaire, une installation septique à remplacer ; il est positif du point de vue du sujet si celui-ci n'exige pas ces travaux, et le dossier doit établir, par l'historique de courtage ou l'entretien avec une partie, que le prix convenu en tenait compte. L'ajustement d'\emph{éléments non immobiliers}, enfin, retranche du prix du comparable la contrepartie des meubles et des électroménagers compris dans la vente ; la valeur déclarée dans l'acte à cet effet est souvent fixée pour des raisons fiscales et ne lie pas l'évaluateur.
78 78
79 79 L'ajustement de \emph{financement} est le seul de ces quatre qui se calcule plutôt qu'il ne se constate, et il mérite un exemple. Lorsque le vendeur consent une balance de prix de vente à un taux inférieur au marché, l'acheteur reçoit un avantage qu'il paie par un prix plus élevé ; le prix comptant équivalent est le prix convenu diminué de la valeur de cet avantage, c'est-à-dire de la différence entre le montant prêté et la valeur actualisée, au taux du marché, des paiements effectivement promis. Soit une vente de \dollars{620000} dont \dollars{150000} sont financés par le vendeur à \pct{2} pendant cinq ans, intérêts seulement payés mensuellement et capital remboursé au terme, alors que le marché exige \pct{5} pour un prêt hypothécaire de même terme, les deux taux étant des taux nominaux à composition semestrielle selon la convention canadienne. Le taux mensuel équivalent du contrat est $(1{,}01)^{1/6} - 1 = 0{,}1660$ \%, d'où un intérêt mensuel de \dollars{248.96} ; celui du marché est $(1{,}025)^{1/6} - 1 = 0{,}4124$ \%. La valeur actualisée au taux du marché des soixante intérêts et du capital vaut \dollars{130389}, de sorte que le vendeur a consenti un avantage de \dollars{19611} ; l'ajustement de financement est de $-\dollars{19611}$, soit \pct{-3.16} du prix, et le prix comptant équivalent du comparable est de \dollars{600389}. Si la balance était plutôt amortie sur vingt-cinq ans avec un terme de cinq ans, le même calcul, appliqué aux soixante mensualités et au solde dû au terme, donnerait un avantage de \dollars{18138}. Le calcul suppose que l'acheteur valorise l'avantage à sa valeur actualisée complète, ce qui n'est vrai que s'il aurait emprunté la même somme aux conditions du marché ; lorsque l'avantage dépasse quelques points de pourcentage du prix, l'incertitude de cette hypothèse justifie, là encore, de remplacer le comparable. Les fonctions \texttt{taux\_mensuel\_canadien}, \texttt{facteur\_va} et \texttt{facteur\_va\_annuite} du module \texttt{traite.finance} reproduisent ce calcul (\texttt{analysis/python/cases/ch17\_ajustements.py}, fonction \texttt{financement}).
80 80
modified manuscript/chapters/ch19.tex +122 −0
@@ -135,3 +135,125 @@ avec $d_\rho = \mathbf{e}\T\mathbf{W}\mathbf{y}/\hat\sigma^2$ et $d_\lambda = \m
135 135 \begin{pratique}
136 136 Le diagnostic spatial d'un modèle hédonique tient en trois gestes, qui devraient figurer au dossier de tout modèle utilisé pour dériver des ajustements ou des indications de valeur : la carte des résidus sur les coordonnées des ventes, qui montre à l'œil les grappes de sur- et de sous-évaluation ; la statistique de Moran des résidus avec sa valeur $z$, pour une matrice de voisinage déclarée ; et les quatre tests LM, qui orientent vers un remède. Un modèle dont les résidus sont spatialement corrélés n'est pas inutilisable, mais ses erreurs-types sont trompeuses et sa prédiction pour un sujet donné peut être améliorée par l'information des ventes voisines, ce que la \cref{sec:19:krigeage} montre.
137 137 \end{pratique}
138 +
139 +\section{Les modèles autorégressifs spatiaux : SAR, SEM et SDM}\label{sec:19:modeles}
140 +
141 +\subsection{Trois façons d'introduire le voisinage}
142 +
143 +Le \motcle{modèle à décalage spatial} (SAR, \emph{spatial autoregressive} ou \emph{spatial lag model}) fait dépendre le prix d'une maison de la moyenne pondérée des prix de ses voisines :
144 +\begin{equation}\label{eq:19:sar}
145 +\mathbf{y} = \rho\,\mathbf{W}\mathbf{y} + \mathbf{X}\boldsymbol\beta + \boldsymbol\varepsilon, \qquad \boldsymbol\varepsilon \sim \mathcal{N}(\mathbf{0}, \sigma^2\mathbf{I}) ,
146 +\end{equation}
147 +où $\mathbf{y}$ est le vecteur des logarithmes des prix. Le paramètre $\rho$ mesure l'intensité de l'interaction ; sa forme réduite,
148 +\begin{equation}\label{eq:19:sar-reduite}
149 +\mathbf{y} = (\mathbf{I} - \rho\mathbf{W})^{-1}\mathbf{X}\boldsymbol\beta + (\mathbf{I} - \rho\mathbf{W})^{-1}\boldsymbol\varepsilon
150 += \sum_{m=0}^{\infty} \rho^m\mathbf{W}^m\left(\mathbf{X}\boldsymbol\beta + \boldsymbol\varepsilon\right),
151 +\end{equation}
152 +montre que les caractéristiques et le choc de chaque maison se propagent à ses voisines ($\mathbf{W}$), puis aux voisines de ses voisines ($\mathbf{W}^2$), avec une intensité qui décroît géométriquement. Le développement en série converge pour $\abs{\rho} < 1$ lorsque $\mathbf{W}$ est standardisée en ligne. Le SAR est le modèle naturel du troisième mécanisme de la \cref{sec:19:dependance}, l'ancrage sur les prix voisins, et il est le plus souvent invoqué dans la littérature sur les « effets de pairs » immobiliers \parencite{desrosiersDubeTheriault2011}.
153 +
154 +Le \motcle{modèle à erreur spatiale} (SEM, \emph{spatial error model}) laisse la relation entre prix et caractéristiques intacte et place la dépendance dans le terme d'erreur :
155 +\begin{equation}\label{eq:19:sem}
156 +\mathbf{y} = \mathbf{X}\boldsymbol\beta + \mathbf{u}, \qquad \mathbf{u} = \lambda\,\mathbf{W}\mathbf{u} + \boldsymbol\varepsilon, \qquad \text{d'où } \mathbf{u} = (\mathbf{I} - \lambda\mathbf{W})^{-1}\boldsymbol\varepsilon .
157 +\end{equation}
158 +La matrice de covariance de $\mathbf{u}$ vaut $\sigma^2[(\mathbf{I} - \lambda\mathbf{W})\T(\mathbf{I} - \lambda\mathbf{W})]^{-1}$ : des maisons voisines partagent une composante de leur résidu, ce qui est exactement ce que produisent des attributs de voisinage omis. Le SEM est le modèle naturel des deux premiers mécanismes, externalités et sous-marchés non mesurés, et \textcite{dubin1988} l'a introduit en évaluation immobilière sous une forme voisine, avec une covariance décroissant continûment avec la distance plutôt que définie par une matrice de voisinage ; le \cref{sec:19:krigeage} revient sur cette parenté.
159 +
160 +Le \motcle{modèle de Durbin spatial} (SDM) ajoute au SAR les décalages spatiaux des caractéristiques :
161 +\begin{equation}\label{eq:19:sdm}
162 +\mathbf{y} = \rho\,\mathbf{W}\mathbf{y} + \mathbf{X}\boldsymbol\beta + \mathbf{W}\mathbf{X}_{-1}\boldsymbol\theta + \boldsymbol\varepsilon ,
163 +\end{equation}
164 +où $\mathbf{X}_{-1}$ est la matrice des régresseurs sans la constante, qui serait colinéaire à son propre décalage. Le prix d'une maison dépend alors de ses caractéristiques, des prix voisins et des caractéristiques voisines : une grande maison entourée de petites ne se vend pas comme une grande maison entourée de grandes. \textcite{lesagePace2009} recommandent le SDM comme point de départ parce qu'il emboîte le SAR ($\boldsymbol\theta = \mathbf{0}$), le SEM ($\boldsymbol\theta = -\lambda\boldsymbol\beta_{-1}$, ce que l'on vérifie en multipliant l'\cref{eq:19:sem} par $\mathbf{I} - \lambda\mathbf{W}$) et le modèle SLX à décalages des seuls régresseurs ($\rho = 0$), et parce que ses estimations de $\boldsymbol\beta$ restent convergentes lorsque des variables omises sont spatialement corrélées avec les régresseurs inclus. Son coût est un nombre de paramètres presque doublé et une interprétation plus délicate des effets.
165 +
166 +\subsection{L'estimation par maximum de vraisemblance}
167 +
168 +Sous normalité des innovations, la log-vraisemblance du SAR s'écrit
169 +\begin{equation}\label{eq:19:loglik}
170 +\ell(\rho, \boldsymbol\beta, \sigma^2) = \ln\abs{\det(\mathbf{I} - \rho\mathbf{W})} - \frac{n}{2}\ln(2\pi\sigma^2) - \frac{1}{2\sigma^2}\left(\mathbf{y} - \rho\mathbf{W}\mathbf{y} - \mathbf{X}\boldsymbol\beta\right)\T\left(\mathbf{y} - \rho\mathbf{W}\mathbf{y} - \mathbf{X}\boldsymbol\beta\right).
171 +\end{equation}
172 +Le premier terme est le jacobien de la transformation de $\boldsymbol\varepsilon$ en $\mathbf{y}$ ; c'est lui qui distingue le maximum de vraisemblance des moindres carrés appliqués naïvement à l'\cref{eq:19:sar}, et c'est lui qui pénalise les valeurs de $\rho$ proches des bornes. La maximisation se fait en deux temps. Pour $\rho$ fixé, les estimateurs de $\boldsymbol\beta$ et de $\sigma^2$ sont ceux des moindres carrés sur la variable transformée $\mathbf{y} - \rho\mathbf{W}\mathbf{y}$ ; en notant $\mathbf{b}_0$ et $\mathbf{b}_L$ les coefficients des régressions de $\mathbf{y}$ et de $\mathbf{W}\mathbf{y}$ sur $\mathbf{X}$, et $\mathbf{e}_0$, $\mathbf{e}_L$ leurs résidus, on a $\hat{\boldsymbol\beta}(\rho) = \mathbf{b}_0 - \rho\mathbf{b}_L$ et $\hat\sigma^2(\rho) = (\mathbf{e}_0 - \rho\mathbf{e}_L)\T(\mathbf{e}_0 - \rho\mathbf{e}_L)/n$. La \motcle{vraisemblance concentrée}
173 +\begin{equation}\label{eq:19:concentree}
174 +\ell_c(\rho) = \sum_{i=1}^{n}\ln\abs{1 - \rho\,\omega_i} - \frac{n}{2}\ln\!\big(2\pi\,\hat\sigma^2(\rho)\big) - \frac{n}{2}
175 +\end{equation}
176 +ne dépend plus que de $\rho$ et se maximise par une recherche unidimensionnelle sur l'intervalle admissible. Les $\omega_i$ sont les valeurs propres de $\mathbf{W}$, calculées une fois pour toutes ; pour quelques centaines d'observations, le calcul est immédiat, et pour des dizaines de milliers de ventes, on recourt aux approximations du déterminant développées par \textcite{paceBarrySirmans1998}. Le SEM s'estime de la même façon en concentrant sur $\lambda$, les coefficients $\hat{\boldsymbol\beta}(\lambda)$ étant ceux des moindres carrés de $\mathbf{y} - \lambda\mathbf{W}\mathbf{y}$ sur $\mathbf{X} - \lambda\mathbf{W}\mathbf{X}$, ce qui généralise la transformation de Cochrane--Orcutt des séries chronologiques. Les erreurs-types proviennent de l'inverse de la matrice d'information, dont \textcite{anselin1988} donne l'expression analytique ; elles supposent la normalité et l'homoscédasticité des innovations. Lorsque ces hypothèses sont douteuses, ou lorsque le nombre d'observations rend le jacobien coûteux, les estimateurs par variables instrumentales et par la méthode des moments généralisés de \textcite{kelejianPrucha1998,kelejianPrucha2010} constituent l'alternative : le décalage $\mathbf{W}\mathbf{y}$ y est instrumenté par $\mathbf{W}\mathbf{X}$ et $\mathbf{W}^2\mathbf{X}$, et la dépendance des erreurs est traitée par une étape de moments. Les fonctions \texttt{sar\_mv}, \texttt{sem\_mv} et \texttt{tests\_lm\_spatial} de la bibliothèque \texttt{traite.hedonique} implémentent le maximum de vraisemblance concentré et les tests ; leurs résultats coïncident, à $10^{-6}$ près, avec ceux de la bibliothèque \texttt{spreg} de PySAL, utilisée comme contrôle croisé.
177 +
178 +\subsection{Effets directs, indirects et totaux}
179 +
180 +Dans un modèle linéaire ordinaire, $\beta_r$ est l'effet d'une variation unitaire de $x_r$ sur $y$. Dans le SAR et le SDM, ce n'est plus vrai : une variation de $x_{jr}$ chez la maison $j$ modifie son prix, lequel modifie celui de ses voisines, qui rétroagit sur $j$. La dérivée du vecteur $\mathbf{y}$ par rapport au vecteur $\mathbf{x}_r$ est une matrice $n \times n$,
181 +\begin{equation}\label{eq:19:effets}
182 +\mathbf{S}_r(\mathbf{W}) = \frac{\partial\mathbf{y}}{\partial\mathbf{x}_r\T} = (\mathbf{I} - \rho\mathbf{W})^{-1}\left(\beta_r\mathbf{I} + \theta_r\mathbf{W}\right),
183 +\end{equation}
184 +avec $\theta_r = 0$ dans le SAR. \textcite{lesagePace2009} proposent de la résumer par trois scalaires : l'\motcle{effet direct} moyen, $\operatorname{tr}[\mathbf{S}_r]/n$, qui mesure l'effet d'une variation de $x_r$ chez $i$ sur le prix de $i$, rétroactions comprises ; l'\motcle{effet total} moyen, $\mathbf{1}\T\mathbf{S}_r\mathbf{1}/n$, somme d'une ligne moyenne, qui mesure l'effet sur le prix de $i$ d'une variation de $x_r$ chez toutes les maisons ; et l'\motcle{effet indirect}, différence des deux, qui mesure les retombées sur les voisines. Dans le SAR, les trois effets ont le même signe et l'effet indirect est proportionnel à l'effet direct ; dans le SDM, le coefficient $\theta_r$ peut les découpler et même leur donner des signes opposés.
185 +
186 +\begin{proposition}{Effet total dans un modèle à décalage spatial}{effet-total}
187 +Si $\mathbf{W}$ est standardisée en ligne, l'effet total moyen de la variable $r$ dans le SAR vaut exactement $\beta_r/(1 - \rho)$, et dans le SDM, $(\beta_r + \theta_r)/(1 - \rho)$.
188 +\end{proposition}
189 +\begin{proof}
190 +Puisque $\mathbf{W}\mathbf{1} = \mathbf{1}$, on a $(\mathbf{I} - \rho\mathbf{W})\mathbf{1} = (1 - \rho)\mathbf{1}$, donc $(\mathbf{I} - \rho\mathbf{W})^{-1}\mathbf{1} = \mathbf{1}/(1 - \rho)$. Alors $\mathbf{S}_r\mathbf{1} = (\mathbf{I} - \rho\mathbf{W})^{-1}(\beta_r + \theta_r)\mathbf{1} = (\beta_r + \theta_r)\mathbf{1}/(1 - \rho)$, et la moyenne des sommes de lignes vaut $(\beta_r + \theta_r)/(1 - \rho)$.
191 +\end{proof}
192 +
193 +Le facteur $1/(1 - \rho)$ est le \motcle{multiplicateur spatial}. Avec $\rho = 0{,}44$, valeur que l'exemple produira, il vaut 1,78 : un modèle SAR affirme que l'effet d'ensemble d'une caractéristique est près du double de son coefficient. Cette affirmation n'a de sens que si $\rho$ mesure réellement une interaction entre prix, et non la trace d'attributs de voisinage omis. C'est là le point d'interprétation le plus délicat du chapitre : les données ne permettent généralement pas de distinguer un vrai effet de voisinage d'un résidu de quartier spatialement lisse, et l'exemple montrera qu'un SAR estimé sans indicatrices de secteur attribue à l'« interaction » ce qui n'est que la prime de secteur omise. Pour l'évaluateur, la conséquence est claire : les effets totaux du SAR ne doivent pas servir à dériver des ajustements ; seuls les effets directs, ou les coefficients d'un SEM, s'interprètent comme des prix implicites, et encore faut-il que la spécification soit crédible.
194 +
195 +\subsection{Choisir entre les modèles}
196 +
197 +Trois critères se complètent. Les tests LM de la \cref{sec:19:tests} orientent avant estimation. Après estimation, le critère d'information d'Akaike, $\mathrm{AIC} = 2p - 2\hat\ell$ où $p$ compte les paramètres $\rho$ ou $\lambda$ et $\sigma^2$, compare des modèles non emboîtés estimés sur la même matrice. Enfin, la statistique de Moran des innovations $\hat{\boldsymbol\varepsilon}$ vérifie que le modèle retenu a bien épuisé la dépendance ; un SAR laissant des innovations corrélées signale que la forme était la mauvaise. À ces critères s'ajoute la question de l'objectif : pour \emph{prédire} la valeur d'un sujet, tous les modèles qui captent la dépendance se valent à peu près, comme \textcite{bourassaCantoniHoesli2010} l'ont montré en comparant krigeage, modèles autorégressifs et sous-marchés sur plusieurs villes ; pour \emph{interpréter} des prix implicites, le SEM et les effets fixes sont plus sûrs que le SAR.
198 +
199 +\section{La régression géographiquement pondérée}\label{sec:19:gwr}
200 +
201 +\subsection{Des coefficients qui varient avec le lieu}
202 +
203 +La \motcle{régression géographiquement pondérée} (GWR, \emph{geographically weighted regression}) de \textcite{fotheringhamBrunsdonCharlton2002} répond à l'hétérogénéité spatiale en estimant une régression distincte en chaque point de l'espace, à partir des observations voisines pondérées par leur distance. Pour une cible $u$ (une vente, ou un point quelconque comme le sujet), l'estimateur est celui des moindres carrés pondérés,
204 +\begin{equation}\label{eq:19:gwr}
205 +\hat{\boldsymbol\beta}(u) = \left(\mathbf{X}\T\mathbf{K}(u)\mathbf{X}\right)^{-1}\mathbf{X}\T\mathbf{K}(u)\mathbf{y}, \qquad \mathbf{K}(u) = \operatorname{diag}\big(k_1(u), \dots, k_n(u)\big),
206 +\end{equation}
207 +où le poids de la vente $j$ décroît avec sa distance $d_{uj}$ à la cible selon un \motcle{noyau}. Le noyau gaussien à bande passante fixe,
208 +\begin{equation}\label{eq:19:noyau}
209 +k_j(u) = \exp\!\left(-\frac{1}{2}\left(\frac{d_{uj}}{h}\right)^2\right),
210 +\end{equation}
211 +donne un poids de 0,61 à une vente située à une bande passante $h$ de la cible, de 0,14 à deux bandes passantes et de 0,01 à trois. D'autres noyaux (bicarré, à support borné) et des bandes passantes \emph{adaptatives}, définies par un nombre de voisins plutôt que par une distance, conviennent mieux lorsque la densité des ventes est très inégale. La régression géographiquement pondérée généralise ainsi la méthode des comparables du \cref{ch:16} : l'évaluateur qui n'estime les prix implicites que sur les ventes du voisinage immédiat fait, sans le dire, une GWR à bande passante très courte.
212 +
213 +\subsection{La bande passante et l'arbitrage biais--variance}
214 +
215 +Le paramètre décisif est $h$. Une bande passante courte suit fidèlement les variations locales mais s'appuie sur peu d'observations effectives, et les coefficients deviennent instables ; une bande passante longue lisse tout et la GWR tend vers la régression globale. L'arbitrage est le même qu'au \cref{ch:16} pour le nombre de comparables, et il se règle de la même façon, par \motcle{validation croisée} : on choisit $h$ qui minimise la somme des carrés des erreurs de prédiction de chaque vente par une régression locale dont elle est exclue,
216 +\begin{equation}\label{eq:19:cv}
217 +\mathrm{CV}(h) = \sum_{i=1}^{n}\big(y_i - \hat y_{(-i)}(h)\big)^2 .
218 +\end{equation}
219 +L'exclusion de l'observation elle-même est indispensable : sans elle, $h \to 0$ interpolerait exactement les données. Le critère d'Akaike corrigé, $\mathrm{AIC}_c = n\ln(\hat\sigma^2) + n\ln(2\pi) + n\,(n + \operatorname{tr}\mathbf{S})/(n - 2 - \operatorname{tr}\mathbf{S})$, où $\mathbf{S}$ est la matrice « chapeau » qui transforme $\mathbf{y}$ en $\hat{\mathbf{y}}$ et dont la trace joue le rôle d'un nombre effectif de paramètres, est l'autre critère courant ; il permet en outre de comparer la GWR à la régression globale, dont la trace vaut $k$.
220 +
221 +\subsection{Lire les cartes de coefficients}
222 +
223 +Le produit de la GWR est un jeu de cartes, une par coefficient, qui montre où la superficie se paie cher, où l'âge pèse peu, où la constante locale, interprétable comme un niveau de prix de localisation à caractéristiques données, est élevée. Ces cartes sont séduisantes et doivent être lues avec prudence. Premièrement, les coefficients locaux sont fortement corrélés entre eux et avec ceux des cibles voisines, par construction ; leurs variations ne sont pas toutes significatives, et la GWR n'offre pas de test simple de la stabilité d'un coefficient, sinon des tests par permutation. Deuxièmement, une bande passante unique pour tous les coefficients impose la même échelle de variation à des phénomènes qui n'en ont pas la même ; les extensions à bandes passantes multiples répondent à cette limite, au prix d'un calcul plus lourd. Troisièmement, la GWR \emph{lisse} : une discontinuité réelle, comme la frontière entre deux secteurs de prix différents, est étalée sur une distance de l'ordre de la bande passante, et la prime d'un petit secteur enclavé dans un plus grand est sous-estimée. L'exemple en donnera une illustration nette. À Québec, \textcite{theriaultDesrosiersVilleneuveKestens2003} et \textcite{kestensTheriaultDesrosiers2006} ont montré que les prix implicites des attributs varient avec la localisation et avec le profil des acheteurs, ce qui plaide pour la GWR comme outil d'exploration ; pour la prédiction, l'exemple montrera qu'elle rivalise avec les modèles autorégressifs.
224 +
225 +\section{Les effets fixes de quartier et de temps}\label{sec:19:effets-fixes}
226 +
227 +Le remède le plus simple à la dépendance spatiale est aussi le plus ancien : des indicatrices de quartier. Si la dépendance provient d'attributs de voisinage omis dont la valeur est à peu près constante à l'intérieur de zones connues, une indicatrice par zone absorbe ces attributs, et les résidus redeviennent indépendants. C'est exactement la structure du modèle de référence du cas 1 et, comme on le verra, elle y suffit. La question est celle de la granularité. Des zones trop grandes laissent subsister de la dépendance à l'intérieur ; des zones trop petites multiplient les paramètres, réduisent le nombre de ventes par zone et finissent par absorber dans les effets fixes une partie de ce que les caractéristiques devraient expliquer. Le critère d'information arbitre ; la statistique de Moran des résidus contrôle. Les zones peuvent être administratives (secteurs, arrondissements, quartiers du rôle d'évaluation), statistiques (aires de diffusion), ou purement géométriques (cellules d'une grille), ces dernières ayant l'avantage de ne rien supposer et l'inconvénient de couper les quartiers réels au hasard. \textcite{bishop2020} et \textcite{kuminoffParmeterPope2010} recommandent, pour les modèles hédoniques destinés à mesurer des consentements à payer, des effets fixes spatiaux fins combinés à des effets fixes temporels, parce que cette spécification résiste mieux aux variables omises que des formes fonctionnelles sophistiquées.
228 +
229 +Le temps se traite de la même manière. Une tendance linéaire en mois, celle du modèle de référence, impose une croissance géométrique constante ; des indicatrices trimestrielles ou mensuelles laissent le marché suivre son propre chemin et fournissent, par la même occasion, un indice de prix hédonique, dont le \cref{ch:35} fait la théorie. Le coût est, là encore, un nombre de paramètres accru et des indices bruités lorsque les ventes par période sont peu nombreuses. Entre les deux, la matrice spatio-temporelle de la \cref{sec:19:poids} offre une troisième voie, où la dimension temporelle entre par la pondération des ventes antérieures plutôt que par des paramètres supplémentaires. Les modèles de panel du \cref{ch:36}, lorsque l'on observe les mêmes immeubles à plusieurs dates, et les modèles spatio-temporels bayésiens de \textcite{gelfandGhoshKnightSirmans1998} et \textcite{banerjeeGelfandKnightSirmans2004}, qui traitent l'espace et le temps comme des processus aléatoires continus, prolongent cette logique.
230 +
231 +\section{Le krigeage des résidus}\label{sec:19:krigeage}
232 +
233 +\subsection{Le variogramme}
234 +
235 +Le krigeage aborde la dépendance spatiale par la géostatistique plutôt que par une matrice de voisinage : le résidu de localisation est un processus aléatoire continu $u(\mathbf{s})$ dont la covariance dépend de la distance. L'outil descriptif est le \motcle{semi-variogramme}, qui mesure la dissemblance moyenne entre deux points séparés d'une distance $h$,
236 +\begin{equation}\label{eq:19:variogramme}
237 +\gamma(h) = \frac{1}{2}\,\E\big[\big(u(\mathbf{s}) - u(\mathbf{s} + \mathbf{h})\big)^2\big], \qquad
238 +\hat\gamma(h) = \frac{1}{2N(h)}\sum_{(i,j) \in N(h)}\big(u_i - u_j\big)^2 ,
239 +\end{equation}
240 +où $N(h)$ est l'ensemble des paires dont la distance tombe dans une bande autour de $h$. Pour un processus stationnaire de variance $C(0)$ et de covariance $C(h)$, on a $\gamma(h) = C(0) - C(h)$ : le variogramme croît de zéro vers un \motcle{palier} égal à la variance, atteint à la \motcle{portée} au-delà de laquelle les résidus ne sont plus corrélés. Sa valeur à l'origine, la \motcle{pépite}, mesure la variabilité à très courte distance, c'est-à-dire la part du résidu qui n'est pas spatiale, bruit de transaction et erreurs de mesure. Un modèle paramétrique est ensuite ajusté au variogramme empirique ; le modèle exponentiel,
241 +\begin{equation}\label{eq:19:exponentiel}
242 +\gamma(h) = c_0 + c_1\left(1 - e^{-h/a}\right), \qquad h > 0 ,
243 +\end{equation}
244 +de pépite $c_0$, de palier $c_0 + c_1$ et de portée pratique $3a$ (distance à laquelle 95 \% du palier est atteint), est le plus courant pour les prix de maisons. \textcite{dubin1998} en donne une introduction pédagogique, et \textcite{basuThibodeau1998} ont estimé, sur les ventes de Dallas, des portées de plusieurs kilomètres ; \textcite{gillenThibodeauWachter2001} ont montré que la dépendance peut être \emph{anisotrope}, plus forte dans une direction que dans l'autre, le long d'une artère ou d'un littoral par exemple.
245 +
246 +\subsection{Le krigeage ordinaire}
247 +
248 +Le \motcle{krigeage ordinaire} prédit $u$ en un point non observé $\mathbf{s}_0$ par la combinaison linéaire $\hat u_0 = \sum_j w_j u_j$ des résidus observés, sans biais ($\sum_j w_j = 1$) et de variance minimale. Les poids résolvent le système linéaire
249 +\begin{equation}\label{eq:19:krigeage}
250 +\begin{bmatrix} \mathbf{C} & \mathbf{1} \\ \mathbf{1}\T & 0 \end{bmatrix}
251 +\begin{bmatrix} \mathbf{w} \\ \mu \end{bmatrix}
252 +=
253 +\begin{bmatrix} \mathbf{c}_0 \\ 1 \end{bmatrix},
254 +\qquad
255 +\sigma^2_{\text{k}}(\mathbf{s}_0) = C(0) - \mathbf{w}\T\mathbf{c}_0 - \mu ,
256 +\end{equation}
257 +où $\mathbf{C}$ est la matrice des covariances entre points observés, $C_{ij} = c_1 e^{-d_{ij}/a}$ pour $i \neq j$ et $C_{ii} = c_0 + c_1$, et $\mathbf{c}_0$ le vecteur des covariances entre les points observés et la cible ; $\mu$ est le multiplicateur de Lagrange de la contrainte de somme unitaire et $\sigma^2_{\text{k}}$ la variance de krigeage, qui mesure l'incertitude de la prédiction du résidu. Le krigeage est l'\emph{interpolateur optimal} au sens des moindres carrés : il donne plus de poids aux voisins proches, moins aux voisins regroupés entre eux, dont l'information est redondante, et il se réduit à une moyenne locale lorsque la pépite domine. En pratique, on ne résout le système que sur les quelques dizaines de voisins les plus proches de la cible, ce qui est sans perte lorsque la portée est courte devant l'étendue de l'échantillon.
258 +
259 +Pour l'évaluateur, le krigeage des résidus a une interprétation immédiate : c'est un \emph{ajustement de localisation} estimé à partir de ce que le modèle hédonique n'a pas su expliquer chez les ventes voisines. Si les maisons autour du sujet se sont toutes vendues 5 \% au-dessus de ce que le modèle prédit, il est raisonnable de relever de 5 \% la prédiction pour le sujet, et le krigeage dit de combien exactement, compte tenu des distances et de la redondance des voisins. Le SEM de la \cref{sec:19:modeles} fait la même chose avec une structure de covariance définie par $\mathbf{W}$ : l'espérance conditionnelle du résidu au sujet, sachant les résidus observés, s'obtient à partir de la matrice de précision $(\mathbf{I} - \lambda\mathbf{W})\T(\mathbf{I} - \lambda\mathbf{W})/\sigma^2$, et l'exemple montrera que les deux approches donnent des corrections très voisines. \textcite{dubin1988} avait précisément proposé d'estimer conjointement les coefficients hédoniques et la covariance spatiale ; la pratique courante, en deux étapes, régression puis krigeage des résidus, perd un peu d'efficacité mais reste transparente et facile à documenter.
modified sources/registry.csv +14 −0
@@ -318,6 +318,20 @@ SRC-07-002,loi,"Loi favorisant la réforme du cadastre québécois (RLRQ, c. R-3
318 318 SRC-08-001,page_web,"Projet de loi n° 16 — Loi modifiant la Loi sur l'aménagement et l'urbanisme et d'autres dispositions (43e législature, 1re session)",Assemblée nationale du Québec,"Présenté le 21 mars 2023 ; sanctionné le 1er juin 2023 (LQ 2023, c. 12)",https://www.assnat.qc.ca/fr/travaux-parlementaires/projets-loi/projet-loi-16-43-1.html,2026-10-31,verifie,8,"Page lue par WebFetch : titre exact, auteure (ministre des Affaires municipales), cheminement parlementaire, sanction, chapitre 12 de 2023, entrée en vigueur le jour de la sanction « sauf exceptions ». Aucune note explicative sur la page ; PDF du projet de loi non ouvert."
319 319 SRC-09-001,reglement,"Règlement numéro 994-2025 décrétant l'imposition et le prélèvement des taxes foncières générales, spéciales et des compensations pour le budget de l'année 2026 — texte intégral (21 p.) et annexe I (1 092 unités de voisinage)",Ville de Gatineau,Adopté le 18 décembre 2025,https://docweb.gatineau.ca/Doc-Web/masson/documents/pdf/R%20994-2025.pdf,2026-10-31,verifie,9,"PDF téléchargé et lu intégralement (pdftotext) : taux de base 5,224 ; non résidentiel 29,372 ; industriel 26,120 ; TVD 20,896 ; agricole/forestier 5,090 ; résidentiel par unité de voisinage (annexe I : 1,613-7,544, médiane 5,232) ; six logements ou plus 6,964 ; infrastructures 0,579 inclus ; STO 1,417 ; dette 0,830 ; crédits aqueduc 0,386 / égout 0,523 ; ex-Hull 0,036 ; matières résiduelles 178,83 $/logement. Complète SRC-E-028 (même document) ; annexe I extraite dans data/raw/gatineau_r994_2025/. Clé biblatex existante : gatineaureglement994."
320 320 SRC-A-CCQ,loi,"Code civil du Québec, RLRQ c. CCQ-1991 — art. 1457, 2098-2100, 2102, 2925-2926 (responsabilité civile, contrat de service, prescription)",Québec (LégisQuébec),Texte courant au 2026-10-31,https://www.legisquebec.gouv.qc.ca/fr/document/lc/CCQ-1991,2026-10-31,verifie,ch10,"Lecture par le rédacteur du ch. 10 (page LégisQuébec complète téléchargée avec User-Agent navigateur) ; ces articles ne figurent pas dans normes-A.csv ni normes-C.csv : à intégrer à la matrice lors de l'harmonisation ; identifiant provisoire, à fusionner avec l'entrée `ccq` du registre A"
321 +SRC-11-001,page_web,Lignes directrices sur le radon,Santé Canada,Page datée du 2025-10-15,https://www.canada.ca/fr/sante-canada/services/securite-et-risque-pour-sante/radiation/radon/lignes-directrices-gouvernement-canada.html,2026-10-31,verifie,11,Lu par WebFetch le 2026-10-31 : « La directive canadienne pour le radon est de 200 becquerels par mètre cube (Bq/m³) » ; mesures correctives « d'ici 1 an » ; agir plus vite si concentration plus élevée. Pas de statistique de prévalence sur la page.
322 +SRC-11-002,guide,Guide pour la mesure du radon dans les maisons,Santé Canada,Page datée du 2026-05-22,https://www.canada.ca/fr/sante-canada/services/publications/securite-et-risque-pour-sante/guide-mesures-radon-maisons.html,2026-10-31,verifie,11,Mesure à long terme « d'au moins 91 jours » ; au moins 91 jours en saison de chauffage ; « zone normalement occupée du niveau le plus bas de la maison » ; correction dans un délai d'un an au-dessus de 200 Bq/m³.
323 +SRC-11-003,page_web,Radon domiciliaire,Gouvernement du Québec (Québec.ca),Dernière mise à jour : 20 août 2026,https://www.quebec.ca/habitation-territoire/milieu-de-vie-sain/radon-domiciliaire,2026-10-31,verifie,11,"« La concentration moyenne de radon dans les sous-sols est d'environ 37 Bq/m³ » ; limite 200 Bq/m³, mesures correctives « d'ici un an » ; dosimètre passif au moins trois mois, de préférence octobre à avril, environ 50 $ analyse incluse ; 2e cause de cancer du poumon après le tabagisme. Aucune proportion de maisons au-dessus du seuil."
324 +SRC-11-004,page_web,Moisissure,Santé Canada,Page datée du 2023-02-13,https://www.canada.ca/fr/sante-canada/services/qualite-air/contaminants-air-interieur/reduisez-humidite-et-moisissures.html,2026-10-31,verifie,11,"Humidité relative « entre 30 % et 50 % » ; trois catégories : petite (≤ 3 plaques < 1 m² chacune), moyenne (> 3 plaques ou plaques > 1 m² mais < 3 m²), grande (> 3 m²) ; professionnel si zone importante ; « aucune quantité de moisissures n'est dépourvue de risques »."
325 +SRC-11-005,page_web,Rénovations écoénergétiques (mesures de santé et de sécurité : MIUF,vermiculite,amiante) et Emprisonnons la chaleur §1.4,Ressources naturelles Canada,Page modifiée le 2025-01-16,https://ressources-naturelles.canada.ca/efficacite-energetique/efficacite-energetique-maison/renovations-ecoenergetiques,2026-10-31,verifie
326 +SRC-11-006,page_web,L'amiante et votre santé,Santé Canada,Page datée du 2023-02-10,https://www.canada.ca/fr/sante-canada/services/qualite-air/contaminants-air-interieur/risques-pour-sante-associes-amiante.html,2026-10-31,verifie,11,"« Avant 1990, l'amiante était surtout utilisé pour isoler des bâtiments et des habitations contre le froid et le bruit » ; interdiction (règlement de 2018) ; liste des matériaux anciens (bardage, ciment et plâtre, carreaux, toiture, mastics, isolation des canalisations) ; pas de risque important si intact ; ne pas déranger."
327 +SRC-11-007,page_web,Dépôt d'ocre,Régie du bâtiment du Québec,Consultée le 2026-10-31 (aucune date de mise à jour affichée),https://www.rbq.gouv.qc.ca/vous-etes/citoyen/problemes-avec-votre-residence/depot-docre,2026-10-31,verifie,11,"Réaction chimique (fer migrant vers le drain → boue d'hydroxyde de fer) et processus biologique (ferrobactérie → masse gélatineuse) ; obstruction des drains, infiltration à la jonction murs-dalle ; sols sablonneux avec silt plus à risque ; évaluation du site et deux cheminées de nettoyage recommandées."
328 +SRC-11-008,page_web,Pyrite et pyrrhotite,Régie du bâtiment du Québec,Consultée le 2026-10-31 (aucune date de mise à jour affichée),https://www.rbq.gouv.qc.ca/vous-etes/citoyen/problemes-particuliers-en-batiment/pyrite-et-pyrrhotite/,2026-10-31,verifie,11,"Pyrite : « produit de l'acide sulfurique en s'oxydant au contact de l'humidité et de l'oxygène », peut provoquer « le soulèvement et la fissuration de la dalle de béton » ; pyrrhotite : sulfure de fer « jaune bronze qui noircit à l'air », « en cristallisant en lamelles, elle peut provoquer des fissures dans le béton » ; garantie 5 ans, arbitrage. Pas d'IPPG ni de région sur la page."
329 +SRC-11-009,page_web,Sols argileux,Régie du bâtiment du Québec,Texte d'avril 2006 (Info-RBQ) mis à jour ; consulté le 2026-10-31,https://www.rbq.gouv.qc.ca/vous-etes/citoyen/problemes-particuliers-en-batiment/sols-argileux/,2026-10-31,verifie,11,"Variation de volume en période de sécheresse ; arbres influençant la teneur en eau ; régions : vallée du Saint-Laurent, vallée de l'Outaouais, Saguenay–Lac-Saint-Jean ; recommandations : distance des arbres, géomembrane 1,5 m, fondations plus profondes, reconnaissance géotechnique."
330 +SRC-11-010,page_web,Programme pour les résidences endommagées par la pyrrhotite – Volet I : aide financière pour la réalisation de travaux,Gouvernement du Québec (SHQ / Québec.ca),Dernière mise à jour : 8 octobre 2026,https://www.quebec.ca/habitation-territoire/construction-renovation/renovation-residentielle/programme-residences-endommagees-pyrrhotite/programme-pyrrhotite-aide-financiere-realisation-travaux,2026-10-31,verifie,11,"Programme « a pris fin le 30 septembre 2026 » ; aide « 75 % des coûts admissibles reconnus, jusqu'à concurrence de 75 000 $ » (bâtiment non couvert par le plan de garantie) ; « taux minimal de 0,23 % de pyrrhotite » ; travaux : remplacement des fondations ; 15 000 $ max si couvert par le plan de garantie. Mise en œuvre en 2011 (normes du programme, PDF SHQ)."
331 +SRC-11-011,norme,Norme de pratique professionnelle pour l'inspection visuelle de bâtiments principalement résidentiels,Association des inspecteurs en bâtiments du Québec (AIBQ) en collaboration avec l'OACIQ,Version V03 – avril 2011 (entrée en vigueur janvier 2010) ; fichier « maj 23 mars 2023 – art. 12.10 »,https://www.aibq.qc.ca/media/2220/aibq_normepreachat_maj-23-mars-2023-art1210.pdf,2026-10-31,verifie,11,"PDF 24 p. lu (p. 1-10) : art. 1 champ d'application (≤ 3 étages, ≤ 600 m²), art. 2 convention de service, art. 6-8 inspection « visuelle et attentive, qui n'est cependant pas techniquement exhaustive », art. 10 renvoi à un spécialiste, art. 11 limites (11.4 substances dangereuses), art. 12 exclusions (12.1 durée de vie résiduelle, 12.2 coûts, 12.3 valeur marchande, 12.10 conformité aux codes), art. 13-14 rapport, art. 16 déclarations du vendeur, art. 17-22 structure."
332 +SRC-11-012,page_web,Inspection préachat (page AIBQ),AIBQ,© AIBQ 2026 ; consultée le 2026-10-31,https://www.aibq.qc.ca/inspection-preachat/,2026-10-31,verifie,11,"« C'est l'inspection des systèmes et composantes visibles et accessibles d'un bâtiment » ; 11 composantes (structure, extérieur, toiture, plomberie, électricité, chauffage, climatisation et pompe à chaleur, intérieur, isolation, ventilation, sécurité des personnes) ; rapport écrit ; lien vers le PDF de la norme."
333 +SRC-11-013,norme,Home Inspection Standards of Practice,International Association of Certified Home Inspectors (InterNACHI),Last revised October 2022,https://www.nachi.org/sop.htm,2026-10-31,verifie,11,"« A home inspection is a non-invasive, visual examination of the accessible areas of a residential property » ; 2.1.5 ne détermine pas la valeur marchande ; 2.1.8 ne détermine pas l'espérance de vie ; systèmes 3.1-3.10 ; quatre logements ou moins (2.1.10)."
334 +SRC-11-014,page_web,Équipements pétroliers – Équipements pétroliers visés ; Lois et règlements,Régie du bâtiment du Québec,Consultées le 2026-10-30/31 (aucune date de mise à jour affichée),https://www.rbq.gouv.qc.ca/domaines-dintervention/equipements-petroliers/,2026-10-31,verifie,11,"Chapitre VIII « Installation d'équipements pétroliers » du Code de construction (B-1.1, r. 2) ; « Les équipements de moins de 10 000 litres d'une maison unifamiliale ne sont pas considérés comme des équipements pétroliers à risque élevé » ; appareils de chauffage non assujettis aux chapitres d'installation ; art. 8.05.01 adopte par renvoi la norme CSA B139 (nouvelle du 30 mai 2024)."
321 335 SRC-CH17-001,article,Smearing Estimate: A Nonparametric Retransformation Method (Duan),Journal of the American Statistical Association,1983 vol. 78 no 383 p. 605-610,https://doi.org/10.1080/01621459.1983.10478017,2026-10-31,verifie,ch17,Crossref ; references/lib-ch17.bib (duan1983) ; non cité par clé
322 336 SRC-CH17-002,article,The Interpretation of Dummy Variables in Semilogarithmic Equations (Giles),Economics Letters,1982 vol. 10 no 1-2 p. 77-79,https://doi.org/10.1016/0165-1765(82)90119-7,2026-10-31,verifie,ch17,Crossref ; references/lib-ch17.bib (giles1982) ; non cité par clé
323 337 SRC-CH17-003,article,Exact Interpretation of Dummy Variables in Semilogarithmic Equations (van Garderen & Shah),The Econometrics Journal,2002 vol. 5 no 1 p. 149-159,https://doi.org/10.1111/1368-423X.00078,2026-10-31,verifie,ch17,Crossref ; references/lib-ch17.bib (vanGarderenShah2002) ; non cité par clé
modified tools/make_labels.py +9 −0
@@ -16,5 +16,14 @@ for n, title in t.items():
16 16 if n < 10: lab(f"ch:{n}", str(n), title, f"chapter.{n}", "chapter")
17 17 for L, k in zip("ABCDEF", ["glossaire", "formulaires-inspection", "modeles-rapport", "conventions-calcul", "scripts-classeurs", "solutions"]):
18 18 lab(f"app:{k}", L, "", f"appendix.{L}", "chapter")
19 +# étiquettes fines (eq:, fig:, tab:, sec:, def:, prop:, ex:…) des autres chapitres déjà compilés (build/chNN/_wrap_chNN.aux)
20 +import re
21 +seen = set(re.findall(r"\\@newl@bel\{r\}\{([^}]+)\}", "\n".join(out)))
22 +for aux in sorted((ROOT / "build").glob("ch*/_wrap_ch*.aux")) + sorted((ROOT / "build").glob("app-*/_wrap_app-*.aux")):
23 + if exclure >= 0 and aux.parent.name == f"ch{exclure:02d}": continue
24 + for m in re.finditer(r"^\\newlabel\{([^}]+)\}(\{.*\})\s*$", aux.read_text(encoding="utf-8", errors="ignore"), re.M):
25 + name, val = m.group(1), m.group(2)
26 + if name in seen or name.startswith("ch:") or name.startswith("app:"): continue
27 + seen.add(name); out.append("\\@newl@bel{r}{%s}%s" % (name, val))
19 28 out.append("\\makeatother")
20 29 pathlib.Path(sys.argv[1]).write_text("\n".join(out) + "\n", encoding="utf-8")
added verification/chapters/ch11-registry.csv +15 −0
@@ -0,0 +1,15 @@
1 +id,type,titre,organisme,version_ou_date,url,date_consultation,statut,utilise_dans,notes
2 +SRC-11-001,page_web,Lignes directrices sur le radon,Santé Canada,Page datée du 2025-10-15,https://www.canada.ca/fr/sante-canada/services/securite-et-risque-pour-sante/radiation/radon/lignes-directrices-gouvernement-canada.html,2026-10-31,verifie,11,"Lu par WebFetch le 2026-10-31 : « La directive canadienne pour le radon est de 200 becquerels par mètre cube (Bq/m³) » ; mesures correctives « d'ici 1 an » ; agir plus vite si concentration plus élevée. Pas de statistique de prévalence sur la page."
3 +SRC-11-002,guide,Guide pour la mesure du radon dans les maisons,Santé Canada,Page datée du 2026-05-22,https://www.canada.ca/fr/sante-canada/services/publications/securite-et-risque-pour-sante/guide-mesures-radon-maisons.html,2026-10-31,verifie,11,"Mesure à long terme « d'au moins 91 jours » ; au moins 91 jours en saison de chauffage ; « zone normalement occupée du niveau le plus bas de la maison » ; correction dans un délai d'un an au-dessus de 200 Bq/m³."
4 +SRC-11-003,page_web,Radon domiciliaire,Gouvernement du Québec (Québec.ca),Dernière mise à jour : 20 août 2026,https://www.quebec.ca/habitation-territoire/milieu-de-vie-sain/radon-domiciliaire,2026-10-31,verifie,11,"« La concentration moyenne de radon dans les sous-sols est d'environ 37 Bq/m³ » ; limite 200 Bq/m³, mesures correctives « d'ici un an » ; dosimètre passif au moins trois mois, de préférence octobre à avril, environ 50 $ analyse incluse ; 2e cause de cancer du poumon après le tabagisme. Aucune proportion de maisons au-dessus du seuil."
5 +SRC-11-004,page_web,Moisissure,Santé Canada,Page datée du 2023-02-13,https://www.canada.ca/fr/sante-canada/services/qualite-air/contaminants-air-interieur/reduisez-humidite-et-moisissures.html,2026-10-31,verifie,11,"Humidité relative « entre 30 % et 50 % » ; trois catégories : petite (≤ 3 plaques < 1 m² chacune), moyenne (> 3 plaques ou plaques > 1 m² mais < 3 m²), grande (> 3 m²) ; professionnel si zone importante ; « aucune quantité de moisissures n'est dépourvue de risques »."
6 +SRC-11-005,page_web,Rénovations écoénergétiques (mesures de santé et de sécurité : MIUF, vermiculite, amiante) et Emprisonnons la chaleur §1.4,Ressources naturelles Canada,Page modifiée le 2025-01-16,https://ressources-naturelles.canada.ca/efficacite-energetique/efficacite-energetique-maison/renovations-ecoenergetiques,2026-10-31,verifie,11,"MIUF « interdite au Canada depuis décembre 1980 en vertu de la Loi sur les produits dangereux » ; vermiculite pouvant contenir de l'amiante ; Emprisonnons la chaleur (section 1 Introduction, même site) : mine de Libby (Montana), 1920-1990, marque Zonolite Attic Insulation."
7 +SRC-11-006,page_web,L'amiante et votre santé,Santé Canada,Page datée du 2023-02-10,https://www.canada.ca/fr/sante-canada/services/qualite-air/contaminants-air-interieur/risques-pour-sante-associes-amiante.html,2026-10-31,verifie,11,"« Avant 1990, l'amiante était surtout utilisé pour isoler des bâtiments et des habitations contre le froid et le bruit » ; interdiction (règlement de 2018) ; liste des matériaux anciens (bardage, ciment et plâtre, carreaux, toiture, mastics, isolation des canalisations) ; pas de risque important si intact ; ne pas déranger."
8 +SRC-11-007,page_web,Dépôt d'ocre,Régie du bâtiment du Québec,Consultée le 2026-10-31 (aucune date de mise à jour affichée),https://www.rbq.gouv.qc.ca/vous-etes/citoyen/problemes-avec-votre-residence/depot-docre,2026-10-31,verifie,11,"Réaction chimique (fer migrant vers le drain → boue d'hydroxyde de fer) et processus biologique (ferrobactérie → masse gélatineuse) ; obstruction des drains, infiltration à la jonction murs-dalle ; sols sablonneux avec silt plus à risque ; évaluation du site et deux cheminées de nettoyage recommandées."
9 +SRC-11-008,page_web,Pyrite et pyrrhotite,Régie du bâtiment du Québec,Consultée le 2026-10-31 (aucune date de mise à jour affichée),https://www.rbq.gouv.qc.ca/vous-etes/citoyen/problemes-particuliers-en-batiment/pyrite-et-pyrrhotite/,2026-10-31,verifie,11,"Pyrite : « produit de l'acide sulfurique en s'oxydant au contact de l'humidité et de l'oxygène », peut provoquer « le soulèvement et la fissuration de la dalle de béton » ; pyrrhotite : sulfure de fer « jaune bronze qui noircit à l'air », « en cristallisant en lamelles, elle peut provoquer des fissures dans le béton » ; garantie 5 ans, arbitrage. Pas d'IPPG ni de région sur la page."
10 +SRC-11-009,page_web,Sols argileux,Régie du bâtiment du Québec,Texte d'avril 2006 (Info-RBQ) mis à jour ; consulté le 2026-10-31,https://www.rbq.gouv.qc.ca/vous-etes/citoyen/problemes-particuliers-en-batiment/sols-argileux/,2026-10-31,verifie,11,"Variation de volume en période de sécheresse ; arbres influençant la teneur en eau ; régions : vallée du Saint-Laurent, vallée de l'Outaouais, Saguenay–Lac-Saint-Jean ; recommandations : distance des arbres, géomembrane 1,5 m, fondations plus profondes, reconnaissance géotechnique."
11 +SRC-11-010,page_web,Programme pour les résidences endommagées par la pyrrhotite – Volet I : aide financière pour la réalisation de travaux,Gouvernement du Québec (SHQ / Québec.ca),Dernière mise à jour : 8 octobre 2026,https://www.quebec.ca/habitation-territoire/construction-renovation/renovation-residentielle/programme-residences-endommagees-pyrrhotite/programme-pyrrhotite-aide-financiere-realisation-travaux,2026-10-31,verifie,11,"Programme « a pris fin le 30 septembre 2026 » ; aide « 75 % des coûts admissibles reconnus, jusqu'à concurrence de 75 000 $ » (bâtiment non couvert par le plan de garantie) ; « taux minimal de 0,23 % de pyrrhotite » ; travaux : remplacement des fondations ; 15 000 $ max si couvert par le plan de garantie. Mise en œuvre en 2011 (normes du programme, PDF SHQ)."
12 +SRC-11-011,norme,Norme de pratique professionnelle pour l'inspection visuelle de bâtiments principalement résidentiels,Association des inspecteurs en bâtiments du Québec (AIBQ) en collaboration avec l'OACIQ,Version V03 – avril 2011 (entrée en vigueur janvier 2010) ; fichier « maj 23 mars 2023 – art. 12.10 »,https://www.aibq.qc.ca/media/2220/aibq_normepreachat_maj-23-mars-2023-art1210.pdf,2026-10-31,verifie,11,"PDF 24 p. lu (p. 1-10) : art. 1 champ d'application (≤ 3 étages, ≤ 600 m²), art. 2 convention de service, art. 6-8 inspection « visuelle et attentive, qui n'est cependant pas techniquement exhaustive », art. 10 renvoi à un spécialiste, art. 11 limites (11.4 substances dangereuses), art. 12 exclusions (12.1 durée de vie résiduelle, 12.2 coûts, 12.3 valeur marchande, 12.10 conformité aux codes), art. 13-14 rapport, art. 16 déclarations du vendeur, art. 17-22 structure."
13 +SRC-11-012,page_web,Inspection préachat (page AIBQ),AIBQ,© AIBQ 2026 ; consultée le 2026-10-31,https://www.aibq.qc.ca/inspection-preachat/,2026-10-31,verifie,11,"« C'est l'inspection des systèmes et composantes visibles et accessibles d'un bâtiment » ; 11 composantes (structure, extérieur, toiture, plomberie, électricité, chauffage, climatisation et pompe à chaleur, intérieur, isolation, ventilation, sécurité des personnes) ; rapport écrit ; lien vers le PDF de la norme."
14 +SRC-11-013,norme,Home Inspection Standards of Practice,International Association of Certified Home Inspectors (InterNACHI),Last revised October 2022,https://www.nachi.org/sop.htm,2026-10-31,verifie,11,"« A home inspection is a non-invasive, visual examination of the accessible areas of a residential property » ; 2.1.5 ne détermine pas la valeur marchande ; 2.1.8 ne détermine pas l'espérance de vie ; systèmes 3.1-3.10 ; quatre logements ou moins (2.1.10)."
15 +SRC-11-014,page_web,Équipements pétroliers – Équipements pétroliers visés ; Lois et règlements,Régie du bâtiment du Québec,Consultées le 2026-10-30/31 (aucune date de mise à jour affichée),https://www.rbq.gouv.qc.ca/domaines-dintervention/equipements-petroliers/,2026-10-31,verifie,11,"Chapitre VIII « Installation d'équipements pétroliers » du Code de construction (B-1.1, r. 2) ; « Les équipements de moins de 10 000 litres d'une maison unifamiliale ne sont pas considérés comme des équipements pétroliers à risque élevé » ; appareils de chauffage non assujettis aux chapitres d'installation ; art. 8.05.01 adopte par renvoi la norme CSA B139 (nouvelle du 30 mai 2024)."
16
Menu

Theme