SPB Git

Ch. 41 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 2eb2bf4 Browse files

61 changed files +1,375 −216

61 changed files
modified analysis/python/cases/ch45_dossier.py +2 −4
@@ -81,15 +81,13 @@ def heritage() -> dict:
81 sel = t["selection"]; m = t["modele"]; s = t["sujet"] 81 sel = t["selection"]; m = t["modele"]; s = t["sujet"]
82 b17 = c17.base(); rec17 = c17.reconcilier(b17) # ch. 17 : poids inverse du brut, valeur pondérée 82 b17 = c17.base(); rec17 = c17.reconcilier(b17) # ch. 17 : poids inverse du brut, valeur pondérée
83 pred18 = c18.prediction_sujet(m, s) # ch. 18 : prédiction, Duan, intervalles 95 et 80 %, prédiction au 2024-07-01 83 pred18 = c18.prediction_sujet(m, s) # ch. 18 : prédiction, Duan, intervalles 95 et 80 %, prédiction au 2024-07-01
84− ic_val = c20.exercices # (référence) l'IC de la valeur est calculé ci-dessous comme au ch. 20
85− xVx = pred18["xVx"]; lnp = pred18["ln_pred"]; duan = pred18["facteur_duan"]
86− ic95 = (math.exp(lnp - 1.959964 * math.sqrt(xVx)) * duan, math.exp(lnp + 1.959964 * math.sqrt(xVx)) * duan)
87 r20 = c20.tout() # ch. 20 : bootstrap, coût (ch. 24 importé), combinaison, vérité 84 r20 = c20.tout() # ch. 20 : bootstrap, coût (ch. 24 importé), combinaison, vérité
85+ ic95 = (float(r20["exercices"]["ex2"]["ic_bas"]), float(r20["exercices"]["ex2"]["ic_haut"])) # IC 95 % de la valeur (ch. 20, eq. 20.6)
88 r24 = r20["cout"]["r24"] # ch. 24 complet (main() déjà exécuté silencieusement par le ch. 20) 86 r24 = r20["cout"]["r24"] # ch. 24 complet (main() déjà exécuté silencieusement par le ch. 20)
89 devis, sujet, cn = c11.charger() # ch. 21 (coût neuf) et ch. 11 (fiche) 87 devis, sujet, cn = c11.charger() # ch. 21 (coût neuf) et ch. 11 (fiche)
90 fiche = c11.fiche(devis, cn); trav = c11.travaux(devis, cn); dv = c11.depreciation(fiche, trav, cn) 88 fiche = c11.fiche(devis, cn); trav = c11.travaux(devis, cn); dv = c11.depreciation(fiche, trav, cn)
91 sup12 = c12.superficies() # ch. 12 89 sup12 = c12.superficies() # ch. 12
92− g21 = c21.regrouper(devis); sup21 = c21.superficies(sujet, devis) 90+ devis21, _ = c21.charger(); g21 = c21.regrouper(devis21); sup21 = c21.superficies(sujet, devis21)
93 d09 = c09.charger(); et09 = c09.etude(d09); ds09 = c09.dossier_sujet(d09, et09) # ch. 9 91 d09 = c09.charger(); et09 = c09.etude(d09); ds09 = c09.dossier_sujet(d09, et09) # ch. 9
94 comp25 = _silencieux(c25.comparaison) # ch. 25 : comparaison directe des terrains 92 comp25 = _silencieux(c25.comparaison) # ch. 25 : comparaison directe des terrains
95 extr25 = _silencieux(c25.extraction_recente_ch24, t) 93 extr25 = _silencieux(c25.extraction_recente_ch24, t)
modified analysis/python/cases/ch46_dossier.py +19 −5
@@ -289,21 +289,35 @@ def exercices(D: dict | None = None) -> dict:
289 # 1. taxes : compte déclaré vs recalcul 2026, effet sur le RNE et sur la capitalisation au taux ajusté 289 # 1. taxes : compte déclaré vs recalcul 2026, effet sur le RNE et sur la capitalisation au taux ajusté
290 t = b["taxes"]; ex["1"] = {"municipale_2026": t["municipale"], "scolaire_2026": t["scolaire"], "declare": 5900 + 470, "ecart": b["ecart_taxes"], "rne_declare": b["rne_declare"], "rne_2026": b["rne"], 290 t = b["taxes"]; ex["1"] = {"municipale_2026": t["municipale"], "scolaire_2026": t["scolaire"], "declare": 5900 + 470, "ecart": b["ecart_taxes"], "rne_declare": b["rne_declare"], "rne_2026": b["rne"],
291 "v_cap_declare": fin.capitalisation_directe(b["rne_declare"], D["revenu"]["taux_ajuste"]), "v_cap_2026": D["revenu"]["v_cap_ajuste"]} 291 "v_cap_declare": fin.capitalisation_directe(b["rne_declare"], D["revenu"]["taux_ajuste"]), "v_cap_2026": D["revenu"]["v_cap_ajuste"]}
292− # 2. avis de reprise : calendrier et VA de l'écart 292+ # 2. avis de reprise : calendrier et VA de l'écart selon la rotation
293− ex["2"] = D["reprise"] 293+ ex["2"] = {**D["reprise"], "va_rotation_9_4": va_ecart_rc(D["loyers"], rotation=0.094)["va_rotation"], "va_rotation_20": va_ecart_rc(D["loyers"], rotation=0.20)["va_rotation"],
294+ "prise_possession_si_acte_2027_01_15": "2028-07-01"}
294 # 3. grille : refaire la cascade de Q0243 et vérifier brut/net 295 # 3. grille : refaire la cascade de Q0243 et vérifier brut/net
295 tab = D["grille"]["tableau"]; q = tab[tab["id_vente"] == "Q0243"].iloc[0].to_dict(); ex["3"] = q 296 tab = D["grille"]["tableau"]; q = tab[tab["id_vente"] == "Q0243"].iloc[0].to_dict(); ex["3"] = q
296 # 4. capitalisation : taux médian, Q1, Q3, ajusté, comparables 297 # 4. capitalisation : taux médian, Q1, Q3, ajusté, comparables
297 ex["4"] = {k: D["revenu"][k] for k in ("taux_median_127", "taux_q1", "taux_q3", "taux_ajuste", "taux_comp", "v_cap_median", "v_cap_q1", "v_cap_q3", "v_cap_ajuste", "v_cap_comp")} 298 ex["4"] = {k: D["revenu"][k] for k in ("taux_median_127", "taux_q1", "taux_q3", "taux_ajuste", "taux_comp", "v_cap_median", "v_cap_q1", "v_cap_q3", "v_cap_ajuste", "v_cap_comp")}
299+ d_med = float(D["comparables127"]["ratio_depenses"].median()); rne_ratio = b["rbe"] * (1 - d_med)
300+ ex["4"].update({"ratio_median_ventes": d_med, "rne_ratio_ventes": rne_ratio, "v_cap_ratio_ventes": fin.capitalisation_directe(rne_ratio, D["revenu"]["taux_ajuste"]),
301+ "taux_implicite_ratio_ventes": rne_ratio / D["grille"]["valeur"], "ecart_pb_restant": (D["revenu"]["taux_ajuste"] - rne_ratio / D["grille"]["valeur"]) * 1e4})
298 # 5. financement : prix final, mise de fonds, paiement, TAM, coût net ; variante 2e étage 302 # 5. financement : prix final, mise de fonds, paiement, TAM, coût net ; variante 2e étage
299 f = D["financement"]; occ2 = C.cout_occupation({k: f[k] for k in ("mise_de_fonds", "service_dette", "capital_rembourse_5ans")}, b, D["loyers"], "2e") 303 f = D["financement"]; occ2 = C.cout_occupation({k: f[k] for k in ("mise_de_fonds", "service_dette", "capital_rembourse_5ans")}, b, D["loyers"], "2e")
300 ex["5"] = {"prix": f["prix"], "mise": f["mise_de_fonds"], "pret": f["pret"], "paiement": f["paiement_mensuel"], "tam": f["taux_admissible"], "paiement_tam": f["paiement_mensuel_tam"], 304 ex["5"] = {"prix": f["prix"], "mise": f["mise_de_fonds"], "pret": f["pret"], "paiement": f["paiement_mensuel"], "tam": f["taux_admissible"], "paiement_tam": f["paiement_mensuel_tam"],
301 "cout_net_rc": f["occupation"]["cout_net_mensuel"], "hors_capital_rc": f["occupation"]["cout_net_mensuel_hors_capital"], "cout_net_2e": occ2["cout_net_mensuel"], "hors_capital_2e": occ2["cout_net_mensuel_hors_capital"], 305 "cout_net_rc": f["occupation"]["cout_net_mensuel"], "hors_capital_rc": f["occupation"]["cout_net_mensuel_hors_capital"], "cout_net_2e": occ2["cout_net_mensuel"], "hors_capital_2e": occ2["cout_net_mensuel_hors_capital"],
302 "droits_mutation": f["mutation"]["droits"], "liquidites": f["liquidites"]} 306 "droits_mutation": f["mutation"]["droits"], "liquidites": f["liquidites"]}
303− # 6. pondérations alternatives 307+ # 5 bis : au prix de la promesse d'achat (895 000 $)
304− ex["6"] = rec["alternatives"] 308+ fp = financement(895_000.0, b, D["loyers"], s); occ2p = C.cout_occupation({k: fp[k] for k in ("mise_de_fonds", "service_dette", "capital_rembourse_5ans")}, b, D["loyers"], "2e")
309+ ex["5"]["promesse"] = {"prix": fp["prix"], "mise": fp["mise_de_fonds"], "pret": fp["pret"], "rpv": fp["rpv"], "paiement": fp["paiement_mensuel"], "service_dette": fp["service_dette"], "paiement_tam": fp["paiement_mensuel_tam"],
310+ "droits_mutation": fp["mutation"]["droits"], "liquidites": fp["liquidites"], "capital_moyen_5ans": fp["capital_rembourse_5ans"] / 5, "cout_opportunite": fp["occupation"]["cout_opportunite"],
311+ "cout_net_rc": fp["occupation"]["cout_net_mensuel"], "hors_capital_rc": fp["occupation"]["cout_net_mensuel_hors_capital"], "cout_net_2e": occ2p["cout_net_mensuel"], "hors_capital_2e": occ2p["cout_net_mensuel_hors_capital"]}
312+ # 6. pondérations alternatives + pondération à l'inverse de la variance
313+ ret = rec["retenues"]; sig = {"par_logement_ajuste": rec["se_comparaison"], "mrb": 0.10 * ret["mrb"], "capitalisation": 0.15 * ret["capitalisation"]}
314+ w = {k: 1 / sig[k] ** 2 for k in ret}; tot = sum(w.values()); w = {k: v / tot for k, v in w.items()}
315+ ex["6"] = {**rec["alternatives"], "poids_inverse_variance": w, "valeur_inverse_variance": sum(w[k] * ret[k] for k in ret), "sigmas": sig}
305 # 7. coût : sensibilité et dépréciation extraite 316 # 7. coût : sensibilité et dépréciation extraite
306− ex["7"] = {"cout": D["cout"], "extraite": D["depreciation_extraite"]} 317+ co = D["cout"]; v_final = rec["valeur_finale"]
318+ terrain_egal = v_final - co["contribution_batiment"]; dep_egal = 1 - (v_final - co["terrain"]) / co["cout_neuf"]
319+ ex["7"] = {"cout": co, "extraite_900": D["depreciation_extraite"], "terrain_pour_egaler": terrain_egal, "terrain_m2_pour_egaler": terrain_egal / s["superficie_terrain_m2"],
320+ "taux_dep_pour_egaler": dep_egal, "extraite_1100": cout.extraction_depreciation_marche(v_final, 1100.0 * s["superficie_terrain_m2"], co["cout_neuf"], s["age"])}
307 return ex 321 return ex
308 322
309 323
modified analysis/python/cases/ch48_portefeuille.py +6 −6
@@ -372,22 +372,22 @@ def exercices(D: dict) -> dict:
372 # ex4 : ratios IAAO sur le sous-ensemble montréalais 372 # ex4 : ratios IAAO sur le sous-ensemble montréalais
373 t = D["predites"]; m = t[t["rmr"] == "Montréal"] 373 t = D["predites"]; m = t[t["rmr"] == "Montréal"]
374 out["ex4"] = {**h.statistiques_ratio(m["valeur_predite"].values, m["valeur_2026"].values), "portefeuille": D["iaao"]["portefeuille"]} 374 out["ex4"] = {**h.statistiques_ratio(m["valeur_predite"].values, m["valeur_2026"].values), "portefeuille": D["iaao"]["portefeuille"]}
375− # ex5 : choc de taux généralisé — ρ_taux global 0,90 / régional 0,95 375+ # ex6 : choc de taux généralisé — ρ_taux global 0,90 / régional 0,95
376 mc5 = simuler_portefeuille(pf, dyn, reg, n=mc["n"], graine=GRAINE, rho_taux={"global": 0.90, "regional": 0.95}) 376 mc5 = simuler_portefeuille(pf, dyn, reg, n=mc["n"], graine=GRAINE, rho_taux={"global": 0.90, "regional": 0.95})
377− out["ex5"] = {"q05": mc5["stats"]["q05"], "q95": mc5["stats"]["q95"], "cv": mc5["stats"]["cv"], "var95": mc5["var95_portefeuille"], "ratio_div": mc5["ratio_diversification"], 377+ out["ex6"] = {"q05": mc5["stats"]["q05"], "q95": mc5["stats"]["q95"], "cv": mc5["stats"]["cv"], "var95": mc5["var95_portefeuille"], "ratio_div": mc5["ratio_diversification"],
378 "p_rpv_sup_0.75": mc5["probabilites"]["rpv_sup_0.75"], "base_var95": mc["var95_portefeuille"], "base_ratio_div": mc["ratio_diversification"], "base_cv": mc["stats"]["cv"]} 378 "p_rpv_sup_0.75": mc5["probabilites"]["rpv_sup_0.75"], "base_var95": mc["var95_portefeuille"], "base_ratio_div": mc["ratio_diversification"], "base_cv": mc["stats"]["cv"]}
379− # ex6 : cession des 3 immeubles en zone inondable 379+ # ex7 : cession des 3 immeubles en zone inondable
380 inond = pf[pf["zone_inondable"] == 1]; reste = pf[pf["zone_inondable"] == 0] 380 inond = pf[pf["zone_inondable"] == 1]; reste = pf[pf["zone_inondable"] == 0]
381 mc6 = simuler_portefeuille(reste.reset_index(drop=True), dyn, reg, n=mc["n"], graine=GRAINE) 381 mc6 = simuler_portefeuille(reste.reset_index(drop=True), dyn, reg, n=mc["n"], graine=GRAINE)
382 d6 = dette(reste) 382 d6 = dette(reste)
383− out["ex6"] = {"ids": inond["id_immeuble"].tolist(), "valeur_cedee": float(inond["valeur_2026"].sum()), "dette_remboursee": float(inond["dette"].sum()), "produit_net": float(inond["valeur_2026"].sum() * 0.98 - inond["dette"].sum()), 383+ out["ex7"] = {"ids": inond["id_immeuble"].tolist(), "valeur_cedee": float(inond["valeur_2026"].sum()), "dette_remboursee": float(inond["dette"].sum()), "produit_net": float(inond["valeur_2026"].sum() * 0.98 - inond["dette"].sum()),
384 "rne_perdu": float(inond["rne_2026"].sum()), "taux_pondere_cede": float(inond["rne_2026"].sum() / inond["valeur_2026"].sum()), 384 "rne_perdu": float(inond["rne_2026"].sum()), "taux_pondere_cede": float(inond["rne_2026"].sum() / inond["valeur_2026"].sum()),
385 "apres_valeur": float(reste["valeur_2026"].sum()), "apres_taux_pondere": float(reste["rne_2026"].sum() / reste["valeur_2026"].sum()), "apres_rpv": float(reste["dette"].sum() / reste["valeur_2026"].sum()), 385 "apres_valeur": float(reste["valeur_2026"].sum()), "apres_taux_pondere": float(reste["rne_2026"].sum() / reste["valeur_2026"].sum()), "apres_rpv": float(reste["dette"].sum() / reste["valeur_2026"].sum()),
386 "apres_rcd": d6["total"]["rcd_agrege"], "avant_rcd": det["total"]["rcd_agrege"], "apres_cv": mc6["stats"]["cv"], "avant_cv": mc["stats"]["cv"], "apres_var95": mc6["var95_portefeuille"], "avant_var95": mc["var95_portefeuille"], 386 "apres_rcd": d6["total"]["rcd_agrege"], "avant_rcd": det["total"]["rcd_agrege"], "apres_cv": mc6["stats"]["cv"], "avant_cv": mc["stats"]["cv"], "apres_var95": mc6["var95_portefeuille"], "avant_var95": mc["var95_portefeuille"],
387 "apres_ratio_div": mc6["ratio_diversification"], "avant_ratio_div": mc["ratio_diversification"]} 387 "apres_ratio_div": mc6["ratio_diversification"], "avant_ratio_div": mc["ratio_diversification"]}
388− # ex7 : croissance de P36 (72 log., Québec, inondable) vs agrégat de Québec ; choc pandémique 388+ # ex5 : croissance de P36 (72 log., Québec, inondable) vs agrégat de Québec ; choc pandémique
389 cr = dyn["par_immeuble"].set_index("id_immeuble").loc["P36"] 389 cr = dyn["par_immeuble"].set_index("id_immeuble").loc["P36"]
390− out["ex7"] = {"croissance_P36": float(cr["croissance_annuelle"]), "volatilite_P36": float(cr["volatilite"]), "croissance_quebec": float(dyn["par_rmr"].loc["Québec", "croissance_agregee"]), 390+ out["ex5"] = {"croissance_P36": float(cr["croissance_annuelle"]), "volatilite_P36": float(cr["volatilite"]), "croissance_quebec": float(dyn["par_rmr"].loc["Québec", "croissance_agregee"]),
391 "pandemie_quebec": dyn["pandemie"]["Québec"], "pandemie_portefeuille": dyn["pandemie"]["Portefeuille"], "rendement_total_P36": float(pf.set_index("id_immeuble").loc["P36", "taux_global"]) + float(cr["croissance_annuelle"])} 391 "pandemie_quebec": dyn["pandemie"]["Québec"], "pandemie_portefeuille": dyn["pandemie"]["Portefeuille"], "rendement_total_P36": float(pf.set_index("id_immeuble").loc["P36", "taux_global"]) + float(cr["croissance_annuelle"])}
392 return out 392 return out
393 393
modified analysis/python/figures/ch37_figures.py +14 −13
@@ -27,13 +27,15 @@ def _k(x, pos=None): return f"{x/1000:,.0f}".replace(",", " ")
27 def fig_arbre(res): 27 def fig_arbre(res):
28 from sklearn.tree import plot_tree 28 from sklearn.tree import plot_tree
29 arbre = res["ajustes"]["Arbre (profondeur 3)"] 29 arbre = res["ajustes"]["Arbre (profondeur 3)"]
30− noms = [c37.ETIQUETTES[c].replace(" (m²)", " (m²)") for c in res["Xm"].columns] 30+ COURTS = {"superficie": "Superficie (m²)", "terrain": "Terrain (m²)", "age": "Âge", "qualite": "Qualité", "garage": "Garage", "sous_sol": "Sous-sol", "piscine": "Piscine",
31− fig, ax = plt.subplots(figsize=(LARGEUR, 3.6)) 31+ "etages": "À étages", "dist_centre": "Dist. centre (km)", "lat": "Latitude", "lon": "Longitude", "mois": "Mois"}
32− plot_tree(arbre, feature_names=noms, filled=False, impurity=False, rounded=True, fontsize=6, ax=ax, precision=3) 32+ noms = [COURTS.get(c, c.replace("sect_", "Secteur ")) for c in res["Xm"].columns]
33+ fig, ax = plt.subplots(figsize=(LARGEUR, 3.4))
34+ plot_tree(arbre, feature_names=noms, filled=False, impurity=False, rounded=True, fontsize=6, ax=ax, precision=1)
33 for t in ax.texts: 35 for t in ax.texts:
34 s = t.get_text() 36 s = t.get_text()
35 s = re.sub(r"samples = (\d+)", lambda m: f"n = {m.group(1)}", s) 37 s = re.sub(r"samples = (\d+)", lambda m: f"n = {m.group(1)}", s)
36− s = re.sub(r"value = (-?\d+\.\d+)", lambda m: f"ln P = {float(m.group(1)):.3f}\n≈ {math.exp(float(m.group(1)))/1000:,.0f} k$".replace(",", " "), s) 38+ s = re.sub(r"value = (-?\d+\.\d+)", lambda m: f"≈ {math.exp(float(m.group(1)))/1000:,.0f} k$".replace(",", " "), s)
37 s = s.replace(" <= ", " ≤ ") 39 s = s.replace(" <= ", " ≤ ")
38 t.set_text(s); t.set_color(palette.ink) 40 t.set_text(s); t.set_color(palette.ink)
39 bb = t.get_bbox_patch() 41 bb = t.get_bbox_patch()
@@ -50,7 +52,7 @@ def fig_apprentissage(res):
50 ax.plot(it, cc["entrainement"], color=palette.cat[i], lw=1.0, ls="--", alpha=0.85) 52 ax.plot(it, cc["entrainement"], color=palette.cat[i], lw=1.0, ls="--", alpha=0.85)
51 ax.plot([cc["optimum"]], [cc["rmse_min"]], marker="o", ms=4, color=palette.cat[i]) 53 ax.plot([cc["optimum"]], [cc["rmse_min"]], marker="o", ms=4, color=palette.cat[i])
52 ax.axhline(ref, color=palette.ink2, lw=0.9, ls=":") 54 ax.axhline(ref, color=palette.ink2, lw=0.9, ls=":")
53− ax.text(1180, ref + 0.002, f"hédonique de référence (validation croisée) : {ref:.4f}", ha="right", va="bottom", fontsize=7.5, color=palette.ink2) 55+ ax.text(30, ref - 0.004, f"hédonique de référence (validation croisée) : {ref:.4f}".replace(".", ","), ha="left", va="top", fontsize=7.5, color=palette.ink2)
54 ax.plot([], [], color=palette.ink2, lw=1.0, ls="--", label="erreur d'entraînement (tiretés)") 56 ax.plot([], [], color=palette.ink2, lw=1.0, ls="--", label="erreur d'entraînement (tiretés)")
55 ax.set_xlabel("Nombre d'arbres (itérations du boosting, ν = 0,03)"); ax.set_ylabel("Racine de l'erreur quadratique moyenne (log du prix)") 57 ax.set_xlabel("Nombre d'arbres (itérations du boosting, ν = 0,03)"); ax.set_ylabel("Racine de l'erreur quadratique moyenne (log du prix)")
56 ax.set_ylim(0.0, 0.20); ax.set_xlim(0, 1200); ax.legend(loc="upper right", ncol=1) 58 ax.set_ylim(0.0, 0.20); ax.set_xlim(0, 1200); ax.legend(loc="upper right", ncol=1)
@@ -58,7 +60,7 @@ def fig_apprentissage(res):
58 60
59 def fig_erreurs(res): 61 def fig_erreurs(res):
60 comp = res["comparaison"]; y = res["y"]; noms = list(c37.MODELES) 62 comp = res["comparaison"]; y = res["y"]; noms = list(c37.MODELES)
61− fig, axes = plt.subplots(1, 3, figsize=(LARGEUR, 3.0), sharey=True) 63+ fig, axes = plt.subplots(1, 3, figsize=(LARGEUR, 3.3), sharey=True)
62 titres = {"aleatoire": "Plis aléatoires (10)", "spatial": "Blocs spatiaux par secteur (10)", "temporel": "Prospectif : ventes de 2026"} 64 titres = {"aleatoire": "Plis aléatoires (10)", "spatial": "Blocs spatiaux par secteur (10)", "temporel": "Prospectif : ventes de 2026"}
63 for ax, sch in zip(axes, ["aleatoire", "spatial", "temporel"]): 65 for ax, sch in zip(axes, ["aleatoire", "spatial", "temporel"]):
64 data = [] 66 data = []
@@ -68,10 +70,9 @@ def fig_erreurs(res):
68 medianprops=dict(color=palette.ink, lw=1.2), whiskerprops=dict(color=palette.ink2, lw=0.8), capprops=dict(color=palette.ink2, lw=0.8)) 70 medianprops=dict(color=palette.ink, lw=1.2), whiskerprops=dict(color=palette.ink2, lw=0.8), capprops=dict(color=palette.ink2, lw=0.8))
69 for patch, nom in zip(bp["boxes"], noms): patch.set_facecolor(COUL[nom]); patch.set_alpha(0.55); patch.set_edgecolor(palette.ink2) 71 for patch, nom in zip(bp["boxes"], noms): patch.set_facecolor(COUL[nom]); patch.set_alpha(0.55); patch.set_edgecolor(palette.ink2)
70 ax.axhline(0, color=palette.ink2, lw=0.8, ls=":") 72 ax.axhline(0, color=palette.ink2, lw=0.8, ls=":")
71− ax.set_xticks(range(1, len(noms) + 1)); ax.set_xticklabels([COURT[n] for n in noms], rotation=35, ha="right") 73+ ax.set_xticks(range(1, len(noms) + 1))
74+ ax.set_xticklabels([f"{COURT[n]}\nCOD {comp['metriques'][n][sch]['COD']:.1f}".replace(".", ",") for n in noms], rotation=45, ha="right", fontsize=7)
72 ax.set_title(titres[sch], fontsize=8.5) 75 ax.set_title(titres[sch], fontsize=8.5)
73− for i, nom in enumerate(noms):
74− mm = comp["metriques"][nom][sch]; ax.text(i + 1, 43, f"COD\n{mm['COD']:.1f}".replace(".", ","), ha="center", va="top", fontsize=6.8, color=palette.ink)
75 axes[0].set_ylabel("Erreur de prédiction hors échantillon (%)"); axes[0].set_ylim(-45, 45) 76 axes[0].set_ylabel("Erreur de prédiction hors échantillon (%)"); axes[0].set_ylim(-45, 45)
76 savefig(fig, "ch37/ch37-fig-erreurs.pdf") 77 savefig(fig, "ch37/ch37-fig-erreurs.pdf")
77 78
@@ -119,14 +120,14 @@ def fig_pdp(res):
119 pdp = res["pdp"]; v = res["ventes"] 120 pdp = res["pdp"]; v = res["ventes"]
120 fig, axes = plt.subplots(1, 3, figsize=(LARGEUR, 2.9)) 121 fig, axes = plt.subplots(1, 3, figsize=(LARGEUR, 2.9))
121 series = [("vraie", "loi de génération", palette.ink, ":"), ("Hédonique (référence)", "hédonique", palette.cat[0], "-"), ("Forêt aléatoire", "forêt aléatoire", palette.cat[1], "-"), ("Gradient boosting", "boosting", palette.cat[2], "-")] 122 series = [("vraie", "loi de génération", palette.ink, ":"), ("Hédonique (référence)", "hédonique", palette.cat[0], "-"), ("Forêt aléatoire", "forêt aléatoire", palette.cat[1], "-"), ("Gradient boosting", "boosting", palette.cat[2], "-")]
122− for ax, (cle, var, xlab) in zip(axes, [("superficie", "superficie_habitable_m2", "Superficie habitable (m²)"), ("age", "age", "Âge (années)"), ("age_scenario", "age", "Âge (années), scénario non linéaire")]): 123+ for ax, (cle, var, xlab) in zip(axes, [("superficie", "superficie_habitable_m2", "Superficie habitable (m²)"), ("age", "age", "Âge (années)"), ("age_scenario", "age", "Âge (années), scénario")]):
123 d = pdp[cle]; g = d["grille"] 124 d = pdp[cle]; g = d["grille"]
124 for k, lab, col, ls in series: 125 for k, lab, col, ls in series:
125 if k in d: ax.plot(g, _centrer(d[k]) * 100, color=col, ls=ls, lw=1.7 if k == "vraie" else 1.4, label=lab) 126 if k in d: ax.plot(g, _centrer(d[k]) * 100, color=col, ls=ls, lw=1.7 if k == "vraie" else 1.4, label=lab)
126 q = np.percentile(v[var], np.arange(5, 100, 5)); ax.plot(q, np.full_like(q, ax.get_ylim()[0] if False else -38), "|", color=palette.ink2, ms=5, alpha=0.8) 127 q = np.percentile(v[var], np.arange(5, 100, 5)); ax.plot(q, np.full_like(q, ax.get_ylim()[0] if False else -38), "|", color=palette.ink2, ms=5, alpha=0.8)
127 ax.set_xlabel(xlab); ax.set_ylim(-42, 42) 128 ax.set_xlabel(xlab); ax.set_ylim(-42, 42)
128 axes[0].set_ylabel("Dépendance partielle, écart au niveau moyen (%)"); axes[0].legend(loc="upper left", fontsize=7) 129 axes[0].set_ylabel("Dépendance partielle, écart au niveau moyen (%)"); axes[0].legend(loc="upper left", fontsize=7)
129− axes[2].text(0.97, 0.04, "prime +12 % (qualité ≥ 4, âge ≥ 40)\n« mur » −10 % (25 à 45 ans)", transform=axes[2].transAxes, ha="right", va="bottom", fontsize=6.8, color=palette.ink2) 130+ axes[2].text(0.97, 0.97, "prime +12 % (qualité ≥ 4, âge ≥ 40)\n« mur » −10 % (25 à 45 ans)", transform=axes[2].transAxes, ha="right", va="top", fontsize=6.8, color=palette.ink2)
130 savefig(fig, "ch37/ch37-fig-pdp.pdf") 131 savefig(fig, "ch37/ch37-fig-pdp.pdf")
131 132
132 def fig_waterfall(res, top: int = 8): 133 def fig_waterfall(res, top: int = 8):
@@ -143,8 +144,8 @@ def fig_waterfall(res, top: int = 8):
143 cur += ph; ys.append(lab) 144 cur += ph; ys.append(lab)
144 fin = math.exp(cur) 145 fin = math.exp(cur)
145 ax.axvline(math.exp(base), color=palette.ink2, lw=0.9, ls=":"); ax.axvline(fin, color=palette.ink, lw=0.9, ls="--") 146 ax.axvline(math.exp(base), color=palette.ink2, lw=0.9, ls=":"); ax.axvline(fin, color=palette.ink, lw=0.9, ls="--")
146− ax.text(math.exp(base), -0.9, f"base : {math.exp(base):,.0f} $".replace(",", " "), ha="center", va="top", fontsize=7.5, color=palette.ink2) 147+ ax.text(math.exp(base) - 3000, -0.9, f"base : {math.exp(base):,.0f} $".replace(",", " "), ha="right", va="top", fontsize=7.5, color=palette.ink2)
147− ax.text(fin, len(etapes) - 0.2, f"prédiction : {fin:,.0f} $".replace(",", " "), ha="center", va="bottom", fontsize=7.5, color=palette.ink) 148+ ax.text(fin + 3000, -0.9, f"prédiction brute : {fin:,.0f} $".replace(",", " "), ha="left", va="top", fontsize=7.5, color=palette.ink)
148 ax.set_yticks(range(len(etapes))); ax.set_yticklabels(ys); ax.invert_yaxis() 149 ax.set_yticks(range(len(etapes))); ax.set_yticklabels(ys); ax.invert_yaxis()
149 ax.set_xlabel("Prix prédit (k$) — chaque contribution est un facteur multiplicatif exp(φ)") 150 ax.set_xlabel("Prix prédit (k$) — chaque contribution est un facteur multiplicatif exp(φ)")
150 ax.xaxis.set_major_formatter(FuncFormatter(_k)); ax.set_xlim(430_000, 700_000); ax.set_ylim(len(etapes) - 0.3, -1.5) 151 ax.xaxis.set_major_formatter(FuncFormatter(_k)); ax.set_xlim(430_000, 700_000); ax.set_ylim(len(etapes) - 0.3, -1.5)
modified analysis/python/figures/ch40_figures.py +2 −2
@@ -105,13 +105,13 @@ def fig_rcd(D):
105 105
106 def fig_lhs(D): 106 def fig_lhs(D):
107 rng = np.random.default_rng(5); n = 12 107 rng = np.random.default_rng(5); n = 12
108− fig, (a1, a2, a3) = plt.subplots(1, 3, figsize=(LARGEUR, 2.6), gridspec_kw={"wspace": 0.35, "width_ratios": [1, 1, 1.6]}) 108+ fig, (a1, a2, a3) = plt.subplots(1, 3, figsize=(LARGEUR, 2.6), gridspec_kw={"wspace": 0.85, "width_ratios": [0.85, 0.85, 1.7]})
109 U1 = rng.random((n, 2)); U2 = m.hypercube_latin(n, 2, rng) 109 U1 = rng.random((n, 2)); U2 = m.hypercube_latin(n, 2, rng)
110 for ax, U, t in [(a1, U1, "Simple"), (a2, U2, "Hypercube latin")]: 110 for ax, U, t in [(a1, U1, "Simple"), (a2, U2, "Hypercube latin")]:
111 for g in np.arange(0, 1.0001, 1 / n): ax.axhline(g, color=palette.grid, lw=0.5); ax.axvline(g, color=palette.grid, lw=0.5) 111 for g in np.arange(0, 1.0001, 1 / n): ax.axhline(g, color=palette.grid, lw=0.5); ax.axvline(g, color=palette.grid, lw=0.5)
112 ax.scatter(U[:, 0], U[:, 1], s=18, color=palette.cat[0], zorder=3); ax.set_xlim(0, 1); ax.set_ylim(0, 1); ax.set_aspect("equal"); ax.set_title(t + f", n = {n}", loc="left", fontsize=8) 112 ax.scatter(U[:, 0], U[:, 1], s=18, color=palette.cat[0], zorder=3); ax.set_xlim(0, 1); ax.set_ylim(0, 1); ax.set_aspect("equal"); ax.set_title(t + f", n = {n}", loc="left", fontsize=8)
113 ax.set_xticks([0, 0.5, 1]); ax.set_yticks([0, 0.5, 1]); ax.grid(False); ax.set_xlabel("u₁"); ax.set_ylabel("u₂") 113 ax.set_xticks([0, 0.5, 1]); ax.set_yticks([0, 0.5, 1]); ax.grid(False); ax.set_xlabel("u₁"); ax.set_ylabel("u₂")
114− l = D["lhs"].set_index("statistique"); noms = {"moyenne": "moyenne", "ecart_type": "écart-type", "mediane": "médiane", "q05": "quantile 5 %", "q95": "quantile 95 %", "p_V_2M": "P(V < 2 M$)"} 114+ l = D["lhs"].set_index("statistique"); noms = {"moyenne": "moyenne", "ecart_type": "écart-type", "mediane": "médiane", "q05": "q₅", "q95": "q₉₅", "p_V_2M": "P(V<2 M$)"}
115 ordre = ["moyenne", "ecart_type", "mediane", "p_V_2M", "q95", "q05"]; vals = [min(l.loc[k, "ratio_variance"], 300) for k in ordre] 115 ordre = ["moyenne", "ecart_type", "mediane", "p_V_2M", "q95", "q05"]; vals = [min(l.loc[k, "ratio_variance"], 300) for k in ordre]
116 a3.barh(range(len(ordre)), vals, color=palette.cat[1]); a3.set_yticks(range(len(ordre))); a3.set_yticklabels([noms[k] for k in ordre]); a3.set_xscale("log") 116 a3.barh(range(len(ordre)), vals, color=palette.cat[1]); a3.set_yticks(range(len(ordre))); a3.set_yticklabels([noms[k] for k in ordre]); a3.set_xscale("log")
117 a3.axvline(1, color=palette.ink, lw=0.8); a3.set_xlabel("Variance simple / variance hypercube latin (log)") 117 a3.axvline(1, color=palette.ink, lw=0.8); a3.set_xlabel("Variance simple / variance hypercube latin (log)")
added analysis/python/figures/ch45_figures.py +165 −0
@@ -0,0 +1,165 @@
1+#!/usr/bin/env python3
2+"""Chapitre 45 — figures du dossier (cas 1, DONNÉES SYNTHÉTIQUES) : carte des comparables, cascade des ajustements,
3+fourchettes par méthode et conclusion, profil de dépréciation par composante, financement de l'acheteur.
4+Tous les chiffres proviennent de analysis/python/cases/ch45_dossier.py (qui importe les scripts des chapitres de méthode).
5+Usage (racine du dépôt) : PYTHONPATH=analysis/python python3 analysis/python/figures/ch45_figures.py"""
6+from __future__ import annotations
7+import sys, pathlib, math
8+import numpy as np
9+import matplotlib.pyplot as plt
10+from matplotlib.ticker import FuncFormatter
11+sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1]))
12+sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1] / "cases"))
13+from traite.style import setup, palette, savefig, LARGEUR
14+import ch45_dossier as ch
15+import ch17_ajustements as c17
16+
17+def fmt_k(x, pos=None):
18+ return f"{x/1000:,.0f}".replace(",", " ") + " k$"
19+
20+def fmt_d(x):
21+ return f"{x:,.0f} $".replace(",", " ")
22+
23+
24+def fig_carte(D):
25+ """Sujet, 16 candidats de l'entonnoir du ch. 16 et 5 comparables retenus ; distances en km autour du sujet (projection locale)."""
26+ s = D["sujet"]; cand = D["candidats"]; comps = D["comparables"]
27+ lat0, lon0 = s["lat"], s["lon"]; kx = 111.32 * math.cos(math.radians(lat0)); ky = 110.57
28+ fig, ax = plt.subplots(figsize=(LARGEUR, 3.6))
29+ for r_km, lab in [(1.5, "1,5 km"), (3.0, "3 km")]:
30+ ax.add_patch(plt.Circle((0, 0), r_km, fill=False, color=palette.ink2, lw=0.7, ls="--"))
31+ ax.text(r_km * 0.72, r_km * 0.72, lab, fontsize=7, color=palette.ink2)
32+ autres = cand[~cand["id_vente"].isin(comps["id_vente"])]
33+ ax.scatter((autres["lon"] - lon0) * kx, (autres["lat"] - lat0) * ky, s=22 + (autres["prix_vente"] - 450000) / 4000, color=palette.cat[0], alpha=0.55, label="11 autres candidats (entonnoir du ch. 16)", zorder=3)
34+ ax.scatter((comps["lon"] - lon0) * kx, (comps["lat"] - lat0) * ky, s=30 + (comps["prix_vente"] - 450000) / 4000, color=palette.cat[1], edgecolor="white", lw=0.6, label="5 comparables retenus", zorder=4)
35+ for _, r in comps.iterrows():
36+ ax.annotate(f"{r['id_vente']}\n{fmt_d(r['prix_vente'])}", ((r["lon"] - lon0) * kx, (r["lat"] - lat0) * ky), textcoords="offset points", xytext=(6, 4), fontsize=6.5, color=palette.ink)
37+ ax.scatter([0], [0], marker="*", s=160, color=palette.ink, zorder=5, label="sujet (adresse fictive, secteur Hull)")
38+ ax.set_aspect("equal"); ax.set_xlim(-3.4, 3.4); ax.set_ylim(-3.4, 3.4)
39+ ax.set_xlabel("Est–ouest (km, à partir du sujet)"); ax.set_ylabel("Nord–sud (km)")
40+ ax.legend(loc="upper left", fontsize=7, frameon=False)
41+ ax.set_title("Taille des points proportionnelle au prix de vente", loc="left", fontsize=8)
42+ fig.tight_layout()
43+ savefig(fig, "ch45/ch45-fig-carte-comparables.pdf")
44+
45+
46+def fig_cascade(D):
47+ """Prix bruts → ajustements par groupe → prix ajustés, pour les 5 comparables (grille du ch. 17), et valeur pondérée."""
48+ a = D["adj17"]; grp = [g for g in c17.GROUPES if (a[g].abs() > 1).any()]
49+ fig, ax = plt.subplots(figsize=(LARGEUR, 3.6))
50+ x = np.arange(len(a)); w = 0.36
51+ ax.bar(x - w / 2, a["prix_vente"], width=w, color=palette.cat[0], alpha=0.5, label="prix de vente")
52+ ax.bar(x + w / 2, a["prix_ajuste"], width=w, color=palette.cat[1], label="prix ajusté")
53+ # ajustements empilés (positifs vers le haut, négatifs vers le bas) sur le prix brut
54+ cols = [palette.cat[(i + 2) % len(palette.cat)] for i in range(len(grp))]
55+ for i, (_, r) in enumerate(a.iterrows()):
56+ pos = r["prix_vente"]; neg = r["prix_vente"]
57+ for g, c in zip(grp, cols):
58+ v = r[g]
59+ if v >= 0:
60+ ax.bar(x[i] + w / 2, v, bottom=pos, width=w * 0.55, color=c, edgecolor="white", lw=0.3, label=c17.LIBELLES[g] if i == 0 else None); pos += v
61+ else:
62+ ax.bar(x[i] + w / 2, v, bottom=neg, width=w * 0.55, color=c, edgecolor="white", lw=0.3, label=c17.LIBELLES[g] if i == 0 else None); neg += v
63+ ax.text(x[i] + w / 2, r["prix_ajuste"] + 6000, fmt_d(r["prix_ajuste"]), ha="center", fontsize=6.5)
64+ ax.text(x[i] - w / 2, r["prix_vente"] + 6000, fmt_d(r["prix_vente"]), ha="center", fontsize=6.5, color=palette.ink2)
65+ ax.text(x[i], 455000, f"brut {r['ajust_brut_pct']*100:.1f} %\npoids {D['poids17'][i]:.3f}".replace(".", ","), ha="center", fontsize=6.5, color=palette.ink2)
66+ ax.axhline(D["V_comp"], color=palette.ink, lw=1.0, ls="--"); ax.text(len(a) - 0.5, D["V_comp"] + 4000, f"valeur pondérée {fmt_d(D['V_comp'])}", ha="right", fontsize=7)
67+ ax.axhline(D["V_hed"], color=palette.ink2, lw=0.8, ls=":"); ax.text(len(a) - 0.5, D["V_hed"] + 4000, f"prédiction hédonique {fmt_d(D['V_hed'])}", ha="right", fontsize=7, color=palette.ink2)
68+ ax.set_xticks(x); ax.set_xticklabels(a["id_vente"]); ax.set_ylim(440000, 700000); ax.yaxis.set_major_formatter(FuncFormatter(fmt_k))
69+ ax.set_ylabel("Prix ($)"); ax.legend(loc="upper left", fontsize=6.3, frameon=False, ncol=3)
70+ fig.tight_layout()
71+ savefig(fig, "ch45/ch45-fig-grille-cascade.pdf")
72+
73+
74+def fig_fourchettes(D):
75+ """Indications ± 1 écart-type (ch. 20), IC et IP hédoniques (ch. 18), conclusion, fourchette conclue, bande bootstrap 90 %,
76+ rôle (fictif) et valeur réelle au 2024-07-01 (ch. 9), prêt assuré maximal."""
77+ fig, ax = plt.subplots(figsize=(LARGEUR, 3.5))
78+ lignes = [("Comparaison (ch. 17)", D["indications"]["comparaison"], D["ecarts_types20"]["comparaison"], None),
79+ ("Hédonique (ch. 18)", D["indications"]["hedonique"], D["ecarts_types20"]["hedonique"], (D["ip95"], D["ic95_valeur"])),
80+ ("Coût (ch. 24-25)", D["indications"]["cout"], D["ecarts_types20"]["cout"], None),
81+ ("Combinaison 0,40/0,45/0,15 (ch. 20)", D["V_raisonnee"], D["sd_conclusion"], None)]
82+ for i, (lab, v, sd, extra) in enumerate(lignes):
83+ y = len(lignes) - i
84+ if extra:
85+ ax.plot(extra[0], [y, y], color=palette.cat[0], lw=1.0, alpha=0.5); ax.text(extra[0][1] + 3000, y, "IP 95 % du prix", fontsize=6.5, va="center", color=palette.ink2)
86+ ax.plot(extra[1], [y, y], color=palette.cat[0], lw=5, alpha=0.35, solid_capstyle="butt")
87+ ax.errorbar([v], [y], xerr=[[sd], [sd]], fmt="o", color=palette.cat[1] if i < 3 else palette.ink, capsize=3, ms=5, lw=1.4)
88+ ax.text(v, y + 0.22, fmt_d(v), ha="center", fontsize=7)
89+ ax.text(515000, y, lab, ha="right", va="center", fontsize=7.5)
90+ ax.axvspan(*D["fourchette"], color=palette.cat[1], alpha=0.10)
91+ ax.axvspan(*D["bande90"], color=palette.cat[1], alpha=0.14)
92+ ax.axvline(D["conclusion"], color=palette.ink, lw=1.3); ax.text(D["conclusion"], 4.75, f"valeur la plus probable {fmt_d(D['conclusion'])}", ha="center", fontsize=7.5)
93+ ax.text(D["fourchette"][0], 0.35, f"fourchette {fmt_d(D['fourchette'][0])} – {fmt_d(D['fourchette'][1])}", fontsize=7, ha="left")
94+ ax.text(D["bande90"][0], 0.08, f"bande bootstrap 90 % {fmt_d(D['bande90'][0])} – {fmt_d(D['bande90'][1])}", fontsize=6.5, ha="left", color=palette.ink2)
95+ ax.axvline(D["role"], color=palette.ink2, lw=0.8, ls=":"); ax.text(D["role"], 0.35, "rôle (fictif)\n" + fmt_d(D["role"]), ha="center", fontsize=6.5, color=palette.ink2)
96+ ax.axvline(D["valeur_reelle_2024"], color=palette.ink2, lw=0.8, ls=":"); ax.text(D["valeur_reelle_2024"], 4.35, "valeur réelle\n2024-07-01", ha="center", fontsize=6.5, color=palette.ink2)
97+ ax.set_yticks([]); ax.set_ylim(-0.1, 5.1); ax.set_xlim(445000, 775000); ax.xaxis.set_major_formatter(FuncFormatter(fmt_k))
98+ ax.set_xlabel("Valeur ($) — points : indications ; barres : ± 1 écart-type attribué au ch. 20")
99+ fig.tight_layout()
100+ savefig(fig, "ch45/ch45-fig-fourchettes.pdf")
101+
102+
103+def fig_depreciation(D):
104+ """(a) Dépréciation ventilée par composante (ch. 11) contre dépréciation extraite du marché (ch. 24) ;
105+ (b) décomposition de la valeur par le coût : terrain + coût neuf − dépréciation."""
106+ f = D["fiche"].copy(); f["dep"] = f["ratio"] * f["cout_neuf"]
107+ f = f.sort_values("dep", ascending=True)
108+ fig, axes = plt.subplots(1, 2, figsize=(LARGEUR, 4.0), gridspec_kw={"width_ratios": [1.45, 1]})
109+ ax = axes[0]
110+ y = np.arange(len(f))
111+ ax.barh(y, f["cout_neuf"], color=palette.cat[0], alpha=0.25, label="coût neuf de la composante")
112+ ax.barh(y, f["dep"], color=palette.cat[1], label="dépréciation ventilée (âge effectif / vie utile)")
113+ ax.set_yticks(y); ax.set_yticklabels([c if len(c) < 34 else c[:32] + "…" for c in f["composante"]], fontsize=6)
114+ ax.xaxis.set_major_formatter(FuncFormatter(fmt_k)); ax.legend(loc="lower right", fontsize=6.5, frameon=False)
115+ ax.set_title(f"(a) Ventilée : {fmt_d(D['dv11']['total'])} ({D['dv11']['taux']*100:.1f} % du coût neuf)".replace(".", ","), loc="left", fontsize=8)
116+ ax = axes[1]
117+ cats = ["Terrain\n(ch. 25)", "Coût neuf\n(ch. 21)", "Dépréciation\nextraite\n(ch. 24)", "Carence\nsalle d'eau", "Valeur\npar le coût"]
118+ vals = [D["V_L"], D["CN"], -D["D_ext"], -D["D_fonc"], D["V_cout"]]
119+ bottoms = [0, D["V_L"], D["V_L"] + D["CN"] - D["D_ext"], D["V_L"] + D["CN"] - D["D_ext"] - D["D_fonc"], 0]
120+ cols = [palette.cat[2], palette.cat[0], palette.cat[1], palette.cat[1], palette.ink]
121+ ax.bar(cats, [abs(v) for v in vals], bottom=bottoms, color=cols, edgecolor="white", lw=0.5)
122+ for i, (v, b) in enumerate(zip(vals, bottoms)):
123+ ax.text(i, b + abs(v) + 8000, fmt_d(abs(v)), ha="center", fontsize=6.5)
124+ ax.axhline(D["V_L"] + D["CN"], color=palette.ink2, lw=0.7, ls=":"); ax.text(1.5, D["V_L"] + D["CN"] + 8000, f"terrain + coût neuf {fmt_d(D['V_L'] + D['CN'])}", fontsize=6.5, ha="center", color=palette.ink2)
125+ ax.yaxis.set_major_formatter(FuncFormatter(fmt_k)); ax.tick_params(axis="x", labelsize=6.5); ax.set_ylim(0, 760000)
126+ ax.set_title(f"(b) Extraction : {D['taux_tot']*100:.2f} % → {fmt_d(D['V_cout_arrondie'])}".replace(".", ","), loc="left", fontsize=8)
127+ fig.tight_layout(w_pad=1.5)
128+ savefig(fig, "ch45/ch45-fig-depreciation.pdf")
129+
130+
131+def fig_financement(D):
132+ """(a) Paiement mensuel et paiement au taux admissible selon la mise de fonds ; (b) paiement au renouvellement selon la hausse de taux."""
133+ F = D["financement"]; ren = D["renouvellement"]
134+ fig, axes = plt.subplots(1, 2, figsize=(LARGEUR, 3.3))
135+ ax = axes[0]
136+ keys = ["minimale", "10 %", "20 %", "minimale 30 ans"]; labs = ["5,87 %\n(min.)\n25 ans", "10 %\n25 ans", "20 %\n(non assuré)\n25 ans", "5,87 %\n30 ans"]
137+ x = np.arange(len(keys)); w = 0.38
138+ ax.bar(x - w / 2, [F[k]["paiement"] for k in keys], width=w, color=palette.cat[1], label="paiement au taux du contrat")
139+ ax.bar(x + w / 2, [F[k]["paiement_mqr"] for k in keys], width=w, color=palette.cat[0], alpha=0.6, label="paiement au taux admissible minimal")
140+ for i, k in enumerate(keys):
141+ ax.text(x[i] - w / 2, F[k]["paiement"] + 40, f"{F[k]['paiement']:,.0f}".replace(",", " "), ha="center", fontsize=6.5)
142+ ax.text(x[i] + w / 2, F[k]["paiement_mqr"] + 40, f"{F[k]['paiement_mqr']:,.0f}".replace(",", " "), ha="center", fontsize=6.5, color=palette.ink2)
143+ ax.text(x[i], 300, f"prime\n{fmt_d(F[k]['prime'])}" if F[k]["prime"] else "sans\nprime", ha="center", fontsize=6.3, color="white")
144+ ax.set_xticks(x); ax.set_xticklabels(labs, fontsize=7); ax.set_ylabel("Paiement mensuel ($)"); ax.set_ylim(0, 4600)
145+ ax.legend(loc="upper right", fontsize=6.5, frameon=False); ax.set_title(f"(a) Prix {fmt_d(D['prix'])}, taux {F['minimale']['taux']*100:.2f} % / {F['20 %']['taux']*100:.2f} %".replace(".", ","), loc="left", fontsize=8)
146+ ax = axes[1]
147+ ax.plot(ren["hausse_pb"], ren["paiement"], marker="o", color=palette.cat[1], lw=1.6, label="paiement mensuel")
148+ for _, r in ren.iterrows():
149+ ax.annotate(f"{r['paiement']:,.0f} $\n({r['hausse_paiement_pct']*100:+.1f} %)".replace(",", " ").replace(".", ","), (r["hausse_pb"], r["paiement"]), textcoords="offset points", xytext=(0, 8), ha="center", fontsize=6.5)
150+ ax.axhline(F["minimale"]["paiement_mqr"], color=palette.cat[0], lw=0.9, ls="--"); ax.text(300, F["minimale"]["paiement_mqr"] + 25, "paiement de qualification initial", fontsize=6.5, ha="right", color=palette.cat[0])
151+ ax.set_xlabel("Hausse du taux au renouvellement (points de base)"); ax.set_ylabel("Paiement mensuel ($)"); ax.set_ylim(2900, 4400)
152+ ax.set_xticks(ren["hausse_pb"]); ax.set_title(f"(b) Solde à 60 mois {fmt_d(F['minimale']['solde_terme'])}, 20 ans restants", loc="left", fontsize=8)
153+ fig.tight_layout(w_pad=1.5)
154+ savefig(fig, "ch45/ch45-fig-financement.pdf")
155+
156+
157+def main():
158+ setup()
159+ D = ch.dossier()
160+ fig_carte(D); fig_cascade(D); fig_fourchettes(D); fig_depreciation(D); fig_financement(D)
161+ print("figures ch45 écrites dans assets/figures/ch45/")
162+
163+
164+if __name__ == "__main__":
165+ main()
modified analysis/python/figures/ch46_figures.py +3 −3
@@ -67,9 +67,9 @@ def fig_mrb(D):
67 ax.hist(c.loc[(c["quartier"] == "Limoilou") & (c["nb_logements"] == 3), "mrb"], bins=np.arange(12, 32, 1.0), color=palette.cat[0], alpha=0.8, label="28 triplex de Limoilou") 67 ax.hist(c.loc[(c["quartier"] == "Limoilou") & (c["nb_logements"] == 3), "mrb"], bins=np.arange(12, 32, 1.0), color=palette.cat[0], alpha=0.8, label="28 triplex de Limoilou")
68 for i, (_, r) in enumerate(comp5.iterrows()): 68 for i, (_, r) in enumerate(comp5.iterrows()):
69 ax.axvline(r["mrb"], color=palette.cat[1], lw=1.2, label="5 comparables (MRB 20,75 à 23,35)" if i == 0 else None) 69 ax.axvline(r["mrb"], color=palette.cat[1], lw=1.2, label="5 comparables (MRB 20,75 à 23,35)" if i == 0 else None)
70− ax.axvline(rec["mrb_implicite"], color=palette.ink, lw=1.6, ls="--"); ax.text(12.3, 13.2, f"Sujet, valeur conclue : {rec['mrb_implicite']:.2f} (tireté)".replace(".", ","), fontsize=7, color=palette.ink) 70+ ax.axvline(rec["mrb_implicite"], color=palette.ink, lw=1.6, ls="--", label=f"Sujet, valeur conclue ({rec['mrb_implicite']:.2f})".replace(".", ","))
71− ax.axvline(rev["mrb_127"], color=palette.ink2, lw=1, ls=":"); ax.text(12.3, 12.1, f"Médiane des 67 triplex : {rev['mrb_127']:.2f} (pointillé)".replace(".", ","), fontsize=7, color=palette.ink2) 71+ ax.axvline(rev["mrb_127"], color=palette.ink2, lw=1, ls=":", label=f"Médiane des 67 triplex ({rev['mrb_127']:.2f})".replace(".", ","))
72− ax.set_xlabel("Multiplicateur du revenu brut (prix / RBP contractuel)"); ax.set_ylabel("Nombre de ventes"); ax.set_ylim(0, 14.5); ax.set_xlim(12, 31); ax.legend(loc="upper right", fontsize=6.5) 72+ ax.set_xlabel("Multiplicateur du revenu brut (prix / RBP contractuel)"); ax.set_ylabel("Nombre de ventes"); ax.set_ylim(0, 15); ax.set_xlim(12, 31); ax.legend(loc="upper right", fontsize=6.3)
73 ax.set_title("A. Les cinq comparables dans la distribution", loc="left", fontsize=8.5) 73 ax.set_title("A. Les cinq comparables dans la distribution", loc="left", fontsize=8.5)
74 ax = axes[1] 74 ax = axes[1]
75 rho5 = comp5["loyer_mensuel_moyen_contrat"] / comp5["loyer_mensuel_moyen_marche"]; rho_tri = tri["loyer_mensuel_moyen_contrat"] / tri["loyer_mensuel_moyen_marche"] 75 rho5 = comp5["loyer_mensuel_moyen_contrat"] / comp5["loyer_mensuel_moyen_marche"]; rho_tri = tri["loyer_mensuel_moyen_contrat"] / tri["loyer_mensuel_moyen_marche"]
modified analysis/python/tests/test_ch37.py +13 −0
@@ -166,5 +166,18 @@ def test_solutions_exercices(res):
166 # 37.5 : dix prédictions d'un AVM 166 # 37.5 : dix prédictions d'un AVM
167 r = e["5"]; assert r["rmse_log"] == pytest.approx(0.0503, abs=0.0001) and r["mdape"] == pytest.approx(4.51, abs=0.01) and r["COD"] == pytest.approx(4.42, abs=0.01) 167 r = e["5"]; assert r["rmse_log"] == pytest.approx(0.0503, abs=0.0001) and r["mdape"] == pytest.approx(4.51, abs=0.01) and r["COD"] == pytest.approx(4.42, abs=0.01)
168 assert r["PRD"] == pytest.approx(1.006, abs=0.001) and r["PRB"] == pytest.approx(-0.034, abs=0.001) and r["ratio_median"] == pytest.approx(0.971, abs=0.001) and r["mape"] == pytest.approx(4.82, abs=0.01) 168 assert r["PRD"] == pytest.approx(1.006, abs=0.001) and r["PRB"] == pytest.approx(-0.034, abs=0.001) and r["ratio_median"] == pytest.approx(0.971, abs=0.001) and r["mape"] == pytest.approx(4.82, abs=0.01)
169+ gains = {round(x["seuil"], 1): round(x["gain"], 3) for x in e["1"]["essais"]}
170+ assert gains[84.5] == pytest.approx(0.273, abs=0.001) and gains[142.0] == pytest.approx(0.264, abs=0.001) and gains[195.5] == pytest.approx(0.097, abs=0.001)
171+ # 37.6 (c) : surface polynomiale des coordonnées
172+ c = e["6c"]
173+ assert c["aleatoire"]["COD"] == pytest.approx(6.99, abs=0.1) and c["secteur"]["COD"] == pytest.approx(10.43, abs=0.15)
174+ assert c["biais_secteur"]["Aylmer"] == pytest.approx(-0.264, abs=0.01) and abs(c["biais_secteur"]["Masson-Angers"]) < 0.03 and c["biais_secteur"]["Buckingham"] == pytest.approx(-0.066, abs=0.01)
175+ # 37.7 (c) et (d) : seuils décalés ; validation imbriquée
176+ s7 = e["7c"]
177+ assert s7["22-48"]["n_mal_classees"] == 56 and s7["28-42"]["n_mal_classees"] == 51 and s7["25-45 (vrai)"]["n_mal_classees"] == 0
178+ assert s7["22-48"]["COD"] == pytest.approx(7.02, abs=0.1) and s7["28-42"]["COD"] == pytest.approx(7.18, abs=0.1) and s7["25-45 (vrai)"]["COD"] == pytest.approx(6.85, abs=0.1)
179+ assert s7["22-48"]["coef_mur"] == pytest.approx(-0.079, abs=0.002) and s7["28-42"]["coef_mur"] == pytest.approx(-0.068, abs=0.002)
180+ assert max(s7[k]["COD"] for k in s7) < res["scenario"]["metriques"]["Gradient boosting"]["COD"]
181+ assert e["7d"]["profondeurs_choisies"] == [1] * 10 and e["7d"]["rmse_log"] == pytest.approx(0.0887, abs=0.001) and e["7d"]["COD"] == pytest.approx(7.22, abs=0.1)
169 # 37.6 et 37.7 : chiffres cohérents avec les tableaux 182 # 37.6 et 37.7 : chiffres cohérents avec les tableaux
170 assert e["6"]["Hédonique (référence)"]["secteur"] == pytest.approx(10.44, abs=0.1) and e["7"]["Hédonique respécifié"] == pytest.approx(6.85, abs=0.1) 183 assert e["6"]["Hédonique (référence)"]["secteur"] == pytest.approx(10.44, abs=0.1) and e["7"]["Hédonique respécifié"] == pytest.approx(6.85, abs=0.1)
modified analysis/python/tests/test_ch48.py +1 −1
@@ -93,4 +93,4 @@ def test_risques_et_reconciliation(D):
93 assert ris["decote_inondable_agregee"] == pytest.approx(-ris["effet_inondable_pct_taux"] / (1 + ris["effet_inondable_pct_taux"]), abs=1e-9) # V/V' − 1 = 1/(1+e) − 1 93 assert ris["decote_inondable_agregee"] == pytest.approx(-ris["effet_inondable_pct_taux"] / (1 + ris["effet_inondable_pct_taux"]), abs=1e-9) # V/V' − 1 = 1/(1+e) − 1
94 assert rec["valeur_retenue"] == 143_400_000 and rec["rpv"] == pytest.approx(85_766_000 / 143_400_000) 94 assert rec["valeur_retenue"] == 143_400_000 and rec["rpv"] == pytest.approx(85_766_000 / 143_400_000)
95 assert rec["fourchette_mc"][0] < rec["somme_individuelle"] < rec["fourchette_mc"][1] 95 assert rec["fourchette_mc"][0] < rec["somme_individuelle"] < rec["fourchette_mc"][1]
96− e6 = D["exercices"]["ex6"]; assert e6["apres_valeur"] == pytest.approx(143_363_000 - 9_546_000) and e6["ids"] == ["P36", "P41", "P43"] 96+ e6 = D["exercices"]["ex7"]; assert e6["apres_valeur"] == pytest.approx(143_363_000 - 9_546_000) and e6["ids"] == ["P36", "P41", "P43"]
modified assets/figures/ch40/ch40-fig-convergence.pdf +0 −0

Binary file not shown.

modified assets/figures/ch40/ch40-fig-distribution.pdf +0 −0

Binary file not shown.

modified assets/figures/ch40/ch40-fig-lhs.pdf +0 −0

Binary file not shown.

modified assets/figures/ch40/ch40-fig-nuage.pdf +0 −0

Binary file not shown.

modified assets/figures/ch40/ch40-fig-portefeuille.pdf +0 −0

Binary file not shown.

modified assets/figures/ch40/ch40-fig-rcd.pdf +0 −0

Binary file not shown.

modified assets/figures/ch40/ch40-fig-sobol.pdf +0 −0

Binary file not shown.

added assets/figures/ch45/ch45-fig-carte-comparables.pdf +0 −0

Binary file not shown.

added assets/figures/ch45/ch45-fig-depreciation.pdf +0 −0

Binary file not shown.

added assets/figures/ch45/ch45-fig-financement.pdf +0 −0

Binary file not shown.

added assets/figures/ch45/ch45-fig-fourchettes.pdf +0 −0

Binary file not shown.

added assets/figures/ch45/ch45-fig-grille-cascade.pdf +0 −0

Binary file not shown.

modified assets/figures/ch46/ch46-fig-cascade.pdf +0 −0

Binary file not shown.

modified assets/figures/ch46/ch46-fig-fourchettes.pdf +0 −0

Binary file not shown.

modified assets/figures/ch46/ch46-fig-loyers.pdf +0 −0

Binary file not shown.

modified assets/figures/ch46/ch46-fig-mrb.pdf +0 −0

Binary file not shown.

modified assets/figures/ch46/ch46-fig-occupation.pdf +0 −0

Binary file not shown.

modified manuscript/chapters/ch37.tex +44 −44
@@ -168,7 +168,7 @@ où $\mathbf{x}_{i,-j}$ désigne les autres variables de l'observation $i$. La c
168 \end{equation} 168 \end{equation}
169 où $\mathbf{X}^{(\pi_j)}$ est la matrice des régresseurs dont la colonne $j$ a été permutée. Elle est mesurée ici hors échantillon, dans chaque pli de validation, ce qui évite d'attribuer de l'importance à des variables que le modèle utilise pour mémoriser le bruit. Sa limite est la même que celle de la dépendance partielle : lorsque deux variables sont fortement corrélées, permuter l'une crée des observations impossibles et le modèle peut reporter l'information sur l'autre, de sorte que l'importance se partage entre elles de façon instable. L'exemple en donne une illustration nette : les coordonnées, la distance au centre et les indicatrices de secteur portent la même information de localisation, et le boosting l'attribue presque entièrement aux coordonnées, au point que les indicatrices de secteur, qui sont le mécanisme même de la loi de génération, reçoivent une importance nulle. L'explicabilité décrit ce que le modèle fait, pas ce que le marché fait ; la différence est au cœur de la \cref{sec:37:limites}. 169 où $\mathbf{X}^{(\pi_j)}$ est la matrice des régresseurs dont la colonne $j$ a été permutée. Elle est mesurée ici hors échantillon, dans chaque pli de validation, ce qui évite d'attribuer de l'importance à des variables que le modèle utilise pour mémoriser le bruit. Sa limite est la même que celle de la dépendance partielle : lorsque deux variables sont fortement corrélées, permuter l'une crée des observations impossibles et le modèle peut reporter l'information sur l'autre, de sorte que l'importance se partage entre elles de façon instable. L'exemple en donne une illustration nette : les coordonnées, la distance au centre et les indicatrices de secteur portent la même information de localisation, et le boosting l'attribue presque entièrement aux coordonnées, au point que les indicatrices de secteur, qui sont le mécanisme même de la loi de génération, reçoivent une importance nulle. L'explicabilité décrit ce que le modèle fait, pas ce que le marché fait ; la différence est au cœur de la \cref{sec:37:limites}.
170 170
171−\section{Exemple intégral : hédonique, forêt et boosting sur les 600 ventes du cas 1}\label{sec:37:exemple} 171+\section{Exemple intégral : hédonique, forêt et boosting sur le cas 1}\label{sec:37:exemple}
172 172
173 \begin{synthetique} 173 \begin{synthetique}
174 Les 600 ventes du cas 1 (\texttt{data/synthetic/cas1\_gatineau\_ventes.csv}) sont fictives, engendrées par \texttt{analysis/python/traite/synth.py} (graine 20261031) selon la loi semi-logarithmique additive déclarée dans \texttt{data/synthetic/README.md} et rappelée au \cref{ch:18} : élasticité de 0,55 pour la superficie habitable, 0,10 pour le terrain, polynôme d'âge, effets proportionnels de la qualité et des équipements, primes de secteur calibrées sur les médianes de l'APCIQ \parencite{apciqgatineaut32026}, gradient de distance au-delà de 3 km, tendance temporelle, bruit normal d'écart-type 0,085. Aucune interaction ni rupture n'y figure : c'est ce qui rend l'hédonique bien spécifié imbattable en espérance et ce qui fait de la \cref{sec:37:scenario}, où une interaction et une rupture déclarées sont ajoutées, un contrepoint nécessaire. Les régresseurs offerts aux modèles d'arbres sont les variables brutes (superficie, terrain, âge, qualité, garage, sous-sol, piscine, type, distance au centre, latitude, longitude, mois depuis la date de référence, cinq indicatrices de secteur), sans transformation. Tous les chiffres de cette section et de la suivante sont imprimés par \texttt{analysis/python/cases/ch37\_ml.py} et vérifiés par \texttt{analysis/python/tests/test\_ch37.py} ; les modèles proviennent de scikit-learn 1.6 et de xgboost 3.2, les valeurs SHAP de shap 0.48 (TreeSHAP appliqué au gradient boosting de scikit-learn, la bibliothèque shap ne lisant pas encore le format des modèles de xgboost 3.2). Les plis aléatoires sont ceux de \texttt{ch18\_hedonique.validation\_croisee}. 174 Les 600 ventes du cas 1 (\texttt{data/synthetic/cas1\_gatineau\_ventes.csv}) sont fictives, engendrées par \texttt{analysis/python/traite/synth.py} (graine 20261031) selon la loi semi-logarithmique additive déclarée dans \texttt{data/synthetic/README.md} et rappelée au \cref{ch:18} : élasticité de 0,55 pour la superficie habitable, 0,10 pour le terrain, polynôme d'âge, effets proportionnels de la qualité et des équipements, primes de secteur calibrées sur les médianes de l'APCIQ \parencite{apciqgatineaut32026}, gradient de distance au-delà de 3 km, tendance temporelle, bruit normal d'écart-type 0,085. Aucune interaction ni rupture n'y figure : c'est ce qui rend l'hédonique bien spécifié imbattable en espérance et ce qui fait de la \cref{sec:37:scenario}, où une interaction et une rupture déclarées sont ajoutées, un contrepoint nécessaire. Les régresseurs offerts aux modèles d'arbres sont les variables brutes (superficie, terrain, âge, qualité, garage, sous-sol, piscine, type, distance au centre, latitude, longitude, mois depuis la date de référence, cinq indicatrices de secteur), sans transformation. Tous les chiffres de cette section et de la suivante sont imprimés par \texttt{analysis/python/cases/ch37\_ml.py} et vérifiés par \texttt{analysis/python/tests/test\_ch37.py} ; les modèles proviennent de scikit-learn 1.6 et de xgboost 3.2, les valeurs SHAP de shap 0.48 (TreeSHAP appliqué au gradient boosting de scikit-learn, la bibliothèque shap ne lisant pas encore le format des modèles de xgboost 3.2). Les plis aléatoires sont ceux de \texttt{ch18\_hedonique.validation\_croisee}.
@@ -191,20 +191,20 @@ L'exemple procède en cinq étapes : comparaison des modèles en validation croi
191 \begin{table}[htbp] 191 \begin{table}[htbp]
192 \caption{Cinq modèles sur les 600 ventes du cas 1 : performance hors échantillon selon trois schémas de validation (données synthétiques)}\label{tab:37:comparaison} 192 \caption{Cinq modèles sur les 600 ventes du cas 1 : performance hors échantillon selon trois schémas de validation (données synthétiques)}\label{tab:37:comparaison}
193 \centering\footnotesize\setlength{\tabcolsep}{3pt} 193 \centering\footnotesize\setlength{\tabcolsep}{3pt}
194−\begin{tabular}{@{}l S[table-format=1.4] S[table-format=5.0] S[table-format=2.2] S[table-format=2.2] S[table-format=1.3] S[table-format=-1.3] S[table-format=1.4] S[table-format=2.2] S[table-format=1.4] S[table-format=-1.3] S[table-format=2.2]@{}} 194+\begin{tabular}{@{}l S[table-format=1.4] S[table-format=2.2] S[table-format=2.2] S[table-format=-1.3] S[table-format=1.4] S[table-format=2.2] S[table-format=1.4] S[table-format=-1.3] S[table-format=2.2]@{}}
195 \toprule 195 \toprule
196− & \multicolumn{6}{c}{Plis aléatoires (10)} & \multicolumn{2}{c}{Blocs spatiaux (10)} & \multicolumn{3}{c}{Prospectif (2026, $n = 101$)} \\ 196+ & \multicolumn{4}{c}{Plis aléatoires (10)} & \multicolumn{2}{c}{Blocs spatiaux (10)} & \multicolumn{3}{c}{Prospectif (2026, $n = 101$)} \\
197−\cmidrule(lr){2-7}\cmidrule(lr){8-9}\cmidrule(lr){10-12} 197+\cmidrule(lr){2-5}\cmidrule(lr){6-7}\cmidrule(lr){8-10}
198−Modèle & {RMSE$_{\ln}$} & {RMSE (\$)} & {MdAPE (\%)} & {COD} & {PRD} & {PRB} & {RMSE$_{\ln}$} & {COD} & {RMSE$_{\ln}$} & {Biais} & {COD} \\ 198+Modèle & {RMSE$_{\ln}$} & {MdAPE (\%)} & {COD} & {PRB} & {RMSE$_{\ln}$} & {COD} & {RMSE$_{\ln}$} & {Biais} & {COD} \\
199 \midrule 199 \midrule
200−Hédonique (référence) & 0.0839 & 40889 & 5.68 & 6.83 & 1.007 & -0.059 & 0.0857 & 7.00 & 0.0855 & -0.010 & 6.96 \\ 200+Hédonique (référence) & 0.0839 & 5.68 & 6.83 & -0.059 & 0.0857 & 7.00 & 0.0855 & -0.010 & 6.96 \\
201−Arbre (profondeur 3) & 0.1468 & 70779 & 9.85 & 11.63 & 1.021 & -0.228 & 0.1537 & 12.12 & 0.1737 & -0.085 & 12.35 \\ 201+Arbre (profondeur 3) & 0.1468 & 9.85 & 11.63 & -0.228 & 0.1537 & 12.12 & 0.1737 & -0.085 & 12.35 \\
202−Forêt aléatoire & 0.1067 & 52058 & 7.52 & 8.64 & 1.015 & -0.196 & 0.1120 & 8.96 & 0.1283 & -0.060 & 9.47 \\ 202+Forêt aléatoire & 0.1067 & 7.52 & 8.64 & -0.196 & 0.1120 & 8.96 & 0.1283 & -0.060 & 9.47 \\
203−Gradient boosting & 0.0931 & 45644 & 6.22 & 7.42 & 1.009 & -0.088 & 0.0967 & 7.62 & 0.0950 & -0.034 & 7.41 \\ 203+Gradient boosting & 0.0931 & 6.22 & 7.42 & -0.088 & 0.0967 & 7.62 & 0.0950 & -0.034 & 7.41 \\
204−XGBoost & 0.0921 & 45221 & 6.09 & 7.33 & 1.009 & -0.081 & 0.0948 & 7.53 & 0.0937 & -0.029 & 7.50 \\ 204+XGBoost & 0.0921 & 6.09 & 7.33 & -0.081 & 0.0948 & 7.53 & 0.0937 & -0.029 & 7.50 \\
205 \bottomrule 205 \bottomrule
206 \end{tabular} 206 \end{tabular}
207−\tabsource{\synth{\texttt{analysis/python/cases/ch37\_ml.py} ; plis aléatoires identiques à ceux du \cref{ch:18}}. RMSE$_{\ln}$ : racine de l'erreur quadratique moyenne du logarithme ; RMSE (\$) après retransformation de Duan (facteur hors échantillon) ; biais : erreur moyenne du logarithme. Hyperparamètres au \cref{tab:37:familles}.} 207+\tabsource{\synth{\texttt{analysis/python/cases/ch37\_ml.py} ; plis aléatoires identiques à ceux du \cref{ch:18}}. RMSE$_{\ln}$ : racine de l'erreur quadratique moyenne du logarithme ; biais : erreur moyenne du logarithme. En plis aléatoires, la RMSE en dollars (retransformation de Duan, facteur hors échantillon) vaut 40 889 (hédonique), 70 779 (arbre), 52 058 (forêt), 45 644 (boosting) et 45 221 \$ (XGBoost) ; les PRD valent 1,007 ; 1,021 ; 1,015 ; 1,009 ; 1,009. Hyperparamètres au \cref{tab:37:familles}.}
208 \end{table} 208 \end{table}
209 209
210 \begin{figure}[htbp] 210 \begin{figure}[htbp]
@@ -241,21 +241,21 @@ Arbre (profondeur 3) & 0.1737 & -8.5 & 0.931 & 12.35 \\
241 241
242 \begin{table}[htbp] 242 \begin{table}[htbp]
243 \caption{Un secteur exclu à la fois : biais moyen de la prédiction (points de pourcentage du logarithme) et COD global (données synthétiques)}\label{tab:37:secteurs} 243 \caption{Un secteur exclu à la fois : biais moyen de la prédiction (points de pourcentage du logarithme) et COD global (données synthétiques)}\label{tab:37:secteurs}
244−\centering\small 244+\centering\footnotesize\setlength{\tabcolsep}{4pt}
245 \begin{tabular}{@{}l S[table-format=-2.1] S[table-format=-2.1] S[table-format=-2.1] S[table-format=-2.1] S[table-format=-2.1] S[table-format=2.2]@{}} 245 \begin{tabular}{@{}l S[table-format=-2.1] S[table-format=-2.1] S[table-format=-2.1] S[table-format=-2.1] S[table-format=-2.1] S[table-format=2.2]@{}}
246 \toprule 246 \toprule
247 Modèle & {Hull} & {Gatineau} & {Aylmer} & {Buckingham} & {Masson-Angers} & {COD} \\ 247 Modèle & {Hull} & {Gatineau} & {Aylmer} & {Buckingham} & {Masson-Angers} & {COD} \\
248 \midrule 248 \midrule
249−Hédonique (secteur exclu prédit au niveau de référence) & -2.3 & 1.1 & -5.9 & 23.4 & 26.1 & 10.44 \\ 249+Hédonique (secteur exclu $=$ référence) & -2.3 & 1.1 & -5.9 & 23.4 & 26.1 & 10.44 \\
250 Arbre (profondeur 3) & -1.2 & -20.7 & -6.7 & -2.5 & 12.9 & 15.65 \\ 250 Arbre (profondeur 3) & -1.2 & -20.7 & -6.7 & -2.5 & 12.9 & 15.65 \\
251 Forêt aléatoire & -1.0 & -4.9 & -8.5 & 2.5 & 12.8 & 10.21 \\ 251 Forêt aléatoire & -1.0 & -4.9 & -8.5 & 2.5 & 12.8 & 10.21 \\
252 Gradient boosting & 1.3 & -6.8 & -7.1 & -0.6 & 7.2 & 8.59 \\ 252 Gradient boosting & 1.3 & -6.8 & -7.1 & -0.6 & 7.2 & 8.59 \\
253 XGBoost & 1.0 & -6.7 & -8.3 & -2.2 & 10.2 & 8.87 \\ 253 XGBoost & 1.0 & -6.7 & -8.3 & -2.2 & 10.2 & 8.87 \\
254 \midrule 254 \midrule
255−Prime de secteur vraie (log, par rapport à Hull) & 0.0 & -2.1 & 11.0 & -18.4 & -20.4 & {} \\ 255+Prime de secteur vraie (log, vs Hull) & 0.0 & -2.1 & 11.0 & -18.4 & -20.4 & {} \\
256 \bottomrule 256 \bottomrule
257 \end{tabular} 257 \end{tabular}
258−\tabsource{\synth{\texttt{analysis/python/cases/ch37\_ml.py}}. Hédonique : l'indicatrice du secteur exclu est retirée et le secteur est prédit comme Hull (ou comme Gatineau lorsque Hull est exclu) ; les biais de Buckingham et de Masson-Angers sont, au bruit près, l'opposé des primes omises.} 258+\tabsource{\synth{\texttt{analysis/python/cases/ch37\_ml.py}}. Hédonique : l'indicatrice du secteur exclu est retirée et le secteur est prédit au niveau de Hull (ou de Gatineau lorsque Hull est exclu) ; les biais de Buckingham et de Masson-Angers sont, au bruit près, l'opposé des primes omises.}
259 \end{table} 259 \end{table}
260 260
261 \begin{figure}[htbp] 261 \begin{figure}[htbp]
@@ -267,10 +267,10 @@ Prime de secteur vraie (log, par rapport à Hull) & 0.0 & -2.1 & 11.0 & -18.4 &
267 267
268 \begin{table}[htbp] 268 \begin{table}[htbp]
269 \caption{Importance des variables dans le gradient boosting : moyenne de $\abs{\phi}$ (SHAP) et importance par permutation hors échantillon (données synthétiques)}\label{tab:37:importances} 269 \caption{Importance des variables dans le gradient boosting : moyenne de $\abs{\phi}$ (SHAP) et importance par permutation hors échantillon (données synthétiques)}\label{tab:37:importances}
270−\centering\small 270+\centering\footnotesize\setlength{\tabcolsep}{4pt}
271−\begin{tabular}{@{}l S[table-format=1.4] S[table-format=1.4] S[table-format=1.4] l@{}} 271+\begin{tabularx}{\textwidth}{@{}l S[table-format=1.4] S[table-format=1.4] S[table-format=1.4] Y@{}}
272 \toprule 272 \toprule
273−Variable & {SHAP, moy. $\abs{\phi}$} & {Permutation, $\Delta$EQM} & {Forêt : $\Delta$EQM} & Lecture \\ 273+Variable & {SHAP, moy. $\abs{\phi}$} & {Permut., $\Delta$EQM} & {Forêt, $\Delta$EQM} & Lecture \\
274 \midrule 274 \midrule
275 Superficie habitable & 0.1110 & 0.0348 & 0.0300 & dominante et sans substitut \\ 275 Superficie habitable & 0.1110 & 0.0348 & 0.0300 & dominante et sans substitut \\
276 Âge & 0.0432 & 0.0061 & 0.0037 & courbe en U très ouvert \\ 276 Âge & 0.0432 & 0.0061 & 0.0037 & courbe en U très ouvert \\
@@ -281,10 +281,10 @@ Distance au centre & 0.0274 & 0.0028 & 0.0023 & redondante avec les coordonnées
281 Latitude & 0.0271 & 0.0039 & 0.0031 & idem \\ 281 Latitude & 0.0271 & 0.0039 & 0.0031 & idem \\
282 Terrain & 0.0204 & 0.0019 & 0.0013 & élasticité faible \\ 282 Terrain & 0.0204 & 0.0019 & 0.0013 & élasticité faible \\
283 Garage & 0.0154 & {$<$ 0,002} & {$<$ 0,002} & \\ 283 Garage & 0.0154 & {$<$ 0,002} & {$<$ 0,002} & \\
284−Type à étages ; sous-sol ; piscine & {0,0097 ; 0,0076 ; 0,0038} & {$<$ 0,002} & {$<$ 0,002} & \\ 284+À étages ; sous-sol ; piscine & {0,0097 ; 0,0076 ; 0,0038} & {$<$ 0,002} & {$<$ 0,002} & \\
285 Indicatrices de secteur (5) & {$\le$ 0,0016} & {$\approx$ 0} & {$\approx$ 0} & absorbées par lat., long., distance \\ 285 Indicatrices de secteur (5) & {$\le$ 0,0016} & {$\approx$ 0} & {$\approx$ 0} & absorbées par lat., long., distance \\
286 \bottomrule 286 \bottomrule
287−\end{tabular} 287+\end{tabularx}
288 \tabsource{\synth{\texttt{analysis/python/cases/ch37\_ml.py}}. Permutation : accroissement de l'erreur quadratique moyenne du logarithme en validation croisée à dix plis, dix permutations par pli ; erreur de base 0,0087 (boosting) et 0,0114 (forêt).} 288 \tabsource{\synth{\texttt{analysis/python/cases/ch37\_ml.py}}. Permutation : accroissement de l'erreur quadratique moyenne du logarithme en validation croisée à dix plis, dix permutations par pli ; erreur de base 0,0087 (boosting) et 0,0114 (forêt).}
289 \end{table} 289 \end{table}
290 290
@@ -297,10 +297,10 @@ Indicatrices de secteur (5) & {$\le$ 0,0016} & {$\approx$ 0} & {$\approx$ 0} & a
297 297
298 \begin{table}[htbp] 298 \begin{table}[htbp]
299 \caption{Prédiction du sujet du cas 1 par chaque modèle et cascade SHAP du gradient boosting (données synthétiques)}\label{tab:37:sujet} 299 \caption{Prédiction du sujet du cas 1 par chaque modèle et cascade SHAP du gradient boosting (données synthétiques)}\label{tab:37:sujet}
300−\centering\small\setlength{\tabcolsep}{4pt} 300+\centering\footnotesize\setlength{\tabcolsep}{3.5pt}
301−\begin{tabular}{@{}l S[table-format=2.4] S[table-format=6.0] S[table-format=1.4] S[table-format=6.0] S[table-format=-2.1]@{}} 301+\begin{tabularx}{\textwidth}{@{}Y S[table-format=2.4] S[table-format=6.0] S[table-format=1.4] S[table-format=6.0] S[table-format=-2.1]@{}}
302 \toprule 302 \toprule
303−Modèle (estimé sur 600 ventes) & {$\ln \hat P$} & {$\exp(\ln\hat P)$ (\$)} & {Facteur} & {Prédiction (\$)} & {Écart à l'hédonique (\%)} \\ 303+Modèle (estimé sur 600 ventes) & {$\ln \hat P$} & {$\exp(\ln\hat P)$ (\$)} & {Facteur} & {Prédiction (\$)} & {Écart (\%)} \\
304 \midrule 304 \midrule
305 Hédonique (référence, \cref{ch:18}) & 13.3627 & 635821 & 1.0034 & 637953 & 0.0 \\ 305 Hédonique (référence, \cref{ch:18}) & 13.3627 & 635821 & 1.0034 & 637953 & 0.0 \\
306 XGBoost & 13.3244 & 611957 & 1.0033 & 613976 & -3.8 \\ 306 XGBoost & 13.3244 & 611957 & 1.0033 & 613976 & -3.8 \\
@@ -321,8 +321,8 @@ Type à étages & 0.0075 & 0.8 & {} & 601511 & {} \\
321 Sous-sol fini & 0.0056 & 0.6 & {} & 604889 & {} \\ 321 Sous-sol fini & 0.0056 & 0.6 & {} & 604889 & {} \\
322 Autres (qualité, latitude, piscine, distance, secteurs) & -0.0005 & -0.1 & {} & 604595 & {} \\ 322 Autres (qualité, latitude, piscine, distance, secteurs) & -0.0005 & -0.1 & {} & 604595 & {} \\
323 \bottomrule 323 \bottomrule
324−\end{tabular} 324+\end{tabularx}
325−\tabsource{\synth{\texttt{analysis/python/cases/ch37\_ml.py}}. Facteur : correction de Duan (en échantillon pour l'hédonique, comme au \cref{ch:18} ; hors échantillon pour les autres). Effet : $100\,[\exp(\phi_j) - 1]$ ; cumul : $\exp(\phi_0 + \sum \phi)$ après chaque contribution, avant le facteur de Duan.} 325+\tabsource{\synth{\texttt{analysis/python/cases/ch37\_ml.py}}. Facteur : correction de Duan (en échantillon pour l'hédonique, comme au \cref{ch:18} ; hors échantillon pour les autres) ; écart : par rapport à la prédiction hédonique. Effet : $100\,[\exp(\phi_j) - 1]$ ; cumul : $\exp(\phi_0 + \sum \phi)$ après chaque contribution, avant le facteur de Duan.}
326 \end{table} 326 \end{table}
327 327
328 \begin{figure}[htbp] 328 \begin{figure}[htbp]
@@ -367,33 +367,33 @@ Le rôle d'évaluation foncière québécois est, par nature, une évaluation de
367 367
368 \section{Analyse de sensibilité : les hyperparamètres}\label{sec:37:sensibilite} 368 \section{Analyse de sensibilité : les hyperparamètres}\label{sec:37:sensibilite}
369 369
370−Les conclusions de l'exemple dépendent-elles des hyperparamètres retenus ? Le \cref{tab:37:sensibilite} réestime le boosting et la forêt sous treize réglages, toujours sur les mêmes dix plis. Pour le boosting, la profondeur est le réglage décisif, et le résultat est remarquable : les \emph{souches}, arbres de profondeur 1 qui produisent un modèle strictement additif, donnent la plus petite erreur de toute la grille, 0,0887 (COD 7,22), devant la profondeur 2 (0,0931), 3 (0,0970) et 4 (0,0984). La loi de génération étant additive en logarithme, tout degré d'interaction supplémentaire est de la variance pure, et le boosting le confirme sans qu'on le lui dise ; sur le scénario non linéaire de la \cref{sec:37:scenario}, la profondeur 2 l'emporterait au contraire, parce que l'interaction âge-qualité exige deux niveaux. Le nombre d'arbres interagit avec le taux d'apprentissage : à $\nu = 0{,}03$, 300 arbres sous-ajustent (0,0977), 1 200 sont près de l'optimum de la courbe d'apprentissage et 3 000 surajustent légèrement (0,0962) ; à $\nu = 0{,}10$, 1 200 arbres surajustent nettement (0,0988), et l'équivalence approximative « $\nu$ fois $M$ constant » que suggère l'\cref{eq:37:boosting} se vérifie, le produit étant de 36 dans le meilleur réglage. Le sous-échantillonnage à 80 \% améliore marginalement (0,0931 contre 0,0941 sans), et la taille minimale des feuilles ne change rien en validation aléatoire (0,0931 pour 1 comme pour 5), alors qu'elle décidait du biais prospectif au \cref{tab:37:temporel} : c'est l'illustration la plus nette de ce qu'une validation mesure ce qu'on lui demande de mesurer et rien d'autre. Pour la forêt, le nombre de variables par division compte peu entre 50 et 100 \% (0,1067 contre 0,1074) et un tiers des variables avec des feuilles de cinq dégrade (0,1151) ; cent arbres suffisent (0,1065), ce qui confirme que $B$ n'est pas un paramètre de surapprentissage. Aucun réglage de la forêt ne descend sous 0,105 et aucun réglage du boosting sous 0,088 : l'hédonique, à 0,084, n'est jamais rejoint. La sensibilité des conclusions aux hyperparamètres est donc faible pour l'ordre des modèles et forte pour le comportement aux bords ; l'évaluateur qui reçoit un AVM doit demander ses hyperparamètres et la courbe de validation qui les justifie. 370+Le \cref{tab:37:sensibilite} réestime le boosting et la forêt sous treize réglages, toujours sur les mêmes dix plis, afin de savoir si les conclusions de l'exemple dépendent des hyperparamètres retenus. Pour le boosting, la profondeur est le réglage décisif, et le résultat est remarquable : les \emph{souches}, arbres de profondeur 1 qui produisent un modèle strictement additif, donnent la plus petite erreur de toute la grille, 0,0887 (COD 7,22), devant la profondeur 2 (0,0931), 3 (0,0970) et 4 (0,0984). La loi de génération étant additive en logarithme, tout degré d'interaction supplémentaire est de la variance pure, et le boosting le confirme sans qu'on le lui dise ; sur le scénario non linéaire de la \cref{sec:37:scenario}, la profondeur 2 l'emporterait au contraire, parce que l'interaction âge-qualité exige deux niveaux. Le nombre d'arbres interagit avec le taux d'apprentissage : à $\nu = 0{,}03$, 300 arbres sous-ajustent (0,0977), 1 200 sont près de l'optimum de la courbe d'apprentissage et 3 000 surajustent légèrement (0,0962) ; à $\nu = 0{,}10$, 1 200 arbres surajustent nettement (0,0988), et l'équivalence approximative « $\nu$ fois $M$ constant » que suggère l'\cref{eq:37:boosting} se vérifie, le produit étant de 36 dans le meilleur réglage. Le sous-échantillonnage à 80 \% améliore marginalement (0,0931 contre 0,0941 sans), et la taille minimale des feuilles ne change rien en validation aléatoire (0,0931 pour 1 comme pour 5), alors qu'elle décidait du biais prospectif au \cref{tab:37:temporel} : c'est l'illustration la plus nette de ce qu'une validation mesure ce qu'on lui demande de mesurer et rien d'autre. Pour la forêt, le nombre de variables par division compte peu entre 50 et 100 \% (0,1067 contre 0,1074) et un tiers des variables avec des feuilles de cinq dégrade (0,1151) ; cent arbres suffisent (0,1065), ce qui confirme que $B$ n'est pas un paramètre de surapprentissage. Aucun réglage de la forêt ne descend sous 0,105 et aucun réglage du boosting sous 0,088 : l'hédonique, à 0,084, n'est jamais rejoint. La sensibilité des conclusions aux hyperparamètres est donc faible pour l'ordre des modèles et forte pour le comportement aux bords ; l'évaluateur qui reçoit un AVM doit demander ses hyperparamètres et la courbe de validation qui les justifie.
371 371
372 \begin{table}[htbp] 372 \begin{table}[htbp]
373 \caption{Sensibilité aux hyperparamètres : boosting et forêt aléatoire en validation croisée aléatoire à dix plis (données synthétiques)}\label{tab:37:sensibilite} 373 \caption{Sensibilité aux hyperparamètres : boosting et forêt aléatoire en validation croisée aléatoire à dix plis (données synthétiques)}\label{tab:37:sensibilite}
374−\centering\footnotesize\setlength{\tabcolsep}{3.5pt} 374+\centering\footnotesize\setlength{\tabcolsep}{3pt}
375−\begin{tabular}{@{}l c S[table-format=4.0] S[table-format=1.2] c c l S[table-format=1.4] S[table-format=1.2] S[table-format=1.2] S[table-format=-1.3]@{}} 375+\begin{tabular}{@{}l c S[table-format=4.0] S[table-format=1.2] c l S[table-format=1.4] S[table-format=1.2] S[table-format=1.2] S[table-format=-1.3]@{}}
376 \toprule 376 \toprule
377−Modèle & Profondeur & {Arbres} & {$\nu$} & Feuille min. & Sous-éch. & Variables & {RMSE$_{\ln}$} & {MdAPE (\%)} & {COD} & {PRB} \\ 377+Modèle & Prof. & {Arbres} & {$\nu$} & Feuille min. & Échantillon, variables & {RMSE$_{\ln}$} & {MdAPE (\%)} & {COD} & {PRB} \\
378 \midrule 378 \midrule
379−Boosting & 1 (souches) & 1200 & 0.03 & 5 & 80 \% & toutes & 0.0887 & 6.16 & 7.22 & -0.090 \\ 379+Boosting & 1 & 1200 & 0.03 & 5 & 80 \% ; toutes & 0.0887 & 6.16 & 7.22 & -0.090 \\
380−Boosting & 2 & 300 & 0.03 & 5 & 80 \% & toutes & 0.0977 & 6.93 & 7.88 & -0.158 \\ 380+Boosting & 2 & 300 & 0.03 & 5 & 80 \% ; toutes & 0.0977 & 6.93 & 7.88 & -0.158 \\
381−Boosting (référence) & 2 & 1200 & 0.03 & 5 & 80 \% & toutes & 0.0931 & 6.22 & 7.42 & -0.088 \\ 381+Boosting (réf.) & 2 & 1200 & 0.03 & 5 & 80 \% ; toutes & 0.0931 & 6.22 & 7.42 & -0.088 \\
382−Boosting & 2 & 3000 & 0.03 & 5 & 80 \% & toutes & 0.0962 & 6.29 & 7.67 & -0.072 \\ 382+Boosting & 2 & 3000 & 0.03 & 5 & 80 \% ; toutes & 0.0962 & 6.29 & 7.67 & -0.072 \\
383−Boosting & 3 & 1200 & 0.03 & 5 & 80 \% & toutes & 0.0970 & 6.38 & 7.77 & -0.081 \\ 383+Boosting & 3 & 1200 & 0.03 & 5 & 80 \% ; toutes & 0.0970 & 6.38 & 7.77 & -0.081 \\
384−Boosting & 4 & 1200 & 0.03 & 5 & 80 \% & toutes & 0.0984 & 6.66 & 7.90 & -0.090 \\ 384+Boosting & 4 & 1200 & 0.03 & 5 & 80 \% ; toutes & 0.0984 & 6.66 & 7.90 & -0.090 \\
385−Boosting & 2 & 1200 & 0.10 & 5 & 80 \% & toutes & 0.0988 & 6.43 & 7.79 & -0.066 \\ 385+Boosting & 2 & 1200 & 0.10 & 5 & 80 \% ; toutes & 0.0988 & 6.43 & 7.79 & -0.066 \\
386−Boosting & 2 & 1200 & 0.03 & 1 & 80 \% & toutes & 0.0931 & 6.26 & 7.42 & -0.088 \\ 386+Boosting & 2 & 1200 & 0.03 & 1 & 80 \% ; toutes & 0.0931 & 6.26 & 7.42 & -0.088 \\
387−Boosting & 2 & 1200 & 0.03 & 5 & 100 \% & toutes & 0.0941 & 6.22 & 7.52 & -0.091 \\ 387+Boosting & 2 & 1200 & 0.03 & 5 & 100 \% ; toutes & 0.0941 & 6.22 & 7.52 & -0.091 \\
388−Forêt & max. & 500 & {---} & 1 & bootstrap & 100 \% & 0.1074 & 7.79 & 8.69 & -0.166 \\ 388+Forêt & max. & 500 & {---} & 1 & bootstrap ; 100 \% & 0.1074 & 7.79 & 8.69 & -0.166 \\
389−Forêt (référence) & max. & 500 & {---} & 2 & bootstrap & 50 \% & 0.1067 & 7.52 & 8.64 & -0.196 \\ 389+Forêt (réf.) & max. & 500 & {---} & 2 & bootstrap ; 50 \% & 0.1067 & 7.52 & 8.64 & -0.196 \\
390−Forêt & max. & 500 & {---} & 5 & bootstrap & 33 \% & 0.1151 & 7.84 & 9.32 & -0.272 \\ 390+Forêt & max. & 500 & {---} & 5 & bootstrap ; 33 \% & 0.1151 & 7.84 & 9.32 & -0.272 \\
391−Forêt & max. & 100 & {---} & 2 & bootstrap & 50 \% & 0.1065 & 7.52 & 8.58 & -0.194 \\ 391+Forêt & max. & 100 & {---} & 2 & bootstrap ; 50 \% & 0.1065 & 7.52 & 8.58 & -0.194 \\
392 \midrule 392 \midrule
393−Hédonique de référence & \multicolumn{6}{l}{16 paramètres, semi-log, MCO} & 0.0839 & 5.68 & 6.83 & -0.059 \\ 393+Hédonique (réf.) & \multicolumn{5}{l}{16 paramètres, semi-log, MCO} & 0.0839 & 5.68 & 6.83 & -0.059 \\
394 \bottomrule 394 \bottomrule
395 \end{tabular} 395 \end{tabular}
396−\tabsource{\synth{\texttt{analysis/python/cases/ch37\_ml.py}}. Scikit-learn 1.6 ; graine 20261031 pour le sous-échantillonnage, le bootstrap et le tirage des variables.} 396+\tabsource{\synth{\texttt{analysis/python/cases/ch37\_ml.py}}. Prof. 1 : souches (modèle additif) ; échantillon : fraction des ventes tirée pour chaque arbre (boosting) ou bootstrap (forêt) ; variables : fraction des variables candidates à chaque division. Scikit-learn 1.6 ; graine 20261031.}
397 \end{table} 397 \end{table}
398 398
399 \section{Limites : support, dérive, équité, opacité}\label{sec:37:limites} 399 \section{Limites : support, dérive, équité, opacité}\label{sec:37:limites}
modified manuscript/chapters/ch39.tex +75 −66
@@ -66,9 +66,11 @@ Retransformation en niveau & facteur de Duan sur $\exp(\hat y)$ & implicite : la
66 66
67 Le cas le plus simple suffit à montrer que la réconciliation pratiquée au \cref{ch:20} est déjà une mise à jour bayésienne. Supposons que l'évaluateur cherche le prix au mètre carré $\mu$ d'un segment de marché et qu'il dispose, d'une part, d'une opinion antérieure fondée sur son expérience, qu'il traduit par une loi normale $\mu \sim \mathcal N(m_0, s_0^2)$, et, d'autre part, de $n$ ventes dont les prix unitaires $y_i$ sont distribués autour de $\mu$ avec un écart-type $\sigma$ connu. La vraisemblance des données ne dépend que de la moyenne $\bar y$, et la postérieure est de nouveau normale : 67 Le cas le plus simple suffit à montrer que la réconciliation pratiquée au \cref{ch:20} est déjà une mise à jour bayésienne. Supposons que l'évaluateur cherche le prix au mètre carré $\mu$ d'un segment de marché et qu'il dispose, d'une part, d'une opinion antérieure fondée sur son expérience, qu'il traduit par une loi normale $\mu \sim \mathcal N(m_0, s_0^2)$, et, d'autre part, de $n$ ventes dont les prix unitaires $y_i$ sont distribués autour de $\mu$ avec un écart-type $\sigma$ connu. La vraisemblance des données ne dépend que de la moyenne $\bar y$, et la postérieure est de nouveau normale :
68 \begin{equation}\label{eq:39:normale-normale} 68 \begin{equation}\label{eq:39:normale-normale}
69−\mu \mid \mathbf{y} \sim \mathcal N\!\left(m_n, s_n^2\right), \qquad 69+\begin{aligned}
70−\frac{1}{s_n^2} = \frac{1}{s_0^2} + \frac{n}{\sigma^2}, \qquad 70+\mu \mid \mathbf{y} &\sim \mathcal N\!\left(m_n, s_n^2\right), \qquad
71−m_n = s_n^2\left(\frac{m_0}{s_0^2} + \frac{n\,\bar y}{\sigma^2}\right) = w\,\bar y + (1 - w)\, m_0, \quad w = \frac{n/\sigma^2}{n/\sigma^2 + 1/s_0^2} . 71+\frac{1}{s_n^2} = \frac{1}{s_0^2} + \frac{n}{\sigma^2}, \\
72+m_n &= s_n^2\left(\frac{m_0}{s_0^2} + \frac{n\,\bar y}{\sigma^2}\right) = w\,\bar y + (1 - w)\, m_0, \qquad w = \frac{n/\sigma^2}{n/\sigma^2 + 1/s_0^2} .
73+\end{aligned}
72 \end{equation} 74 \end{equation}
73 La moyenne a posteriori est une moyenne pondérée de la moyenne des ventes et de l'opinion antérieure, les poids étant les précisions, c'est-à-dire les inverses des variances. C'est, mot pour mot, la règle de pondération optimale de la \cref{prop:indication} du \cref{ch:16} appliquée à deux indications : les ventes, de variance $\sigma^2/n$, et le jugement, de variance $s_0^2$. L'évaluateur qui écrit qu'il « accorde plus de poids aux comparables, mais tempère leur indication par sa connaissance du secteur » applique l'\cref{eq:39:normale-normale} sans l'écrire ; la version explicite a l'avantage de dire \emph{combien} il tempère, et de faire décroître automatiquement le poids du jugement à mesure que les ventes s'accumulent. La précision a priori $1/s_0^2$ s'interprète comme un nombre de ventes équivalent, $n_0 = \sigma^2/s_0^2$ : un expert dont l'opinion vaut quatre ventes du marché a un $s_0$ égal à la moitié de $\sigma$. L'\cref{ex:39:1} applique cette formule à un marché mince ; le reste du chapitre la généralise à la régression, où $\mu$ devient un vecteur de coefficients et $\sigma^2$ une inconnue de plus. 75 La moyenne a posteriori est une moyenne pondérée de la moyenne des ventes et de l'opinion antérieure, les poids étant les précisions, c'est-à-dire les inverses des variances. C'est, mot pour mot, la règle de pondération optimale de la \cref{prop:indication} du \cref{ch:16} appliquée à deux indications : les ventes, de variance $\sigma^2/n$, et le jugement, de variance $s_0^2$. L'évaluateur qui écrit qu'il « accorde plus de poids aux comparables, mais tempère leur indication par sa connaissance du secteur » applique l'\cref{eq:39:normale-normale} sans l'écrire ; la version explicite a l'avantage de dire \emph{combien} il tempère, et de faire décroître automatiquement le poids du jugement à mesure que les ventes s'accumulent. La précision a priori $1/s_0^2$ s'interprète comme un nombre de ventes équivalent, $n_0 = \sigma^2/s_0^2$ : un expert dont l'opinion vaut quatre ventes du marché a un $s_0$ égal à la moitié de $\sigma$. L'\cref{ex:39:1} applique cette formule à un marché mince ; le reste du chapitre la généralise à la régression, où $\mu$ devient un vecteur de coefficients et $\sigma^2$ une inconnue de plus.
74 76
@@ -87,20 +89,22 @@ où la loi inverse-gamma a pour densité $p(\sigma^2) \propto (\sigma^2)^{-(a_0
87 \begin{proposition}{Postérieure normale--inverse-gamma}{39-posterieure} 89 \begin{proposition}{Postérieure normale--inverse-gamma}{39-posterieure}
88 Sous le modèle normal et l'a priori \eqref{eq:39:nig-prior}, la postérieure est NIG de paramètres 90 Sous le modèle normal et l'a priori \eqref{eq:39:nig-prior}, la postérieure est NIG de paramètres
89 \begin{equation}\label{eq:39:posterieure} 91 \begin{equation}\label{eq:39:posterieure}
90−\mathbf{V}_n = \left(\mathbf{V}_0^{-1} + \mathbf{X}\T\mathbf{X}\right)^{-1}, \quad 92+\begin{aligned}
91−\mathbf{m}_n = \mathbf{V}_n\left(\mathbf{V}_0^{-1}\mathbf{m}_0 + \mathbf{X}\T\mathbf{y}\right), \quad 93+\mathbf{V}_n &= \left(\mathbf{V}_0^{-1} + \mathbf{X}\T\mathbf{X}\right)^{-1}, &
92−a_n = a_0 + \frac{n}{2}, \quad 94+\mathbf{m}_n &= \mathbf{V}_n\left(\mathbf{V}_0^{-1}\mathbf{m}_0 + \mathbf{X}\T\mathbf{y}\right), \\
93−b_n = b_0 + \frac{1}{2}\left(\mathbf{y}\T\mathbf{y} + \mathbf{m}_0\T\mathbf{V}_0^{-1}\mathbf{m}_0 - \mathbf{m}_n\T\mathbf{V}_n^{-1}\mathbf{m}_n\right). 95+a_n &= a_0 + \frac{n}{2}, &
96+b_n &= b_0 + \frac{1}{2}\left(\mathbf{y}\T\mathbf{y} + \mathbf{m}_0\T\mathbf{V}_0^{-1}\mathbf{m}_0 - \mathbf{m}_n\T\mathbf{V}_n^{-1}\mathbf{m}_n\right).
97+\end{aligned}
94 \end{equation} 98 \end{equation}
95 La loi marginale a posteriori de $\boldsymbol\beta$ est une loi de Student multivariée à $2a_n$ degrés de liberté, de centre $\mathbf{m}_n$ et de matrice d'échelle $(b_n/a_n)\mathbf{V}_n$ ; chaque coefficient a pour écart-type a posteriori $\sqrt{(b_n/(a_n - 1))\,[\mathbf{V}_n]_{kk}}$. 99 La loi marginale a posteriori de $\boldsymbol\beta$ est une loi de Student multivariée à $2a_n$ degrés de liberté, de centre $\mathbf{m}_n$ et de matrice d'échelle $(b_n/a_n)\mathbf{V}_n$ ; chaque coefficient a pour écart-type a posteriori $\sqrt{(b_n/(a_n - 1))\,[\mathbf{V}_n]_{kk}}$.
96 \end{proposition} 100 \end{proposition}
97 \begin{proof} 101 \begin{proof}
98 Le produit de la vraisemblance et de l'a priori s'écrit, à une constante près, 102 Le produit de la vraisemblance et de l'a priori s'écrit, à une constante près,
99−\[ 103+\begin{align*}
100−p(\boldsymbol\beta, \sigma^2 \mid \mathbf{y}) \propto (\sigma^2)^{-n/2}\exp\!\left[-\frac{(\mathbf{y} - \mathbf{X}\boldsymbol\beta)\T(\mathbf{y} - \mathbf{X}\boldsymbol\beta)}{2\sigma^2}\right] 104+p(\boldsymbol\beta, \sigma^2 \mid \mathbf{y}) \propto{}& (\sigma^2)^{-n/2}\exp\!\left[-\frac{(\mathbf{y} - \mathbf{X}\boldsymbol\beta)\T(\mathbf{y} - \mathbf{X}\boldsymbol\beta)}{2\sigma^2}\right]
101−(\sigma^2)^{-k/2}\exp\!\left[-\frac{(\boldsymbol\beta - \mathbf{m}_0)\T\mathbf{V}_0^{-1}(\boldsymbol\beta - \mathbf{m}_0)}{2\sigma^2}\right] 105+(\sigma^2)^{-k/2}\exp\!\left[-\frac{(\boldsymbol\beta - \mathbf{m}_0)\T\mathbf{V}_0^{-1}(\boldsymbol\beta - \mathbf{m}_0)}{2\sigma^2}\right] \\
102−(\sigma^2)^{-(a_0+1)}\exp\!\left[-\frac{b_0}{\sigma^2}\right]. 106+&\times (\sigma^2)^{-(a_0+1)}\exp\!\left[-\frac{b_0}{\sigma^2}\right].
103−\] 107+\end{align*}
104 Les deux formes quadratiques en $\boldsymbol\beta$ se regroupent. En développant, leur somme vaut $\boldsymbol\beta\T(\mathbf{X}\T\mathbf{X} + \mathbf{V}_0^{-1})\boldsymbol\beta - 2\boldsymbol\beta\T(\mathbf{X}\T\mathbf{y} + \mathbf{V}_0^{-1}\mathbf{m}_0) + \mathbf{y}\T\mathbf{y} + \mathbf{m}_0\T\mathbf{V}_0^{-1}\mathbf{m}_0$. Avec les définitions de $\mathbf{V}_n$ et de $\mathbf{m}_n$, on complète le carré : cette somme égale $(\boldsymbol\beta - \mathbf{m}_n)\T\mathbf{V}_n^{-1}(\boldsymbol\beta - \mathbf{m}_n) + \mathbf{y}\T\mathbf{y} + \mathbf{m}_0\T\mathbf{V}_0^{-1}\mathbf{m}_0 - \mathbf{m}_n\T\mathbf{V}_n^{-1}\mathbf{m}_n$, dont le premier terme donne le noyau d'une normale $\mathcal N(\mathbf{m}_n, \sigma^2\mathbf{V}_n)$ pour $\boldsymbol\beta \mid \sigma^2$ et dont le reste, divisé par $2\sigma^2$, s'ajoute à $b_0/\sigma^2$ pour former $b_n/\sigma^2$. Les puissances de $\sigma^2$ se regroupent en $(\sigma^2)^{-(a_0 + n/2 + 1)}$ une fois le facteur $(\sigma^2)^{-k/2}$ absorbé par la normalisation de la normale en $\boldsymbol\beta$, d'où $a_n$. La marginale de $\boldsymbol\beta$ s'obtient en intégrant $\sigma^2$ : l'intégrale d'une densité normale en $\boldsymbol\beta$ contre une inverse-gamma en $\sigma^2$ est une loi de Student de degrés de liberté $2a_n$, ce que l'on vérifie en reconnaissant, dans $\int (\sigma^2)^{-(a_n + k/2 + 1)}\exp[-(b_n + \tfrac12 Q)/\sigma^2]\,\dd\sigma^2 \propto (b_n + \tfrac12 Q)^{-(a_n + k/2)}$, avec $Q = (\boldsymbol\beta - \mathbf{m}_n)\T\mathbf{V}_n^{-1}(\boldsymbol\beta - \mathbf{m}_n)$, le noyau $[1 + Q/(2b_n)]^{-(2a_n + k)/2}$ d'une Student multivariée. La variance d'une Student d'échelle $s$ et de $\nu$ degrés de liberté est $s^2\nu/(\nu - 2)$, d'où l'écart-type annoncé. 108 Les deux formes quadratiques en $\boldsymbol\beta$ se regroupent. En développant, leur somme vaut $\boldsymbol\beta\T(\mathbf{X}\T\mathbf{X} + \mathbf{V}_0^{-1})\boldsymbol\beta - 2\boldsymbol\beta\T(\mathbf{X}\T\mathbf{y} + \mathbf{V}_0^{-1}\mathbf{m}_0) + \mathbf{y}\T\mathbf{y} + \mathbf{m}_0\T\mathbf{V}_0^{-1}\mathbf{m}_0$. Avec les définitions de $\mathbf{V}_n$ et de $\mathbf{m}_n$, on complète le carré : cette somme égale $(\boldsymbol\beta - \mathbf{m}_n)\T\mathbf{V}_n^{-1}(\boldsymbol\beta - \mathbf{m}_n) + \mathbf{y}\T\mathbf{y} + \mathbf{m}_0\T\mathbf{V}_0^{-1}\mathbf{m}_0 - \mathbf{m}_n\T\mathbf{V}_n^{-1}\mathbf{m}_n$, dont le premier terme donne le noyau d'une normale $\mathcal N(\mathbf{m}_n, \sigma^2\mathbf{V}_n)$ pour $\boldsymbol\beta \mid \sigma^2$ et dont le reste, divisé par $2\sigma^2$, s'ajoute à $b_0/\sigma^2$ pour former $b_n/\sigma^2$. Les puissances de $\sigma^2$ se regroupent en $(\sigma^2)^{-(a_0 + n/2 + 1)}$ une fois le facteur $(\sigma^2)^{-k/2}$ absorbé par la normalisation de la normale en $\boldsymbol\beta$, d'où $a_n$. La marginale de $\boldsymbol\beta$ s'obtient en intégrant $\sigma^2$ : l'intégrale d'une densité normale en $\boldsymbol\beta$ contre une inverse-gamma en $\sigma^2$ est une loi de Student de degrés de liberté $2a_n$, ce que l'on vérifie en reconnaissant, dans $\int (\sigma^2)^{-(a_n + k/2 + 1)}\exp[-(b_n + \tfrac12 Q)/\sigma^2]\,\dd\sigma^2 \propto (b_n + \tfrac12 Q)^{-(a_n + k/2)}$, avec $Q = (\boldsymbol\beta - \mathbf{m}_n)\T\mathbf{V}_n^{-1}(\boldsymbol\beta - \mathbf{m}_n)$, le noyau $[1 + Q/(2b_n)]^{-(2a_n + k)/2}$ d'une Student multivariée. La variance d'une Student d'échelle $s$ et de $\nu$ degrés de liberté est $s^2\nu/(\nu - 2)$, d'où l'écart-type annoncé.
105 \end{proof} 109 \end{proof}
106 110
@@ -151,9 +155,9 @@ où $\mathbf{x}_i$ ne contient plus de constante, celle-ci étant portée par le
151 \begin{proposition}{Rétrécissement de l'effet de secteur}{39-retrecissement} 155 \begin{proposition}{Rétrécissement de l'effet de secteur}{39-retrecissement}
152 Dans le modèle \eqref{eq:39:hier}, conditionnellement à $\boldsymbol\beta$, $\alpha_0$, $\sigma^2$ et $\tau^2$, l'effet du secteur $s$ qui compte $n_s$ ventes a pour loi a posteriori 156 Dans le modèle \eqref{eq:39:hier}, conditionnellement à $\boldsymbol\beta$, $\alpha_0$, $\sigma^2$ et $\tau^2$, l'effet du secteur $s$ qui compte $n_s$ ventes a pour loi a posteriori
153 \begin{equation}\label{eq:39:retrecissement} 157 \begin{equation}\label{eq:39:retrecissement}
154−\alpha_s \mid \cdot \sim \mathcal N\!\left(B_s\,\bar r_s + (1 - B_s)\,\alpha_0,\ \frac{\sigma^2}{n_s}\,B_s\right), \qquad B_s = \frac{n_s\tau^2}{n_s\tau^2 + \sigma^2}, \qquad \bar r_s = \frac{1}{n_s}\sum_{i : s(i) = s}\left(\ln P_i - \mathbf{x}_i\T\boldsymbol\beta\right). 158+\alpha_s \mid \cdot \sim \mathcal N\!\left(B_s\,\bar r_s + (1 - B_s)\,\alpha_0,\ \frac{\sigma^2}{n_s}\,B_s\right), \qquad B_s = \frac{n_s\tau^2}{n_s\tau^2 + \sigma^2},
155 \end{equation} 159 \end{equation}
156−Le facteur $B_s \in (0, 1)$ est le poids de la moyenne des résidus du secteur ; $1 - B_s$ est le poids de la moyenne commune, et la variance est celle de l'effet fixe, $\sigma^2/n_s$, multipliée par $B_s$. 160+où $\bar r_s = n_s^{-1}\sum_{i : s(i) = s}(\ln P_i - \mathbf{x}_i\T\boldsymbol\beta)$ est la moyenne des résidus partiels du secteur. Le facteur $B_s \in (0, 1)$ est le poids de la moyenne des résidus du secteur ; $1 - B_s$ est le poids de la moyenne commune, et la variance est celle de l'effet fixe, $\sigma^2/n_s$, multipliée par $B_s$.
157 \end{proposition} 161 \end{proposition}
158 \begin{proof} 162 \begin{proof}
159 Conditionnellement aux autres paramètres, les $n_s$ quantités $r_i = \ln P_i - \mathbf{x}_i\T\boldsymbol\beta$ du secteur $s$ sont indépendantes de loi $\mathcal N(\alpha_s, \sigma^2)$, et $\alpha_s$ a pour a priori $\mathcal N(\alpha_0, \tau^2)$. C'est exactement la situation de l'\cref{eq:39:normale-normale} avec $m_0 = \alpha_0$, $s_0^2 = \tau^2$, $n = n_s$ et $\bar y = \bar r_s$ : la précision a posteriori est $n_s/\sigma^2 + 1/\tau^2$, dont l'inverse est $\sigma^2\tau^2/(n_s\tau^2 + \sigma^2) = (\sigma^2/n_s)B_s$, et la moyenne est $(n_s\bar r_s/\sigma^2 + \alpha_0/\tau^2)/(n_s/\sigma^2 + 1/\tau^2) = B_s\bar r_s + (1 - B_s)\alpha_0$. 163 Conditionnellement aux autres paramètres, les $n_s$ quantités $r_i = \ln P_i - \mathbf{x}_i\T\boldsymbol\beta$ du secteur $s$ sont indépendantes de loi $\mathcal N(\alpha_s, \sigma^2)$, et $\alpha_s$ a pour a priori $\mathcal N(\alpha_0, \tau^2)$. C'est exactement la situation de l'\cref{eq:39:normale-normale} avec $m_0 = \alpha_0$, $s_0^2 = \tau^2$, $n = n_s$ et $\bar y = \bar r_s$ : la précision a posteriori est $n_s/\sigma^2 + 1/\tau^2$, dont l'inverse est $\sigma^2\tau^2/(n_s\tau^2 + \sigma^2) = (\sigma^2/n_s)B_s$, et la moyenne est $(n_s\bar r_s/\sigma^2 + \alpha_0/\tau^2)/(n_s/\sigma^2 + 1/\tau^2) = B_s\bar r_s + (1 - B_s)\alpha_0$.
@@ -260,29 +264,30 @@ L'exemple procède en six étapes : la régression conjuguée sur les 600 ventes
260 264
261 \begin{table}[htbp] 265 \begin{table}[htbp]
262 \caption{Régression hédonique bayésienne conjuguée sur les 600 ventes du cas 1 : a priori de référence, postérieure NIG et comparaison aux moindres carrés (données synthétiques)}\label{tab:39:conjugue} 266 \caption{Régression hédonique bayésienne conjuguée sur les 600 ventes du cas 1 : a priori de référence, postérieure NIG et comparaison aux moindres carrés (données synthétiques)}\label{tab:39:conjugue}
263−\centering\footnotesize\setlength{\tabcolsep}{3pt} 267+\centering\scriptsize\setlength{\tabcolsep}{2.5pt}
264−\begin{tabular}{@{}l S[table-format=-2.4] S[table-format=1.4] S[table-format=-2.4] S[table-format=1.4] S[table-format=-2.4] S[table-format=-2.4] S[table-format=-1.4]@{}} 268+\begin{tabular}{@{}l c S[table-format=-2.4] S[table-format=1.4] S[table-format=-2.4] S[table-format=-2.4] S[table-format=-1.4]@{}}
265 \toprule 269 \toprule
266−Variable & {MCO $\hat\beta$} & {E.-t. HC1} & {Moy. a post.} & {É.-t. a post.} & {Créd. 2,5 \%} & {Créd. 97,5 \%} & {Vrai} \\ 270+Variable & {MCO $\hat\beta$ (e.-t. HC1)} & {Moy. a post.} & {É.-t. a post.} & {Créd. 2,5 \%} & {Créd. 97,5 \%} & {Vrai} \\
267 \midrule 271 \midrule
268−Constante & 13.2074 & 0.0138 & 13.2074 & 0.0152 & 13.1777 & 13.2372 & {---} \\ 272+Constante & 13,2074 (0,0138) & 13.2074 & 0.0152 & 13.1777 & 13.2372 & {---} \\
269−ln(superficie habitable / 140) & 0.5391 & 0.0127 & 0.5391 & 0.0138 & 0.5121 & 0.5660 & 0.5500 \\ 273+ln(superficie habitable / 140) & 0,5391 (0,0127) & 0.5391 & 0.0138 & 0.5121 & 0.5660 & 0.5500 \\
270−ln(terrain / 560) & 0.0937 & 0.0110 & 0.0937 & 0.0105 & 0.0730 & 0.1143 & 0.1000 \\ 274+ln(terrain / 560) & 0,0937 (0,0110) & 0.0937 & 0.0105 & 0.0730 & 0.1143 & 0.1000 \\
271−Âge & -0.0051 & 0.0006 & -0.0051 & 0.0006 & -0.0063 & -0.0039 & -0.0055 \\ 275+Âge & $-$0,0051 (0,0006) & -0.0051 & 0.0006 & -0.0063 & -0.0039 & -0.0055 \\
272−Âge² / 100 & 0.0026 & 0.0006 & 0.0026 & 0.0007 & 0.0013 & 0.0040 & 0.0030 \\ 276+Âge² / 100 & 0,0026 (0,0006) & 0.0026 & 0.0007 & 0.0013 & 0.0040 & 0.0030 \\
273−Qualité (écart à 3) & 0.0611 & 0.0042 & 0.0611 & 0.0041 & 0.0531 & 0.0691 & 0.0600 \\ 277+Qualité (écart à 3) & 0,0611 (0,0042) & 0.0611 & 0.0041 & 0.0531 & 0.0691 & 0.0600 \\
274−Garage (places) & 0.0324 & 0.0050 & 0.0324 & 0.0052 & 0.0222 & 0.0426 & 0.0350 \\ 278+Garage (places) & 0,0324 (0,0050) & 0.0324 & 0.0052 & 0.0222 & 0.0426 & 0.0350 \\
275−Sous-sol fini & 0.0220 & 0.0069 & 0.0220 & 0.0070 & 0.0083 & 0.0356 & 0.0300 \\ 279+Sous-sol fini & 0,0220 (0,0069) & 0.0220 & 0.0070 & 0.0083 & 0.0356 & 0.0300 \\
276−Piscine & 0.0263 & 0.0084 & 0.0263 & 0.0100 & 0.0067 & 0.0459 & 0.0200 \\ 280+Piscine & 0,0263 (0,0084) & 0.0263 & 0.0100 & 0.0067 & 0.0459 & 0.0200 \\
277−À étages & 0.0301 & 0.0069 & 0.0301 & 0.0069 & 0.0166 & 0.0436 & 0.0200 \\ 281+À étages & 0,0301 (0,0069) & 0.0301 & 0.0069 & 0.0166 & 0.0436 & 0.0200 \\
278−Distance au centre $>$ 3 km & -0.0036 & 0.0027 & -0.0036 & 0.0027 & -0.0089 & 0.0018 & -0.0060 \\ 282+Distance au centre $>$ 3 km & $-$0,0036 (0,0027) & -0.0036 & 0.0027 & -0.0089 & 0.0018 & -0.0060 \\
279−Secteur Gatineau & -0.0223 & 0.0146 & -0.0223 & 0.0147 & -0.0511 & 0.0065 & -0.0215 \\ 283+Secteur Gatineau & $-$0,0223 (0,0146) & -0.0223 & 0.0147 & -0.0511 & 0.0065 & -0.0215 \\
280−Secteur Aylmer & 0.0854 & 0.0231 & 0.0854 & 0.0237 & 0.0390 & 0.1318 & 0.1096 \\ 284+Secteur Aylmer & 0,0854 (0,0231) & 0.0854 & 0.0237 & 0.0390 & 0.1318 & 0.1096 \\
281−Secteur Buckingham & -0.2504 & 0.0718 & -0.2504 & 0.0732 & -0.3940 & -0.1067 & -0.1844 \\ 285+Secteur Buckingham & $-$0,2504 (0,0718) & -0.2504 & 0.0732 & -0.3940 & -0.1067 & -0.1844 \\
282−Secteur Masson-Angers & -0.2631 & 0.0672 & -0.2631 & 0.0669 & -0.3943 & -0.1320 & -0.2044 \\ 286+Secteur Masson-Angers & $-$0,2631 (0,0672) & -0.2631 & 0.0669 & -0.3943 & -0.1320 & -0.2044 \\
283−Mois depuis le 1\ier{} juillet 2024 & 0.0036 & 0.0003 & 0.0036 & 0.0003 & 0.0031 & 0.0042 & 0.0036 \\ 287+Mois depuis le 1\ier{} juillet 2024 & 0,0036 (0,0003) & 0.0036 & 0.0003 & 0.0031 & 0.0042 & 0.0036 \\
284 \midrule 288 \midrule
285−\multicolumn{8}{@{}l}{$n = 600$ ; $k = 16$ ; $a_n = 292$ ($\nu = 584$) ; $b_n = 2{,}0122$ ; $\E[\sigma \mid \mathbf{y}] = 0{,}0832$ (MCO : 0,0830 ; vrai : 0,085) ; 15 paramètres vrais sur 15 dans l'intervalle à 95 \%} \\ 289+\multicolumn{7}{@{}l}{$n = 600$ ; $k = 16$ ; $a_n = 292$ ($\nu = 584$) ; $b_n = 2{,}0122$ ; $\E[\sigma \mid \mathbf{y}] = 0{,}0832$ (MCO : 0,0830 ; vrai : 0,085)} \\
290+\multicolumn{7}{@{}l}{15 paramètres de génération sur 15 dans l'intervalle de crédibilité à 95 \%} \\
286 \bottomrule 291 \bottomrule
287 \end{tabular} 292 \end{tabular}
288 \tabsource{\synth{\texttt{analysis/python/cases/ch39\_bayes.py}}. Écart-type a posteriori de la marginale de Student ; intervalles de crédibilité à queues égales ; MCO et HC1 : \cref{tab:18:resultats}.} 293 \tabsource{\synth{\texttt{analysis/python/cases/ch39\_bayes.py}}. Écart-type a posteriori de la marginale de Student ; intervalles de crédibilité à queues égales ; MCO et HC1 : \cref{tab:18:resultats}.}
@@ -297,14 +302,14 @@ Mois depuis le 1\ier{} juillet 2024 & 0.0036 & 0.0003 & 0.0036 & 0.0003 & 0.0031
297 302
298 \begin{table}[htbp] 303 \begin{table}[htbp]
299 \caption{Distribution prédictive du prix du sujet du cas 1 au 1\ier{} septembre 2026 selon trois approches (données synthétiques)}\label{tab:39:predictive} 304 \caption{Distribution prédictive du prix du sujet du cas 1 au 1\ier{} septembre 2026 selon trois approches (données synthétiques)}\label{tab:39:predictive}
300−\centering\small\setlength{\tabcolsep}{4pt} 305+\centering\footnotesize\setlength{\tabcolsep}{3pt}
301−\begin{tabular}{@{}l S[table-format=6.0] S[table-format=6.0] S[table-format=6.0] S[table-format=6.0] S[table-format=6.0] S[table-format=6.0]@{}} 306+\begin{tabular}{@{}>{\raggedright\arraybackslash}p{34mm} S[table-format=6.0] c S[table-format=6.0] S[table-format=6.0] S[table-format=6.0] S[table-format=6.0]@{}}
302 \toprule 307 \toprule
303 Approche & {Médiane (\$)} & {Moyenne (\$)} & {Borne 5 \%} & {Borne 95 \%} & {Borne 2,5 \%} & {Borne 97,5 \%} \\ 308 Approche & {Médiane (\$)} & {Moyenne (\$)} & {Borne 5 \%} & {Borne 95 \%} & {Borne 2,5 \%} & {Borne 97,5 \%} \\
304 \midrule 309 \midrule
305−Fréquentiste (ch. 18 : normale, HC1, Duan) & 635821 & 637953 & 554095 & 729601 & 539682 & 749087 \\ 310+Fréquentiste (ch. 18 : normale, HC1, Duan) & 635821 & 637 953 & 554095 & 729601 & 539682 & 749087 \\
306−Conjuguée, a priori de référence (Student, 584 ddl) & 635821 & {n'existe pas} & 553979 & 729754 & 539504 & 749334 \\ 311+Conjuguée, a priori de référence (Student, 584 ddl) & 635821 & n'existe pas & 553979 & 729754 & 539504 & 749334 \\
307−Hiérarchique (8 000 tirages de Gibbs) & 634748 & 637727 & 554564 & 729004 & 540309 & 749431 \\ 312+Hiérarchique (8 000 tirages de Gibbs) & 634748 & 637 727 & 554564 & 729004 & 540309 & 749431 \\
308 \bottomrule 313 \bottomrule
309 \end{tabular} 314 \end{tabular}
310 \tabsource{\synth{\texttt{analysis/python/cases/ch39\_bayes.py} ; ligne fréquentiste : \texttt{traite.cas1.predire} et \texttt{intervalle\_prediction} aux niveaux 90 et 95 \%}. La moyenne d'une loi log-Student n'existe pas (\cref{prop:39-predictive}) ; la moyenne hiérarchique est la moyenne des tirages exponentiés.} 315 \tabsource{\synth{\texttt{analysis/python/cases/ch39\_bayes.py} ; ligne fréquentiste : \texttt{traite.cas1.predire} et \texttt{intervalle\_prediction} aux niveaux 90 et 95 \%}. La moyenne d'une loi log-Student n'existe pas (\cref{prop:39-predictive}) ; la moyenne hiérarchique est la moyenne des tirages exponentiés.}
@@ -319,21 +324,21 @@ Hiérarchique (8 000 tirages de Gibbs) & 634748 & 637727 & 554564 & 729004 & 540
319 324
320 \begin{table}[htbp] 325 \begin{table}[htbp]
321 \caption{Petit marché : 40 ventes à moins de 3 km du sujet et de moins de 18 mois, sous un a priori de référence et sous un a priori emprunté aux 414 ventes des autres secteurs (données synthétiques)}\label{tab:39:petit} 326 \caption{Petit marché : 40 ventes à moins de 3 km du sujet et de moins de 18 mois, sous un a priori de référence et sous un a priori emprunté aux 414 ventes des autres secteurs (données synthétiques)}\label{tab:39:petit}
322−\centering\footnotesize\setlength{\tabcolsep}{3pt} 327+\centering\scriptsize\setlength{\tabcolsep}{2pt}
323−\begin{tabular}{@{}l 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] S[table-format=6.0] S[table-format=2.1]@{}} 328+\begin{tabular}{@{}l c c S[table-format=6.0] S[table-format=6.0] S[table-format=6.0] S[table-format=2.1]@{}}
324 \toprule 329 \toprule
325−A priori & {$\beta_{\ln S}$ (é.-t.)} & {Qualité (é.-t.)} & {Garage (é.-t.)} & {$\E[\sigma]$} & {Médiane (\$)} & {Créd. 2,5 \%} & {Créd. 97,5 \%} & {Largeur (\%)} \\ 330+A priori & {$\beta_{\ln S}$ (é.-t.)} & {Qualité (é.-t.)} & {Médiane (\$)} & {Créd. 2,5 \%} & {Créd. 97,5 \%} & {Larg. (\%)} \\
326 \midrule 331 \midrule
327−Référence, 40 ventes ($\nu = 28$) & {0,611 (0,067)} & {0,101 (0,022)} & {0,010 (0,024)} & 0.0924 & 650965 & 535079 & 791950 & 39.5 \\ 332+Référence, 40 ventes ($\nu = 28$) & 0,611 (0,067) & 0,101 (0,022) & 650965 & 535079 & 791950 & 39.5 \\
328−Marché voisin, $\kappa = 1$ & {0,543 (0,016)} & {0,062 (0,005)} & {0,027 (0,006)} & 0.0829 & 630978 & 534942 & 744255 & 33.2 \\ 333+Voisin, $\kappa = 1$ & 0,543 (0,016) & 0,062 (0,005) & 630978 & 534942 & 744255 & 33.2 \\
329−Marché voisin, $\kappa = 4$ & {0,550 (0,028)} & {0,067 (0,008)} & {0,025 (0,011)} & 0.0826 & 633734 & 536880 & 748059 & 33.3 \\ 334+Voisin, $\kappa = 4$ & 0,550 (0,028) & 0,067 (0,008) & 633734 & 536880 & 748059 & 33.3 \\
330−Marché voisin, $\kappa = 16$ & {0,568 (0,042)} & {0,076 (0,013)} & {0,019 (0,016)} & 0.0823 & 637196 & 539063 & 753193 & 33.6 \\ 335+Voisin, $\kappa = 16$ & 0,568 (0,042) & 0,076 (0,013) & 637196 & 539063 & 753193 & 33.6 \\
331 \midrule 336 \midrule
332−Référence, Hull seul (186 ventes) & {0,540 (0,025)} & {---} & {---} & {---} & 623894 & 526381 & 739471 & 34.2 \\ 337+Référence, Hull seul (186 ventes) & 0,540 (0,025) & --- & 623894 & 526381 & 739471 & 34.2 \\
333−Référence, 600 ventes & {0,539 (0,014)} & {0,061 (0,004)} & {0,032 (0,005)} & 0.0832 & 635821 & 539504 & 749334 & 33.0 \\ 338+Référence, 600 ventes & 0,539 (0,014) & 0,061 (0,004) & 635821 & 539504 & 749334 & 33.0 \\
334 \bottomrule 339 \bottomrule
335 \end{tabular} 340 \end{tabular}
336−\tabsource{\synth{\texttt{analysis/python/cases/ch39\_bayes.py}}. Largeur : $(\text{borne } 97{,}5\,\% - \text{borne } 2{,}5\,\%)/\text{médiane}$. A priori emprunté : pentes centrées sur la postérieure des autres secteurs avec $\mathbf{V}_0 = \kappa\mathbf{V}^{v}$, constante plate, $a_0 = a^{v}$, $b_0 = b^{v}$.} 341+\tabsource{\synth{\texttt{analysis/python/cases/ch39\_bayes.py}}. Largeur : $(\text{borne } 97{,}5\,\% - \text{borne } 2{,}5\,\%)/\text{médiane}$. A priori emprunté : pentes centrées sur la postérieure des autres secteurs avec $\mathbf{V}_0 = \kappa\mathbf{V}^{v}$, constante plate, $a_0 = a^{v}$, $b_0 = b^{v}$ ; coefficient du garage et $\E[\sigma]$ dans le texte.}
337 \end{table} 342 \end{table}
338 343
339 \begin{figure}[htbp] 344 \begin{figure}[htbp]
@@ -345,26 +350,29 @@ Référence, 600 ventes & {0,539 (0,014)} & {0,061 (0,004)} & {0,032 (0,005)} &
345 350
346 \begin{table}[htbp] 351 \begin{table}[htbp]
347 \caption{Modèle hiérarchique des secteurs sur les 600 ventes du cas 1 : postérieure par Gibbs par blocs (4 chaînes, 8 000 tirages) et effets de secteur relatifs à Hull comparés aux effets fixes du chapitre 18 (données synthétiques)}\label{tab:39:hier} 352 \caption{Modèle hiérarchique des secteurs sur les 600 ventes du cas 1 : postérieure par Gibbs par blocs (4 chaînes, 8 000 tirages) et effets de secteur relatifs à Hull comparés aux effets fixes du chapitre 18 (données synthétiques)}\label{tab:39:hier}
348−\centering\footnotesize\setlength{\tabcolsep}{3.5pt} 353+\centering\scriptsize\setlength{\tabcolsep}{1.5pt}
349 \begin{tabular}{@{}l S[table-format=-2.4] S[table-format=1.4] S[table-format=-2.4] S[table-format=-2.4] S[table-format=-1.4] S[table-format=1.4] S[table-format=-1.4]@{}} 354 \begin{tabular}{@{}l S[table-format=-2.4] S[table-format=1.4] S[table-format=-2.4] S[table-format=-2.4] S[table-format=-1.4] S[table-format=1.4] S[table-format=-1.4]@{}}
350 \toprule 355 \toprule
351−Paramètre & {Moyenne} & {É.-t.} & {Créd. 2,5 \%} & {Créd. 97,5 \%} & {Effet fixe} & {E.-t. HC1} & {Vrai} \\ 356+ & \multicolumn{4}{c}{Postérieure hiérarchique} & \multicolumn{2}{c}{Ch. 18} & \\
357+\cmidrule(lr){2-5}\cmidrule(lr){6-7}
358+Paramètre & {Moyenne} & {É.-t.} & {2,5 \%} & {97,5 \%} & {Effet fixe} & {E.-t. HC1} & {Vrai} \\
352 \midrule 359 \midrule
353 $\sigma$ & 0.0832 & 0.0024 & 0.0785 & 0.0881 & 0.0830 & {---} & 0.0850 \\ 360 $\sigma$ & 0.0832 & 0.0024 & 0.0785 & 0.0881 & 0.0830 & {---} & 0.0850 \\
354 $\tau$ (médiane 0,181) & 0.2281 & 0.2050 & 0.0797 & 0.6330 & {---} & {---} & {---} \\ 361 $\tau$ (médiane 0,181) & 0.2281 & 0.2050 & 0.0797 & 0.6330 & {---} & {---} & {---} \\
355−$\alpha_0$ (niveau moyen des secteurs) & 13.0209 & 0.1474 & 12.7786 & 13.2561 & {---} & {---} & {---} \\ 362+$\alpha_0$ (niveau moyen) & 13.0209 & 0.1474 & 12.7786 & 13.2561 & {---} & {---} & {---} \\
356 $\alpha_{\text{Hull}}$ & 13.0896 & 0.0203 & 13.0504 & 13.1293 & {---} & {---} & {---} \\ 363 $\alpha_{\text{Hull}}$ & 13.0896 & 0.0203 & 13.0504 & 13.1293 & {---} & {---} & {---} \\
357 \addlinespace 364 \addlinespace
358−$\alpha_{\text{Gatineau}} - \alpha_{\text{Hull}}$ & -0.0153 & 0.0151 & -0.0450 & 0.0141 & -0.0223 & 0.0146 & -0.0215 \\ 365+$\alpha_{\text{Gat}} - \alpha_{\text{Hull}}$ & -0.0153 & 0.0151 & -0.0450 & 0.0141 & -0.0223 & 0.0146 & -0.0215 \\
359−$\alpha_{\text{Aylmer}} - \alpha_{\text{Hull}}$ & 0.0976 & 0.0243 & 0.0507 & 0.1449 & 0.0854 & 0.0231 & 0.1096 \\ 366+$\alpha_{\text{Ayl}} - \alpha_{\text{Hull}}$ & 0.0976 & 0.0243 & 0.0507 & 0.1449 & 0.0854 & 0.0231 & 0.1096 \\
360−$\alpha_{\text{Buckingham}} - \alpha_{\text{Hull}}$ & -0.2073 & 0.0761 & -0.3562 & -0.0606 & -0.2504 & 0.0718 & -0.1844 \\ 367+$\alpha_{\text{Buck}} - \alpha_{\text{Hull}}$ & -0.2073 & 0.0761 & -0.3562 & -0.0606 & -0.2504 & 0.0718 & -0.1844 \\
361−$\alpha_{\text{Masson-Angers}} - \alpha_{\text{Hull}}$ & -0.2240 & 0.0695 & -0.3602 & -0.0894 & -0.2631 & 0.0672 & -0.2044 \\ 368+$\alpha_{\text{MA}} - \alpha_{\text{Hull}}$ & -0.2240 & 0.0695 & -0.3602 & -0.0894 & -0.2631 & 0.0672 & -0.2044 \\
362 \addlinespace 369 \addlinespace
363 $\beta_{\ln S}$ & 0.5395 & 0.0137 & 0.5130 & 0.5662 & 0.5391 & 0.0127 & 0.5500 \\ 370 $\beta_{\ln S}$ & 0.5395 & 0.0137 & 0.5130 & 0.5662 & 0.5391 & 0.0127 & 0.5500 \\
364 $\beta_{\text{qualité}}$ & 0.0613 & 0.0041 & 0.0533 & 0.0695 & 0.0611 & 0.0042 & 0.0600 \\ 371 $\beta_{\text{qualité}}$ & 0.0613 & 0.0041 & 0.0533 & 0.0695 & 0.0611 & 0.0042 & 0.0600 \\
365 $\beta_{\text{dist}}$ & -0.0052 & 0.0028 & -0.0106 & 0.0004 & -0.0036 & 0.0027 & -0.0060 \\ 372 $\beta_{\text{dist}}$ & -0.0052 & 0.0028 & -0.0106 & 0.0004 & -0.0036 & 0.0027 & -0.0060 \\
366 \midrule 373 \midrule
367−\multicolumn{8}{@{}l}{Facteurs de rétrécissement $B_s$ à la médiane de $(\sigma^2, \tau^2)$ : Hull 0,999 ; Gatineau 0,999 ; Aylmer 0,998 ; Buckingham 0,995 ; Masson-Angers 0,995} \\ 374+\multicolumn{8}{@{}l}{$B_s$ (médiane de $\sigma^2$, $\tau^2$) : Hull 0,999 ; Gatineau 0,999 ; Aylmer 0,998 ; Buckingham 0,995 ; Masson-Angers 0,995} \\
375+\multicolumn{8}{@{}l}{Gat : Gatineau ; Ayl : Aylmer ; Buck : Buckingham ; MA : Masson-Angers} \\
368 \bottomrule 376 \bottomrule
369 \end{tabular} 377 \end{tabular}
370 \tabsource{\synth{\texttt{analysis/python/cases/ch39\_bayes.py}}. A priori : plats sur $\boldsymbol\beta$ et $\alpha_0$, $1/\sigma^2$ sur $\sigma^2$, uniforme sur $\tau$ ; les autres coefficients sont dans le script.} 378 \tabsource{\synth{\texttt{analysis/python/cases/ch39\_bayes.py}}. A priori : plats sur $\boldsymbol\beta$ et $\alpha_0$, $1/\sigma^2$ sur $\sigma^2$, uniforme sur $\tau$ ; les autres coefficients sont dans le script.}
@@ -403,7 +411,7 @@ $\sigma$ & 1.000 & 7616 & 1.000 & 7664 \\
403 411
404 \begin{table}[htbp] 412 \begin{table}[htbp]
405 \caption{Expérience : secteur de Masson-Angers réduit à 5, 10, 20 puis 47 ventes ; effet du secteur et prédictive d'un sujet hypothétique situé à Masson-Angers (données synthétiques)}\label{tab:39:experience} 413 \caption{Expérience : secteur de Masson-Angers réduit à 5, 10, 20 puis 47 ventes ; effet du secteur et prédictive d'un sujet hypothétique situé à Masson-Angers (données synthétiques)}\label{tab:39:experience}
406−\centering\footnotesize\setlength{\tabcolsep}{3pt} 414+\centering\scriptsize\setlength{\tabcolsep}{2.2pt}
407 \begin{tabular}{@{}S[table-format=2.0] S[table-format=-1.3] S[table-format=1.3] S[table-format=-1.3] S[table-format=1.3] S[table-format=1.3] S[table-format=1.3] S[table-format=6.0] S[table-format=2.1] S[table-format=6.0] S[table-format=2.1]@{}} 415 \begin{tabular}{@{}S[table-format=2.0] S[table-format=-1.3] S[table-format=1.3] S[table-format=-1.3] S[table-format=1.3] S[table-format=1.3] S[table-format=1.3] S[table-format=6.0] S[table-format=2.1] S[table-format=6.0] S[table-format=2.1]@{}}
408 \toprule 416 \toprule
409 {$n_{\text{MA}}$} & {Effet fixe} & {É.-t.} & {Effet aléat.} & {É.-t.} & {$\tau$ méd.} & {$B_{\text{MA}}$} & {Méd. fixe (\$)} & {Larg. (\%)} & {Méd. hiér. (\$)} & {Larg. (\%)} \\ 417 {$n_{\text{MA}}$} & {Effet fixe} & {É.-t.} & {Effet aléat.} & {É.-t.} & {$\tau$ méd.} & {$B_{\text{MA}}$} & {Méd. fixe (\$)} & {Larg. (\%)} & {Méd. hiér. (\$)} & {Larg. (\%)} \\
@@ -426,14 +434,14 @@ $\sigma$ & 1.000 & 7616 & 1.000 & 7664 \\
426 434
427 \begin{table}[htbp] 435 \begin{table}[htbp]
428 \caption{Comparaison des trois traitements des secteurs par le WAIC et la validation croisée une observation à la fois (600 ventes, données synthétiques)}\label{tab:39:criteres} 436 \caption{Comparaison des trois traitements des secteurs par le WAIC et la validation croisée une observation à la fois (600 ventes, données synthétiques)}\label{tab:39:criteres}
429−\centering\small\setlength{\tabcolsep}{4pt} 437+\centering\scriptsize\setlength{\tabcolsep}{3pt}
430−\begin{tabular}{@{}l S[table-format=2.0] S[table-format=3.1] S[table-format=2.1] S[table-format=3.1] S[table-format=2.1] S[table-format=3.1] S[table-format=3.1] S[table-format=-3.1]@{}} 438+\begin{tabular}{@{}l S[table-format=3.1] S[table-format=2.1] S[table-format=3.1] S[table-format=2.1] S[table-format=3.1] S[table-format=3.1] S[table-format=-3.1]@{}}
431 \toprule 439 \toprule
432−Modèle & {Coeff.} & {lppd} & {$p_{\mathrm{WAIC}}$} & {elpd$_{\mathrm{WAIC}}$} & {E.-t.} & {LOO exact} & {LOO import.} & {$\Delta$elpd} \\ 440+Modèle & {lppd} & {$p_{\mathrm{WAIC}}$} & {elpd$_{\mathrm{WAIC}}$} & {E.-t.} & {LOO exact} & {LOO import.} & {$\Delta$elpd} \\
433 \midrule 441 \midrule
434−Regroupement complet (sans secteur) & 12 & 510.2 & 12.4 & 497.8 & 17.5 & 497.8 & 497.8 & -135.3 \\ 442+Regroupement complet (12 coefficients) & 510.2 & 12.4 & 497.8 & 17.5 & 497.8 & 497.8 & -135.3 \\
435−Effets fixes de secteur (ch. 18) & 16 & 649.2 & 16.0 & 633.2 & 16.2 & 633.1 & 633.1 & 0.0 \\ 443+Effets fixes, ch. 18 (16 coefficients) & 649.2 & 16.0 & 633.2 & 16.2 & 633.1 & 633.1 & 0.0 \\
436−Effets aléatoires de secteur (hiérarchique) & {16 + 2} & 649.0 & 16.1 & 632.9 & 16.3 & {---} & 632.9 & -0.3 \\ 444+Effets aléatoires (16 coeff. + $\alpha_0$, $\tau$) & 649.0 & 16.1 & 632.9 & 16.3 & {---} & 632.9 & -0.3 \\
437 \bottomrule 445 \bottomrule
438 \end{tabular} 446 \end{tabular}
439 \tabsource{\synth{\texttt{analysis/python/cases/ch39\_bayes.py}}. 2 000 tirages par modèle ; LOO exact par réestimation en forme fermée (modèles conjugués) ; LOO par importance tronquée ; E.-t. : erreur-type de l'elpd ; $\Delta$elpd par rapport au meilleur modèle. WAIC $= -2\,\mathrm{elpd}$ : $-995{,}7$, $-1266{,}3$ et $-1265{,}7$.} 447 \tabsource{\synth{\texttt{analysis/python/cases/ch39\_bayes.py}}. 2 000 tirages par modèle ; LOO exact par réestimation en forme fermée (modèles conjugués) ; LOO par importance tronquée ; E.-t. : erreur-type de l'elpd ; $\Delta$elpd par rapport au meilleur modèle. WAIC $= -2\,\mathrm{elpd}$ : $-995{,}7$, $-1266{,}3$ et $-1265{,}7$.}
@@ -445,7 +453,7 @@ Le paramètre le moins bien informé du modèle hiérarchique est $\tau$, et la
445 453
446 \begin{table}[htbp] 454 \begin{table}[htbp]
447 \caption{Sensibilité du modèle hiérarchique à l'a priori sur $\tau$ : 600 ventes et Masson-Angers réduit à 5 ventes (données synthétiques)}\label{tab:39:sensibilite} 455 \caption{Sensibilité du modèle hiérarchique à l'a priori sur $\tau$ : 600 ventes et Masson-Angers réduit à 5 ventes (données synthétiques)}\label{tab:39:sensibilite}
448−\centering\small\setlength{\tabcolsep}{4pt} 456+\centering\scriptsize\setlength{\tabcolsep}{2.5pt}
449 \begin{tabular}{@{}l S[table-format=1.3] S[table-format=1.3] S[table-format=1.3] S[table-format=-1.3] S[table-format=1.3] S[table-format=1.3] S[table-format=-1.3] S[table-format=1.3]@{}} 457 \begin{tabular}{@{}l S[table-format=1.3] S[table-format=1.3] S[table-format=1.3] S[table-format=-1.3] S[table-format=1.3] S[table-format=1.3] S[table-format=-1.3] S[table-format=1.3]@{}}
450 \toprule 458 \toprule
451 & \multicolumn{5}{c}{600 ventes} & \multicolumn{3}{c}{$n_{\text{MA}} = 5$} \\ 459 & \multicolumn{5}{c}{600 ventes} & \multicolumn{3}{c}{$n_{\text{MA}} = 5$} \\
@@ -457,7 +465,8 @@ $\mathcal{IG}(0{,}001 ; 0{,}001)$ sur $\tau^2$ & 0.149 & 0.079 & 0.343 & -0.211
457 $\mathcal{IG}(1 ; 0{,}01)$ sur $\tau^2$ & 0.129 & 0.077 & 0.245 & -0.200 & 0.067 & 0.145 & -0.269 & 0.079 \\ 465 $\mathcal{IG}(1 ; 0{,}01)$ sur $\tau^2$ & 0.129 & 0.077 & 0.245 & -0.200 & 0.067 & 0.145 & -0.269 & 0.079 \\
458 $\tau$ fixé à 0,157 (bayésien empirique) & 0.157 & {---} & {---} & -0.221 & 0.062 & 0.157 & -0.283 & 0.070 \\ 466 $\tau$ fixé à 0,157 (bayésien empirique) & 0.157 & {---} & {---} & -0.221 & 0.062 & 0.157 & -0.283 & 0.070 \\
459 \midrule 467 \midrule
460−\multicolumn{9}{@{}l}{Pour mémoire : effet fixe de Masson-Angers $-0{,}263$ (0,067) avec 47 ventes, $-0{,}342$ (0,076) avec 5 ventes ; paramètre vrai $-0{,}204$} \\ 468+\multicolumn{9}{@{}l}{Pour mémoire : effet fixe de Masson-Angers $-0{,}263$ (0,067) avec 47 ventes, $-0{,}342$ (0,076) avec 5 ventes ;} \\
469+\multicolumn{9}{@{}l}{paramètre de génération $-0{,}2044$} \\
461 \bottomrule 470 \bottomrule
462 \end{tabular} 471 \end{tabular}
463 \tabsource{\synth{\texttt{analysis/python/cases/ch39\_bayes.py}}. Effet MA : $\alpha_{\text{Masson-Angers}} - \alpha_{\text{Hull}}$, moyenne et écart-type a posteriori ; Gibbs par blocs, 4 chaînes, 8 000 tirages.} 472 \tabsource{\synth{\texttt{analysis/python/cases/ch39\_bayes.py}}. Effet MA : $\alpha_{\text{Masson-Angers}} - \alpha_{\text{Hull}}$, moyenne et écart-type a posteriori ; Gibbs par blocs, 4 chaînes, 8 000 tirages.}
modified manuscript/chapters/ch40.tex +4 −3
@@ -154,7 +154,7 @@ Les tirages confirment la dérivation : corrélation de Pearson empirique \num{0
154 La simulation d'un modèle de flux actualisés n'a rien de mystérieux ; elle consiste à exécuter le calcul déterministe du \cref{ch:30} un grand nombre de fois. Les étapes sont les suivantes. 154 La simulation d'un modèle de flux actualisés n'a rien de mystérieux ; elle consiste à exécuter le calcul déterministe du \cref{ch:30} un grand nombre de fois. Les étapes sont les suivantes.
155 \begin{enumerate} 155 \begin{enumerate}
156 \item Déclarer les intrants incertains, leurs lois (\cref{tab:40:lois}) et leurs dépendances (\cref{eq:40:cholesky,eq:40:rRT}) ; fixer les autres intrants (ici la croissance réglementaire des loyers contractuels, \pct{3.1}, les coûts de vente, l'horizon). 156 \item Déclarer les intrants incertains, leurs lois (\cref{tab:40:lois}) et leurs dépendances (\cref{eq:40:cholesky,eq:40:rRT}) ; fixer les autres intrants (ici la croissance réglementaire des loyers contractuels, \pct{3.1}, les coûts de vente, l'horizon).
157−\item Fixer la graine du générateur de nombres pseudo-aléatoires, par exemple \texttt{default\_rng(20261031)} dans NumPy : sans graine, deux exécutions donnent deux résultats, et le rapport n'est pas reproductible. 157+\item Fixer la graine du générateur de nombres pseudo-aléatoires : sans graine, deux exécutions donnent deux résultats, et le rapport n'est pas reproductible. Le script du chapitre utilise la graine 20261031 du générateur \texttt{default\_rng} de NumPy.
158 \item Tirer $N$ vecteurs d'intrants $\mathbf{X}^{(s)}$, $s = 1, \dots, N$. 158 \item Tirer $N$ vecteurs d'intrants $\mathbf{X}^{(s)}$, $s = 1, \dots, N$.
159 \item Pour chaque tirage, projeter les revenus et dépenses sur l'horizon $T$ et l'année $T + 1$, calculer les flux avant dette, la valeur terminale et la valeur 159 \item Pour chaque tirage, projeter les revenus et dépenses sur l'horizon $T$ et l'année $T + 1$, calculer les flux avant dette, la valeur terminale et la valeur
160 \begin{equation}\label{eq:40:dcf-simule} 160 \begin{equation}\label{eq:40:dcf-simule}
@@ -284,9 +284,10 @@ Le \cref{tab:40:stress} applique cette lecture à six scénarios du cas 3. Le sc
284 \begin{table}[htbp]\centering 284 \begin{table}[htbp]\centering
285 \caption{Stress tests déterministes du cas 3 et probabilité, dans la simulation, d'un résultat au moins aussi défavorable.}\label{tab:40:stress} 285 \caption{Stress tests déterministes du cas 3 et probabilité, dans la simulation, d'un résultat au moins aussi défavorable.}\label{tab:40:stress}
286 \small\setlength{\tabcolsep}{4pt} 286 \small\setlength{\tabcolsep}{4pt}
287−\begin{tabular}{@{}L{7.2cm}S[table-format=7.0]S[table-format=-2.1]S[table-format=2.2]@{}} 287+\begin{tabular}{@{}L{6.4cm}S[table-format=7.0]S[table-format=-2.1]S[table-format=2.2]@{}}
288 \toprule 288 \toprule
289−Scénario & {Valeur (\$)} & {Écart à la base (\%)} & {P(valeur $\leq$ scénario) (\%)} \\ 289+Scénario & {Valeur} & {Écart à la} & {P(valeur $\leq$} \\
290+ & {(\$)} & {base (\%)} & {scénario) (\%)} \\
290 \midrule 291 \midrule
291 Base (hypothèses du dossier) & 2208566 & 0.0 & 52.17 \\ 292 Base (hypothèses du dossier) & 2208566 & 0.0 & 52.17 \\
292 Hausse des taux : $r + 75$~pb, $R_T + 50$~pb (\cref{tab:30:scenarios}) & 1947889 & -11.8 & 20.72 \\ 293 Hausse des taux : $r + 75$~pb, $R_T + 50$~pb (\cref{tab:30:scenarios}) & 1947889 & -11.8 & 20.72 \\
modified manuscript/chapters/ch41.tex +21 −21
@@ -25,7 +25,7 @@ La plus haute et meilleure utilisation d'un bien immobilier est l'usage, parmi c
25 25
26 La définition porte une conséquence méthodologique immédiate : la valeur marchande d'un bien est le maximum, sur l'ensemble $\mathcal{U}$ des usages admissibles, des valeurs qu'il aurait sous chacun d'eux, 26 La définition porte une conséquence méthodologique immédiate : la valeur marchande d'un bien est le maximum, sur l'ensemble $\mathcal{U}$ des usages admissibles, des valeurs qu'il aurait sous chacun d'eux,
27 \begin{equation}\label{eq:41:max-usage} 27 \begin{equation}\label{eq:41:max-usage}
28−V = \max_{u \in \mathcal{U}} V(u), \qquad \mathcal{U} = \{u : \text{légalement permis, physiquement possible, financièrement faisable}\}, 28+V = \max_{u \in \mathcal{U}} V(u), \qquad \mathcal{U} = \{u : u \text{ permis, possible et faisable}\},
29 \end{equation} 29 \end{equation}
30 et les trois premiers tests servent à construire l'ensemble $\mathcal{U}$ tandis que le quatrième, la productivité maximale, désigne l'élément qui réalise le maximum. L'\cref{eq:41:max-usage} explique pourquoi l'analyse précède le choix des méthodes : la comparaison, le coût et le revenu mesurent $V(u)$ pour un usage donné, et c'est la PHMU qui dit lequel. Un évaluateur qui compare une maison ancienne à d'autres maisons anciennes mesure $V(\text{maison})$ ; si le terrain vaut davantage pour un triplex que la maison entière, cette mesure n'est pas la valeur marchande. L'\cref{eq:16:esperance} du \cref{ch:16} définissait la valeur comme l'espérance du prix conditionnellement aux caractéristiques du bien ; la PHMU ajoute que l'usage fait partie de ces caractéristiques et qu'il n'est pas donné, mais choisi par l'acheteur le plus probable. 30 et les trois premiers tests servent à construire l'ensemble $\mathcal{U}$ tandis que le quatrième, la productivité maximale, désigne l'élément qui réalise le maximum. L'\cref{eq:41:max-usage} explique pourquoi l'analyse précède le choix des méthodes : la comparaison, le coût et le revenu mesurent $V(u)$ pour un usage donné, et c'est la PHMU qui dit lequel. Un évaluateur qui compare une maison ancienne à d'autres maisons anciennes mesure $V(\text{maison})$ ; si le terrain vaut davantage pour un triplex que la maison entière, cette mesure n'est pas la valeur marchande. L'\cref{eq:16:esperance} du \cref{ch:16} définissait la valeur comme l'espérance du prix conditionnellement aux caractéristiques du bien ; la PHMU ajoute que l'usage fait partie de ces caractéristiques et qu'il n'est pas donné, mais choisi par l'acheteur le plus probable.
31 31
@@ -275,16 +275,16 @@ Les prix de sortie des unités neuves sont tirés du modèle hédonique du cas 1
275 \begin{table}[htbp] 275 \begin{table}[htbp]
276 \caption{Programmes, prix de sortie et coûts de construction des quatre usages (dollars du T3 2026, données synthétiques)}\label{tab:41:prix} 276 \caption{Programmes, prix de sortie et coûts de construction des quatre usages (dollars du T3 2026, données synthétiques)}\label{tab:41:prix}
277 \centering 277 \centering
278−\small 278+\footnotesize\setlength{\tabcolsep}{3pt}
279−\begin{tabular}{lS[table-format=6.0]S[table-format=6.0]S[table-format=7.0]S[table-format=4.0]S[table-format=6.0]} 279+\begin{tabular}{>{\raggedright\arraybackslash}p{37mm}S[table-format=6.0]S[table-format=6.0]S[table-format=7.0]S[table-format=4.0]S[table-format=6.0]}
280 \toprule 280 \toprule
281−Usage & {Prix maison isolée équiv. (\$)} & {Prix de l'unité (\$)} & {Produit $\mathit{GDV}$ (\$)} & {$D+I$ (\$/m\textsuperscript{2})} & {Coûts $C$ (\$)} \\ 281+Usage & {Maison isolée (\$)} & {Unité (\$)} & {$\mathit{GDV}$ (\$)} & {$D+I$ (\$/m\textsuperscript{2})} & {$C$ (\$)} \\
282 \midrule 282 \midrule
283 S0 Maison actuelle (prédiction hédonique) & 637953 & {---} & {---} & {---} & {---} \\ 283 S0 Maison actuelle (prédiction hédonique) & 637953 & {---} & {---} & {---} & {---} \\
284 U Maison neuve, 1 $\times$ 165 m\textsuperscript{2} & 720727 & 720727 & 720727 & 2190 & 361425 \\ 284 U Maison neuve, 1 $\times$ 165 m\textsuperscript{2} & 720727 & 720727 & 720727 & 2190 & 361425 \\
285−D Duplex, 2 $\times$ 120 m\textsuperscript{2} (décote 10 \%) & 550726 & 495654 & 991307 & 2228 & 534734 \\ 285+D Duplex, 2 $\times$ 120 m\textsuperscript{2}, décote 10 \% & 550726 & 495654 & 991307 & 2228 & 534734 \\
286−T Triplex, 3 $\times$ 100 m\textsuperscript{2} (décote 15 \%) & 480573 & 408487 & 1225460 & 2228 & 668417 \\ 286+T Triplex, 3 $\times$ 100 m\textsuperscript{2}, décote 15 \% & 480573 & 408487 & 1225460 & 2228 & 668417 \\
287−Q Quadruplex, 4 $\times$ 85 m\textsuperscript{2} (décote 20 \%, non permis) & 428558 & 342846 & 1371384 & 2228 & 757540 \\ 287+Q Quadruplex, 4 $\times$ 85 m\textsuperscript{2}, décote 20 \% (non permis) & 428558 & 342846 & 1371384 & 2228 & 757540 \\
288 \bottomrule 288 \bottomrule
289 \end{tabular} 289 \end{tabular}
290 \tabsource{\synth{\texttt{analysis/python/cases/ch41\_phmu.py}, fonctions \texttt{produit\_vente} et \texttt{couts\_unitaires} ; modèle hédonique \texttt{traite.cas1.hedonique}, âge 0 ; devis du cas 1 (\texttt{ch21\_cout\_neuf.py}) ; IPCB Montréal T3 2026 (Statistique Canada, tableau 18-10-0289-01, consulté le 31 octobre 2026)}.} 290 \tabsource{\synth{\texttt{analysis/python/cases/ch41\_phmu.py}, fonctions \texttt{produit\_vente} et \texttt{couts\_unitaires} ; modèle hédonique \texttt{traite.cas1.hedonique}, âge 0 ; devis du cas 1 (\texttt{ch21\_cout\_neuf.py}) ; IPCB Montréal T3 2026 (Statistique Canada, tableau 18-10-0289-01, consulté le 31 octobre 2026)}.}
@@ -299,8 +299,8 @@ Le \cref{tab:41:residuel} déroule l'\cref{eq:41:residuel} pour les trois usages
299 \begin{table}[htbp] 299 \begin{table}[htbp]
300 \caption{Méthode résiduelle de développement pour les trois usages permis, convention du promoteur-marchand (dollars du T3 2026, données synthétiques)}\label{tab:41:residuel} 300 \caption{Méthode résiduelle de développement pour les trois usages permis, convention du promoteur-marchand (dollars du T3 2026, données synthétiques)}\label{tab:41:residuel}
301 \centering 301 \centering
302−\small 302+\footnotesize
303−\begin{tabular}{lS[table-format=-7.0]S[table-format=-7.0]S[table-format=-7.0]} 303+\begin{tabular}{>{\raggedright\arraybackslash}p{66mm}S[table-format=-7.0]S[table-format=-7.0]S[table-format=-7.0]}
304 \toprule 304 \toprule
305 Poste & {U Maison neuve} & {D Duplex} & {T Triplex} \\ 305 Poste & {U Maison neuve} & {D Duplex} & {T Triplex} \\
306 \midrule 306 \midrule
@@ -308,18 +308,18 @@ Produit de vente $\mathit{GDV}$ & 720727 & 991307 & 1225460 \\
308 Frais de vente (4 \% du produit) & -28829 & -39652 & -49018 \\ 308 Frais de vente (4 \% du produit) & -28829 & -39652 & -49018 \\
309 Coûts directs et indirects $C$ & -361425 & -534734 & -668417 \\ 309 Coûts directs et indirects $C$ & -361425 & -534734 & -668417 \\
310 Démolition et préparation du site $D$ & -30000 & -30000 & -30000 \\ 310 Démolition et préparation du site $D$ & -30000 & -30000 & -30000 \\
311−Intérêts intérimaires $F$ (75 \% des coûts, 6,19 \%, tirage uniforme) & -6814 & -12290 & -18239 \\ 311+Intérêts intérimaires $F$ (prêt de 75 \% à 6,19 \%, tirage uniforme) & -6814 & -12290 & -18239 \\
312 Marge du promoteur $M$ (15 \% du produit) & -108109 & -148696 & -183819 \\ 312 Marge du promoteur $M$ (15 \% du produit) & -108109 & -148696 & -183819 \\
313 \midrule 313 \midrule
314 Reste à la livraison & 185550 & 225936 & 275967 \\ 314 Reste à la livraison & 185550 & 225936 & 275967 \\
315−Durée totale $T$ (années) & 1.00 & 1.25 & 1.50 \\ 315+Durée totale $T$ (années) & {1,00} & {1,25} & {1,50} \\
316−Facteur $(1 + \tau)(1 + r_L)^{T}$ & 1.1681 & 1.1858 & 1.2037 \\ 316+Facteur $(1 + \tau)(1 + r_L)^{T}$ & {1,1681} & {1,1858} & {1,2037} \\
317 \midrule 317 \midrule
318 Valeur résiduelle du terrain $V_L$ & 158849 & 190541 & 229265 \\ 318 Valeur résiduelle du terrain $V_L$ & 158849 & 190541 & 229265 \\
319 \quad dont contribution pour fins de parcs (10 \%) & 15885 & 19054 & 22927 \\ 319 \quad dont contribution pour fins de parcs (10 \%) & 15885 & 19054 & 22927 \\
320 Valeur résiduelle statique ($r_L = 0$) & 168682 & 205396 & 250879 \\ 320 Valeur résiduelle statique ($r_L = 0$) & 168682 & 205396 & 250879 \\
321 \midrule 321 \midrule
322−Convention « construction sur commande » (marge 10 \% des coûts, sans frais de vente ni parcs) & 266187 & 330792 & 399479 \\ 322+Convention « construction sur commande » (marge 10 \% des coûts, ni frais de vente ni parcs) & 266187 & 330792 & 399479 \\
323 \bottomrule 323 \bottomrule
324 \end{tabular} 324 \end{tabular}
325 \tabsource{\synth{\texttt{analysis/python/cases/ch41\_phmu.py}, fonction \texttt{residuel\_developpement} ; intérêts par \texttt{traite.finance.interets\_intermediaires}}.} 325 \tabsource{\synth{\texttt{analysis/python/cases/ch41\_phmu.py}, fonction \texttt{residuel\_developpement} ; intérêts par \texttt{traite.finance.interets\_intermediaires}}.}
@@ -348,13 +348,13 @@ La conclusion du bien amélioré est nette, mais elle est datée : les prix des
348 348
349 \begin{figure}[htbp] 349 \begin{figure}[htbp]
350 \centering 350 \centering
351−\begin{tikzpicture}[every node/.style={font=\sffamily\footnotesize}, n/.style={draw=brandPrimary, fill=brandLight, rounded corners=1pt, align=center, minimum width=34mm, minimum height=11mm}, m/.style={draw=brandGreen, fill=green!4!white, rounded corners=1pt, align=center, minimum width=34mm, minimum height=11mm}, fl/.style={-{Stealth[length=1.8mm]}, brandGray, thick}] 351+\begin{tikzpicture}[every node/.style={font=\sffamily\footnotesize}, n/.style={draw=brandPrimary, fill=brandLight, rounded corners=1pt, align=center, minimum width=31mm, minimum height=11mm, inner xsep=1.5pt}, m/.style={draw=brandGreen, fill=green!4!white, rounded corners=1pt, align=center, minimum width=31mm, minimum height=11mm, inner xsep=1.5pt}, fl/.style={-{Stealth[length=1.8mm]}, brandGray, thick}]
352−\node[n] (a) at (0,0) {$t = 0$ : $\mathit{GDV}_0 = 1\,225\,460$\\exercice 0 ; continuation 2 837\\\textbf{valeur de l'option : 2 837 \$}}; 352+\node[n] (a) at (0,0) {$t = 0$ : $\mathit{GDV}_0 = 1\,225\,460$\\exercice 0 ; continuation 2 837\\\textbf{option : 2 837 \$}};
353−\node[n] (b) at (5.2,1.9) {$t = 1$, hausse : 1 532 535\\exercice 0 ; continuation 16 357\\valeur 16 357 \$ (attendre)}; 353+\node[n] (b) at (4.7,1.9) {$t = 1$, hausse : 1 532 535\\exercice 0 ; continuation 16 357\\valeur 16 357 \$ (attendre)};
354−\node[n] (c) at (5.2,-1.9) {$t = 1$, baisse : 979 914\\exercice 0 ; continuation 0\\valeur 0 \$}; 354+\node[n] (c) at (4.7,-1.9) {$t = 1$, baisse : 979 914\\exercice 0 ; continuation 0\\valeur 0 \$};
355−\node[m] (d) at (10.4,3.4) {$t = 2$, deux hausses : 1 916 556\\$0{,}6729 \times 1\,916\,556 - 1\,195\,378$\\\textbf{exercice : 94 322 \$}}; 355+\node[m] (d) at (9.4,3.4) {$t = 2$, deux hausses : 1 916 556\\$0{,}6729 \times 1\,916\,556 - 1\,195\,378$\\\textbf{exercice : 94 322 \$}};
356−\node[n] (e) at (10.4,0) {$t = 2$, une hausse : 1 225 460\\exercice 0 \$}; 356+\node[n] (e) at (9.4,0) {$t = 2$, une hausse : 1 225 460\\exercice 0 \$};
357−\node[n] (f) at (10.4,-3.4) {$t = 2$, deux baisses : 783 568\\exercice 0 \$}; 357+\node[n] (f) at (9.4,-3.4) {$t = 2$, deux baisses : 783 568\\exercice 0 \$};
358 \draw[fl] (a) -- node[above, sloped]{$q = 0{,}1915$} (b); \draw[fl] (a) -- node[below, sloped]{$1 - q = 0{,}8085$} (c); 358 \draw[fl] (a) -- node[above, sloped]{$q = 0{,}1915$} (b); \draw[fl] (a) -- node[below, sloped]{$1 - q = 0{,}8085$} (c);
359 \draw[fl] (b) -- node[above, sloped]{$q$} (d); \draw[fl] (b) -- node[below, sloped]{$1-q$} (e); 359 \draw[fl] (b) -- node[above, sloped]{$q$} (d); \draw[fl] (b) -- node[below, sloped]{$1-q$} (e);
360 \draw[fl] (c) -- node[above, sloped]{$q$} (e); \draw[fl] (c) -- node[below, sloped]{$1-q$} (f); 360 \draw[fl] (c) -- node[above, sloped]{$q$} (e); \draw[fl] (c) -- node[below, sloped]{$1-q$} (f);
@@ -376,7 +376,7 @@ Les conclusions de la \cref{sec:41:exemple} reposent sur des hypothèses que l'
376 \begin{table}[htbp] 376 \begin{table}[htbp]
377 \caption{Sensibilité de la valeur résiduelle du triplex (convention du promoteur, cas de base \dollars{229265}) à chaque hypothèse, les autres étant maintenues}\label{tab:41:sensibilite} 377 \caption{Sensibilité de la valeur résiduelle du triplex (convention du promoteur, cas de base \dollars{229265}) à chaque hypothèse, les autres étant maintenues}\label{tab:41:sensibilite}
378 \centering 378 \centering
379−\small 379+\footnotesize\setlength{\tabcolsep}{4pt}
380 \begin{tabular}{llS[table-format=6.0]lS[table-format=6.0]S[table-format=-3.0]} 380 \begin{tabular}{llS[table-format=6.0]lS[table-format=6.0]S[table-format=-3.0]}
381 \toprule 381 \toprule
382 Hypothèse & Variante basse & {$V_L$ (\$)} & Variante haute & {$V_L$ (\$)} & {Étendue (\%)} \\ 382 Hypothèse & Variante basse & {$V_L$ (\$)} & Variante haute & {$V_L$ (\$)} & {Étendue (\%)} \\
modified manuscript/chapters/ch44.tex +10 −10
@@ -32,7 +32,7 @@ Pour raisonner sur la contribution, il faut d'abord classer les travaux par leur
32 \begin{table}[htbp] 32 \begin{table}[htbp]
33 \caption{Quatre catégories de travaux, leur effet sur la valeur et la mesure appropriée}\label{tab:44:taxonomie} 33 \caption{Quatre catégories de travaux, leur effet sur la valeur et la mesure appropriée}\label{tab:44:taxonomie}
34 \centering\small 34 \centering\small
35−\begin{tabularx}{\textwidth}{lYYl} 35+\begin{tabularx}{\textwidth}{>{\hsize=0.80\hsize}Y>{\hsize=1.15\hsize}Y>{\hsize=1.15\hsize}Y>{\hsize=0.90\hsize}Y}
36 \toprule 36 \toprule
37 Catégorie & Nature des travaux & Contribution attendue et mesure & Renvoi \\ 37 Catégorie & Nature des travaux & Contribution attendue et mesure & Renvoi \\
38 \midrule 38 \midrule
@@ -70,7 +70,7 @@ Deux de ces composantes intéressent directement le présent chapitre. Le VRC de
70 70
71 Le principe de contribution se décline différemment selon la méthode d'évaluation, et il est utile de le dire avant d'aller plus loin, parce que l'erreur du « coût additionné » prend un visage différent dans chacune. Dans la \emph{méthode de comparaison}, une rénovation n'est jamais un poste de la grille : elle modifie les caractéristiques que la grille compare, l'état, l'âge effectif, la qualité, les équipements. Un sujet dont la cuisine a été refaite n'est pas « le sujet plus une cuisine », c'est un sujet dont la note de qualité ou d'état est plus élevée que celle des comparables, et l'ajustement correspondant est le prix implicite de cet écart, extrait par paires ou par régression (\cref{ch:17}). Le piège est le double comptage : ajuster la qualité \emph{et} ajouter le coût de la cuisine. Dans la \emph{méthode du coût}, la rénovation entre par la dépréciation. Les composantes remplacées sont rajeunies dans la fiche d'état (\cref{ch:11}) et leur dépréciation ventilée diminue ; l'amélioration qui ajoute une composante absente du bâtiment d'origine entre dans le coût neuf, puis se déprécie comme les autres ; la surabondance est traitée en désuétude fonctionnelle (\cref{ch:24}). Là encore, le piège est d'ajouter le coût des travaux à une valeur déjà obtenue par le coût, alors que ce coût y est déjà, moins la dépréciation. Dans la \emph{méthode du revenu}, enfin, la rénovation ne vaut que par ses effets sur le revenu net d'exploitation : un loyer plus élevé si le marché locatif rémunère l'attribut, une dépense moindre si le propriétaire paie l'énergie, une vacance réduite, une réserve de remplacement différée (\cref{ch:28}). Dans un immeuble locatif où le chauffage est à la charge du propriétaire, une rénovation énergétique augmente directement le RNE et se capitalise au taux global ; là où les locataires paient leur électricité, comme c'est l'usage dans la plupart des logements québécois, l'économie leur revient, et le propriétaire ne la récupère que si le marché locatif accepte un loyer plus élevé pour un logement moins coûteux à chauffer, ce que l'absence de cote énergétique rend difficile à faire valoir. 71 Le principe de contribution se décline différemment selon la méthode d'évaluation, et il est utile de le dire avant d'aller plus loin, parce que l'erreur du « coût additionné » prend un visage différent dans chacune. Dans la \emph{méthode de comparaison}, une rénovation n'est jamais un poste de la grille : elle modifie les caractéristiques que la grille compare, l'état, l'âge effectif, la qualité, les équipements. Un sujet dont la cuisine a été refaite n'est pas « le sujet plus une cuisine », c'est un sujet dont la note de qualité ou d'état est plus élevée que celle des comparables, et l'ajustement correspondant est le prix implicite de cet écart, extrait par paires ou par régression (\cref{ch:17}). Le piège est le double comptage : ajuster la qualité \emph{et} ajouter le coût de la cuisine. Dans la \emph{méthode du coût}, la rénovation entre par la dépréciation. Les composantes remplacées sont rajeunies dans la fiche d'état (\cref{ch:11}) et leur dépréciation ventilée diminue ; l'amélioration qui ajoute une composante absente du bâtiment d'origine entre dans le coût neuf, puis se déprécie comme les autres ; la surabondance est traitée en désuétude fonctionnelle (\cref{ch:24}). Là encore, le piège est d'ajouter le coût des travaux à une valeur déjà obtenue par le coût, alors que ce coût y est déjà, moins la dépréciation. Dans la \emph{méthode du revenu}, enfin, la rénovation ne vaut que par ses effets sur le revenu net d'exploitation : un loyer plus élevé si le marché locatif rémunère l'attribut, une dépense moindre si le propriétaire paie l'énergie, une vacance réduite, une réserve de remplacement différée (\cref{ch:28}). Dans un immeuble locatif où le chauffage est à la charge du propriétaire, une rénovation énergétique augmente directement le RNE et se capitalise au taux global ; là où les locataires paient leur électricité, comme c'est l'usage dans la plupart des logements québécois, l'économie leur revient, et le propriétaire ne la récupère que si le marché locatif accepte un loyer plus élevé pour un logement moins coûteux à chauffer, ce que l'absence de cote énergétique rend difficile à faire valoir.
72 72
73−Le cadre québécois de fixation des loyers ajoute une particularité que le \cref{ch:34} développe : dans un logement dont le bail est reconduit, le propriétaire ne peut répercuter une dépense en immobilisations que par le mécanisme du Tribunal administratif du logement, qui applique aux travaux majeurs un pourcentage annuel publié chaque année, \pct{4.0} en 2026 pour les dépenses en immobilisations, contre \pct{4.7} en 2025 (\cref{ch:34}). Une rénovation énergétique de \dollars{20000} dans un logement occupé autorise donc, en 2026, une hausse de loyer de l'ordre de \dollars{800} par année, soit \dollars{67} par mois, indépendamment de l'économie d'énergie réalisée par le locataire ; c'est cette hausse, et non le coût des travaux ni l'économie du locataire, qui entre dans le RNE du propriétaire et donc dans la valeur par le revenu. La rénovation d'un immeuble locatif se raisonne ainsi en deux temps : ce que le marché ou le Tribunal permettent de récupérer en loyer, puis ce que le taux global en fait en valeur. 73+Le cadre québécois de fixation des loyers ajoute une particularité que le \cref{ch:34} développe : dans un logement dont le bail est reconduit, le propriétaire ne peut répercuter une dépense en immobilisations que par le mécanisme du Tribunal administratif du logement, qui applique aux travaux majeurs un pourcentage annuel publié chaque année, \pct{4.0} en 2026 pour les dépenses en immobilisations, contre \pct{4.7} en 2025 \parencite{talIndices2026}. Une rénovation énergétique de \dollars{20000} dans un logement occupé autorise donc, en 2026, une hausse de loyer de l'ordre de \dollars{800} par année, soit \dollars{67} par mois, indépendamment de l'économie d'énergie réalisée par le locataire ; c'est cette hausse, et non le coût des travaux ni l'économie du locataire, qui entre dans le RNE du propriétaire et donc dans la valeur par le revenu. La rénovation d'un immeuble locatif se raisonne ainsi en deux temps : ce que le marché ou le Tribunal permettent de récupérer en loyer, puis ce que le taux global en fait en valeur.
74 74
75 \subsection{Rénovations « payantes » et « non payantes » : ce que l'on peut dire sans données} 75 \subsection{Rénovations « payantes » et « non payantes » : ce que l'on peut dire sans données}
76 76
@@ -156,7 +156,7 @@ Les aides financières modifient le coût net d'une rénovation pour le proprié
156 \begin{table}[htbp] 156 \begin{table}[htbp]
157 \caption{Programmes d'aide à la rénovation et à la construction écoénergétiques, état vérifié au 31 octobre 2026}\label{tab:44:programmes} 157 \caption{Programmes d'aide à la rénovation et à la construction écoénergétiques, état vérifié au 31 octobre 2026}\label{tab:44:programmes}
158 \centering\scriptsize\setlength{\tabcolsep}{3pt} 158 \centering\scriptsize\setlength{\tabcolsep}{3pt}
159−\begin{tabularx}{\textwidth}{lYYl} 159+\begin{tabularx}{\textwidth}{>{\hsize=0.62\hsize}Y>{\hsize=1.55\hsize}Y>{\hsize=1.08\hsize}Y>{\hsize=0.75\hsize}Y}
160 \toprule 160 \toprule
161 Programme (administrateur) & Mesure et montant & Conditions et statut & Source, mise à jour \\ 161 Programme (administrateur) & Mesure et montant & Conditions et statut & Source, mise à jour \\
162 \midrule 162 \midrule
@@ -173,7 +173,7 @@ Conversion abordable du mazout à la thermopompe (RNCan) & Jusqu'à \dollars{100
173 173
174 \begin{figure}[htbp] 174 \begin{figure}[htbp]
175 \centering 175 \centering
176−\begin{tikzpicture}[x=18mm, y=1cm, every node/.style={font=\sffamily\footnotesize}] 176+\begin{tikzpicture}[x=16mm, y=1cm, every node/.style={font=\sffamily\footnotesize}]
177 \draw[brandGray, thick, -{Stealth[length=2mm]}] (0,0) -- (7.3,0); 177 \draw[brandGray, thick, -{Stealth[length=2mm]}] (0,0) -- (7.3,0);
178 \foreach \x/\an in {0/2021, 1/2022, 2/2023, 3/2024, 4/2025, 5/2026, 6/2027} {\draw[brandGray] (\x,0.08) -- (\x,-0.08); \node[below=1pt, text=brandGray] at (\x,-0.08) {\an};} 178 \foreach \x/\an in {0/2021, 1/2022, 2/2023, 3/2024, 4/2025, 5/2026, 6/2027} {\draw[brandGray] (\x,0.08) -- (\x,-0.08); \node[below=1pt, text=brandGray] at (\x,-0.08) {\an};}
179 \tikzset{ev/.style={circle, fill=brandPrimary, inner sep=1.4pt}, fin/.style={circle, fill=brandRed, inner sep=1.4pt}, lab/.style={align=left, anchor=west, font=\sffamily\scriptsize}} 179 \tikzset{ev/.style={circle, fill=brandPrimary, inner sep=1.4pt}, fin/.style={circle, fill=brandRed, inner sep=1.4pt}, lab/.style={align=left, anchor=west, font=\sffamily\scriptsize}}
@@ -185,9 +185,9 @@ Conversion abordable du mazout à la thermopompe (RNCan) & Jusqu'à \dollars{100
185 \node[fin] (f) at (5.58,0) {}; \draw[brandGray, thin] (f) -- (5.58,-1.55); \node[lab, anchor=east] at (5.58,-1.75) {31 juill. 2026 : fin de la conversion\\mazout--thermopompe (fédéral)}; 185 \node[fin] (f) at (5.58,0) {}; \draw[brandGray, thin] (f) -- (5.58,-1.55); \node[lab, anchor=east] at (5.58,-1.75) {31 juill. 2026 : fin de la conversion\\mazout--thermopompe (fédéral)};
186 \node[ev] (g) at (5.75,0) {}; \draw[brandGray, thin] (g) -- (5.75,2.15); \node[lab] at (5.75,2.35) {1\ier{} oct. 2026 :\\Rénoclimat refondu}; 186 \node[ev] (g) at (5.75,0) {}; \draw[brandGray, thin] (g) -- (5.75,2.15); \node[lab] at (5.75,2.35) {1\ier{} oct. 2026 :\\Rénoclimat refondu};
187 \node[ev] (h) at (6.25,0) {}; \draw[brandGray, thin] (h) -- (6.25,-0.75); \node[lab] at (6.25,-0.95) {31 mars 2027 : fin de la\\transition Rénoclimat}; 187 \node[ev] (h) at (6.25,0) {}; \draw[brandGray, thin] (h) -- (6.25,-0.75); \node[lab] at (6.25,-0.95) {31 mars 2027 : fin de la\\transition Rénoclimat};
188−\node[ev] (i) at (6.8,0) {}; \draw[brandGray, thin] (i) -- (6.8,0.55); \node[lab] at (6.8,0.75) {17 oct. 2027 : fin de la\\transition du Code}; 188+\node[ev] (i) at (6.8,0) {}; \draw[brandGray, thin] (i) -- (6.8,-2.15); \node[lab, anchor=east] at (6.8,-2.35) {17 oct. 2027 : fin de la\\transition du Code};
189−\node[ev] at (0.1,-2.6) {}; \node[lab] at (0.2,-2.6) {entrée en vigueur ou refonte}; 189+\node[ev] at (0.1,-3.1) {}; \node[lab] at (0.2,-3.1) {entrée en vigueur ou refonte};
190−\node[fin] at (2.6,-2.6) {}; \node[lab] at (2.7,-2.6) {fin d'un programme ou d'une tolérance}; 190+\node[fin] at (2.6,-3.1) {}; \node[lab] at (2.7,-3.1) {fin d'un programme ou d'une tolérance};
191 \end{tikzpicture} 191 \end{tikzpicture}
192 \caption{Frise des dates qui structurent la rénovation énergétique résidentielle au Québec, 2021--2027 : interdictions du mazout, nouveau Code et sa transition, fermeture des programmes fédéraux et de Chauffez vert, refonte de Rénoclimat. LogisVert (Hydro-Québec) et Novoclimat sont actifs sur toute la période récente.}\label{fig:44:frise} 192 \caption{Frise des dates qui structurent la rénovation énergétique résidentielle au Québec, 2021--2027 : interdictions du mazout, nouveau Code et sa transition, fermeture des programmes fédéraux et de Chauffez vert, refonte de Rénoclimat. LogisVert (Hydro-Québec) et Novoclimat sont actifs sur toute la période récente.}\label{fig:44:frise}
193 \figsource{schéma de l'auteur d'après les sources du \cref{tab:44:programmes}.} 193 \figsource{schéma de l'auteur d'après les sources du \cref{tab:44:programmes}.}
@@ -274,7 +274,7 @@ Le sujet est le cottage à étages de \msq{165} construit en 1998 dans le secteu
274 \begin{table}[htbp] 274 \begin{table}[htbp]
275 \caption{Hypothèses de l'exemple intégral (données vérifiées en romain, hypothèses pédagogiques en italique)}\label{tab:44:hypotheses} 275 \caption{Hypothèses de l'exemple intégral (données vérifiées en romain, hypothèses pédagogiques en italique)}\label{tab:44:hypotheses}
276 \centering\small 276 \centering\small
277−\begin{tabularx}{\textwidth}{lYl} 277+\begin{tabularx}{\textwidth}{>{\hsize=0.72\hsize}Y>{\hsize=1.33\hsize}Y>{\hsize=0.95\hsize}Y}
278 \toprule 278 \toprule
279 Paramètre & Valeur & Statut, source \\ 279 Paramètre & Valeur & Statut, source \\
280 \midrule 280 \midrule
@@ -292,7 +292,7 @@ Mesure B : isolation de l'entretoit & \emph{\msq{95} $\times$ \dollars{44} = \do
292 292
293 \begin{table}[htbp] 293 \begin{table}[htbp]
294 \caption{Indicateurs des mesures énergétiques du sujet du cas 1 ($r = \pct{4.58}$, $g = \pct{3.0}$ ; données synthétiques)}\label{tab:44:resultats} 294 \caption{Indicateurs des mesures énergétiques du sujet du cas 1 ($r = \pct{4.58}$, $g = \pct{3.0}$ ; données synthétiques)}\label{tab:44:resultats}
295−\centering\small 295+\centering\footnotesize\setlength{\tabcolsep}{3.5pt}
296 \begin{tabular}{lS[table-format=5.2]S[table-format=4.2]S[table-format=5.2]S[table-format=4.2]} 296 \begin{tabular}{lS[table-format=5.2]S[table-format=4.2]S[table-format=5.2]S[table-format=4.2]}
297 \toprule 297 \toprule
298 Indicateur & {A : thermopompe} & {B : isolation} & {A + B} & {Incrément climat froid} \\ 298 Indicateur & {A : thermopompe} & {B : isolation} & {A + B} & {Incrément climat froid} \\
@@ -362,7 +362,7 @@ Que doit en conclure l'évaluateur qui, un an après les travaux, évalue le cot
362 \begin{table}[htbp] 362 \begin{table}[htbp]
363 \caption{Quatre lectures de la contribution de la thermopompe climat froid à la valeur du sujet du cas 1 (données synthétiques)}\label{tab:44:lectures} 363 \caption{Quatre lectures de la contribution de la thermopompe climat froid à la valeur du sujet du cas 1 (données synthétiques)}\label{tab:44:lectures}
364 \centering\small 364 \centering\small
365−\begin{tabularx}{\textwidth}{YS[table-format=5.2]S[table-format=1.2]l} 365+\begin{tabularx}{\textwidth}{>{\hsize=1.1\hsize}YS[table-format=5.2]S[table-format=1.2]>{\hsize=0.9\hsize}Y}
366 \toprule 366 \toprule
367 Lecture & {Montant (\$)} & {\% de la valeur} & Ce qu'elle mesure \\ 367 Lecture & {Montant (\$)} & {\% de la valeur} & Ce qu'elle mesure \\
368 \midrule 368 \midrule
modified manuscript/chapters/ch46.tex +34 −31
@@ -73,7 +73,7 @@ L'inspection fictive du 20~août 2026 a porté sur les trois logements, les aire
73 73
74 \begin{table}[htbp]\centering 74 \begin{table}[htbp]\centering
75 \caption{Composantes du bâtiment, état observé et conséquences retenues (dossier synthétique).}\label{tab:46:inspection} 75 \caption{Composantes du bâtiment, état observé et conséquences retenues (dossier synthétique).}\label{tab:46:inspection}
76−\small\begin{tabular}{@{}L{3.6cm}L{1.6cm}L{4.6cm}L{2.8cm}@{}} 76+\small\setlength{\tabcolsep}{4pt}\begin{tabular}{@{}L{3.4cm}L{1.6cm}L{4.5cm}L{2.7cm}@{}}
77 \toprule 77 \toprule
78 Composante & Année & État observé & Conséquence \\ 78 Composante & Année & État observé & Conséquence \\
79 \midrule 79 \midrule
@@ -101,7 +101,7 @@ Les trois logements sont loués par des baux de douze mois courant du 1\textsupe
101 101
102 \begin{table}[htbp]\centering 102 \begin{table}[htbp]\centering
103 \caption{État locatif du triplex au 1\textsuperscript{er} septembre 2026 : loyer contractuel, loyer de marché estimé et écart (données synthétiques).}\label{tab:46:baux} 103 \caption{État locatif du triplex au 1\textsuperscript{er} septembre 2026 : loyer contractuel, loyer de marché estimé et écart (données synthétiques).}\label{tab:46:baux}
104−\small\setlength{\tabcolsep}{4pt}\begin{tabular}{@{}l c S[table-format=2.0] S[table-format=4.0] S[table-format=4.0] S[table-format=3.0] S[table-format=2.1] l S[table-format=1.0] c@{}} 104+\small\setlength{\tabcolsep}{3pt}\begin{tabular}{@{}l c S[table-format=2.0] S[table-format=4.0] S[table-format=4.0] S[table-format=3.0] S[table-format=2.1] l S[table-format=1.0] c@{}}
105 \toprule 105 \toprule
106 Logement & Type & {m\textsuperscript{2}} & {Contrat (\$/mois)} & {Marché (\$/mois)} & {Écart (\$)} & {Écart (\%)} & Bail depuis & {Anc. (ans)} & Stat. \\ 106 Logement & Type & {m\textsuperscript{2}} & {Contrat (\$/mois)} & {Marché (\$/mois)} & {Écart (\$)} & {Écart (\%)} & Bail depuis & {Anc. (ans)} & Stat. \\
107 \midrule 107 \midrule
@@ -169,7 +169,7 @@ L'analyse de marché d'un plex porte, comme celle d'un immeuble de rapport, sur
169 169
170 \begin{table}[htbp]\centering 170 \begin{table}[htbp]\centering
171 \caption{Indicateurs de marché retenus à la date d'évaluation (sources publiques, consultées le 31~octobre 2026).}\label{tab:46:marche} 171 \caption{Indicateurs de marché retenus à la date d'évaluation (sources publiques, consultées le 31~octobre 2026).}\label{tab:46:marche}
172−\footnotesize\begin{tabular}{@{}L{5.4cm}L{3.0cm}L{4.3cm}@{}} 172+\footnotesize\setlength{\tabcolsep}{4pt}\begin{tabular}{@{}L{5.1cm}L{2.9cm}L{4.2cm}@{}}
173 \toprule 173 \toprule
174 Indicateur & Valeur & Source et période \\ 174 Indicateur & Valeur & Source et période \\
175 \midrule 175 \midrule
@@ -228,7 +228,7 @@ Les autres postes sont conservés aux montants justifiés, parce qu'ils reposent
228 228
229 \begin{table}[htbp]\centering 229 \begin{table}[htbp]\centering
230 \caption{Normalisation des dépenses de première année : montant déclaré, règle appliquée et montant normalisé (données synthétiques, \$ courants).}\label{tab:46:depenses} 230 \caption{Normalisation des dépenses de première année : montant déclaré, règle appliquée et montant normalisé (données synthétiques, \$ courants).}\label{tab:46:depenses}
231−\small\setlength{\tabcolsep}{4pt}\begin{tabular}{@{}L{3.9cm}S[table-format=4.0]L{4.4cm}S[table-format=5.2]S[table-format=2.1]@{}} 231+\small\setlength{\tabcolsep}{3.5pt}\begin{tabular}{@{}L{3.8cm}S[table-format=4.0]L{4.3cm}S[table-format=5.2]S[table-format=2.1]@{}}
232 \toprule 232 \toprule
233 Poste & {Déclaré (\$)} & Règle de normalisation & {Normalisé (\$)} & {\% du RBE} \\ 233 Poste & {Déclaré (\$)} & Règle de normalisation & {Normalisé (\$)} & {\% du RBE} \\
234 \midrule 234 \midrule
@@ -264,22 +264,22 @@ La méthode de comparaison est la méthode principale pour un triplex de quartie
264 264
265 \begin{table}[htbp]\centering 265 \begin{table}[htbp]\centering
266 \caption{Le sujet et les cinq comparables triplex de Limoilou (données synthétiques).}\label{tab:46:comparables} 266 \caption{Le sujet et les cinq comparables triplex de Limoilou (données synthétiques).}\label{tab:46:comparables}
267−\footnotesize\setlength{\tabcolsep}{3pt}\begin{tabular}{@{}l l S[table-format=3.0] S[table-format=2.1] S[table-format=4.0] c S[table-format=4.0] S[table-format=4.0] S[table-format=1.3] S[table-format=7.0] S[table-format=6.0] S[table-format=2.2] S[table-format=1.2]@{}} 267+\footnotesize\setlength{\tabcolsep}{2.4pt}\begin{tabular}{@{}l l S[table-format=3.0] S[table-format=2.1] S[table-format=3.0] c S[table-format=4.0] S[table-format=4.0] S[table-format=1.3] S[table-format=7.0] S[table-format=6.0] S[table-format=2.2] S[table-format=1.2]@{}}
268 \toprule 268 \toprule
269−Vente & Date & {m\textsuperscript{2}} & {m\textsuperscript{2}/log.} & {Constr.} & État & {Loyer contrat (\$)} & {Loyer marché (\$)} & {$\rho$} & {Prix (\$)} & {Prix/log. (\$)} & {MRB} & {Taux (\%)} \\ 269+Vente & Date & {m\textsuperscript{2}} & {m\textsuperscript{2}/log.} & {Âge} & État & {Contrat (\$)} & {Marché (\$)} & {$\rho$} & {Prix (\$)} & {Prix/log. (\$)} & {MRB} & {Taux (\%)} \\
270 \midrule 270 \midrule
271−Sujet & 2026-09-01 & 262 & 87.3 & 1948 & 3 & 1162 & 1370 & 0.848 & {—} & {—} & {—} & {—} \\ 271+Sujet & 2026-09-01 & 262 & 87.3 & 78 & 3 & 1162 & 1370 & 0.848 & {—} & {—} & {—} & {—} \\
272 \midrule 272 \midrule
273−Q0187 & 2025-11-20 & 243 & 81.0 & 1950 & 3 & 1053 & 1173 & 0.898 & 787000 & 262333 & 20.75 & 2.97 \\ 273+Q0187 & 2025-11-20 & 243 & 81.0 & 76 & 3 & 1053 & 1173 & 0.898 & 787000 & 262333 & 20.75 & 2.97 \\
274−Q0222 & 2026-05-13 & 286 & 95.3 & 1934 & 4 & 1092 & 1187 & 0.920 & 918000 & 306000 & 23.35 & 2.62 \\ 274+Q0222 & 2026-05-13 & 286 & 95.3 & 92 & 4 & 1092 & 1187 & 0.920 & 918000 & 306000 & 23.35 & 2.62 \\
275−Q0243 & 2026-07-24 & 247 & 82.3 & 1930 & 3 & 1286 & 1352 & 0.951 & 1023000 & 341000 & 22.09 & 2.99 \\ 275+Q0243 & 2026-07-24 & 247 & 82.3 & 96 & 3 & 1286 & 1352 & 0.951 & 1023000 & 341000 & 22.09 & 2.99 \\
276−Q0207 & 2026-03-08 & 269 & 89.7 & 1957 & 2 & 1146 & 1197 & 0.957 & 910000 & 303333 & 22.05 & 3.09 \\ 276+Q0207 & 2026-03-08 & 269 & 89.7 & 69 & 2 & 1146 & 1197 & 0.957 & 910000 & 303333 & 22.05 & 3.09 \\
277−Q0235 & 2026-06-22 & 275 & 91.7 & 1923 & 1 & 1214 & 1327 & 0.915 & 922000 & 307333 & 21.10 & 2.68 \\ 277+Q0235 & 2026-06-22 & 275 & 91.7 & 103 & 1 & 1214 & 1327 & 0.915 & 922000 & 307333 & 21.10 & 2.68 \\
278 \midrule 278 \midrule
279−Médiane des cinq & & 269 & 89.7 & 1934 & 3 & 1146 & 1197 & 0.920 & 918000 & 306000 & 22.05 & 2.97 \\ 279+Médiane des cinq & & 269 & 89.7 & 92 & 3 & 1146 & 1197 & 0.920 & 918000 & 306000 & 22.05 & 2.97 \\
280 \bottomrule 280 \bottomrule
281 \end{tabular} 281 \end{tabular}
282−\tabsource{\synth{\texttt{cas2\_quebec\_ventes\_plex.csv} ; sélection par \texttt{ch32\_plex.selection\_comparables} (distance d'attributs du \cref{ch:16}) ; loyers mensuels moyens par logement ; tous les comparables ont une case de stationnement ; script \texttt{ch46\_dossier.py}.}} 282+\tabsource{\synth{\texttt{cas2\_quebec\_ventes\_plex.csv} ; sélection par \texttt{ch32\_plex.selection\_comparables} (distance d'attributs du \cref{ch:16}) ; âge à la date d'évaluation (construction 1923 à 1957 ; sujet 1948) ; loyers mensuels moyens par logement ; tous les comparables ont une case de stationnement ; script \texttt{ch46\_dossier.py}.}}
283 \end{table} 283 \end{table}
284 284
285 \subsection{Extraction des ajustements par régression auxiliaire} 285 \subsection{Extraction des ajustements par régression auxiliaire}
@@ -288,7 +288,7 @@ Faute de paires de ventes appariées en nombre suffisant dans un échantillon de
288 288
289 \begin{table}[htbp]\centering 289 \begin{table}[htbp]\centering
290 \caption{Régression auxiliaire du logarithme du prix par logement sur 127 ventes de duplex et de triplex (données synthétiques).}\label{tab:46:regression} 290 \caption{Régression auxiliaire du logarithme du prix par logement sur 127 ventes de duplex et de triplex (données synthétiques).}\label{tab:46:regression}
291−\small\begin{tabular}{@{}L{5.2cm}S[table-format=-1.5]S[table-format=1.5]S[table-format=-2.2]L{3.2cm}@{}} 291+\small\setlength{\tabcolsep}{4pt}\begin{tabular}{@{}L{4.9cm}S[table-format=-1.5]S[table-format=1.5]S[table-format=-2.2]L{3.1cm}@{}}
292 \toprule 292 \toprule
293 Variable & {Coefficient} & {Erreur-type} & {$t$} & Lecture \\ 293 Variable & {Coefficient} & {Erreur-type} & {$t$} & Lecture \\
294 \midrule 294 \midrule
@@ -315,27 +315,30 @@ Maizerets (vs Limoilou) & -0.08715 & 0.02250 & -3.87 & sans objet \\
315 315
316 La grille suit l'ordre conventionnel de l'ouvrage, exposé au \cref{ch:17} : d'abord l'ajustement de conditions du marché, en proportion du prix, qui ramène chaque vente à la date d'évaluation au taux annuel de \pct{7.45} extrait de la régression, par la fonction \texttt{ajustement\_temps\_taux} ; puis les ajustements d'attributs, additifs, exprimés en dollars par logement sur la base ajustée du temps, chacun étant la différence entre le prix prédit pour la caractéristique du sujet et celui prédit pour la caractéristique du comparable : 316 La grille suit l'ordre conventionnel de l'ouvrage, exposé au \cref{ch:17} : d'abord l'ajustement de conditions du marché, en proportion du prix, qui ramène chaque vente à la date d'évaluation au taux annuel de \pct{7.45} extrait de la régression, par la fonction \texttt{ajustement\_temps\_taux} ; puis les ajustements d'attributs, additifs, exprimés en dollars par logement sur la base ajustée du temps, chacun étant la différence entre le prix prédit pour la caractéristique du sujet et celui prédit pour la caractéristique du comparable :
317 \begin{equation}\label{eq:46:ajuste} 317 \begin{equation}\label{eq:46:ajuste}
318−P^{\text{aj}}_j = P_j\left[(1 + g)^{m_j/12}\right] + \sum_{k} A_{jk}, \qquad A_{jk} = P^{t}_j\left[e^{\hat\beta_k (x_{sk} - x_{jk})} - 1\right], 318+\begin{split}
319+P^{\text{aj}}_j &= P^{t}_j + \sum_{k} A_{jk}, \qquad P^{t}_j = P_j\,(1 + g)^{m_j/12}, \\
320+A_{jk} &= P^{t}_j\left[e^{\hat\beta_k (x_{sk} - x_{jk})} - 1\right],
321+\end{split}
319 \end{equation} 322 \end{equation}
320 où $P_j$ est le prix par logement, $m_j$ l'ancienneté de la vente en mois, $P^{t}_j$ le prix ajusté du temps et $x_{sk}$, $x_{jk}$ les caractéristiques du sujet et du comparable (logarithme de la superficie par logement, âge, état, stationnement, logarithme du loyer de marché). Le signe est celui du point de vue du sujet : positif lorsque le sujet est supérieur au comparable. Le \cref{tab:46:grille} présente la grille ; la \cref{fig:46:cascade} illustre la cascade pour Q0243, le comparable le plus récent et le plus proche. 323 où $P_j$ est le prix par logement, $m_j$ l'ancienneté de la vente en mois, $P^{t}_j$ le prix ajusté du temps et $x_{sk}$, $x_{jk}$ les caractéristiques du sujet et du comparable (logarithme de la superficie par logement, âge, état, stationnement, logarithme du loyer de marché). Le signe est celui du point de vue du sujet : positif lorsque le sujet est supérieur au comparable. Le \cref{tab:46:grille} présente la grille ; la \cref{fig:46:cascade} illustre la cascade pour Q0243, le comparable le plus récent et le plus proche.
321 324
322 \begin{table}[htbp]\centering 325 \begin{table}[htbp]\centering
323 \caption{Grille d'ajustements des prix par logement des cinq comparables (données synthétiques, \$ par logement).}\label{tab:46:grille} 326 \caption{Grille d'ajustements des prix par logement des cinq comparables (données synthétiques, \$ par logement).}\label{tab:46:grille}
324−\footnotesize\setlength{\tabcolsep}{3pt}\begin{tabular}{@{}l S[table-format=6.0] S[table-format=5.0] S[table-format=-5.0] S[table-format=-5.0] S[table-format=-5.0] S[table-format=5.0] c S[table-format=6.0] S[table-format=2.1] S[table-format=-2.1] S[table-format=1.3]@{}} 327+\footnotesize\setlength{\tabcolsep}{2.8pt}\begin{tabular}{@{}l S[table-format=6.0] S[table-format=5.0] S[table-format=-5.0] S[table-format=-5.0] S[table-format=-5.0] S[table-format=5.0] S[table-format=6.0] S[table-format=2.1] S[table-format=2.1] S[table-format=1.3]@{}}
325 \toprule 328 \toprule
326−Vente & {Prix/log.} & {Temps} & {Superf.} & {Âge} & {État} & {Loyer marché} & $\rho$ & {Prix aj.} & {Brut (\%)} & {Net (\%)} & {Poids} \\ 329+Vente & {Prix/log.} & {Temps} & {Superf.} & {Âge} & {État} & {Loyer m.} & {Prix aj.} & {Brut (\%)} & {Net (\%)} & {Poids} \\
327 \midrule 330 \midrule
328−Q0187 & 262333 & 15134 & 13792 & -2215 & 0 & 11558 & 0 & 300603 & 16.3 & 14.6 & 0.220 \\ 331+Q0187 & 262333 & 15134 & 13792 & -2215 & 0 & 11558 & 300603 & 16.3 & 14.6 & 0.220 \\
329−Q0222 & 306000 & 6758 & -17175 & 18046 & -14930 & 12015 & 0 & 310715 & 22.5 & 1.5 & 0.159 \\ 332+Q0222 & 306000 & 6758 & -17175 & 18046 & -14930 & 12015 & 310715 & 22.5 & 1.5 & 0.159 \\
330−Q0243 & 341000 & 2627 & 13306 & 25699 & 0 & 1217 & 0 & 383849 & 12.6 & 12.6 & 0.285 \\ 333+Q0243 & 341000 & 2627 & 13306 & 25699 & 0 & 1217 & 383849 & 12.6 & 12.6 & 0.285 \\
331−Q0207 & 303333 & 10752 & -5291 & -11125 & 15744 & 11349 & 0 & 324762 & 17.9 & 7.1 & 0.200 \\ 334+Q0207 & 303333 & 10752 & -5291 & -11125 & 15744 & 11349 & 324762 & 17.9 & 7.1 & 0.200 \\
332−Q0235 & 307333 & 4324 & -9575 & 32836 & 32029 & 2640 & 0 & 369586 & 26.5 & 20.3 & 0.135 \\ 335+Q0235 & 307333 & 4324 & -9575 & 32836 & 32029 & 2640 & 369586 & 26.5 & 20.3 & 0.135 \\
333 \midrule 336 \midrule
334−\multicolumn{8}{@{}l}{Prix par logement pondéré (poids $\propto 1/$brut) ; valeur $= 3 \times$ prix pondéré} & 340122 & & & 1.000 \\ 337+\multicolumn{7}{@{}l}{Prix par logement pondéré (poids $\propto 1/$brut) ; valeur $= 3 \times$ prix pondéré} & 340122 & & & 1.000 \\
335−\multicolumn{8}{@{}l}{Moyenne simple 337~903 ; médiane 324~762 ; min. 300~603 ; max. 383~849 ; écart-type pondéré 34~516} & & & & \\ 338+\multicolumn{11}{@{}l}{Moyenne simple 337~903 ; médiane 324~762 ; min. 300~603 ; max. 383~849 ; écart-type pondéré 34~516 ; stationnement et $\rho$ : ajustements nuls.} \\
336 \bottomrule 339 \bottomrule
337 \end{tabular} 340 \end{tabular}
338−\tabsource{\synth{\texttt{traite.comparables} (\texttt{ajustement\_temps\_taux}, \texttt{ComparableAjuste}, \texttt{poids\_inverse\_brut}, \texttt{reconciliation}) ; stationnement : ajustement nul (tous ont une case) ; $\rho$ : non appliqué ; script \texttt{ch46\_dossier.py}, fonction \texttt{grille\_ajustements}.}} 341+\tabsource{\synth{\texttt{traite.comparables} (\texttt{ajustement\_temps\_taux}, \texttt{ComparableAjuste}, \texttt{poids\_inverse\_brut}, \texttt{reconciliation}) ; stationnement : tous ont une case ; $\rho$ : coefficient non significatif, non appliqué ; script \texttt{ch46\_dossier.py}, fonction \texttt{grille\_ajustements}.}}
339 \end{table} 342 \end{table}
340 343
341 \begin{figure}[htbp]\centering 344 \begin{figure}[htbp]\centering
@@ -380,7 +383,7 @@ contre \dollars{729549} au \cref{ch:32} : la différence de \dollars{18577} est
380 383
381 \begin{table}[htbp]\centering 384 \begin{table}[htbp]\centering
382 \caption{Taux globaux candidats et indications par capitalisation directe du revenu net normalisé de \dollars{22595.03} (données synthétiques).}\label{tab:46:taux} 385 \caption{Taux globaux candidats et indications par capitalisation directe du revenu net normalisé de \dollars{22595.03} (données synthétiques).}\label{tab:46:taux}
383−\small\begin{tabular}{@{}L{6.6cm}S[table-format=1.3]S[table-format=6.0]S[table-format=-2.1]@{}} 386+\small\setlength{\tabcolsep}{4pt}\begin{tabular}{@{}L{6.4cm}S[table-format=1.3]S[table-format=7.0]S[table-format=-2.1]@{}}
384 \toprule 387 \toprule
385 Taux & {Taux (\%)} & {Indication (\$)} & {Écart au retenu (\%)} \\ 388 Taux & {Taux (\%)} & {Indication (\$)} & {Écart au retenu (\%)} \\
386 \midrule 389 \midrule
@@ -519,7 +522,7 @@ Le \cref{tab:46:financement-sens} et la \cref{fig:46:occupation} font varier les
519 522
520 \begin{table}[htbp]\centering 523 \begin{table}[htbp]\centering
521 \caption{Sensibilité du financement et du coût d'occupation au taux, à la mise de fonds et à l'amortissement (prix \dollars{920000}, données synthétiques, \$).}\label{tab:46:financement-sens} 524 \caption{Sensibilité du financement et du coût d'occupation au taux, à la mise de fonds et à l'amortissement (prix \dollars{920000}, données synthétiques, \$).}\label{tab:46:financement-sens}
522−\footnotesize\setlength{\tabcolsep}{3.5pt}\begin{tabular}{@{}L{5.3cm}S[table-format=6.0]S[table-format=2.1]S[table-format=6.0]S[table-format=4.2]S[table-format=4.2]S[table-format=4.2]S[table-format=4.2]@{}} 525+\scriptsize\setlength{\tabcolsep}{2.6pt}\begin{tabular}{@{}L{4.3cm}S[table-format=6.0]S[table-format=2.1]S[table-format=6.0]S[table-format=4.2]S[table-format=4.2]S[table-format=4.2]S[table-format=4.2]@{}}
523 \toprule 526 \toprule
524 Scénario & {Mise de fonds} & {RPV (\%)} & {Prêt} & {Versement} & {Versement TAM} & {Coût net/mois} & {Hors capital} \\ 527 Scénario & {Mise de fonds} & {RPV (\%)} & {Prêt} & {Versement} & {Versement TAM} & {Coût net/mois} & {Hors capital} \\
525 \midrule 528 \midrule
@@ -551,7 +554,7 @@ L'indication par le prix par logement ajusté, \dollars{1020367}, repose sur cin
551 554
552 \begin{table}[htbp]\centering 555 \begin{table}[htbp]\centering
553 \caption{Réconciliation des indications de valeur (données synthétiques).}\label{tab:46:reconciliation} 556 \caption{Réconciliation des indications de valeur (données synthétiques).}\label{tab:46:reconciliation}
554−\small\begin{tabular}{@{}L{6.6cm}S[table-format=7.0]S[table-format=3.0]S[table-format=6.0]@{}} 557+\small\setlength{\tabcolsep}{4pt}\begin{tabular}{@{}L{6.0cm}S[table-format=7.0]S[table-format=3.0]S[table-format=6.0]@{}}
555 \toprule 558 \toprule
556 Indication & {Valeur (\$)} & {Poids (\%)} & {Contribution (\$)} \\ 559 Indication & {Valeur (\$)} & {Poids (\%)} & {Contribution (\$)} \\
557 \midrule 560 \midrule
@@ -559,7 +562,7 @@ Comparaison — prix par logement ajusté (5 comparables) & 1020367 & 40 & 40814
559 Comparaison — multiplicateur médian des comparables (22,05) & 922396 & 35 & 322838 \\ 562 Comparaison — multiplicateur médian des comparables (22,05) & 922396 & 35 & 322838 \\
560 Revenu — capitalisation directe au taux ajusté (3,02~\%) & 748126 & 25 & 187032 \\ 563 Revenu — capitalisation directe au taux ajusté (3,02~\%) & 748126 & 25 & 187032 \\
561 \quad repère : multiplicateur ajusté au loyer relatif (24,38) & 1019940 & 0 & 0 \\ 564 \quad repère : multiplicateur ajusté au loyer relatif (24,38) & 1019940 & 0 & 0 \\
562−\quad repère : 127 ventes brutes, prix par logement / MRB / capitalisation & {843~000 / 829~110 / 712~777} & 0 & 0 \\ 565+\quad repère : 127 ventes brutes, prix par logement / MRB / capitalisation & {\footnotesize 843~000 / 829~110 / 712~777} & 0 & 0 \\
563 \quad repère : indication pondérée du \cref{ch:32} (médianes, taxes déclarées) & 872426 & 0 & 0 \\ 566 \quad repère : indication pondérée du \cref{ch:32} (médianes, taxes déclarées) & 872426 & 0 & 0 \\
564 \quad contrôle : coût déprécié (hypothèses déclarées) & 473111 & 0 & 0 \\ 567 \quad contrôle : coût déprécié (hypothèses déclarées) & 473111 & 0 & 0 \\
565 \midrule 568 \midrule
@@ -596,7 +599,7 @@ Le \cref{tab:46:ponderations} montre ce que d'autres pondérations raisonnables
596 599
597 \begin{table}[htbp]\centering 600 \begin{table}[htbp]\centering
598 \caption{Sensibilité de la valeur pondérée à la pondération des trois indications (données synthétiques).}\label{tab:46:ponderations} 601 \caption{Sensibilité de la valeur pondérée à la pondération des trois indications (données synthétiques).}\label{tab:46:ponderations}
599−\small\begin{tabular}{@{}L{5.2cm}ccc S[table-format=7.0] S[table-format=-2.1] L{3.4cm}@{}} 602+\small\setlength{\tabcolsep}{3pt}\begin{tabular}{@{}L{4.5cm}ccc S[table-format=7.0] S[table-format=-2.1] L{3.0cm}@{}}
600 \toprule 603 \toprule
601 Pondération & Par log. & MRB & Cap. & {Valeur (\$)} & {Écart (\%)} & Profil d'acheteur \\ 604 Pondération & Par log. & MRB & Cap. & {Valeur (\$)} & {Écart (\%)} & Profil d'acheteur \\
602 \midrule 605 \midrule
modified manuscript/chapters/ch48.tex +214 −1
@@ -536,7 +536,7 @@ Avant de simuler, on peut démontrer ce que la simulation va montrer. La mesure
536 \begin{equation}\label{eq:48:var} 536 \begin{equation}\label{eq:48:var}
537 \operatorname{VaR}_{0{,}95}(V) = V_0 - q_{0{,}05}(V), 537 \operatorname{VaR}_{0{,}95}(V) = V_0 - q_{0{,}05}(V),
538 \end{equation} 538 \end{equation}
539−où $V_0$ est la valeur de référence et $q_{0{,}05}$ le quantile à \pct{5} de la valeur simulée. La VaR n'est pas, en général, une mesure de risque cohérente au sens de \textcite{artznerDelbaenEberHeath1999} : elle peut violer la sous-additivité pour des distributions très asymétriques ou à queues épaisses. Dans le cadre gaussien de la \cref{eq:48:lnv}, en revanche, la sous-additivité est garantie, et elle se démontre en deux lignes. 539+où $V_0$ est la valeur de référence et $q_{0{,}05}$ le quantile à \pct{5} de la valeur simulée. La VaR n'est pas, en général, une mesure de risque cohérente au sens d'Artzner, Delbaen, Eber et Heath (1999)\footnote{Artzner, P., Delbaen, F., Eber, J.-M. et Heath, D. (1999), « Coherent Measures of Risk », \emph{Mathematical Finance}, 9(3), 203-228 ; DOI 10.1111/1467-9965.00068 (vérifié Crossref le 31~octobre 2026 ; \texttt{references/lib-ch48.bib}).} : elle peut violer la sous-additivité pour des distributions très asymétriques ou à queues épaisses. Dans le cadre gaussien de la \cref{eq:48:lnv}, en revanche, la sous-additivité est garantie, et elle se démontre en deux lignes.
540 540
541 \begin{proposition}\label{prop:48:diversification} 541 \begin{proposition}\label{prop:48:diversification}
542 Soit $X_i$, $i = 1, \dots, n$, des variables aléatoires gaussiennes d'écarts-types $\sigma_i$ et de corrélations $\rho_{ij}$, et $X_P = \sum_i w_i X_i$ avec $w_i \geq 0$. Alors $\sigma_P \leq \sum_i w_i \sigma_i$, avec égalité si et seulement si $\rho_{ij} = 1$ pour toute paire de poids non nuls ; et, pour tout niveau $\alpha \geq \tfrac12$, $\operatorname{VaR}_\alpha(X_P) \leq \sum_i w_i \operatorname{VaR}_\alpha(X_i)$. 542 Soit $X_i$, $i = 1, \dots, n$, des variables aléatoires gaussiennes d'écarts-types $\sigma_i$ et de corrélations $\rho_{ij}$, et $X_P = \sum_i w_i X_i$ avec $w_i \geq 0$. Alors $\sigma_P \leq \sum_i w_i \sigma_i$, avec égalité si et seulement si $\rho_{ij} = 1$ pour toute paire de poids non nuls ; et, pour tout niveau $\alpha \geq \tfrac12$, $\operatorname{VaR}_\alpha(X_P) \leq \sum_i w_i \operatorname{VaR}_\alpha(X_i)$.
@@ -607,3 +607,216 @@ Portefeuille & 48 & 143363000 & 133506790 & 154224548 & 4.37 & 9856210 & 1428343
607 \end{tabular} 607 \end{tabular}
608 \tabsource{\synth{script \texttt{ch48\_portefeuille.py}, fonction \texttt{simuler\_portefeuille} (clé \texttt{par\_rmr}) ; ratio = VaR de l'ensemble / somme des VaR de ses composantes.}} 608 \tabsource{\synth{script \texttt{ch48\_portefeuille.py}, fonction \texttt{simuler\_portefeuille} (clé \texttt{par\_rmr}) ; ratio = VaR de l'ensemble / somme des VaR de ses composantes.}}
609 \end{table} 609 \end{table}
610+
611+\section{Allocation et arbitrage}\label{sec:48:allocation}
612+
613+\subsection{Rendement courant, croissance et risque de chaque immeuble}
614+
615+Le fonds ne demande pas seulement une valeur : il veut savoir quels immeubles conserver, lesquels céder et où réinvestir. Cette question relève du conseil, non de l'opinion de valeur, et le rapport doit la traiter dans une section distincte, clairement identifiée comme une consultation au sens des Normes de pratique 5 et 6 \parencite{oeaqNormes} ; mais elle s'appuie sur les mêmes données et c'est l'évaluateur qui les maîtrise le mieux. Trois grandeurs décrivent chaque immeuble. Le rendement courant est son taux de capitalisation, $R_i = \NOI_i / V_i$. La croissance attendue du revenu, $g_i$, est approchée par la croissance tendancielle estimée à la \cref{sec:48:dynamique}, avec la réserve exprimée plus haut sur le bruit de cette estimation. Leur somme est le rendement total attendu à long terme sous l'hypothèse d'un taux de capitalisation constant, selon la relation de \textcite{gordonShapiro1956} dérivée au \cref{ch:29} (\cref{eq:29:gordon}),
616+\begin{equation}\label{eq:48:rendement-total}
617+\mu_i = R_i + g_i,
618+\end{equation}
619+où $g_i$ joue le rôle de la plus-value attendue. Le risque est l'écart-type du logarithme de la valeur simulée de l'immeuble, $\sigma_i = \sqrt{\sigma_{\varepsilon,i}^2 + \sigma_\eta^2}$, de \pct{5.9} à \pct{6.6} selon la volatilité du revenu. L'indicateur synthétique retenu est l'excédent de rendement par unité de risque,
620+\begin{equation}\label{eq:48:ratio}
621+\lambda_i = \frac{\mu_i - r_f}{\sigma_i}, \qquad r_f = \pct{3.84} \text{ (obligation du Canada à 10 ans, 29 octobre 2026)},
622+\end{equation}
623+complété par des drapeaux de risque que la simulation ne capte pas : zone inondable, contamination du sol, ratio de couverture inférieur à \num{1.00} après un renouvellement à +200~points de base, et état coté 1 ou 2. Le score final est le rang centile de $\lambda_i$ diminué de \num{0.10} par drapeau ; cette pondération est un choix de l'analyste, déclaré, et non une norme.
624+
625+\begin{table}[htbp]\centering
626+\caption{Les six immeubles les mieux et les moins bien classés selon le rendement total attendu, le risque et les drapeaux (données synthétiques).}\label{tab:48:allocation}
627+\footnotesize\setlength{\tabcolsep}{3.5pt}\begin{tabular}{@{}l l S[table-format=2.0] c S[table-format=1.2] S[table-format=1.2] S[table-format=2.2] S[table-format=1.2] S[table-format=1.2] S[table-format=1.2] S[table-format=1.2] S[table-format=2.1] c S[table-format=-1.2]@{}}
628+\toprule
629+Imm. & RMR & {Log.} & État & {$R$ (\%)} & {$g$ (\%)} & {$\mu$ (\%)} & {$\sigma$ (\%)} & {$\lambda$} & {RCD} & {RCD +200} & {RPV (\%)} & Drapeaux & {Score} \\
630+\midrule
631+\multicolumn{14}{@{}l}{\emph{Conserver (rang 1 à 6)}} \\
632+P10 & Gatineau & 12 & 3 & 5.19 & 6.26 & 11.45 & 6.31 & 1.20 & 2.56 & 1.95 & 44.8 & — & 1.00 \\
633+P24 & Gatineau & 16 & 4 & 5.27 & 5.24 & 10.51 & 6.12 & 1.09 & 2.14 & 1.65 & 53.3 & — & 0.96 \\
634+P02 & Gatineau & 12 & 3 & 5.67 & 4.66 & 10.33 & 6.45 & 1.01 & 2.05 & 1.61 & 48.1 & — & 0.94 \\
635+P25 & Trois-Rivières & 16 & 3 & 7.00 & 2.73 & 9.73 & 6.06 & 0.97 & 1.77 & 1.37 & 76.9 & — & 0.90 \\
636+P39 & Trois-Rivières & 6 & 3 & 6.36 & 3.37 & 9.73 & 6.10 & 0.97 & 2.16 & 1.70 & 49.5 & — & 0.88 \\
637+P37 & Gatineau & 8 & 3 & 5.89 & 4.00 & 9.89 & 6.29 & 0.96 & 1.71 & 1.36 & 59.2 & — & 0.85 \\
638+\midrule
639+\multicolumn{14}{@{}l}{\emph{Céder (rang 43 à 48)}} \\
640+P46 & Québec & 8 & 4 & 5.50 & 1.24 & 6.74 & 6.44 & 0.45 & 1.94 & 1.48 & 57.6 & — & 0.08 \\
641+P44 & Saguenay & 12 & 2 & 6.61 & 0.52 & 7.13 & 6.23 & 0.53 & 1.36 & 1.09 & 79.6 & état & 0.03 \\
642+P28 & Montréal & 6 & 3 & 4.20 & 2.09 & 6.29 & 5.99 & 0.41 & 1.07 & 0.84 & 68.7 & RCD & -0.04 \\
643+P34 & Montréal & 24 & 3 & 4.49 & 1.89 & 6.38 & 6.29 & 0.40 & 1.25 & 0.98 & 61.8 & RCD & -0.06 \\
644+P41 & Montréal & 8 & 3 & 4.67 & 0.57 & 5.24 & 6.25 & 0.22 & 2.38 & 1.83 & 40.3 & inond. & -0.08 \\
645+P26 & Montréal & 48 & 2 & 4.41 & 2.38 & 6.79 & 6.03 & 0.49 & 1.27 & 0.99 & 63.0 & état, RCD & -0.10 \\
646+\bottomrule
647+\end{tabular}
648+\tabsource{\synth{script \texttt{ch48\_portefeuille.py}, fonction \texttt{allocation} ; $\mu = R + g$ (\cref{eq:48:rendement-total}), $\lambda$ selon l'\cref{eq:48:ratio}, score = rang centile de $\lambda$ $- 0{,}10$ par drapeau ; RCD sur 480 mois, RCD +200 après renouvellement à +200~pb, RNE constant. Classement complet des 48 immeubles dans la sortie du script.}}
649+\end{table}
650+
651+Le \cref{tab:48:allocation} présente les six immeubles les mieux classés et les six moins bien classés. Le classement est dominé, en tête, par les immeubles de Gatineau et de Trois-Rivières : des taux de capitalisation supérieurs à ceux de Montréal, une croissance tendancielle du revenu élevée (jusqu'à \pct{6.3} par an pour P10), un endettement modéré et aucun drapeau. En queue, on trouve quatre immeubles montréalais dont le rendement courant est bas (de \pct{4.20} à \pct{4.67}) sans que la croissance du revenu le compense (de \pct{0.6} à \pct{2.4}), et dont deux (P28, P34) ne couvriraient plus leur dette après un renouvellement à +200~points de base et un (P41) est en zone inondable ; P26, le plus grand immeuble du portefeuille (quarante-huit logements, \dollars{11038000}), cumule un état inférieur à la moyenne, un ratio de couverture tombant à \num{0.99} sous le choc de taux et une échéance en 2027 ; P46, à Québec, et P44, au Saguenay, ont la croissance la plus faible du portefeuille. P45, malgré son risque de refinancement, se classe neuvième grâce à sa croissance de \pct{5.9} et à son rendement total de \pct{11.0} ; sa place dans l'arbitrage dépend de la capacité du fonds à injecter \dollars{1.3} million en 2028, question de liquidité du fonds et non de valeur de l'immeuble.
652+
653+Deux mises en garde encadrent cette lecture. La première est que les croissances tendancielles individuelles sont bruitées, comme la \cref{sec:48:dynamique} l'a montré : la croissance de P10 (\pct{6.3}) excède celle de sa région (\pct{4.8}) d'un écart qui n'est pas significatif sur dix ans, et un analyste prudent remplacerait $g_i$ par la croissance régionale, ou par une moyenne des deux, avant de décider. La seconde est que le classement repose sur la valeur marchande comme prix de sortie : céder P26 au taux de \pct{4.41} rapporte \dollars{11038000} brut, et le produit net après remboursement de la dette (\dollars{6950000}) et des frais de vente de \pct{2} est de \dollars{3867000} ; le réinvestir dans des immeubles gatinois au taux de \pct{5.4} accroît le revenu courant du fonds, mais c'est un arbitrage de \emph{valeur d'investissement}, propre au fonds, à ses contraintes de liquidité et à sa fiscalité, et non un jugement sur la valeur marchande de P26, qui reste celle que le marché montréalais paie pour un tel immeuble. La cession des six immeubles les moins bien classés ramènerait le portefeuille à quarante-deux immeubles, \dollars{121898000} de valeur, un taux pondéré de \pct{5.30} au lieu de \pct{5.19}, un ratio prêt-valeur de \pct{59.5} et un produit net de cession de \dollars{7795700} ; elle ne réduirait presque pas la part en zone inondable (\pct{6.4}), parce que P36, le plus exposé, n'est pas parmi les six.
654+
655+\subsection{Une frontière rendement-risque par région}
656+
657+À l'échelle des régions, l'arbitrage se formule comme le problème de sélection de portefeuille de Markowitz (1952)\footnote{Markowitz, H. (1952), « Portfolio Selection », \emph{The Journal of Finance}, 7(1), 77-91 ; DOI 10.2307/2975974 (vérifié Crossref le 31~octobre 2026 ; \texttt{references/lib-ch48.bib}).} : étant donné le rendement attendu $\mu_r$ et la matrice de covariance $\boldsymbol\Omega$ des rendements régionaux, trouver, pour chaque niveau de rendement cible $m$, les poids $\mathbf{w}$ qui minimisent la variance,
658+\begin{equation}\label{eq:48:frontiere}
659+\min_{\mathbf{w}} \ \mathbf{w}\T \boldsymbol\Omega \mathbf{w} \quad \text{sous} \quad \mathbf{w}\T \boldsymbol\mu = m, \quad \mathbf{1}\T\mathbf{w} = 1, \quad \mathbf{w} \geq \mathbf{0},
660+\end{equation}
661+la contrainte de positivité traduisant l'impossibilité de vendre à découvert un immeuble. Le rendement attendu de chaque région est son taux pondéré augmenté de sa croissance agrégée (\cref{tab:48:rmr}, \cref{tab:48:croissance}) ; la covariance est celle des logarithmes des valeurs régionales simulées à la \cref{sec:48:montecarlo}, ce qui garantit la cohérence entre la mesure du risque et la structure de dépendance déclarée. Le \cref{tab:48:frontiere} donne les paramètres et quatre portefeuilles remarquables ; la \cref{fig:48:frontiere} trace la frontière.
662+
663+\begin{table}[htbp]\centering
664+\caption{Paramètres de la frontière rendement-risque par région et portefeuilles remarquables (données synthétiques).}\label{tab:48:frontiere}
665+\footnotesize\setlength{\tabcolsep}{4pt}\begin{tabular}{@{}L{4.6cm} S[table-format=2.2] S[table-format=1.2] S[table-format=2.1] S[table-format=2.1] S[table-format=2.1] S[table-format=2.1] S[table-format=2.1] S[table-format=2.1]@{}}
666+\toprule
667+& {$\mu$ (\%)} & {$\sigma$ (\%)} & \multicolumn{6}{c}{Poids (\%) : Mtl / Qc / Gat / Sher / T-R / Sag} \\
668+\midrule
669+Montréal & 7.70 & 4.96 & 100 & 0 & 0 & 0 & 0 & 0 \\
670+Québec & 8.44 & 5.12 & 0 & 100 & 0 & 0 & 0 & 0 \\
671+Gatineau & 10.22 & 5.03 & 0 & 0 & 100 & 0 & 0 & 0 \\
672+Sherbrooke & 8.04 & 5.15 & 0 & 0 & 0 & 100 & 0 & 0 \\
673+Trois-Rivières & 8.44 & 5.22 & 0 & 0 & 0 & 0 & 100 & 0 \\
674+Saguenay & 7.93 & 5.25 & 0 & 0 & 0 & 0 & 0 & 100 \\
675+\midrule
676+Portefeuille actuel (parts de valeur) & 8.29 & 4.36 & 45.5 & 17.5 & 14.1 & 12.6 & 8.0 & 2.3 \\
677+Variance minimale & 8.46 & 4.27 & 16.7 & 16.7 & 16.7 & 16.7 & 16.7 & 16.7 \\
678+Même rendement que l'actuel, risque minimal & 8.29 & 4.28 & 23.0 & 16.6 & 10.0 & 18.1 & 16.1 & 16.3 \\
679+Même risque que l'actuel, rendement maximal & 9.12 & 4.36 & 5.4 & 16.5 & 44.8 & 9.8 & 15.5 & 8.0 \\
680+\bottomrule
681+\end{tabular}
682+\tabsource{\synth{script \texttt{ch48\_portefeuille.py}, fonction \texttt{allocation} (clé \texttt{frontiere}) ; $\mu_r$ = taux pondéré + croissance agrégée ; $\boldsymbol\Omega$ = covariance des logarithmes des valeurs régionales simulées (corrélations de 0,61 à 0,67) ; optimisation SLSQP sous contraintes (\cref{eq:48:frontiere}).}}
683+\end{table}
684+
685+\begin{figure}[htbp]\centering
686+\includegraphics[width=\linewidth]{ch48/ch48-fig-frontiere.pdf}
687+\caption{Frontière rendement-risque des six régions (sans vente à découvert), positions des régions, du portefeuille actuel, du portefeuille de variance minimale et des deux portefeuilles qui dominent l'actuel. Les risques régionaux sont presque égaux et fortement corrélés : la frontière est étroite en risque et c'est le rendement attendu, c'est-à-dire surtout la croissance régionale, qui distingue les allocations.}
688+\label{fig:48:frontiere}
689+\figsource{\synth{script \texttt{ch48\_portefeuille\_figures.py}, graine 20261031.}}
690+\end{figure}
691+
692+Le résultat est instructif par sa simplicité. Les risques régionaux sont presque identiques (de \pct{4.96} à \pct{5.25}) et fortement corrélés (de \num{0.61} à \num{0.67}, par l'effet du facteur national du taux) : le portefeuille de variance minimale est l'équipondération, et son risque (\pct{4.27}) n'est inférieur que de neuf points de base à celui du portefeuille actuel (\pct{4.36}). La frontière est donc \emph{étroite en risque} : passer de la pondération actuelle à n'importe quelle autre change peu l'écart-type, et c'est le rendement attendu qui discrimine. Le portefeuille actuel est dominé : à risque égal, une allocation qui porterait Gatineau à \pct{45} et ramènerait Montréal à \pct{5} atteindrait un rendement attendu de \pct{9.12} au lieu de \pct{8.29}. Mais cette recommandation apparente repose entièrement sur la croissance agrégée de Gatineau (\pct{4.78} par an sur 2016-2026, dans le jeu synthétique) et sur l'hypothèse qu'elle se prolonge ; la \cref{sec:48:marches} a rappelé que les projections démographiques de l'ISQ ne couvrent pas Gatineau dans leur communiqué et que la croissance passée des loyers d'une petite région est un guide fragile. Le bon usage de la frontière n'est pas de prescrire une allocation, mais de montrer au fonds que le risque de son portefeuille est dicté par le niveau général des taux et non par sa répartition régionale, et que ses choix régionaux sont des paris sur la croissance relative des revenus, qu'il doit assumer comme tels. Le raisonnement rejoint celui que \textcite{geltnerMillerClaytonEichholtz2014} et \textcite{baumCrosbyDevaney2021} tiennent sur la diversification immobilière : utile contre le risque propre, impuissante contre le risque de marché.
693+
694+\section{Réconciliation et conclusion}\label{sec:48:reconciliation}
695+
696+Le dossier a produit, pour le portefeuille, une indication principale et deux contrôles. L'indication principale est la somme des indications individuelles, \dollars{143363000}, chacune examinée au regard du modèle de masse et, pour cinq d'entre elles, motivée individuellement. Le premier contrôle est la somme des valeurs prédites par le modèle, \dollars{142572511}, inférieure de \pct{0.55} ; l'écart est de l'ordre du bruit d'estimation du modèle et n'appelle pas de correction, mais il signale que les évaluations individuelles sont, dans l'ensemble, très légèrement moins prudentes que le modèle, ce qui s'explique par les trois immeubles montréalais (P09, P28, P26) évalués à des taux inférieurs à la prédiction. Le second contrôle est la distribution simulée, dont la médiane (\dollars{143349709}) coïncide avec l'indication et dont l'intervalle à \pct{90}, de \dollars{133506790} à \dollars{154224548}, fournit la fourchette que le rapport financier doit communiquer : à horizon d'un an et sous les hypothèses déclarées, la valeur du portefeuille a une chance sur dix de sortir d'une bande de $-\pct{6.9}$ à $+\pct{7.6}$ autour de la valeur retenue. Le \cref{tab:48:reconciliation} rassemble ces éléments.
697+
698+\begin{table}[htbp]\centering
699+\caption{Réconciliation : indication, contrôles et valeur du portefeuille retenue (données synthétiques).}\label{tab:48:reconciliation}
700+\small\begin{tabular}{@{}L{8.2cm}S[table-format=9.0]@{}}
701+\toprule
702+Élément & {Montant ou ratio} \\
703+\midrule
704+Somme des indications individuelles (48 immeubles) (\$) & 143363000 \\
705+Somme des valeurs prédites par le modèle de masse (\$) & 142572511 \\
706+\quad écart & {$-\pct{0.55}$} \\
707+Médiane de la valeur simulée, corrélation déclarée (\$) & 143349709 \\
708+Intervalle à 90 \% de la valeur simulée (\$) & {133~506~790 -- 154~224~548} \\
709+\quad en proportion de la valeur retenue & {$-\pct{6.9}$ à $+\pct{7.6}$} \\
710+\textbf{Valeur marchande du portefeuille, arrondie à 100~000~\$} & \textbf{143400000} \\
711+\midrule
712+Valeur par logement (888 logements) (\$) & 161486 \\
713+Taux global implicite (RNE 2026 / valeur) & {\pct{5.19}} \\
714+Multiplicateur du revenu brut potentiel & {11,25} \\
715+Dette (\$) / ratio prêt-valeur & {85~766~000 / \pct{59.8}} \\
716+Fonds propres (valeur $-$ dette) (\$) & 57634000 \\
717+Ratio de couverture agrégé (amortissement 480 mois) & {1,61} \\
718+Part de la valeur en zone inondable / sols contaminés & {\pct{6.7} / \pct{3.5}} \\
719+\bottomrule
720+\end{tabular}
721+\tabsource{\synth{script \texttt{ch48\_portefeuille.py}, fonction \texttt{reconciliation}.}}
722+\end{table}
723+
724+La valeur marchande du portefeuille au 30~juin 2026 est retenue à \dollars{143400000}, somme des valeurs individuelles arrondie à \dollars{100000} près, avec la répartition régionale du \cref{tab:48:rmr} : \dollars{65171000} à Montréal, \dollars{25091000} à Québec, \dollars{20259000} à Gatineau, \dollars{18132000} à Sherbrooke, \dollars{11447000} à Trois-Rivières et \dollars{3263000} au Saguenay. Trois commentaires accompagnent la conclusion. Le premier concerne la prime ou la décote de portefeuille, écartée par le mandat : si le fonds envisageait la vente du portefeuille en bloc, l'évaluateur devrait reprendre l'analyse avec une autre unité d'évaluation et rechercher, sur le marché canadien des transactions de portefeuilles, la preuve d'une prime pour la masse critique ou d'une décote pour l'hétérogénéité régionale, preuve qui n'existe pas dans le dossier ; la valeur retenue ne vaut que pour l'unité d'évaluation convenue. Le deuxième concerne l'écart entre la précision agrégée et la précision individuelle : le rapport doit dire que l'erreur relative sur la valeur du portefeuille est vraisemblablement inférieure à \pct{3} (le coefficient de variation simulé est de \pct{4.4} à un an, incluant l'incertitude de marché), mais que l'erreur sur un immeuble donné peut atteindre \pct{10}, et que les valeurs de l'annexe par immeuble ne doivent pas servir de base à une transaction individuelle sans évaluation complète. Le troisième concerne le ratio de la dette : à \pct{59.8} de la valeur, avec un ratio de couverture agrégé de \num{1.61}, le portefeuille est modérément endetté, mais la concentration des échéances en 2027 et 2028 et la sensibilité au taux de renouvellement font de la liquidité du fonds, et non de la valeur de ses immeubles, le premier risque des deux prochaines années ; c'est l'objet de la section de consultation du rapport, distincte de l'opinion de valeur.
725+
726+\section{Le rapport : extrait structuré}\label{sec:48:rapport}
727+
728+Le rapport d'évaluation de portefeuille respecte le contenu minimal de la règle 2.3 des Normes de pratique professionnelle \parencite{oeaqNormes} ; le \cref{tab:48:rapport} indique, pour chacun des douze éléments, la réponse du dossier et ce qui distingue le rapport de portefeuille du rapport individuel du \cref{ch:47}. Trois éléments appellent un traitement particulier. L'étendue du travail (élément 6) doit décrire l'évaluation de masse comme telle : modèle, données, inspections par échantillon, contrôle par ratios, immeubles examinés individuellement, et surtout ce que la méthode ne permet pas, c'est-à-dire l'utilisation des valeurs individuelles de l'annexe pour une transaction ou un prêt sur un immeuble donné. Les hypothèses (élément 7) comprennent trois hypothèses de travail qui ne sont pas des hypothèses extraordinaires au sens de la norme mais que le lecteur doit connaître : l'exactitude des revenus normalisés fournis par le fonds, l'amortissement de 480~mois des prêts, et l'égalité présumée de la valeur marchande et de la juste valeur comptable. Le raisonnement (élément 8) est, pour un portefeuille, autant statistique que narratif, et le rapport doit rendre les scripts et les données disponibles au vérificateur du fonds, ce que l'ouvrage fait par construction.
729+
730+\begin{table}[htbp]\centering
731+\caption{Contenu minimal du rapport (NPP, règle 2.3) et particularités du rapport de portefeuille.}\label{tab:48:rapport}
732+\footnotesize\begin{tabular}{@{}c L{3.6cm} L{8.0cm}@{}}
733+\toprule
734+N\textsuperscript{o} & Élément exigé & Réponse du dossier et particularité du portefeuille \\
735+\midrule
736+1 & Identification physique et légale & Annexe par immeuble (\cref{tab:48:immeubles}) ; sociétés en commandite propriétaires ; 48 lots fictifs \\
737+2 & Droits évalués & Pleine propriété grevée des baux (droit du locateur) pour chaque immeuble ; unité d'évaluation : chaque immeuble séparément \\
738+3 & But et fin & Opinion de valeur marchande ; rapport financier du fonds et renouvellement d'une facilité de crédit ; prêteur = utilisateur désigné \\
739+4 & Définition de la valeur & Valeur marchande des NPP ; présomption d'égalité avec la juste valeur comptable, déclarée comme hypothèse de travail \\
740+5 & Date & Évaluation 2026-06-30 ; inspections mai-juin 2026 ; rapport 2026-10-31 ; fait postérieur : hausse du taux directeur du 28~octobre 2026 \\
741+6 & Étendue du travail & Évaluation de masse (modèle régional du taux, ratios IAAO), 12 inspections sur 48, examen individuel de 5 immeubles, analyse de la dette et simulation ; limites : 36 immeubles non inspectés, états locatifs non vérifiés bail par bail, taux non publiés pour 4 RMR, cartographie des zones inondables non relue \\
742+7 & Réserves et hypothèses de base & Annexe E adaptée ; aucune hypothèse extraordinaire ; hypothèses de travail : RNE fournis exacts, amortissement 480 mois, valeur marchande = juste valeur \\
743+8 & Traitement de l'information et raisonnement & \Cref{sec:48:portefeuille} à \ref{sec:48:reconciliation} ; scripts et données reproductibles remis au vérificateur \\
744+9 & Usage le meilleur et le plus profitable & Continuation de l'usage locatif pour les 48 immeubles ; aucune conversion ni redéveloppement envisagé \\
745+10 & Rejet d'une méthode traditionnelle & Coût et comparaison directe écartés pour le portefeuille (motifs : actifs à revenu, marché actif, hétérogénéité) ; la comparaison par logement sert de contrôle régional \\
746+11 & Conformité à la substance de l'évaluation & Règle 1.2 traitée immeuble par immeuble dans l'annexe ; conformité au Standard on Mass Appraisal déclarée \\
747+12 & Attestation & Formule prescrite, signée ; absence d'intérêt dans le fonds et dans la facilité de crédit (art.~18 à 20 et 34 du Code de déontologie) \\
748+\bottomrule
749+\end{tabular}
750+\tabsource{structure selon \textcite{oeaqNormes} et \textcite{deontOEAQ} ; contenu du dossier fictif ; évaluation de masse selon \textcite{iaaomass2025}.}
751+\end{table}
752+
753+La conclusion du rapport se lit alors ainsi, en substance. Sur la foi des évaluations individuelles les plus récentes des quarante-huit immeubles, de leur mise à jour à la date d'évaluation par un modèle régional du taux global contrôlé par les statistiques de ratio de l'IAAO, de l'inspection d'un échantillon de douze immeubles, de l'analyse des marchés locatifs et des marchés de capitaux des six régions et sous réserve des hypothèses et conditions limitatives énoncées, l'évaluateur est d'avis que la valeur marchande de la pleine propriété des quarante-huit immeubles, grevés des baux en vigueur et considérés séparément, au 30~juin 2026, totalise cent quarante-trois millions quatre cent mille dollars (\dollars{143400000}), répartis entre les six régions et les quarante-huit immeubles selon l'annexe. Cette conclusion s'appuie sur la méthode du revenu par capitalisation directe ; l'incertitude à horizon d'un an, mesurée par simulation sous des hypothèses de dépendance déclarées, situe la valeur du portefeuille entre \dollars{133500000} et \dollars{154200000} avec une probabilité de \pct{90}. Les valeurs individuelles de l'annexe sont des composantes de l'opinion sur le portefeuille et ne constituent pas des opinions de valeur destinées à une transaction ou à un financement individuel. La section de consultation qui suit l'opinion de valeur, et qui n'en fait pas partie, traite de la couverture de la dette, de l'échéancier, des scénarios de renouvellement et des recommandations d'allocation.
754+
755+\begin{quebec}[Ce que le dossier doit au cadre québécois]
756+Le portefeuille s'étend sur six régions métropolitaines dont la couverture statistique publique est complète : population et projections (Statistique Canada, tableau 17-10-0148-01 ; ISQ, projections 2026), loyers et inoccupation (SCHL, Enquête sur les logements locatifs d'octobre 2025), prix des plex (APCIQ, troisième trimestre 2026), mais dont deux seulement, Montréal et Québec, disposent de taux de capitalisation publiés (CBRE, troisième trimestre 2026) \parencite{statcanpoprmr,isqprojections2026,schlLocatif2025,apciqt32026,cbrecaprates2026q3} ; pour Gatineau, Sherbrooke, Trois-Rivières et Saguenay, l'évaluateur de portefeuille doit extraire ses taux du marché local, et le jeu synthétique les a posés par hypothèse. Le droit évalué est le droit du locateur, parce que l'aliénation ne résilie pas les baux \parencite[art.~1937]{ccq}. Le cadre des zones inondables en vigueur depuis le 1\textsuperscript{er} mars 2026 (classes d'intensité, restrictions à la reconstruction, cartographie de nouvelle génération publiée progressivement) et le régime des terrains contaminés de la Loi sur la qualité de l'environnement (avis de contamination, plan de réhabilitation) gouvernent l'exposition de cinq immeubles \parencite{zonesInond2026,inondcartes,rmun2026,lqe,rprt}. Le financement des immeubles collectifs repose largement sur l'assurance de la SCHL, dont le programme APH Select admet un amortissement de quarante ans et un ratio de couverture de \num{1.10} \parencite{schlaphselect}, ce qui fonde l'hypothèse d'amortissement du dossier ; le test de résistance à +200~points de base s'inspire du taux admissible minimal du BSIF pour les prêts résidentiels non assurés \parencite{osfiMqr}. Enfin, le rapport respecte le contenu minimal de la règle 2.3 des Normes de pratique professionnelle de l'OEAQ et distingue l'opinion de valeur (normes 1 et 2) de la consultation (normes 5 et 6) \parencite{oeaqNormes}. Toutes ces dispositions ont été vérifiées dans leur version à jour au 15~octobre 2026 (lois) ou au 1\textsuperscript{er} juillet 2026 (règlements) ; la cartographie des zones inondables applicable à chacun des trois immeubles fictifs n'a pas, par nature, pu être consultée.
757+\end{quebec}
758+
759+\begin{erreurs}
760+\begin{itemize}
761+\item Résumer un portefeuille par la moyenne simple ou la médiane des taux individuels plutôt que par le taux pondéré (\cref{eq:48:taux-pondere}) : ici, \pct{5.46} ou \pct{5.59} au lieu de \pct{5.19}, soit une erreur de \pct{5} à \pct{8} sur la valeur agrégée.
762+\item Comparer des taux médians par classe de taille, d'âge ou d'état sans tenir compte de la région : l'effet de confusion inverse le signe de l'effet de taille (\cref{tab:48:distribution}).
763+\item Lire un COD inférieur à 5 comme un gage de qualité du modèle alors qu'il est calculé en échantillon d'estimation ; ou interpréter un PRB estimé sur six immeubles.
764+\item Additionner les intervalles d'incertitude des immeubles pour obtenir celui du portefeuille, ou, à l'inverse, supposer les immeubles indépendants : les deux bornes sont fausses, et seule une structure de dépendance déclarée permet d'agréger (\cref{tab:48:mc}).
765+\item Oublier que la diversification géographique ne réduit pas le risque commun des taux : le coefficient de variation du portefeuille (\pct{4.4}) est aux deux tiers celui d'un immeuble (\pct{6.3}), non au vingtième.
766+\item Juger la dette par le ratio de couverture agrégé (\num{1.61}) sans examiner les ratios individuels (cinq immeubles sous \num{1.20}) ni l'échéancier (\pct{61} de la dette en 2027-2028).
767+\item Omettre de déclarer l'hypothèse d'amortissement des prêts : entre 480 et 300~mois, le ratio de couverture agrégé passe de \num{1.61} à \num{1.30} et le nombre d'immeubles sous \num{1.20} de cinq à treize.
768+\item Présenter une recommandation de cession comme un jugement de valeur marchande, ou une frontière rendement-risque comme une prescription, alors que l'une et l'autre dépendent d'estimations de croissance régionale bruitées et de la situation propre du fonds.
769+\item Appliquer une prime ou une décote de portefeuille sans preuve de marché, ou changer d'unité d'évaluation sans le dire.
770+\end{itemize}
771+\end{erreurs}
772+
773+\begin{limites}
774+Le dossier est entièrement synthétique : aucun des quarante-huit immeubles n'existe, les taux de Gatineau, Sherbrooke, Trois-Rivières et Saguenay ont été posés par hypothèse faute de publication, et les effets de l'état, de la taille, de la zone inondable et de la contamination sont des propriétés de la loi de génération retrouvées par la régression, non des mesures du marché québécois. Le modèle de masse est estimé sur les taux retenus dans des évaluations individuelles, non sur des ventes ; ses statistiques de ratio sont calculées en échantillon d'estimation, ce qui explique un COD inférieur aux seuils de l'IAAO, et les sous-échantillons régionaux de quatre à huit immeubles ne permettent pas d'estimer le PRD et le PRB avec une précision utile. La corrélation des revenus entre immeubles est estimée sur des séries dont la seule composante commune est le choc pandémique ; sur des marchés réels, une composante régionale existerait vraisemblablement. La corrélation des chocs de taux (\num{0.50} entre régions, \num{0.70} dans une région) et l'identification de l'écart-type du taux à la dispersion résiduelle du modèle sont des hypothèses déclarées, non des estimations ; la distribution de la valeur du portefeuille en dépend presque entièrement. L'amortissement de 480~mois des prêts, le solde assimilé au montant du dossier et le renouvellement au taux initial majoré sont des hypothèses, et le taux d'origination de chaque prêt n'est pas documenté. Les croissances tendancielles individuelles sont bruitées et les rendements attendus de la frontière en héritent. La cartographie des zones inondables en vigueur et les études de caractérisation des sols n'ont pas été consultées pour les immeubles fictifs ; les décotes de la littérature citée proviennent de marchés américains. L'égalité entre valeur marchande et juste valeur comptable est présumée et non vérifiée au regard du référentiel du fonds. L'inspection par échantillon et la non-vérification des états locatifs sont des limites à l'étendue du travail déclarées au mandat. Ces points sont consignés dans \texttt{verification/chapters/ch48-claims.csv}.
775+\end{limites}
776+
777+\begin{synthese}
778+\begin{itemize}
779+\item Portefeuille fictif : 48 immeubles, 888 logements, six RMR ; valeur \dollars{143363000}, RNE \dollars{7447030}, taux pondéré \pct{5.19} (médiane \pct{5.59}), RPV \pct{59.8}, \dollars{161445} par logement ; Montréal \pct{45.5} de la valeur, équivalent de 3,6 régions et 27,5 immeubles de poids égal.
780+\item Les écarts de taux entre régions (de \pct{4.49} à Montréal à \pct{6.39} au Saguenay) tiennent à la liquidité et à la profondeur des marchés plus qu'aux loyers ou à l'inoccupation ; ils sont persistants et se modélisent par des effets régionaux.
781+\item Modèle de masse du taux : région (+102 à +209~pb), état ($-21$~pb par point), taille ($-16$~pb par doublement), zone inondable (+41~pb), sol (+29~pb) ; $R^2 = 0{,}88$ ; somme prédite à $-\pct{0.55}$ de la somme des indications ; ratio médian 1,002, COD 3,8 ; cinq immeubles examinés individuellement.
782+\item RNE 2016-2026 : croissance \pct{3.0} par an (de \pct{1.5} au Saguenay à \pct{4.8} à Gatineau), volatilité agrégée \pct{1.3} contre \pct{3.2} par immeuble, choc pandémique $-\pct{2.5}$, corrélation entre immeubles 0,17 due au seul choc commun.
783+\item Dette : RCD agrégé 1,61 (480 mois) mais cinq immeubles sous 1,20 et un sous 1,00 ; \pct{61} de la dette échoit en 2027-2028 ; à +200~pb, RCD agrégé 1,26, seize immeubles sous 1,20 et \dollars{7.4} millions d'injection ; à 300 mois d'amortissement, RCD 1,30.
784+\item Monte-Carlo à corrélation régionale (Cholesky, 10~000 tirages) : intervalle à 90 \% de $-\pct{6.9}$ à $+\pct{7.6}$ ; VaR à 95 \% de \dollars{9.9} millions contre \dollars{14.3} millions pour la somme des VaR individuelles (ratio 0,69 ; 0,18 sous indépendance, 1,00 sous corrélation parfaite) ; la diversification réduit le risque propre, non le risque de taux.
785+\item Allocation : rendement total $R + g$, risque simulé et drapeaux ; frontière étroite en risque (\pct{4.27} à \pct{4.36}), discriminée par la croissance régionale ; recommandations = consultation et valeur d'investissement, non valeur marchande.
786+\item Valeur retenue \dollars{143400000}, somme des valeurs individuelles, chaque immeuble considéré séparément ; fourchette de \dollars{133.5} à \dollars{154.2} millions ; RPV \pct{59.8}.
787+\end{itemize}
788+\end{synthese}
789+
790+\section*{Exercices}
791+
792+\begin{exercice}[1]{Sommaire d'une région}{ex:48:1}
793+À partir de l'annexe par immeuble (\cref{tab:48:immeubles}), reconstituer le sommaire de la région de Sherbrooke : nombre de logements, valeur, revenu net, dette, taux global pondéré, valeur par logement et ratio prêt-valeur. Calculer ensuite la moyenne simple et la médiane des taux des sept immeubles, puis la valeur que l'on obtiendrait en capitalisant le revenu net régional à la moyenne simple. Expliquer l'écart avec la valeur agrégée.
794+\end{exercice}
795+
796+\begin{exercice}[1]{Un immeuble hors portefeuille}{ex:48:2}
797+Le fonds envisage l'acquisition d'un immeuble de vingt-quatre logements, d'état 3, de quarante-cinq ans, à Trois-Rivières, en zone inondable, dont le revenu net normalisé est de \dollars{150000}. À l'aide des coefficients du \cref{tab:48:coefficients} et du facteur de Duan, calculer le taux prédit et la valeur prédite ; refaire le calcul hors zone inondable, puis pour le même immeuble situé à Montréal. Exprimer l'effet de la zone inondable en points de base et en pourcentage de la valeur, et vérifier la relation de l'\cref{eq:48:decote}.
798+\end{exercice}
799+
800+\begin{exercice}[2]{La dette de P45}{ex:48:3}
801+L'immeuble P45 (Gatineau, 36 logements, RNE \dollars{366800}) porte une dette de \dollars{5416000} à \pct{5.17}, échéant en 2028. Calculer le service annuel de la dette et le ratio de couverture pour un amortissement de 480~mois, puis de 300~mois (composition semestrielle). Calculer le solde à l'échéance (24~mois) sous l'amortissement de 480~mois, le service de la dette et le ratio de couverture si ce solde est renouvelé à \pct{7.17} sur l'amortissement résiduel, puis la capacité de refinancement du prêteur (RPV \pct{75} de l'indication individuelle de \dollars{7186000}, RCD \num{1.20}) et l'injection de fonds requise. Comparer avec la valeur par régression retenue au \cref{ch:33} (\dollars{6716534}) et discuter le choix de la base de valeur du covenant de ratio prêt-valeur.
802+\end{exercice}
803+
804+\begin{exercice}[2]{Ratios de l'IAAO sur un sous-ensemble}{ex:48:4}
805+Calculer, pour les dix-sept immeubles montréalais du \cref{tab:48:immeubles}, le ratio médian, le ratio pondéré, le COD, le PRD et le PRB des valeurs prédites aux indications individuelles, selon les définitions du \cref{ch:09}. Comparer avec les statistiques du portefeuille (\cref{tab:48:iaao}) et avec les seuils de l'IAAO pour les immeubles à revenus. Expliquer pourquoi un COD de 4 ne doit pas être interprété ici comme il le serait dans une étude de ratio sur ventes, et ce que signifie un PRB négatif de $-0{,}015$ avec une erreur-type de 0,012.
806+\end{exercice}
807+
808+\begin{exercice}[2]{Croissance d'un immeuble et croissance de sa région}{ex:48:5}
809+À l'aide de \texttt{traite.cas4.croissance\_rne} ou de la série de \texttt{cas4\_portefeuille\_series.csv}, estimer la croissance tendancielle et la volatilité annualisée du revenu net de P36 (Québec, 72 logements, zone inondable) et les comparer à la croissance agrégée de la région de Québec (\cref{tab:48:croissance}). Mesurer le choc pandémique de la région selon l'\cref{eq:48:choc}. Calculer le rendement total attendu $R + g$ de P36 et discuter, en une demi-page, si la croissance propre de l'immeuble ou celle de la région doit servir à l'allocation, et pourquoi la différence importe pour un immeuble en zone inondable.
810+\end{exercice}
811+
812+\begin{exercice}[3]{Un choc de taux généralisé}{ex:48:6}
813+Refaire la simulation de la \cref{sec:48:montecarlo} avec une corrélation du choc de taux de \num{0.90} entre régions et de \num{0.95} dans une région, les autres paramètres inchangés (\num{10000} tirages, graine \texttt{20261031}), à l'aide de la fonction \texttt{simuler\_portefeuille} du script du chapitre. Rapporter l'intervalle à \pct{90}, le coefficient de variation, la VaR à \pct{95} et le ratio de diversification, et la probabilité que le ratio prêt-valeur dépasse \pct{75}. Comparer avec le régime déclaré et avec la borne de corrélation parfaite, et expliquer pourquoi le ratio de diversification se rapproche de 1 sans l'atteindre.
814+\end{exercice}
815+
816+\begin{exercice}[3]{Céder les immeubles en zone inondable}{ex:48:7}
817+Le fonds envisage de céder les trois immeubles en zone inondable (P36, P41, P43) à leur indication individuelle, moins \pct{2} de frais de vente, et de rembourser leur dette. Calculer le produit net de cession, le revenu net perdu et le taux pondéré des immeubles cédés ; puis, pour le portefeuille restant, la valeur, le taux pondéré, le ratio prêt-valeur, le ratio de couverture agrégé (480~mois), et, par simulation (mêmes paramètres et même graine), le coefficient de variation, la VaR à \pct{95} et le ratio de diversification. La cession réduit-elle le risque du portefeuille ? Dans quelle mesure la réponse dépend-elle de ce que la simulation capte et de ce qu'elle ne capte pas (restriction du droit de reconstruire, assurabilité) ? Distinguer, dans la conclusion, ce qui relève de la valeur marchande et ce qui relève de la valeur d'investissement du fonds.
818+\end{exercice}
819+
820+\section*{Pour aller plus loin}
821+
822+Sur l'évaluation de masse et son contrôle, le Standard on Mass Appraisal of Real Property et le Standard on Ratio Studies de l'IAAO \parencite{iaaomass2025,iaaoratio2013} restent les références normatives ; \textcite{gloudemansAlmy2011} en donnent le traitement pédagogique le plus complet, et \textcite{mccluskey2013} une perspective internationale. Sur le lissage et le bruit des évaluations individuelles qui composent un portefeuille, \textcite{geltner1993} et \textcite{claytonGeltnerHamilton2001} sont indispensables, et \textcite{fisherGeltnerWebb1994} comparent les méthodes de construction d'indices de valeur à partir d'évaluations. Sur la diversification et le risque de portefeuille, Markowitz (1952), cité en note à la \cref{sec:48:allocation}, est le texte fondateur ; \textcite{geltnerMillerClaytonEichholtz2014} et \textcite{baumCrosbyDevaney2021} transposent le cadre moyenne-variance à l'immobilier et en discutent les limites ; Artzner, Delbaen, Eber et Heath (1999), cités en note à la \cref{sec:48:montecarlo}, formalisent les propriétés qu'une mesure de risque devrait posséder et expliquent pourquoi la valeur à risque n'est pas toujours sous-additive. Sur la simulation de Monte-Carlo en évaluation, \textcite{hoesliJaniBender2006}, \textcite{frenchGabrielli2005} et \textcite{frenchGabrielli2004} proposent des protocoles de déclaration de l'incertitude, et \textcite{pyhrr1973} la lecture historique. Sur les déterminants des taux de capitalisation et leur composante commune, \textcite{sivitanidouSivitanides1999}, \textcite{sivitanidesTortoWheaton2003}, \textcite{chervachidzeWheaton2013} et \textcite{ducaLing2020} fondent l'hypothèse d'un facteur national dominant. Sur l'effet des zones inondables et de la contamination, les travaux de \textcite{binPolasky2004}, \textcite{bernsteinGustafsonLewis2019} et \textcite{hinoBurke2021}, et les recensions de \textcite{jackson2001} et \textcite{simonsSaginor2006}, sont discutés au \cref{ch:43}. Les textes primaires québécois à relire sont le Code civil (art.~1851 à 1978.4) \parencite{ccq}, la Loi sur la qualité de l'environnement (art.~31.42 à 31.69 et 46.0.2) et le cadre réglementaire des zones inondables en vigueur depuis le 1\textsuperscript{er} mars 2026 \parencite{lqe,zonesInond2026,rmun2026}, et les Normes de pratique professionnelle de l'OEAQ \parencite{oeaqNormes}.
added references/lib-ch40.bib +62 −0
@@ -0,0 +1,62 @@
1+% references/lib-ch40.bib — chapitre 40 (Monte-Carlo et stress tests)
2+% Le chapitre ne cite QUE des clés déjà présentes dans references/library.bib (règle de collision des briefs de phase 4) :
3+% pyhrr1973, wofford1978, frenchGabrielli2004, frenchGabrielli2005, hoesliJaniBender2006, byrne1996, sivitanidouSivitanides1999,
4+% chervachidzeWheaton2013, ducaLing2020, baumCrosbyDevaney2021, geltnerMillerClaytonEichholtz2014, gelman2013, osfiMqr, bdc20261028,
5+% bdctauxhypothecaires2026, oeaqNormes.
6+% Les quatre entrées ci-dessous sont les références fondatrices des méthodes exposées (hypercube latin, indices de Sobol, mesures de
7+% risque cohérentes, CVaR). Elles ont été VÉRIFIÉES le 2026-10-31 (DOI résolus ; métadonnées Crossref / Risk.net ; voir ch40-registry.csv)
8+% mais ne sont PAS citées dans ch40.tex ; l'orchestrateur peut les fusionner dans library.bib puis remplacer, aux §40.4, §40.5 et §40.6,
9+% les formules « résultat classique » par \parencite{mckayBeckmanConover1979}, \parencite{sobol2001}, \parencite{artznerDelbaenEberHeath1999},
10+% \parencite{rockafellarUryasev2000}.
11+
12+@article{mckayBeckmanConover1979,
13+ author = {McKay, M. D. and Beckman, R. J. and Conover, W. J.},
14+ title = {Comparison of Three Methods for Selecting Values of Input Variables in the Analysis of Output from a Computer Code},
15+ journaltitle = {Technometrics},
16+ year = {1979},
17+ volume = {21},
18+ number = {2},
19+ pages = {239--245},
20+ doi = {10.1080/00401706.1979.10489755},
21+ urldate = {2026-10-31},
22+ note = {Référence fondatrice de l'échantillonnage par hypercube latin ; métadonnées vérifiées via Crossref (page éditeur inaccessible, HTTP 403)}
23+}
24+
25+@article{sobol2001,
26+ author = {Sobol', I. M.},
27+ title = {Global Sensitivity Indices for Nonlinear Mathematical Models and Their {Monte Carlo} Estimates},
28+ journaltitle = {Mathematics and Computers in Simulation},
29+ year = {2001},
30+ volume = {55},
31+ number = {1--3},
32+ pages = {271--280},
33+ doi = {10.1016/S0378-4754(00)00270-6},
34+ urldate = {2026-10-31},
35+ note = {Indices de sensibilité globale et estimateurs Monte-Carlo ; métadonnées vérifiées via Crossref}
36+}
37+
38+@article{artznerDelbaenEberHeath1999,
39+ author = {Artzner, Philippe and Delbaen, Freddy and Eber, Jean-Marc and Heath, David},
40+ title = {Coherent Measures of Risk},
41+ journaltitle = {Mathematical Finance},
42+ year = {1999},
43+ volume = {9},
44+ number = {3},
45+ pages = {203--228},
46+ doi = {10.1111/1467-9965.00068},
47+ urldate = {2026-10-31},
48+ note = {Axiomes des mesures de risque cohérentes ; non sous-additivité de la VaR ; métadonnées vérifiées via Crossref}
49+}
50+
51+@article{rockafellarUryasev2000,
52+ author = {Rockafellar, R. Tyrrell and Uryasev, Stanislav},
53+ title = {Optimization of Conditional Value-at-Risk},
54+ journaltitle = {Journal of Risk},
55+ year = {2000},
56+ volume = {2},
57+ number = {3},
58+ pages = {21--41},
59+ doi = {10.21314/JOR.2000.038},
60+ urldate = {2026-10-31},
61+ note = {CVaR (expected shortfall) ; page Risk.net consultée le 2026-10-31}
62+}
added references/lib-ch41.bib +17 −0
@@ -0,0 +1,17 @@
1+% Nouvelles références du chapitre 41 — à fusionner dans library.bib par l'orchestrateur.
2+% Non citée par \textcite/\parencite dans ch41.tex (règle : citer uniquement des clés déjà dans library.bib) ; le texte
3+% nomme « Cox, Ross et Rubinstein (1979) » en toutes lettres pour la paramétrisation u = e^{σ√Δt} de l'arbre binomial.
4+% Vérifiée le 2026-10-31 par résolution du DOI dans l'API Crossref (api.crossref.org/works/10.1016/0304-405X(79)90015-1) :
5+% titre, auteurs, revue, volume 7, numéro 3, pages 229-263, année 1979.
6+
7+@article{coxRossRubinstein1979,
8+ author = {Cox, John C. and Ross, Stephen A. and Rubinstein, Mark},
9+ title = {Option Pricing: A Simplified Approach},
10+ journaltitle = {Journal of Financial Economics},
11+ year = {1979},
12+ volume = {7},
13+ number = {3},
14+ pages = {229--263},
15+ doi = {10.1016/0304-405X(79)90015-1},
16+ urldate = {2026-10-31}
17+}
added references/lib-ch46.bib +25 −0
@@ -0,0 +1,25 @@
1+% ==============================================================================
2+% lib-ch46.bib — Chapitre 46 (Cas 2 : triplex à Québec), rédigé le 2026-10-31.
3+% Le chapitre ne cite par \parencite/\textcite que des clés déjà présentes dans references/library.bib :
4+% oeaqNormes, deontOEAQ, ivs2025, cuspap2026, ccq, lfm, ldmi, loiTAL, loiCourtage, loiInteret, loi65_2024, loi31_2024,
5+% reglCriteresFixation, decret1455_2025, talIndices2026, oaciqFormulaireDV, oaciqContexteDV, vqtaux2026, vqrole2025,
6+% quebecrole2025, villeQuebecMutations, quebecMutations, taxescolaire2026, vqzonage, apciqt32026, apciqbaroquebec2026,
7+% jlr202608, schlLocatif2025, schlrmltables2025, schlfraisexploitation2015, bacprimes2025, cbrecaprates2026q3,
8+% bdc20261028, bdcvalet, bdctauxhypothecaires2026, statcanipc, statcanIPCB, fincan2024hypo, osfiMqr,
9+% desrosiersTheriaultVilleneuve2000, theriaultDesrosiersVilleneuveKestens2003, kestensTheriaultDesrosiers2006,
10+% shillingSirmansDombrow1991, hultenWykoff1981, appraisal2026, appraisalCdn, fisherMartin2007, isakson1986, vandell1991,
11+% kummerowGalfalvy2002, halvorsenPalmquist1980, kennedy1981, poterba1984, himmelbergMayerSinai2005,
12+% geltnerMillerClaytonEichholtz2014, arnott1995, kholodilin2024, smith1988, diamondMcquadeQian2019.
13+%
14+% UNE NOUVELLE SOURCE VÉRIFIÉE (page consultée le 2026-10-31 ; non citée par \parencite dans le chapitre tant que ce fichier
15+% n'est pas fusionné dans library.bib — le texte la désigne en toutes lettres et le registre ch46-registry.csv la consigne) :
16+% ==============================================================================
17+
18+@online{talReprise2026,
19+ author = {{Tribunal administratif du logement}},
20+ title = {Reprise de logement},
21+ year = {2026},
22+ url = {https://www.tal.gouv.qc.ca/fr/droit-du-locateur-de-mettre-fin-au-bail/reprise-de-logement},
23+ urldate = {2026-10-31},
24+ note = {Délais de l'avis de reprise (art.~1960 C.c.Q.) : au moins six mois avant la fin d'un bail de plus de six mois, un mois pour un bail de six mois ou moins, six mois avant la date prévue pour un bail à durée indéterminée ; réponse du locataire dans le mois (silence = refus réputé) ; demande du locateur au Tribunal dans le mois du refus ; le locateur doit démontrer qu'il entend réellement reprendre le logement}
25+}
added references/lib-ch48.bib +34 −0
@@ -0,0 +1,34 @@
1+% Nouvelles références du chapitre 48 — vérifiées dans l'API Crossref (api.crossref.org/works/<DOI>) le 2026-10-31 ; à fusionner dans library.bib par l'orchestrateur.
2+% NON citées par clé dans ch48.tex (règle : citer uniquement des clés déjà présentes dans library.bib) : mentionnées en toutes lettres avec DOI en note de bas de page (§48.7 et §48.8).
3+% Toutes les autres citations du chapitre utilisent des clés existantes de references/library.bib : oeaqNormes, deontOEAQ, ivs2025, ccq, iaaomass2025, iaaoratio2013,
4+% cbrecaprates2026q3, schlLocatif2025, schlrmltables2025, statcanpoprmr, isqmunicipalites2026, isqprojections2026, apciqt32026, bdc20261028, bdcvalet, bdctauxhypothecaires2026,
5+% schlaphselect, osfiMqr, zonesInond2026, inondcartes, inondtravaux, rmun2026, lqe, rprt, repertoiretc, sivitanidouSivitanides1999, sivitanidesTortoWheaton2003,
6+% chervachidzeWheaton2013, ducaLing2020, halvorsenPalmquist1980, white1980, duan1983, geltner1993, claytonGeltnerHamilton2001, fisherGeltnerWebb1994, gordonShapiro1956,
7+% geltnerMillerClaytonEichholtz2014, baumCrosbyDevaney2021, hoesliJaniBender2006, frenchGabrielli2004, frenchGabrielli2005, pyhrr1973, binPolasky2004, harrisonSmershSchwartz2001,
8+% binKruseLandry2008, bernsteinGustafsonLewis2019, hinoBurke2021, simonsSaginor2006, jackson2001, gloudemansAlmy2011, mccluskey2013.
9+
10+@article{markowitz1952,
11+ author = {Markowitz, Harry},
12+ title = {Portfolio Selection},
13+ journaltitle = {The Journal of Finance},
14+ year = {1952},
15+ volume = {7},
16+ number = {1},
17+ pages = {77--91},
18+ doi = {10.2307/2975974},
19+ urldate = {2026-10-31},
20+ note = {Frontière moyenne-variance (eq. 48.frontiere) ; vérifié Crossref 2026-10-31 (la notice Crossref ne donne que la page de début, 77 ; pagination 77-91 selon la revue)}
21+}
22+
23+@article{artznerDelbaenEberHeath1999,
24+ author = {Artzner, Philippe and Delbaen, Freddy and Eber, Jean-Marc and Heath, David},
25+ title = {Coherent Measures of Risk},
26+ journaltitle = {Mathematical Finance},
27+ year = {1999},
28+ volume = {9},
29+ number = {3},
30+ pages = {203--228},
31+ doi = {10.1111/1467-9965.00068},
32+ urldate = {2026-10-31},
33+ note = {Axiomes des mesures de risque cohérentes ; non-sous-additivité générale de la VaR (prop. 48.1) ; vérifié Crossref 2026-10-31}
34+}
modified references/library.bib +86 −0
@@ -5371,3 +5371,89 @@
5371 urldate = {2026-10-31}, 5371 urldate = {2026-10-31},
5372 note = {Rétrécissement empirique (James–Stein) ; vérifié Crossref} 5372 note = {Rétrécissement empirique (James–Stein) ; vérifié Crossref}
5373 } 5373 }
5374+
5375+@article{mckayBeckmanConover1979,
5376+ author = {McKay, M. D. and Beckman, R. J. and Conover, W. J.},
5377+ title = {Comparison of Three Methods for Selecting Values of Input Variables in the Analysis of Output from a Computer Code},
5378+ journaltitle = {Technometrics},
5379+ year = {1979},
5380+ volume = {21},
5381+ number = {2},
5382+ pages = {239--245},
5383+ doi = {10.1080/00401706.1979.10489755},
5384+ urldate = {2026-10-31},
5385+ note = {Référence fondatrice de l'échantillonnage par hypercube latin ; métadonnées vérifiées via Crossref (page éditeur inaccessible, HTTP 403)}
5386+}
5387+
5388+@article{sobol2001,
5389+ author = {Sobol', I. M.},
5390+ title = {Global Sensitivity Indices for Nonlinear Mathematical Models and Their {Monte Carlo} Estimates},
5391+ journaltitle = {Mathematics and Computers in Simulation},
5392+ year = {2001},
5393+ volume = {55},
5394+ number = {1--3},
5395+ pages = {271--280},
5396+ doi = {10.1016/S0378-4754(00)00270-6},
5397+ urldate = {2026-10-31},
5398+ note = {Indices de sensibilité globale et estimateurs Monte-Carlo ; métadonnées vérifiées via Crossref}
5399+}
5400+
5401+@article{artznerDelbaenEberHeath1999,
5402+ author = {Artzner, Philippe and Delbaen, Freddy and Eber, Jean-Marc and Heath, David},
5403+ title = {Coherent Measures of Risk},
5404+ journaltitle = {Mathematical Finance},
5405+ year = {1999},
5406+ volume = {9},
5407+ number = {3},
5408+ pages = {203--228},
5409+ doi = {10.1111/1467-9965.00068},
5410+ urldate = {2026-10-31},
5411+ note = {Axiomes des mesures de risque cohérentes ; non sous-additivité de la VaR ; métadonnées vérifiées via Crossref}
5412+}
5413+
5414+@article{rockafellarUryasev2000,
5415+ author = {Rockafellar, R. Tyrrell and Uryasev, Stanislav},
5416+ title = {Optimization of Conditional Value-at-Risk},
5417+ journaltitle = {Journal of Risk},
5418+ year = {2000},
5419+ volume = {2},
5420+ number = {3},
5421+ pages = {21--41},
5422+ doi = {10.21314/JOR.2000.038},
5423+ urldate = {2026-10-31},
5424+ note = {CVaR (expected shortfall) ; page Risk.net consultée le 2026-10-31}
5425+}
5426+
5427+@article{coxRossRubinstein1979,
5428+ author = {Cox, John C. and Ross, Stephen A. and Rubinstein, Mark},
5429+ title = {Option Pricing: A Simplified Approach},
5430+ journaltitle = {Journal of Financial Economics},
5431+ year = {1979},
5432+ volume = {7},
5433+ number = {3},
5434+ pages = {229--263},
5435+ doi = {10.1016/0304-405X(79)90015-1},
5436+ urldate = {2026-10-31}
5437+}
5438+
5439+@online{talReprise2026,
5440+ author = {{Tribunal administratif du logement}},
5441+ title = {Reprise de logement},
5442+ year = {2026},
5443+ url = {https://www.tal.gouv.qc.ca/fr/droit-du-locateur-de-mettre-fin-au-bail/reprise-de-logement},
5444+ urldate = {2026-10-31},
5445+ note = {Délais de l'avis de reprise (art.~1960 C.c.Q.) : au moins six mois avant la fin d'un bail de plus de six mois, un mois pour un bail de six mois ou moins, six mois avant la date prévue pour un bail à durée indéterminée ; réponse du locataire dans le mois (silence = refus réputé) ; demande du locateur au Tribunal dans le mois du refus ; le locateur doit démontrer qu'il entend réellement reprendre le logement}
5446+}
5447+
5448+@article{markowitz1952,
5449+ author = {Markowitz, Harry},
5450+ title = {Portfolio Selection},
5451+ journaltitle = {The Journal of Finance},
5452+ year = {1952},
5453+ volume = {7},
5454+ number = {1},
5455+ pages = {77--91},
5456+ doi = {10.2307/2975974},
5457+ urldate = {2026-10-31},
5458+ note = {Frontière moyenne-variance (eq. 48.frontiere) ; vérifié Crossref 2026-10-31 (la notice Crossref ne donne que la page de début, 77 ; pagination 77-91 selon la revue)}
5459+}
modified solutions/ch37.tex +4 −4
Large diff (25 lines) is not loaded by default to keep the page fast.Load diff
modified solutions/ch46.tex +29 −0
Large diff (30 lines) is not loaded by default to keep the page fast.Load diff
modified solutions/ch48.tex +30 −1
Large diff (31 lines) is not loaded by default to keep the page fast.Load diff
modified sources/registry.csv +6 −0
Large diff (12 lines) is not loaded by default to keep the page fast.Load diff
modified tools/make_labels.py +4 −1
Large diff (11 lines) is not loaded by default to keep the page fast.Load diff
modified verification/calculations.csv +71 −0
Large diff (74 lines) is not loaded by default to keep the page fast.Load diff
added verification/chapters/ch37.md +45 −0
Large diff (45 lines) is not loaded by default to keep the page fast.Load diff
added verification/chapters/ch40-calculations.csv +27 −0
Large diff (27 lines) is not loaded by default to keep the page fast.Load diff
added verification/chapters/ch40-claims.csv +20 −0
Large diff (20 lines) is not loaded by default to keep the page fast.Load diff
added verification/chapters/ch40-registry.csv +5 −0
Large diff (5 lines) is not loaded by default to keep the page fast.Load diff
added verification/chapters/ch40.md +40 −0
Large diff (40 lines) is not loaded by default to keep the page fast.Load diff
added verification/chapters/ch41-calculations.csv +14 −0
Large diff (14 lines) is not loaded by default to keep the page fast.Load diff
added verification/chapters/ch41-claims.csv +22 −0
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
added verification/chapters/ch41-figures.csv +6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added verification/chapters/ch41-registry.csv +3 −0
Large diff (3 lines) is not loaded by default to keep the page fast.Load diff
added verification/chapters/ch41.md +40 −0
Large diff (40 lines) is not loaded by default to keep the page fast.Load diff
modified verification/chapters/ch44-claims.csv +2 −0
Large diff (5 lines) is not loaded by default to keep the page fast.Load diff
added verification/chapters/ch44.md +50 −0
Large diff (50 lines) is not loaded by default to keep the page fast.Load diff
added verification/chapters/ch46-calculations.csv +33 −0
Large diff (33 lines) is not loaded by default to keep the page fast.Load diff
added verification/chapters/ch46-figures.csv +6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added verification/chapters/ch48-figures.csv +8 −0
Large diff (8 lines) is not loaded by default to keep the page fast.Load diff
modified verification/claims.csv +42 −0
Large diff (45 lines) is not loaded by default to keep the page fast.Load diff
modified verification/figures.csv +17 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
Menu

Theme