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 81 sel = t["selection"]; m = t["modele"]; s = t["sujet"]
82 82 b17 = c17.base(); rec17 = c17.reconcilier(b17) # ch. 17 : poids inverse du brut, valeur pondérée
83 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 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 86 r24 = r20["cout"]["r24"] # ch. 24 complet (main() déjà exécuté silencieusement par le ch. 20)
89 87 devis, sujet, cn = c11.charger() # ch. 21 (coût neuf) et ch. 11 (fiche)
90 88 fiche = c11.fiche(devis, cn); trav = c11.travaux(devis, cn); dv = c11.depreciation(fiche, trav, cn)
91 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 91 d09 = c09.charger(); et09 = c09.etude(d09); ds09 = c09.dossier_sujet(d09, et09) # ch. 9
94 92 comp25 = _silencieux(c25.comparaison) # ch. 25 : comparaison directe des terrains
95 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 289 # 1. taxes : compte déclaré vs recalcul 2026, effet sur le RNE et sur la capitalisation au taux ajusté
290 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 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
293 − ex["2"] = D["reprise"]
292 + # 2. avis de reprise : calendrier et VA de l'écart selon la rotation
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 295 # 3. grille : refaire la cascade de Q0243 et vérifier brut/net
295 296 tab = D["grille"]["tableau"]; q = tab[tab["id_vente"] == "Q0243"].iloc[0].to_dict(); ex["3"] = q
296 297 # 4. capitalisation : taux médian, Q1, Q3, ajusté, comparables
297 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 302 # 5. financement : prix final, mise de fonds, paiement, TAM, coût net ; variante 2e étage
299 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 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 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 306 "droits_mutation": f["mutation"]["droits"], "liquidites": f["liquidites"]}
303 − # 6. pondérations alternatives
304 − ex["6"] = rec["alternatives"]
307 + # 5 bis : au prix de la promesse d'achat (895 000 $)
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 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 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 372 # ex4 : ratios IAAO sur le sous-ensemble montréalais
373 373 t = D["predites"]; m = t[t["rmr"] == "Montréal"]
374 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 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 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 380 inond = pf[pf["zone_inondable"] == 1]; reste = pf[pf["zone_inondable"] == 0]
381 381 mc6 = simuler_portefeuille(reste.reset_index(drop=True), dyn, reg, n=mc["n"], graine=GRAINE)
382 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 384 "rne_perdu": float(inond["rne_2026"].sum()), "taux_pondere_cede": float(inond["rne_2026"].sum() / inond["valeur_2026"].sum()),
385 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 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 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 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 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 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 27 def fig_arbre(res):
28 28 from sklearn.tree import plot_tree
29 29 arbre = res["ajustes"]["Arbre (profondeur 3)"]
30 − noms = [c37.ETIQUETTES[c].replace(" (m²)", " (m²)") for c in res["Xm"].columns]
31 − fig, ax = plt.subplots(figsize=(LARGEUR, 3.6))
32 − plot_tree(arbre, feature_names=noms, filled=False, impurity=False, rounded=True, fontsize=6, ax=ax, precision=3)
30 + COURTS = {"superficie": "Superficie (m²)", "terrain": "Terrain (m²)", "age": "Âge", "qualite": "Qualité", "garage": "Garage", "sous_sol": "Sous-sol", "piscine": "Piscine",
31 + "etages": "À étages", "dist_centre": "Dist. centre (km)", "lat": "Latitude", "lon": "Longitude", "mois": "Mois"}
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 35 for t in ax.texts:
34 36 s = t.get_text()
35 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 39 s = s.replace(" <= ", " ≤ ")
38 40 t.set_text(s); t.set_color(palette.ink)
39 41 bb = t.get_bbox_patch()
@@ -50,7 +52,7 @@ def fig_apprentissage(res):
50 52 ax.plot(it, cc["entrainement"], color=palette.cat[i], lw=1.0, ls="--", alpha=0.85)
51 53 ax.plot([cc["optimum"]], [cc["rmse_min"]], marker="o", ms=4, color=palette.cat[i])
52 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 56 ax.plot([], [], color=palette.ink2, lw=1.0, ls="--", label="erreur d'entraînement (tiretés)")
55 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 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 61 def fig_erreurs(res):
60 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 64 titres = {"aleatoire": "Plis aléatoires (10)", "spatial": "Blocs spatiaux par secteur (10)", "temporel": "Prospectif : ventes de 2026"}
63 65 for ax, sch in zip(axes, ["aleatoire", "spatial", "temporel"]):
64 66 data = []
@@ -68,10 +70,9 @@ def fig_erreurs(res):
68 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 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 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 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 76 axes[0].set_ylabel("Erreur de prédiction hors échantillon (%)"); axes[0].set_ylim(-45, 45)
76 77 savefig(fig, "ch37/ch37-fig-erreurs.pdf")
77 78
@@ -119,14 +120,14 @@ def fig_pdp(res):
119 120 pdp = res["pdp"]; v = res["ventes"]
120 121 fig, axes = plt.subplots(1, 3, figsize=(LARGEUR, 2.9))
121 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 124 d = pdp[cle]; g = d["grille"]
124 125 for k, lab, col, ls in series:
125 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 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 128 ax.set_xlabel(xlab); ax.set_ylim(-42, 42)
128 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 131 savefig(fig, "ch37/ch37-fig-pdp.pdf")
131 132
132 133 def fig_waterfall(res, top: int = 8):
@@ -143,8 +144,8 @@ def fig_waterfall(res, top: int = 8):
143 144 cur += ph; ys.append(lab)
144 145 fin = math.exp(cur)
145 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(fin, len(etapes) - 0.2, f"prédiction : {fin:,.0f} $".replace(",", " "), ha="center", va="bottom", fontsize=7.5, color=palette.ink)
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)
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 149 ax.set_yticks(range(len(etapes))); ax.set_yticklabels(ys); ax.invert_yaxis()
149 150 ax.set_xlabel("Prix prédit (k$) — chaque contribution est un facteur multiplicatif exp(φ)")
150 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 106 def fig_lhs(D):
107 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 109 U1 = rng.random((n, 2)); U2 = m.hypercube_latin(n, 2, rng)
110 110 for ax, U, t in [(a1, U1, "Simple"), (a2, U2, "Hypercube latin")]:
111 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 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 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 115 ordre = ["moyenne", "ecart_type", "mediane", "p_V_2M", "q95", "q05"]; vals = [min(l.loc[k, "ratio_variance"], 300) for k in ordre]
116 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 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 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 68 for i, (_, r) in enumerate(comp5.iterrows()):
69 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)
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)
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)
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=":", 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, 15); ax.set_xlim(12, 31); ax.legend(loc="upper right", fontsize=6.3)
73 73 ax.set_title("A. Les cinq comparables dans la distribution", loc="left", fontsize=8.5)
74 74 ax = axes[1]
75 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 166 # 37.5 : dix prédictions d'un AVM
167 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 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 182 # 37.6 et 37.7 : chiffres cohérents avec les tableaux
170 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 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 94 assert rec["valeur_retenue"] == 143_400_000 and rec["rpv"] == pytest.approx(85_766_000 / 143_400_000)
95 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 168 \end{equation}
169 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 173 \begin{synthetique}
174 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 191 \begin{table}[htbp]
192 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 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 195 \toprule
196 − & \multicolumn{6}{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}
198 −Modèle & {RMSE$_{\ln}$} & {RMSE (\$)} & {MdAPE (\%)} & {COD} & {PRD} & {PRB} & {RMSE$_{\ln}$} & {COD} & {RMSE$_{\ln}$} & {Biais} & {COD} \\
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-5}\cmidrule(lr){6-7}\cmidrule(lr){8-10}
198 +Modèle & {RMSE$_{\ln}$} & {MdAPE (\%)} & {COD} & {PRB} & {RMSE$_{\ln}$} & {COD} & {RMSE$_{\ln}$} & {Biais} & {COD} \\
199 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 \\
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 \\
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 \\
203 −Gradient boosting & 0.0931 & 45644 & 6.22 & 7.42 & 1.009 & -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 \\
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 & 9.85 & 11.63 & -0.228 & 0.1537 & 12.12 & 0.1737 & -0.085 & 12.35 \\
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 & 6.22 & 7.42 & -0.088 & 0.0967 & 7.62 & 0.0950 & -0.034 & 7.41 \\
204 +XGBoost & 0.0921 & 6.09 & 7.33 & -0.081 & 0.0948 & 7.53 & 0.0937 & -0.029 & 7.50 \\
205 205 \bottomrule
206 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 208 \end{table}
209 209
210 210 \begin{figure}[htbp]
@@ -241,21 +241,21 @@ Arbre (profondeur 3) & 0.1737 & -8.5 & 0.931 & 12.35 \\
241 241
242 242 \begin{table}[htbp]
243 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 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 246 \toprule
247 247 Modèle & {Hull} & {Gatineau} & {Aylmer} & {Buckingham} & {Masson-Angers} & {COD} \\
248 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 250 Arbre (profondeur 3) & -1.2 & -20.7 & -6.7 & -2.5 & 12.9 & 15.65 \\
251 251 Forêt aléatoire & -1.0 & -4.9 & -8.5 & 2.5 & 12.8 & 10.21 \\
252 252 Gradient boosting & 1.3 & -6.8 & -7.1 & -0.6 & 7.2 & 8.59 \\
253 253 XGBoost & 1.0 & -6.7 & -8.3 & -2.2 & 10.2 & 8.87 \\
254 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 256 \bottomrule
257 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 259 \end{table}
260 260
261 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 268 \begin{table}[htbp]
269 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
271 −\begin{tabular}{@{}l S[table-format=1.4] S[table-format=1.4] S[table-format=1.4] l@{}}
270 +\centering\footnotesize\setlength{\tabcolsep}{4pt}
271 +\begin{tabularx}{\textwidth}{@{}l S[table-format=1.4] S[table-format=1.4] S[table-format=1.4] Y@{}}
272 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 274 \midrule
275 275 Superficie habitable & 0.1110 & 0.0348 & 0.0300 & dominante et sans substitut \\
276 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 281 Latitude & 0.0271 & 0.0039 & 0.0031 & idem \\
282 282 Terrain & 0.0204 & 0.0019 & 0.0013 & élasticité faible \\
283 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 285 Indicatrices de secteur (5) & {$\le$ 0,0016} & {$\approx$ 0} & {$\approx$ 0} & absorbées par lat., long., distance \\
286 286 \bottomrule
287 −\end{tabular}
287 +\end{tabularx}
288 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 289 \end{table}
290 290
@@ -297,10 +297,10 @@ Indicatrices de secteur (5) & {$\le$ 0,0016} & {$\approx$ 0} & {$\approx$ 0} & a
297 297
298 298 \begin{table}[htbp]
299 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}
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]@{}}
300 +\centering\footnotesize\setlength{\tabcolsep}{3.5pt}
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 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 304 \midrule
305 305 Hédonique (référence, \cref{ch:18}) & 13.3627 & 635821 & 1.0034 & 637953 & 0.0 \\
306 306 XGBoost & 13.3244 & 611957 & 1.0033 & 613976 & -3.8 \\
@@ -321,8 +321,8 @@ Type à étages & 0.0075 & 0.8 & {} & 601511 & {} \\
321 321 Sous-sol fini & 0.0056 & 0.6 & {} & 604889 & {} \\
322 322 Autres (qualité, latitude, piscine, distance, secteurs) & -0.0005 & -0.1 & {} & 604595 & {} \\
323 323 \bottomrule
324 −\end{tabular}
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.}
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) ; é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 326 \end{table}
327 327
328 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 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 372 \begin{table}[htbp]
373 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}
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]@{}}
374 +\centering\footnotesize\setlength{\tabcolsep}{3pt}
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 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 378 \midrule
379 −Boosting & 1 (souches) & 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 \\
381 −Boosting (référence) & 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 \\
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 \\
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 \\
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 \\
389 −Forêt (référence) & 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 \\
391 −Forêt & max. & 100 & {---} & 2 & bootstrap & 50 \% & 0.1065 & 7.52 & 8.58 & -0.194 \\
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 \\
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 \\
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 \\
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 \\
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 \\
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 \\
391 +Forêt & max. & 100 & {---} & 2 & bootstrap ; 50 \% & 0.1065 & 7.52 & 8.58 & -0.194 \\
392 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 394 \bottomrule
395 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 397 \end{table}
398 398
399 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 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 68 \begin{equation}\label{eq:39:normale-normale}
69 −\mu \mid \mathbf{y} \sim \mathcal N\!\left(m_n, s_n^2\right), \qquad
70 −\frac{1}{s_n^2} = \frac{1}{s_0^2} + \frac{n}{\sigma^2}, \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} .
69 +\begin{aligned}
70 +\mu \mid \mathbf{y} &\sim \mathcal N\!\left(m_n, s_n^2\right), \qquad
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 74 \end{equation}
73 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 89 \begin{proposition}{Postérieure normale--inverse-gamma}{39-posterieure}
88 90 Sous le modèle normal et l'a priori \eqref{eq:39:nig-prior}, la postérieure est NIG de paramètres
89 91 \begin{equation}\label{eq:39:posterieure}
90 −\mathbf{V}_n = \left(\mathbf{V}_0^{-1} + \mathbf{X}\T\mathbf{X}\right)^{-1}, \quad
91 −\mathbf{m}_n = \mathbf{V}_n\left(\mathbf{V}_0^{-1}\mathbf{m}_0 + \mathbf{X}\T\mathbf{y}\right), \quad
92 −a_n = a_0 + \frac{n}{2}, \quad
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).
92 +\begin{aligned}
93 +\mathbf{V}_n &= \left(\mathbf{V}_0^{-1} + \mathbf{X}\T\mathbf{X}\right)^{-1}, &
94 +\mathbf{m}_n &= \mathbf{V}_n\left(\mathbf{V}_0^{-1}\mathbf{m}_0 + \mathbf{X}\T\mathbf{y}\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 98 \end{equation}
95 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 100 \end{proposition}
97 101 \begin{proof}
98 102 Le produit de la vraisemblance et de l'a priori s'écrit, à une constante près,
99 −\[
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]
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]
102 −(\sigma^2)^{-(a_0+1)}\exp\!\left[-\frac{b_0}{\sigma^2}\right].
103 −\]
103 +\begin{align*}
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]
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] \\
106 +&\times (\sigma^2)^{-(a_0+1)}\exp\!\left[-\frac{b_0}{\sigma^2}\right].
107 +\end{align*}
104 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 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 155 \begin{proposition}{Rétrécissement de l'effet de secteur}{39-retrecissement}
152 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 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 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 161 \end{proposition}
158 162 \begin{proof}
159 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 265 \begin{table}[htbp]
262 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}
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]@{}}
267 +\centering\scriptsize\setlength{\tabcolsep}{2.5pt}
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 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 271 \midrule
268 −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 \\
270 −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 \\
272 −Â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 \\
274 −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 \\
276 −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 \\
278 −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 \\
280 −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 \\
282 −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 \\
272 +Constante & 13,2074 (0,0138) & 13.2074 & 0.0152 & 13.1777 & 13.2372 & {---} \\
273 +ln(superficie habitable / 140) & 0,5391 (0,0127) & 0.5391 & 0.0138 & 0.5121 & 0.5660 & 0.5500 \\
274 +ln(terrain / 560) & 0,0937 (0,0110) & 0.0937 & 0.0105 & 0.0730 & 0.1143 & 0.1000 \\
275 +Âge & $-$0,0051 (0,0006) & -0.0051 & 0.0006 & -0.0063 & -0.0039 & -0.0055 \\
276 +Âge² / 100 & 0,0026 (0,0006) & 0.0026 & 0.0007 & 0.0013 & 0.0040 & 0.0030 \\
277 +Qualité (écart à 3) & 0,0611 (0,0042) & 0.0611 & 0.0041 & 0.0531 & 0.0691 & 0.0600 \\
278 +Garage (places) & 0,0324 (0,0050) & 0.0324 & 0.0052 & 0.0222 & 0.0426 & 0.0350 \\
279 +Sous-sol fini & 0,0220 (0,0069) & 0.0220 & 0.0070 & 0.0083 & 0.0356 & 0.0300 \\
280 +Piscine & 0,0263 (0,0084) & 0.0263 & 0.0100 & 0.0067 & 0.0459 & 0.0200 \\
281 +À étages & 0,0301 (0,0069) & 0.0301 & 0.0069 & 0.0166 & 0.0436 & 0.0200 \\
282 +Distance au centre $>$ 3 km & $-$0,0036 (0,0027) & -0.0036 & 0.0027 & -0.0089 & 0.0018 & -0.0060 \\
283 +Secteur Gatineau & $-$0,0223 (0,0146) & -0.0223 & 0.0147 & -0.0511 & 0.0065 & -0.0215 \\
284 +Secteur Aylmer & 0,0854 (0,0231) & 0.0854 & 0.0237 & 0.0390 & 0.1318 & 0.1096 \\
285 +Secteur Buckingham & $-$0,2504 (0,0718) & -0.2504 & 0.0732 & -0.3940 & -0.1067 & -0.1844 \\
286 +Secteur Masson-Angers & $-$0,2631 (0,0672) & -0.2631 & 0.0669 & -0.3943 & -0.1320 & -0.2044 \\
287 +Mois depuis le 1\ier{} juillet 2024 & 0,0036 (0,0003) & 0.0036 & 0.0003 & 0.0031 & 0.0042 & 0.0036 \\
284 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 291 \bottomrule
287 292 \end{tabular}
288 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 303 \begin{table}[htbp]
299 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}
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]@{}}
305 +\centering\footnotesize\setlength{\tabcolsep}{3pt}
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 307 \toprule
303 308 Approche & {Médiane (\$)} & {Moyenne (\$)} & {Borne 5 \%} & {Borne 95 \%} & {Borne 2,5 \%} & {Borne 97,5 \%} \\
304 309 \midrule
305 −Fréquentiste (ch. 18 : normale, HC1, Duan) & 635821 & 637953 & 554095 & 729601 & 539682 & 749087 \\
306 −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 \\
310 +Fréquentiste (ch. 18 : normale, HC1, Duan) & 635821 & 637 953 & 554095 & 729601 & 539682 & 749087 \\
311 +Conjuguée, a priori de référence (Student, 584 ddl) & 635821 & n'existe pas & 553979 & 729754 & 539504 & 749334 \\
312 +Hiérarchique (8 000 tirages de Gibbs) & 634748 & 637 727 & 554564 & 729004 & 540309 & 749431 \\
308 313 \bottomrule
309 314 \end{tabular}
310 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 325 \begin{table}[htbp]
321 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}
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]@{}}
327 +\centering\scriptsize\setlength{\tabcolsep}{2pt}
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 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 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 \\
328 −Marché voisin, $\kappa = 1$ & {0,543 (0,016)} & {0,062 (0,005)} & {0,027 (0,006)} & 0.0829 & 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 \\
330 −Marché voisin, $\kappa = 16$ & {0,568 (0,042)} & {0,076 (0,013)} & {0,019 (0,016)} & 0.0823 & 637196 & 539063 & 753193 & 33.6 \\
332 +Référence, 40 ventes ($\nu = 28$) & 0,611 (0,067) & 0,101 (0,022) & 650965 & 535079 & 791950 & 39.5 \\
333 +Voisin, $\kappa = 1$ & 0,543 (0,016) & 0,062 (0,005) & 630978 & 534942 & 744255 & 33.2 \\
334 +Voisin, $\kappa = 4$ & 0,550 (0,028) & 0,067 (0,008) & 633734 & 536880 & 748059 & 33.3 \\
335 +Voisin, $\kappa = 16$ & 0,568 (0,042) & 0,076 (0,013) & 637196 & 539063 & 753193 & 33.6 \\
331 336 \midrule
332 −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 \\
337 +Référence, Hull seul (186 ventes) & 0,540 (0,025) & --- & 623894 & 526381 & 739471 & 34.2 \\
338 +Référence, 600 ventes & 0,539 (0,014) & 0,061 (0,004) & 635821 & 539504 & 749334 & 33.0 \\
334 339 \bottomrule
335 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 342 \end{table}
338 343
339 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 351 \begin{table}[htbp]
347 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 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 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 359 \midrule
353 360 $\sigma$ & 0.0832 & 0.0024 & 0.0785 & 0.0881 & 0.0830 & {---} & 0.0850 \\
354 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 363 $\alpha_{\text{Hull}}$ & 13.0896 & 0.0203 & 13.0504 & 13.1293 & {---} & {---} & {---} \\
357 364 \addlinespace
358 −$\alpha_{\text{Gatineau}} - \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 \\
360 −$\alpha_{\text{Buckingham}} - \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 \\
365 +$\alpha_{\text{Gat}} - \alpha_{\text{Hull}}$ & -0.0153 & 0.0151 & -0.0450 & 0.0141 & -0.0223 & 0.0146 & -0.0215 \\
366 +$\alpha_{\text{Ayl}} - \alpha_{\text{Hull}}$ & 0.0976 & 0.0243 & 0.0507 & 0.1449 & 0.0854 & 0.0231 & 0.1096 \\
367 +$\alpha_{\text{Buck}} - \alpha_{\text{Hull}}$ & -0.2073 & 0.0761 & -0.3562 & -0.0606 & -0.2504 & 0.0718 & -0.1844 \\
368 +$\alpha_{\text{MA}} - \alpha_{\text{Hull}}$ & -0.2240 & 0.0695 & -0.3602 & -0.0894 & -0.2631 & 0.0672 & -0.2044 \\
362 369 \addlinespace
363 370 $\beta_{\ln S}$ & 0.5395 & 0.0137 & 0.5130 & 0.5662 & 0.5391 & 0.0127 & 0.5500 \\
364 371 $\beta_{\text{qualité}}$ & 0.0613 & 0.0041 & 0.0533 & 0.0695 & 0.0611 & 0.0042 & 0.0600 \\
365 372 $\beta_{\text{dist}}$ & -0.0052 & 0.0028 & -0.0106 & 0.0004 & -0.0036 & 0.0027 & -0.0060 \\
366 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 376 \bottomrule
369 377 \end{tabular}
370 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 412 \begin{table}[htbp]
405 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 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 416 \toprule
409 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 435 \begin{table}[htbp]
428 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}
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]@{}}
437 +\centering\scriptsize\setlength{\tabcolsep}{3pt}
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 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 441 \midrule
434 −Regroupement complet (sans secteur) & 12 & 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 \\
436 −Effets aléatoires de secteur (hiérarchique) & {16 + 2} & 649.0 & 16.1 & 632.9 & 16.3 & {---} & 632.9 & -0.3 \\
442 +Regroupement complet (12 coefficients) & 510.2 & 12.4 & 497.8 & 17.5 & 497.8 & 497.8 & -135.3 \\
443 +Effets fixes, ch. 18 (16 coefficients) & 649.2 & 16.0 & 633.2 & 16.2 & 633.1 & 633.1 & 0.0 \\
444 +Effets aléatoires (16 coeff. + $\alpha_0$, $\tau$) & 649.0 & 16.1 & 632.9 & 16.3 & {---} & 632.9 & -0.3 \\
437 445 \bottomrule
438 446 \end{tabular}
439 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 454 \begin{table}[htbp]
447 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 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 458 \toprule
451 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 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 466 $\tau$ fixé à 0,157 (bayésien empirique) & 0.157 & {---} & {---} & -0.221 & 0.062 & 0.157 & -0.283 & 0.070 \\
459 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 470 \bottomrule
462 471 \end{tabular}
463 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 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 155 \begin{enumerate}
156 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 158 \item Tirer $N$ vecteurs d'intrants $\mathbf{X}^{(s)}$, $s = 1, \dots, N$.
159 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 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 284 \begin{table}[htbp]\centering
285 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 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 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 291 \midrule
291 292 Base (hypothèses du dossier) & 2208566 & 0.0 & 52.17 \\
292 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 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 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 29 \end{equation}
30 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 275 \begin{table}[htbp]
276 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 277 \centering
278 −\small
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]}
278 +\footnotesize\setlength{\tabcolsep}{3pt}
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 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 282 \midrule
283 283 S0 Maison actuelle (prédiction hédonique) & 637953 & {---} & {---} & {---} & {---} \\
284 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 \\
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 \\
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 \\
287 +Q Quadruplex, 4 $\times$ 85 m\textsuperscript{2}, décote 20 \% (non permis) & 428558 & 342846 & 1371384 & 2228 & 757540 \\
288 288 \bottomrule
289 289 \end{tabular}
290 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 299 \begin{table}[htbp]
300 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 301 \centering
302 −\small
303 −\begin{tabular}{lS[table-format=-7.0]S[table-format=-7.0]S[table-format=-7.0]}
302 +\footnotesize
303 +\begin{tabular}{>{\raggedright\arraybackslash}p{66mm}S[table-format=-7.0]S[table-format=-7.0]S[table-format=-7.0]}
304 304 \toprule
305 305 Poste & {U Maison neuve} & {D Duplex} & {T Triplex} \\
306 306 \midrule
@@ -308,18 +308,18 @@ Produit de vente $\mathit{GDV}$ & 720727 & 991307 & 1225460 \\
308 308 Frais de vente (4 \% du produit) & -28829 & -39652 & -49018 \\
309 309 Coûts directs et indirects $C$ & -361425 & -534734 & -668417 \\
310 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 312 Marge du promoteur $M$ (15 \% du produit) & -108109 & -148696 & -183819 \\
313 313 \midrule
314 314 Reste à la livraison & 185550 & 225936 & 275967 \\
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 \\
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} \\
317 317 \midrule
318 318 Valeur résiduelle du terrain $V_L$ & 158849 & 190541 & 229265 \\
319 319 \quad dont contribution pour fins de parcs (10 \%) & 15885 & 19054 & 22927 \\
320 320 Valeur résiduelle statique ($r_L = 0$) & 168682 & 205396 & 250879 \\
321 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 323 \bottomrule
324 324 \end{tabular}
325 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 349 \begin{figure}[htbp]
350 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}]
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 \$}};
353 −\node[n] (b) at (5.2,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 \$};
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 \$}};
356 −\node[n] (e) at (10.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 \$};
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{option : 2 837 \$}};
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 (4.7,-1.9) {$t = 1$, baisse : 979 914\\exercice 0 ; continuation 0\\valeur 0 \$};
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 (9.4,0) {$t = 2$, une hausse : 1 225 460\\exercice 0 \$};
357 +\node[n] (f) at (9.4,-3.4) {$t = 2$, deux baisses : 783 568\\exercice 0 \$};
358 358 \draw[fl] (a) -- node[above, sloped]{$q = 0{,}1915$} (b); \draw[fl] (a) -- node[below, sloped]{$1 - q = 0{,}8085$} (c);
359 359 \draw[fl] (b) -- node[above, sloped]{$q$} (d); \draw[fl] (b) -- node[below, sloped]{$1-q$} (e);
360 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 376 \begin{table}[htbp]
377 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 378 \centering
379 −\small
379 +\footnotesize\setlength{\tabcolsep}{4pt}
380 380 \begin{tabular}{llS[table-format=6.0]lS[table-format=6.0]S[table-format=-3.0]}
381 381 \toprule
382 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 32 \begin{table}[htbp]
33 33 \caption{Quatre catégories de travaux, leur effet sur la valeur et la mesure appropriée}\label{tab:44:taxonomie}
34 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 36 \toprule
37 37 Catégorie & Nature des travaux & Contribution attendue et mesure & Renvoi \\
38 38 \midrule
@@ -70,7 +70,7 @@ Deux de ces composantes intéressent directement le présent chapitre. Le VRC de
70 70
71 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 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 156 \begin{table}[htbp]
157 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 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 160 \toprule
161 161 Programme (administrateur) & Mesure et montant & Conditions et statut & Source, mise à jour \\
162 162 \midrule
@@ -173,7 +173,7 @@ Conversion abordable du mazout à la thermopompe (RNCan) & Jusqu'à \dollars{100
173 173
174 174 \begin{figure}[htbp]
175 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 177 \draw[brandGray, thick, -{Stealth[length=2mm]}] (0,0) -- (7.3,0);
178 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 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 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 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 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};
189 −\node[ev] at (0.1,-2.6) {}; \node[lab] at (0.2,-2.6) {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};
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,-3.1) {}; \node[lab] at (0.2,-3.1) {entrée en vigueur ou refonte};
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 191 \end{tikzpicture}
192 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 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 274 \begin{table}[htbp]
275 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 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 278 \toprule
279 279 Paramètre & Valeur & Statut, source \\
280 280 \midrule
@@ -292,7 +292,7 @@ Mesure B : isolation de l'entretoit & \emph{\msq{95} $\times$ \dollars{44} = \do
292 292
293 293 \begin{table}[htbp]
294 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 296 \begin{tabular}{lS[table-format=5.2]S[table-format=4.2]S[table-format=5.2]S[table-format=4.2]}
297 297 \toprule
298 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 362 \begin{table}[htbp]
363 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 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 366 \toprule
367 367 Lecture & {Montant (\$)} & {\% de la valeur} & Ce qu'elle mesure \\
368 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 74 \begin{table}[htbp]\centering
75 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 77 \toprule
78 78 Composante & Année & État observé & Conséquence \\
79 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 102 \begin{table}[htbp]\centering
103 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 105 \toprule
106 106 Logement & Type & {m\textsuperscript{2}} & {Contrat (\$/mois)} & {Marché (\$/mois)} & {Écart (\$)} & {Écart (\%)} & Bail depuis & {Anc. (ans)} & Stat. \\
107 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 170 \begin{table}[htbp]\centering
171 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 173 \toprule
174 174 Indicateur & Valeur & Source et période \\
175 175 \midrule
@@ -228,7 +228,7 @@ Les autres postes sont conservés aux montants justifiés, parce qu'ils reposent
228 228
229 229 \begin{table}[htbp]\centering
230 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 232 \toprule
233 233 Poste & {Déclaré (\$)} & Règle de normalisation & {Normalisé (\$)} & {\% du RBE} \\
234 234 \midrule
@@ -264,22 +264,22 @@ La méthode de comparaison est la méthode principale pour un triplex de quartie
264 264
265 265 \begin{table}[htbp]\centering
266 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 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 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 272 \midrule
273 −Q0187 & 2025-11-20 & 243 & 81.0 & 1950 & 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 \\
275 −Q0243 & 2026-07-24 & 247 & 82.3 & 1930 & 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 \\
277 −Q0235 & 2026-06-22 & 275 & 91.7 & 1923 & 1 & 1214 & 1327 & 0.915 & 922000 & 307333 & 21.10 & 2.68 \\
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 & 92 & 4 & 1092 & 1187 & 0.920 & 918000 & 306000 & 23.35 & 2.62 \\
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 & 69 & 2 & 1146 & 1197 & 0.957 & 910000 & 303333 & 22.05 & 3.09 \\
277 +Q0235 & 2026-06-22 & 275 & 91.7 & 103 & 1 & 1214 & 1327 & 0.915 & 922000 & 307333 & 21.10 & 2.68 \\
278 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 280 \bottomrule
281 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 283 \end{table}
284 284
285 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 289 \begin{table}[htbp]\centering
290 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 292 \toprule
293 293 Variable & {Coefficient} & {Erreur-type} & {$t$} & Lecture \\
294 294 \midrule
@@ -315,27 +315,30 @@ Maizerets (vs Limoilou) & -0.08715 & 0.02250 & -3.87 & sans objet \\
315 315
316 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 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 322 \end{equation}
320 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 325 \begin{table}[htbp]\centering
323 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 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 330 \midrule
328 −Q0187 & 262333 & 15134 & 13792 & -2215 & 0 & 11558 & 0 & 300603 & 16.3 & 14.6 & 0.220 \\
329 −Q0222 & 306000 & 6758 & -17175 & 18046 & -14930 & 12015 & 0 & 310715 & 22.5 & 1.5 & 0.159 \\
330 −Q0243 & 341000 & 2627 & 13306 & 25699 & 0 & 1217 & 0 & 383849 & 12.6 & 12.6 & 0.285 \\
331 −Q0207 & 303333 & 10752 & -5291 & -11125 & 15744 & 11349 & 0 & 324762 & 17.9 & 7.1 & 0.200 \\
332 −Q0235 & 307333 & 4324 & -9575 & 32836 & 32029 & 2640 & 0 & 369586 & 26.5 & 20.3 & 0.135 \\
331 +Q0187 & 262333 & 15134 & 13792 & -2215 & 0 & 11558 & 300603 & 16.3 & 14.6 & 0.220 \\
332 +Q0222 & 306000 & 6758 & -17175 & 18046 & -14930 & 12015 & 310715 & 22.5 & 1.5 & 0.159 \\
333 +Q0243 & 341000 & 2627 & 13306 & 25699 & 0 & 1217 & 383849 & 12.6 & 12.6 & 0.285 \\
334 +Q0207 & 303333 & 10752 & -5291 & -11125 & 15744 & 11349 & 324762 & 17.9 & 7.1 & 0.200 \\
335 +Q0235 & 307333 & 4324 & -9575 & 32836 & 32029 & 2640 & 369586 & 26.5 & 20.3 & 0.135 \\
333 336 \midrule
334 −\multicolumn{8}{@{}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} & & & & \\
337 +\multicolumn{7}{@{}l}{Prix par logement pondéré (poids $\propto 1/$brut) ; valeur $= 3 \times$ prix pondéré} & 340122 & & & 1.000 \\
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 339 \bottomrule
337 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 342 \end{table}
340 343
341 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 384 \begin{table}[htbp]\centering
382 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 387 \toprule
385 388 Taux & {Taux (\%)} & {Indication (\$)} & {Écart au retenu (\%)} \\
386 389 \midrule
@@ -519,7 +522,7 @@ Le \cref{tab:46:financement-sens} et la \cref{fig:46:occupation} font varier les
519 522
520 523 \begin{table}[htbp]\centering
521 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 526 \toprule
524 527 Scénario & {Mise de fonds} & {RPV (\%)} & {Prêt} & {Versement} & {Versement TAM} & {Coût net/mois} & {Hors capital} \\
525 528 \midrule
@@ -551,7 +554,7 @@ L'indication par le prix par logement ajusté, \dollars{1020367}, repose sur cin
551 554
552 555 \begin{table}[htbp]\centering
553 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 558 \toprule
556 559 Indication & {Valeur (\$)} & {Poids (\%)} & {Contribution (\$)} \\
557 560 \midrule
@@ -559,7 +562,7 @@ Comparaison — prix par logement ajusté (5 comparables) & 1020367 & 40 & 40814
559 562 Comparaison — multiplicateur médian des comparables (22,05) & 922396 & 35 & 322838 \\
560 563 Revenu — capitalisation directe au taux ajusté (3,02~\%) & 748126 & 25 & 187032 \\
561 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 566 \quad repère : indication pondérée du \cref{ch:32} (médianes, taxes déclarées) & 872426 & 0 & 0 \\
564 567 \quad contrôle : coût déprécié (hypothèses déclarées) & 473111 & 0 & 0 \\
565 568 \midrule
@@ -596,7 +599,7 @@ Le \cref{tab:46:ponderations} montre ce que d'autres pondérations raisonnables
596 599
597 600 \begin{table}[htbp]\centering
598 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 603 \toprule
601 604 Pondération & Par log. & MRB & Cap. & {Valeur (\$)} & {Écart (\%)} & Profil d'acheteur \\
602 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 536 \begin{equation}\label{eq:48:var}
537 537 \operatorname{VaR}_{0{,}95}(V) = V_0 - q_{0{,}05}(V),
538 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 541 \begin{proposition}\label{prop:48:diversification}
542 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 607 \end{tabular}
608 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 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 5371 urldate = {2026-10-31},
5372 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