Ch. 41 livré et validé (compilation isolée, tests, fusion des registres)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
61 changed files +1,375 −216
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