Ch. 22 livré et validé (compilation isolée, tests, fusion des registres)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
53 changed files +2,283 −128
modified
analysis/python/cases/ch20_reconciliation.py
+16 −1
@@ -270,6 +270,13 @@ def exercices(b: dict, bs: dict, co: dict, cb: dict) -> dict: | ||
| 270 | 270 | w1 = (1 / s1 ** 2) / (1 / s1 ** 2 + 1 / s2 ** 2) |
| 271 | 271 | out["ex1"] = {"w1": w1, "w2": 1 - w1, "V": w1 * V1 + (1 - w1) * V2, "sd": math.sqrt(1 / (1 / s1 ** 2 + 1 / s2 ** 2)), |
| 272 | 272 | "V_egal": 0.5 * (V1 + V2), "sd_egal": math.sqrt(0.25 * s1 ** 2 + 0.25 * s2 ** 2)} |
| 273 | + # ex. 2 : intervalle de confiance de la valeur (E[P|x]) contre intervalle de prédiction du prix (ch. 18) | |
| 274 | + lnp, var_est, sig2 = 13.3627, 0.00010, 0.0830 ** 2 | |
| 275 | + duan = 1.00335 | |
| 276 | + out["ex2"] = {"ic_bas": math.exp(lnp - 1.96 * math.sqrt(var_est)) * duan, "ic_haut": math.exp(lnp + 1.96 * math.sqrt(var_est)) * duan, | |
| 277 | + "ip_bas": math.exp(lnp - 1.96 * math.sqrt(var_est + sig2)), "ip_haut": math.exp(lnp + 1.96 * math.sqrt(var_est + sig2)), | |
| 278 | + "demi_largeur_ic_pct": 1.96 * math.sqrt(var_est), "demi_largeur_ip_pct": 1.96 * math.sqrt(var_est + sig2), | |
| 279 | + "rapport_largeurs": math.sqrt(var_est + sig2) / math.sqrt(var_est)} | |
| 273 | 280 | # ex. 3 : poids optimaux avec corrélation |
| 274 | 281 | out["ex3"] = {r: {"w1": poids_optimaux_deux(s1, s2, r), |
| 275 | 282 | "sd": math.sqrt(max(0.0, (lambda w: w ** 2 * s1 ** 2 + (1 - w) ** 2 * s2 ** 2 + 2 * w * (1 - w) * r * s1 * s2)(poids_optimaux_deux(s1, s2, r))))} |
@@ -283,6 +290,14 @@ def exercices(b: dict, bs: dict, co: dict, cb: dict) -> dict: | ||
| 283 | 290 | out["ex5"] = {"a": ct.valeur_par_cout(0.35 * b["V_comp"], CN, ct.depreciation_age_vie(CN, 22, 60))["valeur"], |
| 284 | 291 | "b": ct.valeur_par_cout(0.35 * b["V_comp"], CN, ct.depreciation_age_vie(CN, 28, 75))["valeur"], |
| 285 | 292 | "extraction": ct.extraction_depreciation_marche(b["V_hed"], 0.35 * b["V_comp"], CN, 28)} |
| 293 | + # ex. 6 : autres pondérations et comparaison élargie (k = 16) | |
| 294 | + V16 = float(r_el["valeur_ponderee"].iloc[-1]) if (r_el := _CACHE.get("el")) is not None else float(elargissement(b, bs["P_aj16"], bs["brut16"])["valeur_ponderee"].iloc[-1]) | |
| 295 | + w2 = np.array([0.30, 0.65, 0.05]); w1 = np.array([POIDS_RAISONNES["comparaison"], POIDS_RAISONNES["hedonique"], POIDS_RAISONNES["cout"]]) | |
| 296 | + V = np.array([b["V_comp"], b["V_hed"], co["valeur"]]); V16v = np.array([V16, b["V_hed"], co["valeur"]]) | |
| 297 | + a = ARRONDI_CONCLUSION | |
| 298 | + out["ex6"] = {"V_30_65_05": float(w2 @ V), "arrondi_30_65_05": round(float(w2 @ V) / a) * a, "V16": V16, | |
| 299 | + "V_k16_raisonnee": float(w1 @ V16v), "arrondi_k16": round(float(w1 @ V16v) / a) * a, | |
| 300 | + "V_60_35_05": float(np.array([0.60, 0.35, 0.05]) @ V)} | |
| 286 | 301 | # ex. 7 : incidence d'une hypothèse extraordinaire (eq. 10.incidence / 10.esperance) |
| 287 | 302 | out["ex7"] = {"V_H": cb["conclusion"], "V_nonH": cb["conclusion"] - 14000.0, "p": 0.7} |
| 288 | 303 | out["ex7"]["delta"] = out["ex7"]["V_H"] - out["ex7"]["V_nonH"] |
@@ -299,7 +314,7 @@ def tout(verbose: bool = False) -> dict: | ||
| 299 | 314 | b = base() |
| 300 | 315 | bs = bootstrap(b) |
| 301 | 316 | ex = exhaustif(b, bs["P_aj16"], bs["brut16"]) |
| 302 | − el = elargissement(b, bs["P_aj16"], bs["brut16"]) | |
| 317 | + el = elargissement(b, bs["P_aj16"], bs["brut16"]); _CACHE["el"] = el | |
| 303 | 318 | co = cout(b) |
| 304 | 319 | cb = combinaison(b, bs, co) |
| 305 | 320 | vt = verite(b) |
modified
analysis/python/cases/ch28_depenses.py
+18 −3
@@ -118,6 +118,18 @@ def equivalence_capex(hyp: dict, r: float | None = None, T: int | None = None) - | ||
| 118 | 118 | "moyenne_simple": total / T, "r": r, "T": T} |
| 119 | 119 | |
| 120 | 120 | |
| 121 | +# IPC Québec, ensemble, non désaisonnalisé, 2002 = 100 (Statistique Canada, tableau 18-10-0004-01, vecteur v41691783, | |
| 122 | +# data/raw/statcan_18100004/18100004.csv, diffusion du 2026-10-19) : avril 2015 = 124,7 ; septembre 2026 = 167,7. | |
| 123 | +IPC_QC_2015_04 = 124.7 | |
| 124 | +IPC_QC_2026_09 = 167.7 | |
| 125 | + | |
| 126 | + | |
| 127 | +def indexation_ipc(base: float = IPC_QC_2015_04, cible: float = IPC_QC_2026_09) -> dict: | |
| 128 | + """Facteur d'indexation du barème SCHL d'avril 2015 à septembre 2026 et barème indexé (entretien 500 $, salaires 300 $, réserve 100 $/log.).""" | |
| 129 | + f = cible / base | |
| 130 | + return {"facteur": f, "variation": f - 1, "entretien_500": 500 * f, "salaires_300": 300 * f, "salaires_125": 125 * f, "reserve_100": 100 * f} | |
| 131 | + | |
| 132 | + | |
| 121 | 133 | def classement(detail: pd.DataFrame, rbe: float, nb_log: int, surface_m2: float) -> dict: |
| 122 | 134 | d = detail.copy() |
| 123 | 135 | fixes = float(d.loc[d["type"] == "fixe", "normalise"].sum()); variables = float(d.loc[d["type"] == "variable", "normalise"].sum()) |
@@ -168,7 +180,9 @@ def sensibilites(base: dict, hyp: dict, R: float, nb_log: int = 12) -> dict: | ||
| 168 | 180 | rows_g.append({"gestion_pct": m, "gestion": m * rbe, "rne": noi, "V": noi / R, "dV_pct": noi / noi0 - 1}) |
| 169 | 181 | # dérivée : un dollar de dépense = 1/R dollars de valeur |
| 170 | 182 | return {"reserve": pd.DataFrame(rows_r), "taxe": pd.DataFrame(rows_t), "gestion": pd.DataFrame(rows_g), "dV_dDE": -1.0 / R, "V0": V0, |
| 171 | − "elasticite_rne_depenses": -(de_hors_res + res0) / noi0} | |
| 183 | + "elasticite_rne_depenses": -(de_hors_res + res0) / noi0, | |
| 184 | + # élasticité du RNE au RBE lorsque seule la gestion (4 % du RBE) s'ajuste : d RNE / d RBE = 1 − m ; élasticité = (1 − m) RBE / RNE | |
| 185 | + "elasticite_rne_rbe": 0.96 * rbe / noi0, "depenses_equiv_25pb": noi0 / R - noi0 / (R + 0.0025)} | |
| 172 | 186 | |
| 173 | 187 | |
| 174 | 188 | def cas2_detail() -> dict: |
@@ -211,7 +225,7 @@ def calculer() -> dict: | ||
| 211 | 225 | "loyer_median": float(comps["loyer_mensuel_moyen"].median())} |
| 212 | 226 | # revenu net historique 2025 « tel que déclaré » (sans gestion, sans indexation) pour l'erreur du RNE historique |
| 213 | 227 | dep_2025 = float(hist.loc["Total", 2025]); noi_hist = base["rbe"] - dep_2025 |
| 214 | − return {**d, "base": base, "R": R, "taux": tx, "nb_logements": nb, "surface_m2": surf, "historique": hist, "alternative": alt, "classement": cl, "detail": det, | |
| 228 | + return {**d, "base": base, "R": R, "taux": tx, "ipc": indexation_ipc(), "nb_logements": nb, "surface_m2": surf, "historique": hist, "alternative": alt, "classement": cl, "detail": det, | |
| 215 | 229 | "demo_reserve": demo, "reserve_composantes": res_comp, "equivalence_capex": eq_capex, "sensibilites": sens, "marche": marche, "comps_stats": comps_stats, |
| 216 | 230 | "rne_par_logement": base["rne"] / nb, "rne_par_m2": base["rne"] / surf, "rne_pct_rbe": base["rne"] / base["rbe"], |
| 217 | 231 | "depenses_2025_declarees": dep_2025, "rne_historique_2025": noi_hist, "ecart_normalisation": base["depenses_totales"] - dep_2025, |
@@ -300,7 +314,8 @@ if __name__ == "__main__": | ||
| 300 | 314 | print("\n=== Sensibilité réserve"); print(s["reserve"].round(4).to_string()) |
| 301 | 315 | print("\n=== Sensibilité taxes"); print(s["taxe"].round(4).to_string()) |
| 302 | 316 | print("\n=== Sensibilité gestion"); print(s["gestion"].round(4).to_string()) |
| 303 | − print(f"dV/dDE = {s['dV_dDE']:.3f} ; élasticité RNE/dépenses = {s['elasticite_rne_depenses']:.3f}") | |
| 317 | + print(f"dV/dDE = {s['dV_dDE']:.3f} ; élasticité RNE/dépenses = {s['elasticite_rne_depenses']:.3f} ; élasticité RNE/RBE = {s['elasticite_rne_rbe']:.3f} ; dépenses équivalentes à 25 pb = {s['depenses_equiv_25pb']*res['R']:.2f}") | |
| 318 | + print("IPC 2015-04 → 2026-09 :", {k: round(v, 4) for k, v in res["ipc"].items()}) | |
| 304 | 319 | c2 = res["cas2"] |
| 305 | 320 | print("\n=== Cas 2"); print(c2["detail"].round(2).to_string()) |
| 306 | 321 | print({k: (round(v, 4) if isinstance(v, float) else v) for k, v in c2["base"].items() if k != "detail"}) |
modified
analysis/python/cases/ch33_six_logements.py
+2 −0
@@ -79,6 +79,7 @@ def schl_ile_montreal() -> dict: | ||
| 79 | 79 | taille_rot = _lire_bloc(wb["Tableau 1.3.4"], bloc, 5, 5) |
| 80 | 80 | annee_inocc = _lire_bloc(wb["Tableau 1.2.1"], bloc, 5, 5) |
| 81 | 81 | annee_loyer = _lire_bloc(wb["Tableau 1.2.2"], bloc, 5, 4) |
| 82 | + annee_rot = _lire_bloc(wb["Tableau 1.2.3"], bloc, 5, 5) | |
| 82 | 83 | taille = taille_inocc[["categorie"]].copy() |
| 83 | 84 | taille["inoccupation_tous"] = taille_inocc["tous_2025"].values |
| 84 | 85 | taille["inoccupation_2024"] = taille_inocc["tous_2024"].values |
@@ -89,6 +90,7 @@ def schl_ile_montreal() -> dict: | ||
| 89 | 90 | annee["inoccupation_tous"] = annee_inocc["tous_2025"].values |
| 90 | 91 | annee["loyer_tous"] = annee_loyer.set_index("categorie").loc[annee["categorie"], "tous_2025"].values |
| 91 | 92 | annee["loyer_2ch"] = annee_loyer.set_index("categorie").loc[annee["categorie"], "deux_ch_2025"].values |
| 93 | + annee["rotation_tous"] = annee_rot.set_index("categorie").loc[annee["categorie"], "tous_2025"].values | |
| 92 | 94 | annee = annee[annee["categorie"] != "Inconnue"].reset_index(drop=True) |
| 93 | 95 | return {"taille": taille, "annee": annee} |
| 94 | 96 | |
modified
analysis/python/cases/ch35_indices.py
+5 −3
@@ -259,10 +259,12 @@ def sensibilite(v: pd.DataFrame, p: pd.DataFrame, vrai: np.ndarray, td: dict, gr | ||
| 259 | 259 | rb = h.ventes_repetees_bmn(sub["prix_1"], sub["prix_2"], sub["t_1"], sub["t_2"], T) |
| 260 | 260 | rc = h.ventes_repetees_case_shiller(sub["prix_1"], sub["prix_2"], sub["t_1"], sub["t_2"], T) |
| 261 | 261 | filt[lab] = {"n": len(sub), "n_flips": int(sub["flip"].sum()), "bmn": precision(rb["indice"], vrai), "cs": precision(rc["indice"], vrai), |
| 262 | − "bmn_indice": rb["indice"], "cs_indice": rc["indice"]} | |
| 262 | + "bmn_indice": rb["indice"], "cs_indice": rc["indice"], "cs_coef_variance": rc["coef_variance"]} | |
| 263 | 263 | sans_flip = p[~p["flip"]] |
| 264 | 264 | rb = h.ventes_repetees_bmn(sans_flip["prix_1"], sans_flip["prix_2"], sans_flip["t_1"], sans_flip["t_2"], T) |
| 265 | − filt["sans les reventes rénovées (oracle)"] = {"n": len(sans_flip), "n_flips": 0, "bmn": precision(rb["indice"], vrai), "bmn_indice": rb["indice"]} | |
| 265 | + rc = h.ventes_repetees_case_shiller(sans_flip["prix_1"], sans_flip["prix_2"], sans_flip["t_1"], sans_flip["t_2"], T) | |
| 266 | + filt["sans les reventes rénovées (oracle)"] = {"n": len(sans_flip), "n_flips": 0, "bmn": precision(rb["indice"], vrai), "cs": precision(rc["indice"], vrai), | |
| 267 | + "bmn_indice": rb["indice"], "cs_indice": rc["indice"], "cs_coef_variance": rc["coef_variance"]} | |
| 266 | 268 | out["filtre"] = filt |
| 267 | 269 | # (c) taille de l'échantillon : sous-échantillons aléatoires de paires, erreur-type du dernier trimestre et EAM (moyenne de 200 tirages) |
| 268 | 270 | rng = np.random.default_rng(graine); taille = {} |
@@ -358,7 +360,7 @@ def main(verbose: bool = True) -> dict: | ||
| 358 | 360 | for k, d in prec.items(): print(f" {k:11s}", {kk: round(x, 2) for kk, x in d.items()}) |
| 359 | 361 | print("== Ajustement de G0404 :", {k: (round(x, 1) if isinstance(x, float) else x) for k, x in adj.items()}) |
| 360 | 362 | print("== Sensibilité — révisions :", sens["revisions"]) |
| 361 | − for lab, d in sens["filtre"].items(): print(f" filtre {lab:36s} n={d['n']:3d} flips={d['n_flips']:2d} BMN EAM={d['bmn']['EAM_pct']:.2f} final={d['bmn']['croissance_totale_pct']:.2f}", f"CS EAM={d['cs']['EAM_pct']:.2f}" if "cs" in d else "") | |
| 363 | + for lab, d in sens["filtre"].items(): print(f" filtre {lab:36s} n={d['n']:3d} flips={d['n_flips']:2d} BMN EAM={d['bmn']['EAM_pct']:.2f} final={d['bmn']['croissance_totale_pct']:.2f} CS EAM={d['cs']['EAM_pct']:.2f} final={d['cs']['croissance_totale_pct']:.2f} var(ε) = {d['cs_coef_variance'][0]:.5f} + {d['cs_coef_variance'][1]:.5f}·gap") | |
| 362 | 364 | print(" taille :", sens["taille"]) |
| 363 | 365 | print(" fenêtre hédonique :", {k: (np.round(x, 2) if isinstance(x, np.ndarray) else round(x, 3)) for k, x in sens["fenetre"].items()}) |
| 364 | 366 | print("== Exercices :") |
modified
analysis/python/figures/ch34_calcul_tal.py
+4 −4
@@ -26,10 +26,10 @@ def main(): | ||
| 26 | 26 | ax.text(v + 0.5, bar.get_y() + bar.get_height() / 2, f"{v:.2f} $".replace(".", ","), va="center", fontsize=7, color=palette.ink) |
| 27 | 27 | ax.set_yticks(ys); ax.set_yticklabels([n for n, _ in comp], fontsize=7.5); ax.invert_yaxis() |
| 28 | 28 | ax.set_xlabel("Augmentation mensuelle (dollars par mois)") |
| 29 | − ax.set_xlim(0, 62) | |
| 30 | − ax.text(61, 0.05, f"Repère : écart au loyer de marché du logement 103 = {ex['ecart_marche']:.0f} $/mois ({ex['ecart_marche_pct']*100:.1f} % du loyer), hors échelle.".replace(".", ","), | |
| 31 | − ha="right", va="top", fontsize=7, color=palette.ink2) | |
| 32 | − ax.legend(loc="lower right", fontsize=7) | |
| 29 | + ax.set_xlim(0, 78) | |
| 30 | + ax.text(30, 4.0, f"Repère : écart au loyer de marché du logement 103 = {ex['ecart_marche']:.0f} $/mois ({ex['ecart_marche_pct']*100:.1f} % du loyer), hors échelle.".replace(".", ","), | |
| 31 | + ha="left", va="center", fontsize=7, color=palette.ink2) | |
| 32 | + ax.legend(loc="upper right", bbox_to_anchor=(1.0, 0.70), fontsize=7) | |
| 33 | 33 | savefig(fig, "ch34/ch34-fig-calcul-tal.pdf") |
| 34 | 34 | |
| 35 | 35 | if __name__ == "__main__": |
modified
analysis/python/figures/ch34_rotation.py
+5 −5
@@ -19,19 +19,19 @@ def main(): | ||
| 19 | 19 | fig, (a1, a2) = plt.subplots(1, 2, figsize=(LARGEUR, 3.0), gridspec_kw={"width_ratios": [1.6, 1]}) |
| 20 | 20 | for rho, col in ((0.05, palette.cat[2]), (0.15, palette.cat[0]), (0.25, palette.cat[1])): |
| 21 | 21 | q = c.ratio_espere(q0, rho, gc, gm, t); sim = c.simulation_ratio(q0, rho, gc, gm, T, n=20_000) |
| 22 | − a1.plot(t, q, color=col, label=f"rotation {rho*100:.0f} % : forme fermée") | |
| 23 | − a1.plot(t, sim, color=col, ls="none", marker="o", ms=3, mfc="white", mew=1.0) | |
| 24 | 22 | qi = c.ratio_limite(rho, gc, gm) |
| 23 | + a1.plot(t, q, color=col, label=f"rotation {rho*100:.0f} % : forme fermée (q∞ = {qi:.3f})".replace(".", ",")) | |
| 24 | + a1.plot(t, sim, color=col, ls="none", marker="o", ms=3, mfc="white", mew=1.0) | |
| 25 | 25 | a1.axhline(qi, color=col, lw=0.7, ls=":") |
| 26 | − a1.text(T + 0.2, qi, f"q∞ = {qi:.3f}".replace(".", ","), fontsize=7, color=palette.ink, va="center") | |
| 27 | 26 | a1.plot(t, c.ratio_sans_relocation(q0, gc, gm, t), color=palette.ink2, ls="--", lw=1.0, label="sans relocation (indexation seule)") |
| 28 | 27 | a1.plot([], [], color=palette.ink2, ls="none", marker="o", ms=3, mfc="white", label="simulation (20 000 trajectoires)") |
| 29 | 28 | a1.set_xlabel("Années depuis l'évaluation"); a1.set_ylabel("Loyer contractuel / loyer de marché (espérance)") |
| 30 | − a1.set_ylim(0.6, 1.02); a1.set_xlim(0, T + 3.5); a1.legend(fontsize=7, loc="lower right") | |
| 29 | + a1.set_ylim(0.45, 1.02); a1.set_xlim(0, T + 0.5); a1.legend(fontsize=7, loc="lower left") | |
| 31 | 30 | for rho, col in ((0.05, palette.cat[2]), (0.15, palette.cat[0]), (0.25, palette.cat[1])): |
| 32 | 31 | a2.plot(t, (1 - rho) ** t, color=col, label=f"rotation {rho*100:.0f} %") |
| 33 | − a2.set_xlabel("Années depuis l'évaluation"); a2.set_ylabel("Probabilité que le locataire initial soit en place") | |
| 32 | + a2.set_xlabel("Années depuis l'évaluation"); a2.set_ylabel("Locataire initial encore en place") | |
| 34 | 33 | a2.yaxis.set_major_formatter(FuncFormatter(lambda v, q: f"{v*100:.0f} %")); a2.set_ylim(0, 1.0); a2.legend(fontsize=7) |
| 34 | + fig.subplots_adjust(wspace=0.32) | |
| 35 | 35 | savefig(fig, "ch34/ch34-fig-rotation-esperee.pdf") |
| 36 | 36 | |
| 37 | 37 | if __name__ == "__main__": |
modified
analysis/python/figures/ch34_trajectoires.py
+2 −2
@@ -14,7 +14,7 @@ from cases import ch34_tal as c | ||
| 14 | 14 | def main(): |
| 15 | 15 | setup() |
| 16 | 16 | d = cas3.tout(); hyp = d["hyp"] |
| 17 | − fig, ax = plt.subplots(figsize=(LARGEUR, 3.3)) | |
| 17 | + fig, ax = plt.subplots(figsize=(LARGEUR, 3.9)) | |
| 18 | 18 | base = c.valeur_scenario(d)["projection"]; x = base["exercice"].values |
| 19 | 19 | ax.plot(x, base["rbp_marche"] / 1000, color=palette.ink2, lw=1.2, ls="--", label="RBP au loyer de marché (+3,5 %/an)") |
| 20 | 20 | for rho, col, lab in ((0.05, palette.cat[2], "rotation 5 % (1 logement/an)"), (0.15, palette.cat[0], "rotation 15 % (2 logements/an) — base du dossier"), (0.25, palette.cat[1], "rotation 25 % (3 logements/an)")): |
@@ -26,7 +26,7 @@ def main(): | ||
| 26 | 26 | ax.plot(x, pr["rbp"] / 1000, color=palette.cat[3], marker="s", ms=3, label="Encadrement renforcé (base 2 %, rotation 8 %, φ = 0,5)") |
| 27 | 27 | ax.set_xticks(x); ax.set_xlabel("Exercice"); ax.set_ylabel("Revenu brut potentiel (milliers de $)") |
| 28 | 28 | ax.yaxis.set_major_formatter(FuncFormatter(lambda v, q: fmt_milliers(v))) |
| 29 | − ax.legend(loc="upper left", fontsize=7.2) | |
| 29 | + ax.legend(loc="upper center", bbox_to_anchor=(0.5, -0.16), fontsize=7.2, ncol=2) | |
| 30 | 30 | savefig(fig, "ch34/ch34-fig-trajectoires-rbp.pdf") |
| 31 | 31 | |
| 32 | 32 | if __name__ == "__main__": |
modified
analysis/python/figures/ch34_valeur_scenarios.py
+7 −7
@@ -17,7 +17,7 @@ def main(): | ||
| 17 | 17 | d = cas3.tout() |
| 18 | 18 | g = c.grille_scenarios(d); s = c.scenarios_complementaires(d).set_index("scenario") |
| 19 | 19 | rotations = sorted(g["rotation"].unique()); bases = sorted(g["base"].unique()) |
| 20 | − fig, ax = plt.subplots(figsize=(LARGEUR, 3.3)) | |
| 20 | + fig, ax = plt.subplots(figsize=(LARGEUR, 3.7)) | |
| 21 | 21 | w = 0.26; xs = np.arange(len(rotations)) |
| 22 | 22 | for j, b in enumerate(bases): |
| 23 | 23 | vals = [g[(g["rotation"] == r) & (g["base"] == b)]["valeur"].iloc[0] / 1e6 for r in rotations] |
@@ -25,16 +25,16 @@ def main(): | ||
| 25 | 25 | for bar, v in zip(bars, vals): |
| 26 | 26 | ax.text(bar.get_x() + bar.get_width() / 2, v + 0.012, f"{v:.3f}".replace(".", ","), ha="center", va="bottom", fontsize=7, color=palette.ink) |
| 27 | 27 | V0 = d["dcf"]["valeur"] / 1e6; Vcap = d["valeur_capitalisation"] / 1e6 |
| 28 | − ax.axhline(V0, color=palette.ink2, lw=0.9, ls="--"); ax.text(2.42, V0 + 0.01, "base du dossier", fontsize=7, color=palette.ink2, ha="right") | |
| 29 | − ax.axhline(Vcap, color=palette.ink2, lw=0.9, ls=":"); ax.text(2.42, Vcap - 0.045, "capitalisation directe (4,415 %)", fontsize=7, color=palette.ink2, ha="right") | |
| 30 | 28 | v_idx = s.loc["Indexation seule (aucune relocation)", "valeur"] / 1e6 |
| 31 | 29 | v_ren = s.loc["Encadrement renforcé (base 2 %, rotation 8 %, φ = 0,5, marché 3 %)", "valeur"] / 1e6 |
| 32 | − ax.axhline(v_idx, color=palette.cat[3], lw=0.9, ls="-."); ax.text(-0.42, v_idx + 0.01, "indexation seule, sans relocation", fontsize=7, color=palette.cat[3]) | |
| 33 | − ax.axhline(v_ren, color=palette.cat[3], lw=0.9, ls="-"); ax.text(-0.42, v_ren + 0.01, "encadrement renforcé", fontsize=7, color=palette.cat[3]) | |
| 30 | + ax.axhline(V0, color=palette.ink2, lw=0.9, ls="--", label=f"valeur de base du dossier ({fmt_milliers(V0*1e6)} $)") | |
| 31 | + ax.axhline(Vcap, color=palette.ink2, lw=0.9, ls=":", label=f"capitalisation directe au taux médian ({fmt_milliers(Vcap*1e6)} $)") | |
| 32 | + ax.axhline(v_idx, color=palette.cat[3], lw=0.9, ls="-.", label=f"indexation seule, sans relocation ({fmt_milliers(v_idx*1e6)} $)") | |
| 33 | + ax.axhline(v_ren, color=palette.cat[3], lw=0.9, ls="-", label=f"encadrement renforcé ({fmt_milliers(v_ren*1e6)} $)") | |
| 34 | 34 | ax.set_xticks(xs); ax.set_xticklabels([f"rotation {r*100:.0f} %\n({int(round(r*12))} logement{'s' if round(r*12) > 1 else ''}/an)" for r in rotations]) |
| 35 | − ax.set_ylabel("Valeur DCF (millions de $)"); ax.set_ylim(1.6, 2.45) | |
| 35 | + ax.set_ylabel("Valeur DCF (millions de $)"); ax.set_ylim(1.6, 2.85) | |
| 36 | 36 | ax.yaxis.set_major_formatter(FuncFormatter(lambda v, q: f"{v:.1f}".replace(".", ","))) |
| 37 | − ax.legend(loc="upper left", fontsize=7.5, ncol=3) | |
| 37 | + ax.legend(loc="upper left", fontsize=7, ncol=2) | |
| 38 | 38 | savefig(fig, "ch34/ch34-fig-valeur-scenarios.pdf") |
| 39 | 39 | |
| 40 | 40 | if __name__ == "__main__": |
added
analysis/python/figures/ch35_figures.py
+117 −0
@@ -0,0 +1,117 @@ | ||
| 1 | +#!/usr/bin/env python3 | |
| 2 | +"""Figures du chapitre 35 — Indices immobiliers et ventes répétées. | |
| 3 | +Produit dans assets/figures/ch35/ : | |
| 4 | + ch35-fig-indices-compares.pdf indices hédonique (IC 95 %), BMN, Case–Shiller, SPAR et vérité de génération ; écarts à la vérité [SYNTHÉTIQUE] | |
| 5 | + ch35-fig-biais-mediane.pdf indice de la médiane vs indice hédonique et composition de l'échantillon par trimestre [SYNTHÉTIQUE] | |
| 6 | + ch35-fig-poids-case-shiller.pdf carrés des résidus BMN selon l'intervalle (reventes rapides en évidence), droites ajustées, poids [SYNTHÉTIQUE] | |
| 7 | + ch35-fig-revision-filtre.pdf révision des indices de ventes répétées selon le millésime ; effet du filtre des reventes rapides [SYNTHÉTIQUE] | |
| 8 | + ch35-fig-ipln-variation.pdf IPLN, variation sur douze mois par RMR du Québec et Canada, 2011-2026 [RÉEL : StatCan 18-10-0205-01] | |
| 9 | +Usage (racine) : PYTHONPATH=analysis/python python3 analysis/python/figures/ch35_figures.py""" | |
| 10 | +from __future__ import annotations | |
| 11 | +import sys, pathlib | |
| 12 | +ROOT = pathlib.Path(__file__).resolve().parents[3] | |
| 13 | +sys.path.insert(0, str(ROOT / "analysis/python")); sys.path.insert(0, str(ROOT / "analysis/python/cases")) | |
| 14 | +import numpy as np, pandas as pd | |
| 15 | +import matplotlib.pyplot as plt | |
| 16 | +import matplotlib.dates as mdates | |
| 17 | +from matplotlib.ticker import FuncFormatter | |
| 18 | +from traite.style import setup, palette, savefig, LARGEUR | |
| 19 | +import ch35_indices as c35 | |
| 20 | + | |
| 21 | +def _xticks(ax, labels, pas=2): | |
| 22 | + ax.set_xticks(range(0, len(labels), pas)); ax.set_xticklabels([labels[i] for i in range(0, len(labels), pas)], fontsize=7.5) | |
| 23 | + | |
| 24 | +def fig_indices(res): | |
| 25 | + tab = res["tableau"]; L = c35.LABELS; x = np.arange(len(L)) | |
| 26 | + fig, (a1, a2) = plt.subplots(2, 1, figsize=(LARGEUR, 5.2), gridspec_kw={"height_ratios": [3, 2]}, sharex=True) | |
| 27 | + a1.fill_between(x, tab["hed_bas"], tab["hed_haut"], color=palette.cat[0], alpha=0.15, lw=0) | |
| 28 | + a1.plot(x, tab["hedonique"], color=palette.cat[0], lw=2.0, marker="o", ms=3.5, label="Hédonique (indicatrices trimestrielles, IC 95 %)") | |
| 29 | + a1.plot(x, tab["bmn"], color=palette.cat[1], lw=1.6, marker="s", ms=3.2, label="Ventes répétées, BMN") | |
| 30 | + a1.plot(x, tab["cs"], color=palette.cat[2], lw=1.6, ls="--", marker="^", ms=3.4, label="Ventes répétées, Case–Shiller") | |
| 31 | + a1.plot(x, tab["spar"], color=palette.cat[3], lw=1.6, marker="D", ms=3.0, label="SPAR (prix / valeur au rôle)") | |
| 32 | + a1.plot(x, tab["vrai"], color=palette.ink, lw=1.2, ls=":", label="Vérité de génération (4,43 %/an)") | |
| 33 | + a1.set_ylabel("Indice (2023T1 = 100)"); a1.legend(loc="upper left", fontsize=7.5); a1.set_ylim(95, 135) | |
| 34 | + for k, col, m in (("hedonique", palette.cat[0], "o"), ("bmn", palette.cat[1], "s"), ("cs", palette.cat[2], "^"), ("spar", palette.cat[3], "D")): | |
| 35 | + a2.plot(x, 100 * (tab[k] / tab["vrai"] - 1), color=col, lw=1.3, marker=m, ms=3) | |
| 36 | + a2.axhline(0, color=palette.ink, lw=0.8, ls=":") | |
| 37 | + a2.set_ylabel("Écart à la vérité (%)"); a2.set_ylim(-6, 9) | |
| 38 | + _xticks(a2, L) | |
| 39 | + return savefig(fig, "ch35/ch35-fig-indices-compares.pdf") | |
| 40 | + | |
| 41 | +def fig_biais_mediane(res): | |
| 42 | + n = res["naifs"]; tab = res["tableau"]; L = c35.LABELS; x = np.arange(len(L)) | |
| 43 | + fig, (a1, a2) = plt.subplots(2, 1, figsize=(LARGEUR, 5.0), gridspec_kw={"height_ratios": [3, 2]}, sharex=True) | |
| 44 | + a1.plot(x, n["indice_mediane"], color=palette.cat[1], lw=1.8, marker="s", ms=3.3, label="Indice de la médiane des prix") | |
| 45 | + a1.plot(x, n["indice_moy_geo"], color=palette.cat[2], lw=1.4, ls="--", label="Indice de la moyenne géométrique") | |
| 46 | + a1.plot(x, n["indice_moy_geo_corrigee"], color=palette.cat[3], lw=1.4, ls="-.", label="Moyenne géométrique corrigée de la composition") | |
| 47 | + a1.plot(x, tab["hedonique"], color=palette.cat[0], lw=2.0, marker="o", ms=3.3, label="Indice hédonique (qualité constante)") | |
| 48 | + a1.plot(x, tab["vrai"], color=palette.ink, lw=1.1, ls=":", label="Vérité de génération") | |
| 49 | + a1.set_ylabel("Indice (2023T1 = 100)"); a1.legend(loc="upper left", fontsize=7.3); a1.set_ylim(95, 140) | |
| 50 | + a2.bar(x, 100 * (n["indice_composition"] / 100 - 1), color=palette.cat[4], alpha=0.85, width=0.6, label="Effet de composition $\\bar{\\mathbf{x}}_t'\\hat\\beta$ (%)") | |
| 51 | + a2.plot(x, 100 * n["part_aylmer"], color=palette.ink2, lw=1.2, marker=".", label="Part des ventes à Aylmer (%)") | |
| 52 | + a2.axhline(0, color=palette.ink, lw=0.7) | |
| 53 | + a2.set_ylabel("%"); a2.legend(loc="upper left", fontsize=7.3, ncol=2); a2.set_ylim(-2, 42) | |
| 54 | + _xticks(a2, L) | |
| 55 | + return savefig(fig, "ch35/ch35-fig-biais-mediane.pdf") | |
| 56 | + | |
| 57 | +def fig_poids_cs(res): | |
| 58 | + cs = res["cs"]; p = res["paires"]; gap = cs["gap_trimestres"]; e2 = cs["residus_bmn2"]; flip = p["flip"].to_numpy() | |
| 59 | + sens = res["sensibilite"]["filtre"]; a_all = cs["coef_variance"]; a_or = sens["sans les reventes rénovées (oracle)"]["cs_coef_variance"] | |
| 60 | + th = cs["variance_theorique"] | |
| 61 | + fig, (a1, a2) = plt.subplots(1, 2, figsize=(LARGEUR, 3.1), gridspec_kw={"width_ratios": [3, 2]}) | |
| 62 | + rng = np.random.default_rng(1); jit = rng.uniform(-0.18, 0.18, len(gap)) | |
| 63 | + a1.scatter(gap[~flip] + jit[~flip], e2[~flip], s=9, color=palette.cat[0], alpha=0.5, lw=0, label="Reventes ordinaires") | |
| 64 | + a1.scatter(gap[flip] + jit[flip], e2[flip], s=12, color=palette.cat[1], alpha=0.9, lw=0, marker="^", label="Reventes rapides rénovées") | |
| 65 | + g = np.linspace(0.5, 13.5, 50) | |
| 66 | + a1.plot(g, a_all[0] + a_all[1] * g, color=palette.cat[1], lw=1.4, ls="--", label="Ajustement, toutes les paires") | |
| 67 | + a1.plot(g, a_or[0] + a_or[1] * g, color=palette.cat[0], lw=1.4, label="Ajustement sans les reventes rénovées") | |
| 68 | + a1.plot(g, th[0] + th[1] * g, color=palette.ink, lw=1.0, ls=":", label="Théorie : $2\\sigma^2 + \\delta^2 \\Delta$") | |
| 69 | + a1.set_xlabel("Intervalle entre les deux ventes (trimestres)"); a1.set_ylabel("Carré du résidu BMN"); a1.set_ylim(0, 0.16); a1.set_xlim(0, 14) | |
| 70 | + a1.legend(loc="upper right", fontsize=6.8) | |
| 71 | + for a, col, lab, ls in ((a_or, palette.cat[0], "poids estimés (sans reventes rénovées)", "-"), (np.array(th), palette.ink, "poids théoriques", ":")): | |
| 72 | + var = a[0] + a[1] * g; a2.plot(g, np.sqrt((a[0] + a[1] * 1) / var), color=col, lw=1.5, ls=ls, label=lab) | |
| 73 | + a2.set_xlabel("Intervalle (trimestres)"); a2.set_ylabel("Poids relatif (intervalle d'un trimestre = 1)"); a2.set_ylim(0.5, 1.05); a2.set_xlim(0, 14) | |
| 74 | + a2.legend(loc="lower left", fontsize=6.8) | |
| 75 | + return savefig(fig, "ch35/ch35-fig-poids-case-shiller.pdf") | |
| 76 | + | |
| 77 | +def fig_revision_filtre(res): | |
| 78 | + s = res["sensibilite"]; L = c35.LABELS; vrai = res["vrai"] | |
| 79 | + fig, (a1, a2) = plt.subplots(1, 2, figsize=(LARGEUR, 3.1)) | |
| 80 | + for i, (lab, d) in enumerate(s["millesimes"].items()): | |
| 81 | + n = len(d["bmn"]); a1.plot(range(n), d["bmn"], color=palette.cat[i], lw=1.5, marker="o", ms=2.8, label=f"Millésime {lab} ({d['n']} paires)") | |
| 82 | + a1.plot(range(len(vrai)), vrai, color=palette.ink, lw=1.0, ls=":", label="Vérité") | |
| 83 | + a1.set_ylabel("Indice BMN (2023T1 = 100)"); a1.legend(loc="upper left", fontsize=7); _xticks(a1, L, 3); a1.set_ylim(95, 130) | |
| 84 | + f = s["filtre"] | |
| 85 | + for i, (lab, key) in enumerate((("toutes les paires", "toutes"), ("intervalle ≥ 12 mois", "intervalle ≥ 12 mois"), ("intervalle ≥ 18 mois", "intervalle ≥ 18 mois"), ("sans reventes rénovées (oracle)", "sans les reventes rénovées (oracle)"))): | |
| 86 | + d = f[key]; a2.plot(range(len(L)), d["bmn_indice"], color=palette.cat[i], lw=1.4, marker="o", ms=2.6, ls="-" if i < 3 else "--", label=f"{lab} (n = {d['n']})") | |
| 87 | + a2.plot(range(len(L)), vrai, color=palette.ink, lw=1.0, ls=":", label="Vérité") | |
| 88 | + a2.set_ylabel("Indice BMN (2023T1 = 100)"); a2.legend(loc="upper left", fontsize=7); _xticks(a2, L, 3); a2.set_ylim(95, 130) | |
| 89 | + return savefig(fig, "ch35/ch35-fig-revision-filtre.pdf") | |
| 90 | + | |
| 91 | +def fig_ipln(): | |
| 92 | + import ch04_marches as c04 | |
| 93 | + df = c04.ipln(); df = df[df["composante"] == "Total"] | |
| 94 | + ordre = ["Montréal", "Québec", "Gatineau (partie du Québec)", "Sherbrooke", "Trois-Rivières", "Canada"] | |
| 95 | + fig, ax = plt.subplots(figsize=(LARGEUR, 3.5)) | |
| 96 | + for i, geo in enumerate(ordre): | |
| 97 | + s = df[df["geo"] == geo].set_index("date")["indice"].sort_index() | |
| 98 | + var = 100 * (s / s.shift(12) - 1); var = var[var.index >= "2011-01-01"] | |
| 99 | + ax.plot(var.index, var.values, color=palette.cat[i], lw=2.0 if geo == "Montréal" else 1.3, ls="--" if geo == "Canada" else "-", | |
| 100 | + label=geo.replace(" (partie du Québec)", " (partie QC)")) | |
| 101 | + ax.axhline(0, color=palette.ink, lw=0.8) | |
| 102 | + ax.axvspan(pd.Timestamp("2020-03-01"), pd.Timestamp("2022-12-31"), color=palette.grid, alpha=0.5, lw=0) | |
| 103 | + ax.set_ylabel("Variation sur douze mois (%)"); ax.set_xlim(pd.Timestamp("2011-01-01"), pd.Timestamp("2026-12-31")) | |
| 104 | + ax.xaxis.set_major_locator(mdates.YearLocator(2)); ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y")) | |
| 105 | + ax.legend(loc="upper left", ncol=2, fontsize=7.5) | |
| 106 | + out = savefig(fig, "ch35/ch35-fig-ipln-variation.pdf") | |
| 107 | + last = {geo: float(100 * (df[df["geo"] == geo].set_index("date")["indice"].sort_index().pipe(lambda s: s.iloc[-1] / s.iloc[-13] - 1))) for geo in ordre} | |
| 108 | + return out, last | |
| 109 | + | |
| 110 | +def main(): | |
| 111 | + setup(); res = c35.main(verbose=False) | |
| 112 | + for f in (fig_indices, fig_biais_mediane, fig_poids_cs, fig_revision_filtre): | |
| 113 | + print("OK", f(res)) | |
| 114 | + out, last = fig_ipln(); print("OK", out, {k: round(v, 1) for k, v in last.items()}) | |
| 115 | + | |
| 116 | +if __name__ == "__main__": | |
| 117 | + main() | |
added
analysis/python/tests/test_ch20.py
+157 −0
@@ -0,0 +1,157 @@ | ||
| 1 | +"""Chapitre 20 — réconciliation et incertitude : identités, chiffres cités dans le texte et dans les solutions (tolérances déclarées).""" | |
| 2 | +import sys, pathlib, math | |
| 3 | +import numpy as np, pytest | |
| 4 | +sys.path.insert(0, str(pathlib.Path(__file__).resolve().parents[1] / "cases")) | |
| 5 | +import ch20_reconciliation as c20 | |
| 6 | +from traite import cas1, cout as ct | |
| 7 | + | |
| 8 | +@pytest.fixture(scope="module") | |
| 9 | +def r(): | |
| 10 | + return c20.tout() | |
| 11 | + | |
| 12 | +# ---------------------------------------------------------------- indications héritées (ch. 16-18, 21) | |
| 13 | +def test_indications_heritees(r): | |
| 14 | + b = r["base"] | |
| 15 | + assert list(b["adj5"]["id_vente"]) == ["G0574", "G0404", "G0468", "G0477", "G0575"] | |
| 16 | + assert b["adj5"]["prix_ajuste"].values == pytest.approx([640247, 541222, 572793, 568853, 584862], abs=1) | |
| 17 | + assert b["V_comp"] == pytest.approx(575565, abs=1) and b["sd_comp_pondere"] == pytest.approx(33997, abs=1) | |
| 18 | + assert b["poids_comp"] == pytest.approx([0.179, 0.327, 0.202, 0.159, 0.133], abs=0.001) | |
| 19 | + assert b["V_hed"] == pytest.approx(637953, abs=1) | |
| 20 | + assert b["ip_hed"]["bas"] == pytest.approx(539682, abs=1) and b["ip_hed"]["haut"] == pytest.approx(749087, abs=1) | |
| 21 | + assert len(b["cand"]) == 16 | |
| 22 | + assert r["cout"]["CN"] == pytest.approx(397567.33, abs=0.01) | |
| 23 | + | |
| 24 | +def test_grille_rapide_reproduit_la_bibliotheque(r): | |
| 25 | + """La cascade vectorisée du chapitre donne les mêmes prix ajustés et bruts que traite.cas1.ajustements_hedoniques (16 candidats).""" | |
| 26 | + b = r["base"]; g = c20.grille_rapide(b["beta"], b["Xs"], b["Xc16"], b["P16"], b["G"]) | |
| 27 | + assert g["P_aj"] == pytest.approx(b["adj16"]["prix_ajuste"].values, rel=1e-9) | |
| 28 | + assert g["brut"] == pytest.approx(b["adj16"]["ajust_brut_pct"].values, rel=1e-9) | |
| 29 | + assert g["valeur"] != pytest.approx(b["V_comp"], abs=1) # 16 candidats ≠ 5 retenus | |
| 30 | + g5 = c20.grille_rapide(b["beta"], b["Xs"], b["Xc16"][:5], b["P16"][:5], b["G"]) | |
| 31 | + assert g5["valeur"] == pytest.approx(b["V_comp"], abs=1e-6) and g5["sd_pondere"] == pytest.approx(b["sd_comp_pondere"], abs=1e-6) | |
| 32 | + # identité P_aj = exp(x_s'β)·exp(e_j) pour les 16 candidats (prop. 17.2) | |
| 33 | + point = math.exp(float(b["Xs"] @ b["beta"])) | |
| 34 | + assert g["P_aj"] == pytest.approx(point * np.exp(b["adj16"]["residu_log"].values), rel=1e-9) | |
| 35 | + | |
| 36 | +def test_residus_candidats(r): | |
| 37 | + a = r["base"]["adj16"] | |
| 38 | + ret = a["retenu"].values | |
| 39 | + assert np.mean(np.exp(a.loc[ret, "residu_log"]) - 1) == pytest.approx(-0.0853, abs=0.0005) | |
| 40 | + assert np.mean(np.exp(a.loc[~ret, "residu_log"]) - 1) == pytest.approx(-0.0171, abs=0.0005) | |
| 41 | + assert np.mean(np.exp(a["residu_log"]) - 1) == pytest.approx(-0.0384, abs=0.0005) | |
| 42 | + | |
| 43 | +# ---------------------------------------------------------------- bootstrap et énumération | |
| 44 | +def test_bootstrap(r): | |
| 45 | + bs = r["bootstrap"]; rs = bs["resume"] | |
| 46 | + assert len(bs["VA"]) == c20.B == 2000 | |
| 47 | + assert rs["candidats"]["ecart_type"] == pytest.approx(18160, abs=30) | |
| 48 | + assert rs["candidats"]["q05"] == pytest.approx(552872, abs=60) and rs["candidats"]["q95"] == pytest.approx(611283, abs=60) | |
| 49 | + assert rs["ajustements"]["ecart_type"] == pytest.approx(2672, abs=10) | |
| 50 | + assert rs["conjoint"]["ecart_type"] == pytest.approx(18385, abs=30) | |
| 51 | + assert rs["conjoint"]["q05"] == pytest.approx(552095, abs=60) and rs["conjoint"]["q95"] == pytest.approx(611779, abs=60) | |
| 52 | + assert rs["parametrique"]["ecart_type"] == pytest.approx(2751, abs=10) | |
| 53 | + assert rs["prediction"]["ecart_type"] == pytest.approx(6531, abs=15) and rs["prediction"]["moyenne"] == pytest.approx(637736, abs=30) | |
| 54 | + assert bs["rho_conjoint_pred"] == pytest.approx(0.088, abs=0.005) and bs["rho_ajustements_pred"] == pytest.approx(0.425, abs=0.01) | |
| 55 | + assert bs["part_C_sous_hed"] > 0.99 | |
| 56 | + # l'incertitude des coefficients est petite devant celle de la sélection | |
| 57 | + assert rs["ajustements"]["ecart_type"] < 0.2 * rs["candidats"]["ecart_type"] | |
| 58 | + # la variance conjointe est à peu près la somme des deux (indépendance des deux tirages) | |
| 59 | + assert rs["conjoint"]["ecart_type"] ** 2 == pytest.approx(rs["candidats"]["ecart_type"] ** 2 + rs["ajustements"]["ecart_type"] ** 2, rel=0.05) | |
| 60 | + | |
| 61 | +def test_exhaustif(r): | |
| 62 | + ex = r["exhaustif"] | |
| 63 | + assert ex["n"] == math.comb(16, 5) == 4368 | |
| 64 | + assert ex["moyenne"] == pytest.approx(606317, abs=1) and ex["ecart_type"] == pytest.approx(20492, abs=1) | |
| 65 | + assert ex["min"] == pytest.approx(550231, abs=1) and ex["max"] == pytest.approx(661670, abs=1) | |
| 66 | + assert ex["rang_selection"] == 279 | |
| 67 | + assert ex["part_sous_hed"] == pytest.approx(0.935, abs=0.002) | |
| 68 | + par = ex["par_n_retenus"] | |
| 69 | + assert list(par["count"]) == [462, 1650, 1650, 550, 55, 1] | |
| 70 | + assert par.loc[5, "mean"] == pytest.approx(575565, abs=1) | |
| 71 | + # la moyenne par nombre de retenus décroît : plus on inclut les cinq « vrais » comparables, plus la valeur baisse | |
| 72 | + assert all(np.diff(par["mean"].values) < 0) | |
| 73 | + | |
| 74 | +def test_elargissement(r): | |
| 75 | + el = r["elargissement"].set_index("k") | |
| 76 | + assert el.loc[5, "valeur_ponderee"] == pytest.approx(575565, abs=1) | |
| 77 | + assert el.loc[16, "valeur_ponderee"] == pytest.approx(604689, abs=1) and el.loc[16, "moyenne"] == pytest.approx(611401, abs=1) | |
| 78 | + assert el.loc[16, "residu_moyen_pct"] == pytest.approx(-0.0384, abs=0.0005) | |
| 79 | + assert el.loc[10, "valeur_ponderee"] == pytest.approx(592737, abs=1) | |
| 80 | + | |
| 81 | +# ---------------------------------------------------------------- coût | |
| 82 | +def test_cout(r): | |
| 83 | + co = r["cout"]; CN = co["CN"] | |
| 84 | + assert co["V_L"] == pytest.approx(0.30 * r["base"]["V_comp"], abs=1e-6) and co["V_L"] == pytest.approx(172669, abs=1) | |
| 85 | + assert co["D"] == pytest.approx(CN * 28 / 60, abs=1e-6) and co["D"] == pytest.approx(185531, abs=1) | |
| 86 | + assert co["valeur"] == pytest.approx(co["V_L"] + CN - co["D"], abs=1e-6) and co["valeur"] == pytest.approx(384705, abs=1) | |
| 87 | + assert co["cout_neuf_plus_terrain"] == pytest.approx(570237, abs=1) | |
| 88 | + assert co["extraction_hed"]["depreciation"] == pytest.approx(-67716, abs=1) and co["extraction_comp"]["depreciation"] == pytest.approx(-5328, abs=1) | |
| 89 | + assert co["min_grille"] == pytest.approx(290043, abs=1) and co["max_grille"] == pytest.approx(479368, abs=1) | |
| 90 | + assert co["sd_grille"] == pytest.approx(50737, abs=1) | |
| 91 | + assert co["age_effectif_variantes"][20] == pytest.approx(437714, abs=1) | |
| 92 | + assert co["V_L_pour_hed"] == pytest.approx(425917, abs=1) | |
| 93 | + # identité de la bibliothèque : valeur_par_cout = V_L + C_N − D | |
| 94 | + v = ct.valeur_par_cout(100000, 400000, 150000) | |
| 95 | + assert v["valeur"] == 350000 and v["taux_depreciation"] == pytest.approx(0.375) | |
| 96 | + | |
| 97 | +# ---------------------------------------------------------------- combinaison | |
| 98 | +def test_poids_optimaux_et_mcg(r): | |
| 99 | + cb = r["combinaison"]; S = cb["Sigma"] | |
| 100 | + for w in cb["schemas"].values(): | |
| 101 | + assert w.sum() == pytest.approx(1.0, abs=1e-12) | |
| 102 | + w = c20.poids_gls(S) | |
| 103 | + var = w @ S @ w | |
| 104 | + rng = np.random.default_rng(0) | |
| 105 | + for _ in range(200): # tout autre vecteur de poids sommant à 1 a une variance ≥ celle des MCG | |
| 106 | + d = rng.normal(size=3); d -= d.mean(); w2 = w + 0.1 * d | |
| 107 | + assert w2 @ S @ w2 >= var - 1e-6 | |
| 108 | + # formule à deux indications = MCG sur la sous-matrice 2 × 2 | |
| 109 | + s1, s2, rho = cb["s"][0], cb["s"][1], cb["rho"] | |
| 110 | + S2 = np.array([[s1 ** 2, rho * s1 * s2], [rho * s1 * s2, s2 ** 2]]) | |
| 111 | + assert c20.poids_optimaux_deux(s1, s2, rho) == pytest.approx(c20.poids_gls(S2)[0], rel=1e-12) | |
| 112 | + assert c20.poids_optimaux_deux(s1, s2, 0.0) == pytest.approx((1 / s1 ** 2) / (1 / s1 ** 2 + 1 / s2 ** 2), rel=1e-12) | |
| 113 | + assert c20.poids_optimaux_deux(s1, s2, 0.9) < 0 # poids négatif lorsque ρ > σ_h/σ_c | |
| 114 | + | |
| 115 | +def test_combinaison_chiffres(r): | |
| 116 | + cb = r["combinaison"]; t = cb["tableau"].set_index("schema") | |
| 117 | + assert cb["V"] == pytest.approx([575565, 637953, 384705], abs=1) | |
| 118 | + assert cb["s"] == pytest.approx([18385, 11462, 50737], abs=30) | |
| 119 | + assert cb["sd_spec_hed"] == pytest.approx(9420, abs=1) and cb["sd_pred_boot"] == pytest.approx(6531, abs=15) | |
| 120 | + assert t.loc["égale (un tiers chacune)", "valeur"] == pytest.approx(532741, abs=1) | |
| 121 | + assert t.loc["inverse de la variance (indépendance)", "valeur"] == pytest.approx(612132, abs=150) | |
| 122 | + assert t.loc["inverse de la variance (indépendance)", ["w_comp", "w_hed", "w_cout"]].values == pytest.approx([0.270, 0.695, 0.035], abs=0.005) | |
| 123 | + assert t.loc["variance minimale avec corrélation (MCG)", "valeur"] == pytest.approx(612640, abs=200) | |
| 124 | + assert t.loc["raisonnée (retenue)", "valeur"] == pytest.approx(600335, abs=1) | |
| 125 | + assert t.loc["raisonnée (retenue)", "ecart_type"] == pytest.approx(10411, abs=30) | |
| 126 | + assert cb["conclusion"] == 600000 and cb["fourchette90"] == (585000, 620000) and cb["fourchette_conclue"] == (575000, 640000) | |
| 127 | + assert cb["q"]["q05"] == pytest.approx(587949, abs=100) and cb["q"]["q95"] == pytest.approx(616418, abs=100) | |
| 128 | + assert cb["ecart_conclusion_comp"] == pytest.approx(0.0425, abs=0.0005) and cb["ecart_conclusion_hed"] == pytest.approx(-0.0595, abs=0.0005) | |
| 129 | + assert cb["w_opt_deux"][0.0] == pytest.approx(0.280, abs=0.002) and cb["w_opt_deux"][0.6] == pytest.approx(0.023, abs=0.002) | |
| 130 | + | |
| 131 | +def test_verite_synthetique(r): | |
| 132 | + vt = r["verite"]; b = r["base"] | |
| 133 | + assert vt["V_true"] == pytest.approx(641159, abs=5) | |
| 134 | + assert vt["se_c"] == pytest.approx(0.0034, abs=0.0002) and vt["sigma_e"] == pytest.approx(0.0827, abs=0.001) | |
| 135 | + assert abs(vt["ecart_hed"]) < 0.01 and vt["ecart_comp"] == pytest.approx(-0.1023, abs=0.001) | |
| 136 | + assert r["combinaison"]["conclusion"] / vt["V_true"] - 1 == pytest.approx(-0.0642, abs=0.001) | |
| 137 | + # la prédiction hédonique est dans l'intervalle de la vérité ± 2 erreurs-types de la constante | |
| 138 | + assert vt["V_true_bas"] <= b["V_hed"] * 1.01 and b["V_hed"] * 0.99 <= vt["V_true_haut"] | |
| 139 | + | |
| 140 | +# ---------------------------------------------------------------- solutions des exercices | |
| 141 | +def test_solutions_exercices(r): | |
| 142 | + e = r["exercices"] | |
| 143 | + assert e["ex1"]["w1"] == pytest.approx(0.1379, abs=0.0001) and e["ex1"]["V"] == pytest.approx(628552, abs=1) and e["ex1"]["sd"] == pytest.approx(11142, abs=1) | |
| 144 | + assert e["ex1"]["V_egal"] == 609000 and e["ex1"]["sd_egal"] == pytest.approx(16155, abs=1) | |
| 145 | + assert e["ex2"]["ic_bas"] == pytest.approx(625586, abs=5) and e["ex2"]["ic_haut"] == pytest.approx(650596, abs=5) | |
| 146 | + assert e["ex2"]["ip_bas"] == pytest.approx(539682, abs=60) and e["ex2"]["ip_haut"] == pytest.approx(749087, abs=60) | |
| 147 | + assert e["ex2"]["rapport_largeurs"] == pytest.approx(8.36, abs=0.02) | |
| 148 | + assert e["ex6"]["V_30_65_05"] == pytest.approx(606574, abs=1) and e["ex6"]["arrondi_30_65_05"] == 605000 | |
| 149 | + assert e["ex6"]["V_k16_raisonnee"] == pytest.approx(611985, abs=1) and e["ex6"]["arrondi_k16"] == 610000 | |
| 150 | + assert e["ex6"]["V_60_35_05"] == pytest.approx(587858, abs=1) | |
| 151 | + assert e["ex3"][0.3]["w1"] == pytest.approx(0.0435, abs=0.0001) and e["ex3"][0.5]["w1"] == pytest.approx(-0.0526, abs=0.0001) | |
| 152 | + assert e["ex3"][0.3]["sd"] == pytest.approx(11935, abs=1) | |
| 153 | + assert e["ex4"]["moyenne"] == 586150 and e["ex4"]["ecart_type"] == pytest.approx(14954, abs=1) | |
| 154 | + assert e["ex4"]["q05"] == pytest.approx(567650, abs=1) and e["ex4"]["q95"] == pytest.approx(611650, abs=1) | |
| 155 | + assert e["ex5"]["a"] == pytest.approx(453240, abs=1) and e["ex5"]["b"] == pytest.approx(450590, abs=1) | |
| 156 | + assert e["ex5"]["extraction"]["depreciation"] == pytest.approx(-38938, abs=1) | |
| 157 | + assert e["ex7"]["delta"] == 14000 and e["ex7"]["esperance"] == 595800 | |
modified
analysis/python/tests/test_ch33.py
+2 −0
@@ -22,6 +22,8 @@ def test_schl_lecture_coherente_avec_notes(R): | ||
| 22 | 22 | assert t.loc["3 à 5 unités", "loyer_2ch"] == 1350 and t.loc["Tous les immeubles", "inoccupation_tous"] == pytest.approx(3.1) |
| 23 | 23 | assert a.loc["Avant 1940", "loyer_tous"] == 1238 and a.loc["1960 à 1974", "loyer_tous"] == 1186 and a.loc["2015 ou après", "loyer_tous"] == 1882 |
| 24 | 24 | assert a.loc["2015 ou après", "inoccupation_tous"] == pytest.approx(5.6) |
| 25 | + assert a.loc["Avant 1940", "rotation_tous"] == pytest.approx(9.3) and a.loc["2015 ou après", "rotation_tous"] == pytest.approx(13.7) and np.isnan(a.loc["1990 à 2004", "rotation_tous"]) | |
| 26 | + assert t.loc["6 à 19 unités", "rotation_tous"] == pytest.approx(8.5) and t.loc["100 unités et +", "rotation_tous"] == pytest.approx(12.4) | |
| 25 | 27 | assert list(t.index) == ["3 à 5 unités", "6 à 19 unités", "20 à 49 unités", "50 à 99 unités", "100 unités et +", "Tous les immeubles"] |
| 26 | 28 | |
| 27 | 29 | # ----------------------------------------------------------------------------- cas 4 : sommaire et identités |
added
analysis/python/tests/test_ch34.py
+182 −0
@@ -0,0 +1,182 @@ | ||
| 1 | +"""Tests du chapitre 34 — TAL, encadrement locatif et scénarios (cas 3, données synthétiques ; IPC Québec réel). | |
| 2 | +Identités : la projection locale reproduit traite.cas3.projection_dcf avec les paramètres du dossier ; valeur de base 2 208 566 $ ; | |
| 3 | +scénario « encadrement serré » du ch. 30 (1 912 046 $) ; formule de l'art. 3.1 (3,1 % en 2026, 4,5 % en 2025) ; règles des art. 4 | |
| 4 | +(taux net), 5 (part) et 15.1 (arrondi) ; forme fermée E[q_t] = récursion = Monte-Carlo, limite q_∞ ; monotonie de la valeur en | |
| 5 | +rotation et en pourcentage de base ; valeurs citées dans manuscript/chapters/ch34.tex (tolérances déclarées).""" | |
| 6 | +import math, numpy as np, pytest | |
| 7 | +from traite import cas3 | |
| 8 | +from cases import ch34_tal as c | |
| 9 | + | |
| 10 | +@pytest.fixture(scope="module") | |
| 11 | +def D(): | |
| 12 | + return cas3.tout() | |
| 13 | + | |
| 14 | +# ------------------------------------------------------------------ 1. pourcentage de base (art. 3.1), IPC réel | |
| 15 | + | |
| 16 | +def test_pourcentage_base_reproduit_tal(): | |
| 17 | + p26 = c.pourcentage_base(2026); p25 = c.pourcentage_base(2025) | |
| 18 | + assert p26["pct_base"] == pytest.approx(0.031, abs=0.0005) # 3,095 % calculé vs 3,1 % publié (arrondi à la décimale) | |
| 19 | + assert p25["pct_base"] == pytest.approx(0.045, abs=0.0005) # 4,496 % vs 4,5 % | |
| 20 | + assert p26["B"] == p25["A"] and p26["C"] == p25["B"] and p26["D"] == p25["C"] | |
| 21 | + assert p26["A"] == pytest.approx(161.033, abs=0.001) and p26["D"] == pytest.approx(146.983, abs=0.001) | |
| 22 | + assert p26["pct_base"] == pytest.approx((p26["var_A_B"] + p26["var_B_C"] + p26["var_C_D"]) / 3) | |
| 23 | + | |
| 24 | +def test_pourcentage_base_plancher_zero(): | |
| 25 | + import pandas as pd | |
| 26 | + moy = pd.Series({2021: 100.0, 2022: 98.0, 2023: 97.0, 2024: 96.0, 2025: 95.0}) | |
| 27 | + assert c.pourcentage_base(2026, moy)["pct_base"] == 0.0 and c.pourcentage_base(2026, moy)["pct_brut"] < 0 | |
| 28 | + | |
| 29 | +def test_historique_coherent(): | |
| 30 | + h = c.historique_pourcentage_base(2006, 2026) | |
| 31 | + assert list(h["annee"]) == list(range(2006, 2027)) | |
| 32 | + assert (h["pct_formule"] >= 0).all() | |
| 33 | + # la moyenne mobile lisse : la formule est moins dispersée que l'inflation annuelle | |
| 34 | + assert h["pct_formule"].std() < h["inflation_ref"].std() | |
| 35 | + assert h.loc[h["annee"] == 2023, "inflation_ref"].iloc[0] == pytest.approx(0.0667, abs=0.0005) | |
| 36 | + | |
| 37 | +# ------------------------------------------------------------------ 2. fixation : art. 4, 5, 15.1 | |
| 38 | + | |
| 39 | +def test_arrondi_art_15_1(): | |
| 40 | + assert c.arrondi_art_15_1(750.49) == 750 and c.arrondi_art_15_1(750.50) == 751 and c.arrondi_art_15_1(751.0) == 751 | |
| 41 | + | |
| 42 | +def test_taux_net_art_4(): | |
| 43 | + assert c.taux_net(-0.042, 0.031) == 0.0 # variation négative : rien | |
| 44 | + assert c.taux_net(0.019, 0.031) == 0.0 # variation positive inférieure à la base : rien | |
| 45 | + assert c.taux_net(0.080, 0.031) == pytest.approx(0.049) | |
| 46 | + assert c.taux_net(0.080, 0.0) == pytest.approx(0.080) | |
| 47 | + | |
| 48 | +def test_part_attribuable(): | |
| 49 | + assert c.part_attribuable(728, 174_900) == pytest.approx(728 * 12 / 174_900) | |
| 50 | + | |
| 51 | +def test_fixation_nouvelle_composantes(): | |
| 52 | + f = c.fixation_nouvelle(1000.0, 0.03, 0.10, (24_000, 26_400), (3_000, 3_060), (12_000, 13_200), immobilisations=60_000, nouveaux_services=1_200) | |
| 53 | + assert f["base"] == pytest.approx(30.0) | |
| 54 | + assert f["m_taxes_mun"] == pytest.approx((0.10 - 0.03) * 24_000 / 12 * 0.10) # 14,00 $ : taux net × mensuel de la période de référence × part | |
| 55 | + assert f["m_taxes_scol"] == 0.0 # +2 % < 3 % | |
| 56 | + assert f["m_assurances"] == pytest.approx((0.10 - 0.03) * 12_000 / 12 * 0.10) # 7,00 $ : mensuel de la période précédente | |
| 57 | + assert f["m_immobilisations"] == pytest.approx(0.05 * 60_000 * 0.10 / 12) # 25,00 $ | |
| 58 | + assert f["m_services"] == pytest.approx(1_200 * 0.10 / 12) # 10,00 $ | |
| 59 | + assert f["total_brut"] == pytest.approx(30 + 14 + 7 + 25 + 10) | |
| 60 | + assert f["nouveau_loyer"] == 1086 and f["augmentation"] == 86 | |
| 61 | + | |
| 62 | +def test_exemple_logement_103_valeurs_citees(): | |
| 63 | + ex = c.exemple_fixation(103) | |
| 64 | + assert ex["loyer"] == 728 and ex["marche"] == 1047 and ex["ecart_marche"] == 319 | |
| 65 | + assert ex["revenus"] == pytest.approx(174_900) and ex["part"] == pytest.approx(0.04995, abs=1e-4) | |
| 66 | + A, B = ex["A"], ex["B"] | |
| 67 | + assert A["base"] == pytest.approx(22.568, abs=0.001) | |
| 68 | + assert A["m_taxes_mun"] == 0 and A["m_taxes_scol"] == 0 and A["m_assurances"] == 0 and A["m_immobilisations"] == 0 | |
| 69 | + assert A["nouveau_loyer"] == 751 and A["augmentation"] == 23 | |
| 70 | + assert B["net_taxes_mun"] == pytest.approx(0.049) and B["m_taxes_mun"] == pytest.approx(2.17, abs=0.01) | |
| 71 | + assert B["net_assurances"] == pytest.approx(0.069) and B["m_assurances"] == pytest.approx(3.62, abs=0.01) | |
| 72 | + assert B["m_immobilisations"] == pytest.approx(17.69, abs=0.01) | |
| 73 | + assert B["total_brut"] == pytest.approx(46.05, abs=0.01) and B["nouveau_loyer"] == 774 | |
| 74 | + assert ex["ancienne_A"]["nouveau_loyer"] == 755 and ex["ancienne_B"]["nouveau_loyer"] == 786 | |
| 75 | + assert ex["annees_rattrapage_base"] == pytest.approx(11.9, abs=0.05) | |
| 76 | + | |
| 77 | +# ------------------------------------------------------------------ 3. trajectoire espérée | |
| 78 | + | |
| 79 | +def test_forme_fermee_egale_recursion_et_simulation(): | |
| 80 | + q0, rho, gc, gm, T = 0.695, 0.15, 0.031, 0.035, 10 | |
| 81 | + delta = (1 + gc) / (1 + gm) | |
| 82 | + q, rec = q0, [q0] | |
| 83 | + for _ in range(T): | |
| 84 | + q = (1 - rho) * q * delta + rho * 1.0; rec.append(q) | |
| 85 | + ff = c.ratio_espere(q0, rho, gc, gm, np.arange(T + 1)) | |
| 86 | + assert np.allclose(ff, rec, atol=1e-12) | |
| 87 | + sim = c.simulation_ratio(q0, rho, gc, gm, T, n=20_000) | |
| 88 | + assert np.abs(sim - ff).max() < 0.006 | |
| 89 | + assert ff[-1] == pytest.approx(0.9249, abs=0.0005) | |
| 90 | + | |
| 91 | +def test_limite_et_monotonie(): | |
| 92 | + gc, gm = 0.031, 0.035 | |
| 93 | + for rho in (0.05, 0.15, 0.25): | |
| 94 | + qi = c.ratio_limite(rho, gc, gm) | |
| 95 | + assert c.ratio_espere(0.5, rho, gc, gm, 400) == pytest.approx(qi, abs=1e-9) | |
| 96 | + assert c.ratio_espere(1.0, rho, gc, gm, 400) == pytest.approx(qi, abs=1e-9) | |
| 97 | + assert c.ratio_limite(0.05, gc, gm) < c.ratio_limite(0.15, gc, gm) < c.ratio_limite(0.25, gc, gm) < 1 | |
| 98 | + assert c.ratio_limite(0.15, gc, gm) == pytest.approx(0.9786, abs=0.0001) | |
| 99 | + assert c.ratio_limite(0.05, gc, gm) == pytest.approx(0.9316, abs=0.0001) | |
| 100 | + assert c.ratio_limite(0.25, gc, gm) == pytest.approx(0.9885, abs=0.0001) | |
| 101 | + assert c.ratio_limite(0.15, gm, gm) == pytest.approx(1.0) # g_c = g_m : aucun écart limite | |
| 102 | + | |
| 103 | +def test_trajectoire_cas3(D): | |
| 104 | + tr = c.trajectoire_cas3_esperee(D) | |
| 105 | + assert tr["rbp_marche"].iloc[0] == pytest.approx(186_036) and tr["rbp_esperance"].iloc[0] == pytest.approx(165_540) | |
| 106 | + assert tr["ratio_deterministe"].iloc[-1] == pytest.approx(0.9904, abs=0.0005) and tr["ratio_esperance"].iloc[-1] == pytest.approx(0.9618, abs=0.0005) | |
| 107 | + assert (tr["rbp_sans_relocation"] <= tr["rbp_esperance"] + 1e-9).all() and (tr["rbp_esperance"] <= tr["rbp_deterministe"] + 1e-6).all() | |
| 108 | + | |
| 109 | +# ------------------------------------------------------------------ 4. scénarios | |
| 110 | + | |
| 111 | +def test_projection_locale_reproduit_module_commun(D): | |
| 112 | + ref = cas3.projection_dcf(D["etat"], D["dep"], D["hyp"]) | |
| 113 | + loc = c.projection_scenario(D["etat"], D["dep"], D["hyp"]) | |
| 114 | + for col in ("rbp", "rbp_marche", "rbe", "depenses", "reserve", "rne", "capex", "flux_avant_dette"): | |
| 115 | + assert np.allclose(ref[col].values, loc[col].values, atol=1e-6), col | |
| 116 | + assert (loc["logements_reloues"].iloc[1:] == 2).all() | |
| 117 | + | |
| 118 | +def test_valeur_base_et_scenario_ch30(D): | |
| 119 | + assert c.valeur_scenario(D)["valeur"] == pytest.approx(2_208_566, abs=1) | |
| 120 | + assert c.valeur_scenario(D, g_c=0.02, rotation=0.08, g_m=0.03)["valeur"] == pytest.approx(1_912_046, abs=1) # tab. 30.x « encadrement serré » | |
| 121 | + | |
| 122 | +def test_grille_monotone_et_valeurs_citees(D): | |
| 123 | + g = c.grille_scenarios(D) | |
| 124 | + assert len(g) == 9 | |
| 125 | + for b in (0.02, 0.031, 0.04): | |
| 126 | + v = g[g["base"] == b].sort_values("rotation")["valeur"].values | |
| 127 | + assert v[0] < v[1] < v[2] | |
| 128 | + for r in (0.05, 0.15, 0.25): | |
| 129 | + v = g[g["rotation"] == r].sort_values("base")["valeur"].values | |
| 130 | + assert v[0] < v[1] < v[2] | |
| 131 | + cell = lambda r, b: g[(g["rotation"] == r) & (g["base"] == b)]["valeur"].iloc[0] | |
| 132 | + assert cell(0.15, 0.031) == pytest.approx(2_208_566, abs=1) | |
| 133 | + assert cell(0.05, 0.02) == pytest.approx(1_974_822, abs=1) | |
| 134 | + assert cell(0.25, 0.04) == pytest.approx(2_340_208, abs=1) | |
| 135 | + assert cell(0.05, 0.031) == pytest.approx(2_140_916, abs=1) | |
| 136 | + assert cell(0.25, 0.031) == pytest.approx(2_231_655, abs=1) | |
| 137 | + assert cell(0.15, 0.02) == pytest.approx(2_118_624, abs=1) | |
| 138 | + assert cell(0.15, 0.04) == pytest.approx(2_326_053, abs=1) | |
| 139 | + | |
| 140 | +def test_scenarios_complementaires(D): | |
| 141 | + s = c.scenarios_complementaires(D).set_index("scenario") | |
| 142 | + V0 = D["dcf"]["valeur"] | |
| 143 | + assert s.loc["Indexation seule (aucune relocation)", "valeur"] == pytest.approx(1_756_414, abs=1) | |
| 144 | + assert s.loc["Rattrapage partiel à la relocation (φ = 0,5)", "valeur"] == pytest.approx(2_056_076, abs=1) | |
| 145 | + assert s.loc["Encadrement renforcé (base 2 %, rotation 8 %, φ = 0,5, marché 3 %)", "valeur"] == pytest.approx(1_701_507, abs=1) | |
| 146 | + assert s.loc["Récupération de 5 % des dépenses d'immobilisation", "valeur"] == pytest.approx(2_289_503, abs=1) | |
| 147 | + assert s.loc["Base, mode espérance (rotation fractionnaire)", "valeur"] == pytest.approx(2_091_629, abs=1) | |
| 148 | + assert s.loc["Tout au marché dès l'année 1 (borne supérieure théorique)", "valeur"] == pytest.approx(2_267_398, abs=1) | |
| 149 | + # ordre attendu | |
| 150 | + assert s.loc["Encadrement renforcé (base 2 %, rotation 8 %, φ = 0,5, marché 3 %)", "valeur"] < s.loc["Indexation seule (aucune relocation)", "valeur"] < \ | |
| 151 | + s.loc["Encadrement serré (ch. 30 : base 2 %, rotation 8 %, marché 3 %)", "valeur"] < V0 | |
| 152 | + # VA de l'écart au marché : positive et décroissante avec la rotation | |
| 153 | + assert s.loc["Indexation seule (aucune relocation)", "va_ecart_marche"] > s.loc["Base (dossier)", "va_ecart_marche"] > 0 | |
| 154 | + | |
| 155 | +def test_rattrapage_partiel_et_recuperation(D): | |
| 156 | + p1 = c.projection_scenario(D["etat"], D["dep"], D["hyp"], fraction_rattrapage=0.5) | |
| 157 | + p0 = c.projection_scenario(D["etat"], D["dep"], D["hyp"]) | |
| 158 | + assert (p1["rbp"].iloc[1:] < p0["rbp"].iloc[1:]).all() | |
| 159 | + pr = c.projection_scenario(D["etat"], D["dep"], D["hyp"], recuperation_capex=True) | |
| 160 | + # la récupération n'agit qu'à partir de l'année suivant le premier CAPEX (2027 → 2028, année 3) | |
| 161 | + assert np.allclose(pr["rbp"].iloc[:2], p0["rbp"].iloc[:2]) and (pr["rbp"].iloc[2:] > p0["rbp"].iloc[2:]).all() | |
| 162 | + # hausse de l'année 3 ≈ 5 % × 85 000 $ = 4 250 $ (avant indexation ultérieure) | |
| 163 | + assert pr["rbp"].iloc[2] - p0["rbp"].iloc[2] == pytest.approx(0.05 * 85_000, rel=0.02) | |
| 164 | + | |
| 165 | +def test_elasticites(D): | |
| 166 | + e = c.elasticites(D) | |
| 167 | + assert e["dV_par_point_rotation"] > 0 and e["dV_par_point_base"] > 0 | |
| 168 | + assert e["dV_par_point_rotation"] == pytest.approx(11_877, rel=0.01) | |
| 169 | + assert e["dV_par_point_base"] == pytest.approx(131_236, rel=0.01) | |
| 170 | + | |
| 171 | +# ------------------------------------------------------------------ 5. exercices | |
| 172 | + | |
| 173 | +def test_exercices(): | |
| 174 | + e = c.exercices() | |
| 175 | + assert e["ex1"]["pct"] == pytest.approx(0.03084, abs=1e-5) | |
| 176 | + assert e["ex2"]["montant"] == pytest.approx(10.12, abs=0.01) and e["ex2"]["montant_si_2pct"] == 0.0 | |
| 177 | + assert e["ex3"]["fixation"]["nouveau_loyer"] == 1194 | |
| 178 | + assert e["ex4"]["q_inf"] == pytest.approx(0.9664, abs=0.0001) and e["ex4"]["survie_10"] == pytest.approx(0.3487, abs=0.0001) | |
| 179 | + assert e["ex5"]["rot10_base25"] == pytest.approx(2_049_073, abs=1) and e["ex5"]["rot10_base25_phi05"] == pytest.approx(1_829_294, abs=1) | |
| 180 | + assert e["ex5"]["rot10_base25_recup"] == pytest.approx(2_148_793, abs=1) | |
| 181 | + assert e["ex6"]["indemnite"] == 13_104 and e["ex6"]["recuperation_ans"] == pytest.approx(3.8, abs=0.05) | |
| 182 | + assert e["ex7"]["dq_drho_5"] > e["ex7"]["dq_drho_15"] > 0 | |
modified
assets/figures/ch34/ch34-fig-calcul-tal.pdf
+0 −0
Binary file not shown.
modified
assets/figures/ch34/ch34-fig-ipc-base.pdf
+0 −0
Binary file not shown.
modified
assets/figures/ch34/ch34-fig-rotation-esperee.pdf
+0 −0
Binary file not shown.
modified
assets/figures/ch34/ch34-fig-trajectoires-rbp.pdf
+0 −0
Binary file not shown.
modified
assets/figures/ch34/ch34-fig-valeur-scenarios.pdf
+0 −0
Binary file not shown.
added
assets/figures/ch35/ch35-fig-biais-mediane.pdf
+0 −0
Binary file not shown.
added
assets/figures/ch35/ch35-fig-indices-compares.pdf
+0 −0
Binary file not shown.
added
assets/figures/ch35/ch35-fig-ipln-variation.pdf
+0 −0
Binary file not shown.
added
assets/figures/ch35/ch35-fig-poids-case-shiller.pdf
+0 −0
Binary file not shown.
added
assets/figures/ch35/ch35-fig-revision-filtre.pdf
+0 −0
Binary file not shown.
added
manuscript/_wrap_ch24.tex
+12 −0
@@ -0,0 +1,12 @@ | ||
| 1 | +\providecommand{\BUILDVARIANT}{uqo}\providecommand{\BUILDMEDIA}{numerique} | |
| 2 | +\documentclass[10pt,twoside,openright]{book} | |
| 3 | +\newif\ifLogoAutorise\LogoAutorisefalse\def\PALETTE{uqo} | |
| 4 | +\usepackage{traite-qc} | |
| 5 | +\input{../manuscript/frontmatter/metadata.tex} | |
| 6 | +\input{/Users/simon-pierreboucher/Desktop/UQO/Traite-Evaluation-QC/build/ch24/_labels.tex} | |
| 7 | +\begin{document} | |
| 8 | +\setcounter{chapter}{23} | |
| 9 | +\input{chapters/ch24.tex} | |
| 10 | +\appendix\chapter{Solutions du chapitre}\input{../solutions/ch24.tex} | |
| 11 | +\printbibliography | |
| 12 | +\end{document} | |
modified
manuscript/chapters/ch14.tex
+4 −4
@@ -222,7 +222,7 @@ La \cref{fig:14:levier} montre les 581 ventes de la première itération dans le | ||
| 222 | 222 | \begin{table}[htbp] |
| 223 | 223 | \caption{Les huit ventes exclues par les scores robustes (S1) et par la régression (E1), avec leur nature réelle dans la table de vérité (données synthétiques)}\label{tab:14:exclus} |
| 224 | 224 | \centering |
| 225 | −\footnotesize\setlength{\tabcolsep}{3pt} | |
| 225 | +\let\small\footnotesize\setlength{\tabcolsep}{2.5pt} | |
| 226 | 226 | \begin{tabular}{llS[table-format=3.0]S[table-format=6.0]S[table-format=-1.2]S[table-format=-1.2]S[table-format=-1.2]S[table-format=1.3]l} |
| 227 | 227 | \toprule |
| 228 | 228 | Inscr. & Secteur & {Sup. (m\textsuperscript{2})} & {Prix (\$)} & {$z$ prix/m\textsuperscript{2}} & {$z$ terrain} & {$t_i$} & {$D_i$} & Nature réelle \\ |
@@ -260,7 +260,7 @@ Faute d'adresses réelles à géocoder, on peut mesurer ce que coûte une erreur | ||
| 260 | 260 | \begin{table}[htbp] |
| 261 | 261 | \caption{Effet simulé d'une erreur de position sur les variables spatiales du cas 1, par technique de géocodage (écarts-types hypothétiques)}\label{tab:14:geocodage} |
| 262 | 262 | \centering |
| 263 | −\footnotesize\setlength{\tabcolsep}{3.5pt} | |
| 263 | +\let\small\footnotesize\setlength{\tabcolsep}{3.5pt} | |
| 264 | 264 | \begin{tabular}{lS[table-format=4.0]S[table-format=4.0]S[table-format=4.0]S[table-format=1.2]S[table-format=2.1]S[table-format=-1.4]} |
| 265 | 265 | \toprule |
| 266 | 266 | Technique & {$\sigma_g$ (m)} & {Err. méd. (m)} & {95\textsuperscript{e} cent. (m)} & {Rayon modifié (\%)} & {Voisins conservés (\%)} & {$\hat\beta_{\text{dist}}$} \\ |
@@ -344,7 +344,7 @@ Le \cref{tab:14:imputation} compare les quatre traitements sur le cas 1, toute l | ||
| 344 | 344 | \begin{table}[htbp] |
| 345 | 345 | \caption{Quatre traitements des 45 valeurs manquantes du jeu brut du cas 1 et leur effet sur le modèle hédonique (données synthétiques)}\label{tab:14:imputation} |
| 346 | 346 | \centering |
| 347 | −\footnotesize\setlength{\tabcolsep}{4pt} | |
| 347 | +\let\small\footnotesize\setlength{\tabcolsep}{4pt} | |
| 348 | 348 | \begin{tabular}{lS[table-format=3.0]S[table-format=1.4]S[table-format=1.4]S[table-format=1.4]S[table-format=1.4]S[table-format=6.0]} |
| 349 | 349 | \toprule |
| 350 | 350 | Traitement & {$n$} & {$\sigma$} & {$\hat\beta_{\ln T}$} & {e.-t.} & {$\hat\beta_{\text{qual.}}$} & {Prédiction (\$)} \\ |
@@ -397,7 +397,7 @@ La chaîne de traitement enchaîne les étapes des sections précédentes dans l | ||
| 397 | 397 | \begin{table}[htbp] |
| 398 | 398 | \caption{Le modèle hédonique de référence réestimé à chaque étape du nettoyage et sur le jeu propre (données synthétiques)}\label{tab:14:modeles} |
| 399 | 399 | \centering |
| 400 | −\footnotesize\setlength{\tabcolsep}{3pt} | |
| 400 | +\let\small\footnotesize\setlength{\tabcolsep}{2.5pt} | |
| 401 | 401 | \begin{tabular}{lS[table-format=3.0]S[table-format=1.3]S[table-format=1.4]S[table-format=1.4]S[table-format=1.4]S[table-format=1.4]S[table-format=1.2]S[table-format=1.4]S[table-format=6.0]} |
| 402 | 402 | \toprule |
| 403 | 403 | Jeu & {$n$} & {$R^2$} & {$\sigma$} & {$\hat\beta_{\ln S}$} & {e.-t.} & {$\hat\beta_{\text{qual.}}$} & {Mois (\%)} & {$\hat\beta_{\text{Aylm.}}$} & {Préd. (\$)} \\ |
modified
manuscript/chapters/ch22.tex
+2 −2
@@ -92,7 +92,7 @@ Ouvrages extérieurs & m\textsuperscript{2}, m lin., forfait & aires du balcon, | ||
| 92 | 92 | |
| 93 | 93 | \subsection{Les documents et leurs cotes} |
| 94 | 94 | |
| 95 | −Le jeu de plans d'une résidence comprend un plan d'implantation, qui positionne le bâtiment sur le lot et donne les marges de recul et le niveau du sol fini ; un plan par niveau, sous-sol, rez-de-chaussée et étage, qui montre les murs, les cloisons, les ouvertures, les escaliers et l'affectation des pièces ; une ou plusieurs coupes, qui donnent les hauteurs de plancher à plancher, l'épaisseur des planchers, la hauteur des murs de fondation, la profondeur des semelles et la pente du toit ; des élévations, qui montrent les façades, les hauteurs de revêtement et la position des ouvertures ; et des détails de construction. Le devis descriptif, lorsqu'il existe, précise les matériaux et les finis que le plan ne montre pas : type de revêtement, épaisseur d'isolant, essence du plancher. La première habileté du métré est de savoir quelle cote lire et à quel endroit. Les dimensions hors tout d'un plan d'architecte sont presque toujours données à la face externe des murs extérieurs, parce que c'est la cote que l'excavateur et le fondeur utilisent ; les dimensions des pièces, lorsqu'elles sont indiquées, le sont à la face interne des murs finis ; et les longueurs de murs de fondation se calculent à l'axe, parce qu'un mur d'angle ne doit pas être compté deux fois. Une erreur de référence de quelques centimètres sur un périmètre de quarante mètres ne pèse pas lourd sur une surface, mais elle change de 2 à 4 \% le volume d'un mur de fondation. | |
| 95 | +Le jeu de plans d'une résidence comprend un plan d'implantation, qui positionne le bâtiment sur le lot et donne les marges de recul et le niveau du sol fini ; un plan par niveau, sous-sol, rez-de-chaussée et étage, qui montre les murs, les cloisons, les ouvertures, les escaliers et l'affectation des pièces ; une ou plusieurs coupes, qui donnent les hauteurs de plancher à plancher, l'épaisseur des planchers, la hauteur des murs de fondation, la profondeur des semelles et la pente du toit ; des élévations, qui montrent les façades, les hauteurs de revêtement et la position des ouvertures ; et des détails de construction. Le devis descriptif, lorsqu'il existe, précise les matériaux et les finis que le plan ne montre pas : type de revêtement, épaisseur d'isolant, essence du plancher. La première habileté du métré est de savoir quelle cote lire et à quel endroit. Les dimensions hors tout d'un plan d'architecte sont presque toujours données à la face externe des murs extérieurs, parce que c'est la cote que l'excavateur et le fondeur utilisent ; les dimensions des pièces, lorsqu'elles sont indiquées, le sont à la face interne des murs finis ; et les longueurs de murs de fondation se calculent à l'axe, parce qu'un mur d'angle ne doit pas être compté deux fois. | |
| 96 | 96 | |
| 97 | 97 | \subsection{Les conventions de superficie} |
| 98 | 98 | |
@@ -318,7 +318,7 @@ Le prix unitaire installé d'un poste se décompose en quatre termes : le coût | ||
| 318 | 318 | \begin{equation}\label{eq:22:prix-unitaire} |
| 319 | 319 | p_k = \bigl[m_k(1 + w_k) + h_k\,s_k + e_k\bigr](1 + \mu_k), |
| 320 | 320 | \end{equation} |
| 321 | −où $m_k$ est le prix d'achat du matériau par unité d'ouvrage, $w_k$ le taux de pertes, $h_k$ la productivité inverse en heures par unité, $s_k$ le taux horaire chargé du métier, $e_k$ l'équipement et $\mu_k$ la marge du sous-traitant. Trois observations découlent de cette structure. La première est que la part de la main-d'œuvre varie énormément d'un poste à l'autre : faible pour une thermopompe ou des fenêtres, où le matériau domine, élevée pour le tirage de joints, la peinture ou la pose de céramique, où elle dépasse souvent la moitié du prix ; l'indexation d'un devis par un indice unique, comme au \cref{ch:21}, suppose que la composition du devis ressemble à celle du panier de l'indice. La deuxième est que la productivité $h_k$ est la grandeur la plus incertaine : elle dépend de la complexité du plan, de l'accès, de la saison et de la qualité d'exécution exigée, et c'est par elle que deux soumissions pour le même ouvrage diffèrent le plus. La troisième est que la marge $\mu_k$ du sous-traitant est déjà dans le prix : l'incitatif de l'entrepreneur du \cref{ch:21} rémunère la coordination et le risque du projet, non le métier, et un devis composé de prix de sous-traitants installés ne doit pas se voir appliquer une seconde marge de métier. | |
| 321 | +où $m_k$ est le prix d'achat du matériau par unité d'ouvrage, $w_k$ le taux de pertes, $h_k$ la productivité inverse en heures par unité, $s_k$ le taux horaire chargé du métier, $e_k$ l'équipement et $\mu_k$ la marge du sous-traitant. Trois observations découlent de cette structure. La première est que la part de la main-d'œuvre varie énormément d'un poste à l'autre : faible pour une thermopompe ou des fenêtres, où le matériau domine, élevée pour le tirage de joints, la peinture ou la pose de céramique, où elle dépasse souvent la moitié du prix. La deuxième est que la productivité $h_k$ est la grandeur la plus incertaine : elle dépend de la complexité du plan, de l'accès, de la saison et de la qualité d'exécution exigée, et c'est par elle que deux soumissions pour le même ouvrage diffèrent le plus. La troisième est que la marge $\mu_k$ du sous-traitant est déjà dans le prix : l'incitatif de l'entrepreneur du \cref{ch:21} rémunère la coordination et le risque du projet, non le métier, et un devis composé de prix de sous-traitants installés ne doit pas se voir appliquer une seconde marge de métier. | |
| 322 | 322 | |
| 323 | 323 | Le taux horaire chargé $s_k$ est, au Québec, une donnée largement réglementée. Les salaires de l'industrie de la construction sont fixés par les conventions collectives sectorielles négociées sous l'égide de la Commission de la construction du Québec, par métier et par statut (apprenti, compagnon), dans quatre secteurs : génie civil et voirie, industriel, institutionnel et commercial, et résidentiel, ce dernier distinguant le résidentiel léger du résidentiel lourd ; l'employeur a l'obligation de payer les salariés selon les conventions en vigueur, et la CCQ publie un outil de consultation des taux par date et par secteur, les textes des conventions ayant priorité en cas de divergence \parencite{ccqSalaires}. Le taux chargé ajoute au salaire les avantages sociaux, les cotisations et les charges de l'employeur, qui en représentent une fraction importante. Le chapitre ne chiffre aucun taux horaire, parce qu'ils varient par métier et par date et qu'ils n'ont pas été relevés dans le registre de sources de l'ouvrage ; l'évaluateur qui construit ou vérifie un prix unitaire doit consulter la convention applicable à la date des travaux. Ce qu'il faut retenir pour la méthode du coût, c'est que la main-d'œuvre réglementée est l'un des moteurs de la hausse des coûts de construction mesurée par l'IPCB (\cref{fig:21:ipcb}) et que l'écart entre un prix unitaire d'un guide calibré sur Montréal et le coût réel dans une autre région tient en partie à la structure des secteurs et des métiers mobilisés. |
| 324 | 324 | |
modified
manuscript/chapters/ch24.tex
+16 −16
@@ -44,7 +44,7 @@ a_{\mathrm{eff}} = \min\big\{\max\{(1-\lambda)\,a + \lambda\,\varphi(c)\,L,\ 0\} | ||
| 44 | 44 | \end{equation} |
| 45 | 45 | ce qui est l'\cref{eq:11:aeff}. L'encadré qui suit rappelle ce que cette convention donne pour le sujet du cas 1 ; le présent chapitre en hérite sans la modifier, de sorte que l'inspection, la dépréciation et la réconciliation finale reposent sur une seule fiche d'état. |
| 46 | 46 | |
| 47 | −\begin{pratique}[{De l'inspection à l'âge effectif : ce que le \cref{ch:11} transmet au \cref{ch:24}}] | |
| 47 | +\begin{pratique}[De l'inspection à l'âge effectif : ce que le \cref{ch:11} transmet au \cref{ch:24}] | |
| 48 | 48 | L'inspection synthétique du cottage de Hull (\cref{sec:11:etat}, \cref{tab:11:fiche}) classe dix-neuf composantes de courte ou moyenne durée et un bloc de longue durée (structure, fondations, dalle, drain, isolation, cloisons). Les notes d'état vont de 2 à 5 ; l'indice d'état pondéré par les coûts neufs est de 2,81, soit un bâtiment un peu meilleur que la moyenne de son âge. Le bloc de longue durée, noté 3 pour une fissure de retrait fine et une charpente droite, reçoit par l'\cref{eq:24:age-effectif} un âge effectif de $0{,}5 \times 28 + 0{,}5 \times 0{,}5 \times 60 = 29$ ans, contre 28 ans d'âge chronologique ; avec une vie économique de 60 ans, la vie restante est de 31 ans. Pondéré par les coûts neufs, le ratio âge effectif sur vie utile de l'ensemble des composantes vaut 0,547, soit l'équivalent de 32,8 ans sur 60 : les composantes de courte durée sont, en moyenne, plus avancées dans leur vie que la structure. Cinq travaux immédiats ont été relevés (entrée asphaltée en fin de vie, fissure de fondation à injecter, deux thermos embués, balcon à réparer, solin et gouttière), pour un coût de \dollars{10479.98} (\cref{tab:11:travaux}) : c'est la dépréciation physique curable dont la \cref{sec:24:physique} part. Toute modification de la fiche d'état doit se faire au \cref{ch:11} et se propager ici par le script \texttt{analysis/python/cases/ch11\_inspection.py}, que le script du présent chapitre importe. |
| 49 | 49 | \end{pratique} |
| 50 | 50 | |
@@ -125,14 +125,14 @@ Pour le sujet, la fiche d'état du \cref{ch:11} compte dix-huit composantes de c | ||
| 125 | 125 | \begin{table}[tbp] |
| 126 | 126 | \caption{Dépréciation ventilée des composantes de courte durée du sujet du cas 1 : coût neuf (devis majoré des indirects et de l'incitatif, facteur 1,33043), année d'installation, note d'état, âge effectif, vie utile et dépréciation imputée. L'entrée asphaltée, remplacée intégralement au titre du curable, n'y figure pas.}\label{tab:24:composantes} |
| 127 | 127 | \centering\footnotesize |
| 128 | −\begin{tabular}{@{}L{46mm} S[table-format=4.0] S[table-format=1.0] S[table-format=2.1] S[table-format=2.0] S[table-format=5.2] S[table-format=5.2] S[table-format=3.1]@{}} | |
| 128 | +\begin{tabular}{@{}L{40mm} S[table-format=4.0] S[table-format=1.0] S[table-format=2.1] S[table-format=2.0] S[table-format=5.2] S[table-format=5.2] S[table-format=3.1]@{}} | |
| 129 | 129 | \toprule |
| 130 | 130 | Composante & {Année} & {État} & {$a_k$} & {$L_k$} & {Coût neuf (\$)} & {Dépréciation (\$)} & {Ratio (\%)} \\ |
| 131 | 131 | \midrule |
| 132 | −Revêtement extérieur (brique, fibrociment) & 1998 & 2 & 19.0 & 40 & 38083.30 & 18089.57 & 47.5 \\ | |
| 132 | +Revêtement extérieur & 1998 & 2 & 19.0 & 40 & 38083.30 & 18089.57 & 47.5 \\ | |
| 133 | 133 | Armoires de cuisine et comptoirs & 1998 & 3 & 21.5 & 30 & 23080.82 & 16541.25 & 71.7 \\ |
| 134 | 134 | Fenêtres (PVC, double vitrage) & 1998 & 3 & 21.5 & 30 & 22311.42 & 15989.85 & 71.7 \\ |
| 135 | −Électricité (entrée 200 A, filage, éclairage) & 1998 & 2 & 20.2 & 50 & 22792.32 & 9230.89 & 40.5 \\ | |
| 135 | +Électricité (entrée, filage, éclairage) & 1998 & 2 & 20.2 & 50 & 22792.32 & 9230.89 & 40.5 \\ | |
| 136 | 136 | Plomberie (cuivre et PEX) & 1998 & 2 & 20.2 & 50 & 22215.26 & 8997.18 & 40.5 \\ |
| 137 | 137 | Balcon et perron & 1998 & 4 & 23.4 & 25 & 8751.44 & 8182.59 & 93.5 \\ |
| 138 | 138 | Thermopompe centrale et plinthes & 2016 & 3 & 8.8 & 15 & 13944.66 & 8134.39 & 58.3 \\ |
@@ -143,7 +143,7 @@ Aménagement paysager & 1998 & 3 & 19.0 & 20 & 6251.05 & 5938.50 & 95.0 \\ | ||
| 143 | 143 | Portes extérieures et porte de garage & 1998 & 3 & 21.5 & 30 & 7982.10 & 5720.51 & 71.7 \\ |
| 144 | 144 | Peinture intérieure & 2021 & 2 & 3.8 & 10 & 8347.65 & 3130.37 & 37.5 \\ |
| 145 | 145 | Planchers flottants (sous-sol) & 2009 & 4 & 16.0 & 20 & 3702.85 & 2962.28 & 80.0 \\ |
| 146 | −Vanités et accessoires (2 salles de bain) & 2015 & 2 & 8.6 & 25 & 7212.75 & 2488.40 & 34.5 \\ | |
| 146 | +Vanités et accessoires (2 sdb) & 2015 & 2 & 8.6 & 25 & 7212.75 & 2488.40 & 34.5 \\ | |
| 147 | 147 | Planchers de céramique & 1998 & 2 & 18.4 & 35 & 4543.82 & 2385.50 & 52.5 \\ |
| 148 | 148 | Gouttières et solins & 1998 & 4 & 23.4 & 25 & 2077.39 & 1942.36 & 93.5 \\ |
| 149 | 149 | Chauffe-eau électrique & 2019 & 2 & 5.0 & 12 & 1538.72 & 641.13 & 41.7 \\ |
@@ -164,7 +164,7 @@ Total, 18 composantes & & & & & 221517.66 & 130584.55 & 58.9 \\ | ||
| 164 | 164 | \begin{table}[tbp] |
| 165 | 165 | \caption{Quatre lectures de la dépréciation physique du sujet du cas 1 ($C_N = \dollars{397567.33}$, vie économique 60 ans).}\label{tab:24:lectures} |
| 166 | 166 | \centering\small |
| 167 | −\begin{tabular}{@{}l l S[table-format=6.2] S[table-format=2.2]@{}} | |
| 167 | +\begin{tabularx}{\textwidth}{@{}L{36mm} Y S[table-format=6.2] S[table-format=2.2]@{}} | |
| 168 | 168 | \toprule |
| 169 | 169 | Méthode & Paramètres & {$D_{\text{phys}}$ (\$)} & {Taux (\%)} \\ |
| 170 | 170 | \midrule |
@@ -173,7 +173,7 @@ Méthode & Paramètres & {$D_{\text{phys}}$ (\$)} & {Taux (\%)} \\ | ||
| 173 | 173 | Âge-vie modifiée & curable \dollars{10479.98} + reste $\times 29/60$ & 197572.20 & 49.70 \\ |
| 174 | 174 | Ventilée & curable + 18 composantes + base \dollars{165569.69} $\times 29/60$ & 221089.88 & 55.61 \\ |
| 175 | 175 | \bottomrule |
| 176 | −\end{tabular} | |
| 176 | +\end{tabularx} | |
| 177 | 177 | \tabsource{\synth{\texttt{analysis/python/cases/ch24\_depreciation.py}, fonction \texttt{variantes\_physique}} ; fonctions \texttt{depreciation\_age\_vie}, \texttt{depreciation\_age\_vie\_modifiee}, \texttt{depreciation\_ventilee} de \texttt{traite.cout}.} |
| 178 | 178 | \end{table} |
| 179 | 179 | |
@@ -235,7 +235,7 @@ La répartition par $\omega_B$ repose sur l'hypothèse que la nuisance réduit l | ||
| 235 | 235 | |
| 236 | 236 | La désuétude externe a un pendant que la pratique nomme rarement : lorsque la demande excède l'offre, les prix des bâtiments existants peuvent dépasser la somme de la valeur du terrain et du coût neuf déprécié. L'écart est alors une prime de rareté ou d'immédiateté, et non une désuétude négative ; la méthode du coût, qui raisonne du côté de l'offre, ne la capte pas, ce qui fait d'elle, dans de tels marchés, une borne inférieure plutôt qu'une estimation centrale. Le \cref{ch:21} a signalé le phénomène ; la \cref{sec:24:extraction} le rencontre concrètement, puisque la dépréciation extraite de certaines ventes récentes du cas 1 est négative. L'évaluateur qui observe des dépréciations extraites négatives doit en conclure que le marché paie une prime, ou que la valeur du terrain est sous-estimée, et non que les bâtiments s'apprécient physiquement. |
| 237 | 237 | |
| 238 | −\begin{quebec}[{État de l'unité, rôle d'évaluation et dépréciation au Québec}] | |
| 238 | +\begin{quebec}[État de l'unité et dépréciation au rôle d'évaluation québécois] | |
| 239 | 239 | La Loi sur la fiscalité municipale fonde la valeur réelle sur « l'état de l'unité d'évaluation » à la date de référence, et précise que cet état « comprend, outre son état physique, sa situation au point de vue économique et juridique » ainsi que « l'environnement dans lequel elle se trouve » \parencite[art.~46 al.~3]{lfm} : la loi reconnaît ainsi, sans employer ces mots, les trois familles de dépréciation du présent chapitre, l'état physique pour la dépréciation physique, la situation économique et juridique pour les désuétudes fonctionnelle et externe, l'environnement pour la désuétude de localisation. Lorsque le coût est la méthode la plus pertinente, l'évaluateur municipal applique la partie 3E du Manuel d'évaluation foncière du Québec, rendue obligatoire par le Règlement sur le rôle d'évaluation foncière \parencite[art.~8]{reglrole} ; la valeur du bâtiment qui figure au rôle est donc un coût de remplacement déprécié, calibré à la date de référence du rôle, le 1\ier{} juillet 2025 pour le rôle 2027-2029 de Gatineau \parencite[art.~46 al.~1]{lfm}, et non à la date d'une évaluation privée \parencite{mefq2026}. Les barèmes et les tables de dépréciation du Manuel sont librement consultables mais protégés par le droit d'auteur du gouvernement du Québec ; ils ne sont ni reproduits ni paraphrasés dans leurs valeurs ici, et leur contenu détaillé n'a pas été dépouillé pour ce chapitre, ce qui est signalé dans les limites. Pour l'évaluateur privé, la répartition terrain-bâtiment du rôle, diffusée en données ouvertes sous licence CC-BY 4.0 avec interdiction de réidentification \parencite{dqroles}, est une source utile pour estimer la part du bâtiment $\omega_B$ d'un voisinage et pour recouper une valeur de terrain extraite du marché, à la condition de se souvenir qu'elle date de la date de référence et qu'elle résulte d'une évaluation de masse (\cref{ch:09}). Enfin, les normes de pratique de l'OEAQ exigent que le rapport expose le raisonnement qui conduit à la conclusion \parencite{oeaqNormes} : les durées de vie, les âges effectifs, les parts du bâtiment et la source de toute dépréciation extraite du marché font partie de ce raisonnement et doivent y figurer, de même que les IVS demandent que l'approche par le coût soit documentée et justifiée \parencite[IVS 103, sect.~70]{ivs2025}. |
| 240 | 240 | \end{quebec} |
| 241 | 241 | |
@@ -255,7 +255,7 @@ Le marché synthétique du cas 1 permet de dérouler la méthode de bout en bout | ||
| 255 | 255 | |
| 256 | 256 | \begin{table}[tbp] |
| 257 | 257 | \caption{Valeur du terrain extraite des ventes récentes (âge de dix ans ou moins) par secteur, cas 1 : $V_L = P^{\text{aj}} - C_N(1 - a/60)$, médiane par secteur, part médiane du prix et valeur par mètre carré du terrain médian.}\label{tab:24:terrain} |
| 258 | −\centering\small | |
| 258 | +\centering\footnotesize | |
| 259 | 259 | \begin{tabular}{@{}l S[table-format=2.0] S[table-format=6.0] S[table-format=5.0] S[table-format=2.1] S[table-format=4.0] S[table-format=3.0]@{}} |
| 260 | 260 | \toprule |
| 261 | 261 | Secteur & {Ventes} & {$V_L$ médiane (\$)} & {Écart-type (\$)} & {Part du prix (\%)} & {Terrain médian (m²)} & {\$/m²} \\ |
@@ -317,7 +317,7 @@ d_B(a) = \frac{d_{\text{tot}}(a)}{1 - \alpha}, \qquad \alpha = \frac{V_L}{P_{\te | ||
| 317 | 317 | \end{equation} |
| 318 | 318 | où $P_{\text{neuf}}$ est le prix du bien s'il était neuf. La conversion suppose que la valeur du terrain est la même pour le bien neuf et pour le bien âgé, ce qui est l'hypothèse de la méthode du coût elle-même. Pour le sujet, le modèle prédit un prix de \dollars{720727} s'il était neuf, avec la correction de Duan et à la date d'évaluation ; avec $V_L = \dollars{277000}$, la part du terrain est $\alpha = 0{,}384$. À 28 ans, le profil hédonique donne $d_{\text{tot}} = \pct{11.48}$ et, converti, $d_B = \pct{18.65}$ ; à 60 ans, \pct{19.0} et \pct{30.9}. |
| 319 | 319 | |
| 320 | −Le jeu de données étant synthétique, on connaît aussi la loi qui l'a engendré : d'après \texttt{data/synthetic/README.md}, le logarithme du prix contient le terme $-0{,}0055\,a + 0{,}00003\,a^2$, de sorte que le « vrai » profil est $1 - \exp(-0{,}0055\,a + 0{,}00003\,a^2)$, soit \pct{12.23} à 28 ans et \pct{19.86} une fois converti au bâtiment. Le modèle hédonique estimé sur 600 ventes le retrouve à un point près, ce qui est une validation de la procédure d'estimation plutôt qu'une information sur le marché réel de Gatineau. La \cref{fig:24:courbes}(b) superpose les quatre profils : la droite âge-vie de 60 ans, la courbe extraite du marché par l'\cref{eq:24:extraction-quad}, la courbe hédonique convertie et le profil du générateur converti. Les trois derniers sont proches les uns des autres, à \pct{18.7}, \pct{19.9} et \pct{22.0} à 28 ans, et tous très en dessous de la droite, à \pct{46.7} ; la dépréciation ventilée du sujet, \pct{55.6}, est plus haute encore. La cohérence des trois courbes de marché n'est pas un hasard : l'extraction et le modèle hédonique lisent le même marché par deux voies, l'une en passant par un coût neuf et une valeur de terrain, l'autre en estimant directement l'effet de l'âge, et le fait qu'elles concordent indique que les hypothèses de transposition du coût neuf et d'allocation du terrain sont compatibles avec les prix. L'extraction est légèrement au-dessus de la courbe hédonique convertie parce qu'elle mesure la dépréciation totale, désuétudes comprises, de bâtiments dont la qualité moyenne de construction n'est pas exactement celle du sujet, et parce que le polynôme ajusté sur les taux individuels n'est pas la transformation exacte du polynôme ajusté sur les logarithmes de prix. | |
| 320 | +Le jeu de données étant synthétique, on connaît aussi la loi qui l'a engendré : d'après la description des données synthétiques du dépôt (\texttt{README.md}), le logarithme du prix contient le terme $-0{,}0055\,a + 0{,}00003\,a^2$, de sorte que le « vrai » profil est $1 - \exp(-0{,}0055\,a + 0{,}00003\,a^2)$, soit \pct{12.23} à 28 ans et \pct{19.86} une fois converti au bâtiment. Le modèle hédonique estimé sur 600 ventes le retrouve à un point près, ce qui est une validation de la procédure d'estimation plutôt qu'une information sur le marché réel de Gatineau. La \cref{fig:24:courbes}(b) superpose les quatre profils : la droite âge-vie de 60 ans, la courbe extraite du marché par l'\cref{eq:24:extraction-quad}, la courbe hédonique convertie et le profil du générateur converti. Les trois derniers sont proches les uns des autres, à \pct{18.7}, \pct{19.9} et \pct{22.0} à 28 ans, et tous très en dessous de la droite, à \pct{46.7} ; la dépréciation ventilée du sujet, \pct{55.6}, est plus haute encore. La cohérence des trois courbes de marché n'est pas un hasard : l'extraction et le modèle hédonique lisent le même marché par deux voies, l'une en passant par un coût neuf et une valeur de terrain, l'autre en estimant directement l'effet de l'âge, et le fait qu'elles concordent indique que les hypothèses de transposition du coût neuf et d'allocation du terrain sont compatibles avec les prix. L'extraction est légèrement au-dessus de la courbe hédonique convertie parce qu'elle mesure la dépréciation totale, désuétudes comprises, de bâtiments dont la qualité moyenne de construction n'est pas exactement celle du sujet, et parce que le polynôme ajusté sur les taux individuels n'est pas la transformation exacte du polynôme ajusté sur les logarithmes de prix. | |
| 321 | 321 | |
| 322 | 322 | \begin{figure}[tbp] |
| 323 | 323 | \centering |
@@ -390,17 +390,17 @@ L'estimation procède en sept étapes : âges et vies, dépréciation physique p | ||
| 390 | 390 | \emph{Étape 6 : rapprochement des deux lectures.} La lecture ventilée donne une dépréciation totale de $\dollars{221089.88} + \dollars{7605.31} = \dollars{228695.19}$, soit \pct{57.52} du coût neuf, et une contribution du bâtiment de \dollars{168872.14}. La lecture extraite donne $\dollars{87461.05} + \dollars{7605.31} = \dollars{95066.36}$, soit \pct{23.91}, et une contribution de \dollars{302500.97}. L'écart de \dollars{133628.83} n'est pas une erreur de calcul mais une divergence de méthode : la première mesure ce que le bâtiment a perdu de sa substance au coût de remplacement, la seconde ce que le marché retranche. Trois raisons conduisent à retenir la seconde pour l'indication de valeur. L'extraction, le modèle hédonique et le profil du générateur concordent à quelques points près (\cref{fig:24:courbes}), alors que la ventilée est seule à son niveau ; les vies utiles de la ventilée sont des hypothèses sans source de marché, déclarées comme telles au \cref{ch:11} ; et la valeur marchande que l'on cherche est, par définition, ce que le marché paierait, non ce qu'il en coûterait de remettre à neuf. La ventilée conserve son utilité : elle a identifié les \dollars{10479.98} de travaux immédiats, que l'acheteur prudent déduira, et dressé le calendrier des remplacements des dix prochaines années (balcon, VRC, gouttières, armoires, fenêtres), qui justifie, dans la réconciliation du \cref{ch:45}, de situer l'indication dans la moitié basse de la fourchette plutôt qu'en son centre. Le curable n'est pas ajouté à la dépréciation extraite parce que l'entretien différé du sujet est typique de son âge et donc déjà contenu dans la courbe ; la carence de salle d'eau est ajoutée parce qu'elle est atypique. |
| 391 | 391 | |
| 392 | 392 | \emph{Étape 7 : indication de valeur par le coût.} Par la fonction \texttt{valeur\_par\_cout} et dans l'ordre des conventions, |
| 393 | −\begin{equation}\label{eq:24:valeur-cas1} | |
| 394 | −\hat V = V_L + C_N - D_{\text{extraite}} - D_{\text{fonc}} - D_{\text{ext}} | |
| 395 | −= \dollars{277000} + \dollars{397567.33} - \dollars{87461.05} - \dollars{7605.31} - 0 = \dollars{579500.97}, | |
| 396 | −\end{equation} | |
| 393 | +\begin{align} | |
| 394 | +\hat V &= V_L + C_N - D_{\text{extraite}} - D_{\text{fonc}} - D_{\text{ext}} \notag\\ | |
| 395 | +&= \dollars{277000} + \dollars{397567.33} - \dollars{87461.05} - \dollars{7605.31} - 0 = \dollars{579500.97}, \label{eq:24:valeur-cas1} | |
| 396 | +\end{align} | |
| 397 | 397 | arrondie à \dollars{580000}. La dépréciation totale retenue est de \dollars{95066.36}, soit \pct{23.91} du coût neuf, et la contribution du bâtiment de \dollars{302500.97}, soit \pct{52.2} de l'indication, le terrain en représentant \pct{47.8}. Sous la lecture ventilée, l'indication n'aurait été que de \dollars{445872.14}. Le \cref{tab:24:recapitulatif} et la \cref{fig:24:decomposition} résument les deux chemins. L'indication de \dollars{580000} est la contribution du présent chapitre à la réconciliation du \cref{ch:45}, où elle sera confrontée à la moyenne des prix ajustés des comparables du \cref{ch:17}, \dollars{581595}, et à la prédiction hédonique du \cref{ch:18}, \dollars{637953} ; la valeur de terrain de \dollars{277000} est l'hypothèse que le \cref{ch:25} doit reprendre ou réviser explicitement. |
| 398 | 398 | \end{exemple} |
| 399 | 399 | |
| 400 | 400 | \begin{table}[tbp] |
| 401 | 401 | \caption{Récapitulatif des deux lectures de la dépréciation du sujet du cas 1 et indication de valeur par le coût (ordre des conventions : physique, fonctionnelle, externe ; $V_L = \dollars{277000}$).}\label{tab:24:recapitulatif} |
| 402 | 402 | \centering\small |
| 403 | −\begin{tabular}{@{}l S[table-format=6.2] S[table-format=6.2]@{}} | |
| 403 | +\begin{tabularx}{\textwidth}{@{}Y S[table-format=6.2] S[table-format=6.2]@{}} | |
| 404 | 404 | \toprule |
| 405 | 405 | Poste & {Lecture ventilée (\$)} & {Lecture retenue (\$)} \\ |
| 406 | 406 | \midrule |
@@ -419,7 +419,7 @@ Valeur du terrain $V_L$ & 277000.00 & 277000.00 \\ | ||
| 419 | 419 | \midrule |
| 420 | 420 | Indication de valeur par le coût & 445872.14 & 579500.97 \\ |
| 421 | 421 | \bottomrule |
| 422 | −\end{tabular} | |
| 422 | +\end{tabularx} | |
| 423 | 423 | \tabsource{\synth{\texttt{analysis/python/cases/ch24\_depreciation.py}, fonction \texttt{valeur\_sujet} ; \texttt{traite.cout.valeur\_par\_cout}}.} |
| 424 | 424 | \end{table} |
| 425 | 425 | |
modified
manuscript/chapters/ch25.tex
+560 −1
@@ -1,2 +1,561 @@ | ||
| 1 | 1 | \chapter{Évaluation du terrain}\label{ch:25} |
| 2 | −\stubchapter | |
| 2 | + | |
| 3 | +La méthode du coût exige que l'on sache ce que vaut le terrain, et la méthode de comparaison le suppose sans le dire : quand deux maisons se vendent à des prix différents, une part de l'écart tient au sol qui les porte. Pourtant, le terrain d'une propriété bâtie ne s'échange jamais seul, et l'évaluateur doit estimer une composante qu'aucune transaction n'observe directement. Le présent chapitre clôt la partie consacrée au coût en traitant cette composante, la valeur du terrain $V_L$ de l'identité $\hat V = V_L + C_N - D$ établie au \cref{ch:21}. Il décrit d'abord pourquoi le terrain est évalué séparément et comme s'il était vacant, puis les unités dans lesquelles les terrains se comparent, les six méthodes dont dispose l'évaluateur (comparaison directe, allocation, extraction, technique résiduelle, lotissement actualisé et capitalisation de la rente foncière), la grille des ajustements propres aux terrains et le cas particulier des terrains intercalaires voués à la densification. L'exemple intégral établit la valeur du terrain de la maison du cas 1 à Gatineau, que les \cref{ch:20,ch:24,ch:45} reprendront ; la technique résiduelle est illustrée sur l'immeuble de douze logements du cas 3, et le lotissement actualisé sur un site fictif de un hectare. Le \cref{ch:41} prolonge ces outils vers l'analyse de la plus haute et meilleure utilisation et vers l'évaluation des terrains de développement proprement dits. | |
| 4 | + | |
| 5 | +\begin{objectifs} | |
| 6 | +À la fin de ce chapitre, le lecteur sait : | |
| 7 | +\begin{itemize} | |
| 8 | +\item expliquer pourquoi le terrain est évalué séparément, réputé vacant et disponible pour sa plus haute et meilleure utilisation, et ce que cette convention implique au rôle d'évaluation foncière et dans la méthode du coût ; | |
| 9 | +\item choisir l'unité de comparaison appropriée (mètre carré, mètre de façade, logement constructible, lot) et comprendre pourquoi la valeur unitaire décroît avec la superficie ; | |
| 10 | +\item appliquer les six méthodes d'évaluation du terrain, en connaître les équations, les données requises et les conditions de validité ; | |
| 11 | +\item construire une grille d'ajustements propre aux terrains (superficie, façade, forme, services, topographie, zonage, localisation, date) à partir d'un modèle hédonique ou de ventes appariées ; | |
| 12 | +\item mesurer l'effet de levier qui frappe toute valeur de terrain obtenue par différence, et en déduire une fourchette plutôt qu'un point ; | |
| 13 | +\item situer les contraintes québécoises du lotissement, de la contribution pour fins de parcs, des zones inondables et de la zone agricole dans l'estimation de la valeur d'un terrain. | |
| 14 | +\end{itemize} | |
| 15 | +\end{objectifs} | |
| 16 | + | |
| 17 | +\section{Pourquoi évaluer le terrain séparément}\label{sec:25:pourquoi} | |
| 18 | + | |
| 19 | +\subsection{Un terrain réputé vacant, à sa plus haute et meilleure utilisation} | |
| 20 | + | |
| 21 | +Trois raisons imposent d'estimer la valeur du terrain comme une grandeur distincte. La première est méthodologique : la méthode du coût additionne la valeur du terrain et le coût déprécié des améliorations, et elle n'a de sens que si les deux termes sont estimés indépendamment, l'un par le marché des terrains, l'autre par le marché de la construction. La deuxième est juridique : au Québec, le rôle d'évaluation foncière inscrit séparément la valeur du terrain et celle du bâtiment de chaque unité, la catégorie fiscale des terrains vagues desservis dépend du rapport entre ces deux valeurs, et plusieurs régimes (contribution pour fins de parcs, expropriation, droits sur les mutations d'un terrain nu, assurance qui exclut le sol) exigent une valeur du terrain à part. La troisième est économique : le terrain ne se déprécie pas et ne se reproduit pas, de sorte que sa valeur se comporte autrement que celle du bâtiment ; la \cref{sec:5:residu} du \cref{ch:05} a montré que la quasi-totalité de la volatilité des prix des logements provient du prix du sol \parencite{davisHeathcote2007,knollSchularickSteger2017}, et une propriété dont le terrain pèse la moitié de la valeur réagira à un retournement du marché bien plus qu'une propriété où il n'en pèse que le quart. | |
| 22 | + | |
| 23 | +\begin{definition}{Valeur du terrain}{valeur-terrain} | |
| 24 | +La \motcle{valeur du terrain} $V_L$ d'une propriété est la valeur marchande, à la date d'évaluation, du fonds de terre réputé vacant et disponible pour sa plus haute et meilleure utilisation, compte tenu de sa superficie, de sa configuration, de ses services, de sa topographie, de sa localisation et des droits et restrictions qui le grèvent (zonage, servitudes, contraintes naturelles). Elle inclut la valeur des améliorations du site qui le rendent constructible (nivellement, raccordements, accès) lorsque les terrains comparables en sont pourvus, et elle exclut la valeur des bâtiments. | |
| 25 | +\end{definition} | |
| 26 | + | |
| 27 | +La convention du terrain vacant appelle deux précisions. D'abord, l'utilisation à laquelle on l'évalue est celle qui en serait faite s'il était libre, non celle du bâtiment qui s'y trouve. Pour la plupart des maisons unifamiliales dans un quartier établi, les deux coïncident : le terrain vaut ce qu'il vaut pour y construire une maison semblable. Elles divergent dès qu'un changement de zonage, une pression de densification ou un bâtiment en fin de vie font de la démolition et de la reconstruction une option crédible, et la valeur du terrain peut alors dépasser celle de la propriété bâtie, ce qui est le signe que le bâtiment ne contribue plus rien ; le \cref{ch:41} traite ce cas. Ensuite, la convention exige que l'on dise ce que le terrain « comprend » : un terrain viabilisé dont les raccordements à l'aqueduc et à l'égout sont faits vaut plus qu'un terrain brut, et si la valeur du terrain est estimée par comparaison avec des terrains viabilisés, le coût des raccordements ne doit pas figurer une seconde fois dans le coût neuf du bâtiment, double comptage que le \cref{ch:21} a déjà signalé. | |
| 28 | + | |
| 29 | +Les normes professionnelles ne prescrivent pas une méthode d'évaluation du terrain, mais elles exigent que le rapport expose le raisonnement, les données et les méthodes retenues et qu'il motive le rejet des autres \parencite{oeaqNormes,cuspap2026}. Il est d'usage, dans la pratique nord-américaine, de tenir la comparaison directe avec des ventes de terrains vacants pour la méthode privilégiée et de ne recourir aux méthodes indirectes, qui obtiennent le terrain par différence ou par résidu, que lorsque les ventes de terrains manquent \parencite{appraisal2026,achour1992}. Cette hiérarchie n'est pas une exigence normative ; elle découle de l'effet de levier que la section suivante rappelle. | |
| 30 | + | |
| 31 | +\subsection{Le terrain comme résidu et l'effet de levier} | |
| 32 | + | |
| 33 | +Le \cref{ch:05} a posé que la rente foncière est ce qui reste une fois rémunérés les autres facteurs, et il en a tiré la méthode résiduelle $V_L = V - (C_N - D)$ ainsi que l'effet de levier $\Delta V_L / V_L = (V/V_L)\,\Delta V / V$ à bâtiment donné. Ce résultat gouverne tout le chapitre. Toute méthode qui obtient le terrain par différence entre deux grandeurs du même ordre, la valeur de la propriété et le coût déprécié du bâtiment, ou le revenu net et le revenu attribuable au bâtiment, reporte en entier sur le terrain l'erreur commise sur l'autre terme. Si le terrain représente 45 \% de la valeur, une erreur de 5 \% sur la valeur de la propriété devient une erreur de 11 \% sur le terrain ; une erreur de 10 \% sur la dépréciation du bâtiment, qui ne pèse que quelques points de la valeur totale, se traduit par une erreur de même montant en dollars sur le terrain, donc proportionnellement bien plus grande. L'évaluateur qui dispose de ventes de terrains vacants échappe à ce levier, puisqu'il observe directement ce qu'il cherche ; celui qui n'en dispose pas doit présenter une fourchette et documenter avec un soin particulier le terme qu'il soustrait. L'exemple intégral de la \cref{sec:25:exemple} chiffre ce levier sur le cas 1, et la \cref{sec:25:residuelle-cas3} sur le cas 3. | |
| 34 | + | |
| 35 | +\begin{quebec}[Le terrain dans la Loi sur la fiscalité municipale] | |
| 36 | +L'unité d'évaluation est « le plus grand ensemble possible d'immeubles » appartenant au même propriétaire, formé de terrains contigus, utilisés à une même fin prédominante et cessibles « globalement et non par parties, compte tenu de l'utilisation la plus probable » \parencite[art.~34]{lfm} ; c'est donc l'utilisation la plus probable, et non la division cadastrale, qui délimite le terrain à évaluer, et la valeur réelle de l'unité est établie selon cette utilisation la plus probable à la date de référence du rôle \parencite[art.~46 al.~1]{lfm}. Le rôle indique séparément la valeur du terrain et celle du bâtiment ; dans les données ouvertes du rôle diffusées par le ministère des Affaires municipales et de l'Habitation sous licence CC~BY~4.0, ces deux montants figurent dans les champs RL0404A (terrain) et RL0404B (bâtiment) de chaque unité, ce qui permet d'analyser la part du terrain par quartier sans réidentifier les propriétaires \parencite{dqroles,mamhroles2026}. La loi crée en outre une catégorie fiscale des \motcle{terrains vagues desservis} : un terrain desservi par l'aqueduc et l'égout sur lequel il n'y a aucun bâtiment, ou dont la valeur du bâtiment « est inférieure à 10 \% de celle du terrain » \parencite[art.~244.36]{lfm}, et le taux particulier applicable à cette catégorie peut atteindre, selon l'article 244.49, le quadruple du taux de base. La Ville de Québec applique en 2026 un taux de 2,9856~\$ par 100~\$ aux terrains vagues desservis contre 0,7464~\$ aux immeubles de un à cinq logements, soit exactement quatre fois plus \parencite{vqtaux2026}. La répartition terrain--bâtiment au rôle a donc des conséquences fiscales directes, et la qualification d'un terrain en construction comme terrain vague desservi fait l'objet d'un pourvoi devant la Cour suprême du Canada, en délibéré à la date de rédaction \parencite{jardinsverone2025}. Enfin, les ventes de terrains vagues sont plafonnées dans l'échantillon qui sert au calcul de la proportion médiane du rôle \parencite[art.~8 à 10]{reglpropmed}, ce qui rappelle que leur dispersion est plus grande que celle des ventes de propriétés bâties ; la norme de l'IAAO sur les études de ratios admet d'ailleurs pour les terrains vacants un coefficient de dispersion jusqu'à 25, contre 5 à 15 pour les résidences unifamiliales \parencite{iaaoratio2013}. | |
| 37 | +\end{quebec} | |
| 38 | + | |
| 39 | +\section{Les unités de comparaison}\label{sec:25:unites} | |
| 40 | + | |
| 41 | +Les terrains se comparent rarement en prix total, parce que leurs superficies varient davantage que celles des maisons ; il faut une unité commune, et son choix dépend de ce que l'acheteur type achète réellement. Le \cref{tab:25:unites} recense les unités usuelles. Pour un terrain résidentiel unifamilial, l'acheteur achète d'abord le droit d'y construire une maison, puis de l'espace autour ; pour un terrain destiné à un immeuble à logements, il achète un nombre de logements constructibles ou une superficie de plancher ; pour un terrain commercial, la façade sur la rue compte autant que la surface. L'unité doit refléter cette logique, sans quoi les ajustements qui suivent compensent une mauvaise unité au lieu de corriger de vraies différences. | |
| 42 | + | |
| 43 | +\begin{table}[htbp] | |
| 44 | +\caption{Unités de comparaison des terrains et conditions d'emploi}\label{tab:25:unites} | |
| 45 | +\centering\small | |
| 46 | +\begin{tabularx}{\textwidth}{@{}L{34mm}YY@{}} | |
| 47 | +\toprule | |
| 48 | +Unité & Emploi typique & Limite principale \\ | |
| 49 | +\midrule | |
| 50 | +Prix par lot & Lots de lotissement homogènes ; terrains unifamiliaux de taille voisine dans un même secteur & Exige des superficies et des configurations semblables \\ | |
| 51 | +Prix par mètre carré (\$/m\textsuperscript{2}) & Terrains résidentiels de superficies variées ; rôle d'évaluation ; terrains de développement & Suppose une relation proportionnelle alors que la valeur unitaire décroît avec la superficie (\cref{eq:25:unitaire}) \\ | |
| 52 | +Prix par mètre de façade & Terrains commerciaux sur artère ; lots urbains étroits et profonds & Néglige la profondeur et la superficie ; règles de profondeur conventionnelles \\ | |
| 53 | +Prix par logement constructible & Terrains multirésidentiels ; terrains intercalaires ; redéveloppement & Dépend de la densité permise par le zonage et de la faisabilité réelle (\cref{ch:08,ch:41}) \\ | |
| 54 | +Prix par mètre carré de plancher constructible & Terrains à haute densité (copropriétés, tours) & Exige le coefficient d'occupation du sol et la hauteur admissibles \\ | |
| 55 | +Prix par hectare & Terres agricoles, boisés, grands terrains ruraux & Hétérogénéité des sols et des usages ; zone agricole (LPTAA) \\ | |
| 56 | +\bottomrule | |
| 57 | +\end{tabularx} | |
| 58 | +\tabsource{synthèse de l'auteur d'après \textcite{appraisal2026} et la pratique québécoise.} | |
| 59 | +\end{table} | |
| 60 | + | |
| 61 | +\subsection{Pourquoi la valeur unitaire décroît avec la superficie} | |
| 62 | + | |
| 63 | +Le prix par mètre carré d'un terrain résidentiel n'est pas constant : il décroît avec la superficie, et il décroît d'autant plus vite que le terrain dépasse ce que l'usage permis requiert. La raison est que le premier mètre carré, celui qui rend le terrain constructible, vaut beaucoup plus que le dernier, qui n'ajoute qu'un peu de cour. Un terrain de \msq{1200} dans un quartier où le zonage n'autorise qu'une maison ne vaut pas le double d'un terrain de \msq{600} : il permet la même maison et un plus grand jardin, dont l'acheteur type n'est disposé à payer qu'une fraction. On modélise cette relation par une élasticité constante du prix total à la superficie, inférieure à l'unité : | |
| 64 | +\begin{equation}\label{eq:25:elasticite} | |
| 65 | +P_L(T) = P_0 \left(\frac{T}{T_0}\right)^{\varepsilon_T}, \qquad 0 < \varepsilon_T < 1, | |
| 66 | +\end{equation} | |
| 67 | +où $P_0$ est le prix d'un terrain de référence de superficie $T_0$, de sorte que la valeur unitaire | |
| 68 | +\begin{equation}\label{eq:25:unitaire} | |
| 69 | +p_L(T) = \frac{P_L(T)}{T} = \frac{P_0}{T_0}\left(\frac{T}{T_0}\right)^{\varepsilon_T - 1} | |
| 70 | +\end{equation} | |
| 71 | +décroît avec $T$ à un rythme donné par $\varepsilon_T - 1 < 0$. Avec $\varepsilon_T = 0{,}5$, un terrain deux fois plus grand vaut 41 \% de plus au total et 29 \% de moins au mètre carré. L'élasticité se lit dans le marché : c'est le coefficient de $\ln T$ dans une régression du logarithme du prix des terrains sur leurs caractéristiques, et l'exemple intégral l'estime à 0,53 sur le jeu synthétique du chapitre. Elle n'est pas universelle : elle est plus élevée là où le zonage permet de subdiviser ou de densifier, puisque la superficie supplémentaire achète alors des droits de construire, et plus faible dans les quartiers de maisons où le lot minimal est déjà généreux. La règle pratique qui en découle est la même qu'au \cref{ch:16} pour les maisons : l'unité de comparaison corrige la taille au premier ordre seulement, et l'on borne la superficie des comparables avant de calculer des prix unitaires. | |
| 72 | + | |
| 73 | +\subsection{Façade, profondeur et règles conventionnelles} | |
| 74 | + | |
| 75 | +Dans les tissus urbains anciens, où les lots sont étroits et profonds, le prix par mètre de façade a longtemps servi d'unité, parce que la façade commande l'accès, la visibilité et la largeur du bâtiment possible. Des règles de profondeur conventionnelles, dont la plus connue attribue à quatre tranches égales de profondeur des parts décroissantes de la valeur, ont été élaborées pour corriger les écarts de profondeur à façade donnée ; la littérature professionnelle les présente comme des conventions d'un autre âge, utiles pour comprendre la logique de la valeur décroissante en s'éloignant de la rue, mais que rien n'autorise à appliquer sans vérification sur le marché local \parencite{appraisal2026}. Dans l'approche moderne, la façade entre comme une caractéristique parmi d'autres dans la grille d'ajustements ou dans le modèle hédonique, à superficie donnée ; l'exemple intégral montre que son effet, une fois la superficie prise en compte, est faible et mal déterminé pour des terrains unifamiliaux de banlieue, ce qui est attendu lorsque la façade minimale imposée par le règlement de lotissement est respectée par presque tous les lots. | |
| 76 | + | |
| 77 | +\subsection{Le logement constructible comme unité} | |
| 78 | + | |
| 79 | +Pour un terrain destiné à un immeuble à logements ou susceptible de densification, l'unité pertinente est le logement constructible, ou le mètre carré de plancher constructible lorsque la typologie des logements est variable. Le nombre de logements admissibles découle du règlement de zonage : densité maximale par bâtiment, superficie minimale de terrain par logement $s_{\min}$, coefficient d'occupation du sol et marges, dont le \cref{ch:08} a donné la lecture. Si $n(T)$ désigne le nombre de logements réalisables sur un terrain de superficie $T$, la valeur du terrain par logement constructible est | |
| 80 | +\begin{equation}\label{eq:25:logement} | |
| 81 | +v_{\text{log}} = \frac{P_L}{n(T)}, \qquad n(T) = \min\left\{\left\lfloor \frac{T}{s_{\min}} \right\rfloor,\ n_{\max}\right\}, | |
| 82 | +\end{equation} | |
| 83 | +et deux terrains de même superficie mais de zonage différent se comparent par cette unité et non par le mètre carré. L'unité suppose que la densité permise est réellement réalisable, c'est-à-dire que les marges, le stationnement, la forme du lot et les contraintes du site n'empêchent pas d'atteindre $n_{\max}$ ; un terrain irrégulier ou traversé par une servitude peut n'admettre que la moitié des logements que sa superficie laisserait croire. La valeur par logement constructible est aussi celle qu'emploie la méthode du lotissement dans sa version multirésidentielle et l'analyse de PHMU du \cref{ch:41}. | |
| 84 | + | |
| 85 | +\section{Les six méthodes}\label{sec:25:methodes} | |
| 86 | + | |
| 87 | +L'évaluateur dispose de six méthodes, que le \cref{tab:25:methodes} compare et que les sous-sections suivantes dérivent. Trois d'entre elles observent le marché des terrains, directement (comparaison) ou à travers des ratios et des différences tirés de ventes de propriétés bâties (allocation, extraction) ; trois autres raisonnent sur l'usage futur du terrain, par le revenu qu'il permet de dégager (technique résiduelle, capitalisation de la rente) ou par le produit de son développement (lotissement). Les premières sont des méthodes de comparaison déguisées ; les secondes sont des méthodes de revenu appliquées au sol. | |
| 88 | + | |
| 89 | +\begin{table}[htbp] | |
| 90 | +\caption{Les six méthodes d'évaluation du terrain : équation, données requises, conditions de validité}\label{tab:25:methodes} | |
| 91 | +\centering\footnotesize | |
| 92 | +\begin{tabularx}{\textwidth}{@{}L{26mm}L{36mm}YL{36mm}@{}} | |
| 93 | +\toprule | |
| 94 | +Méthode & Équation & Données requises & Validité et principale faiblesse \\ | |
| 95 | +\midrule | |
| 96 | +Comparaison directe & $\hat V_L = \sum_j w_j\,(P_j + \sum_k A_{jk})$ \eqref{eq:25:comparaison} & Ventes récentes de terrains vacants comparables ; prix implicites des ajustements & Méthode privilégiée ; exige un marché de terrains actif, rare dans les quartiers bâtis \\ | |
| 97 | +Allocation & $\hat V_L = a\,\hat V$ \eqref{eq:25:allocation} & Valeur de la propriété ; ratio terrain--valeur du secteur (rôle, ventes neuves, extraction) & Grossière ; le ratio varie avec l'âge, la taille et la qualité du bâtiment ; contrôle de vraisemblance \\ | |
| 98 | +Extraction & $\hat V_L = P - C_N(1-\delta)$ \eqref{eq:25:extraction} & Ventes de propriétés bâties ; coût neuf et dépréciation de leur bâtiment & Fiable pour les bâtiments récents (faible $\delta$) ; levier total de l'erreur sur $\delta$ \\ | |
| 99 | +Technique résiduelle & $\hat V_L = (\NOI - R_B C_B)/R_L$ \eqref{eq:25:residuelle} & RNE stabilisé ; coût déprécié du bâtiment ; taux du terrain et du bâtiment & Bâtiment neuf ou hypothétique représentant la PHMU ; très sensible aux taux ; valeurs négatives possibles \\ | |
| 100 | +Lotissement actualisé & $\hat V_L = \sum_t \dfrac{R_t - C_t - E_t}{(1+r)^t}$ \eqref{eq:25:lotissement} & Prix des lots finis ; coûts de viabilisation, frais, profit ; rythme d'absorption ; taux & Terrains de développement ; nombreuses hypothèses, chacune à documenter \\ | |
| 101 | +Capitalisation de la rente & $\hat V_L = \rho_1/(R_L - g)$ \eqref{eq:25:gordon} & Rente foncière de marché (bail foncier, emphytéose) ; taux ; croissance & Terrains loués ; la rente contractuelle n'est pas toujours celle du marché \\ | |
| 102 | +\bottomrule | |
| 103 | +\end{tabularx} | |
| 104 | +\tabsource{synthèse de l'auteur ; terminologie d'après \textcite{appraisal2026} et \textcite{achour1992}.} | |
| 105 | +\end{table} | |
| 106 | + | |
| 107 | +\subsection{La comparaison directe} | |
| 108 | + | |
| 109 | +La comparaison directe applique aux terrains la logique des \cref{ch:16,ch:17} : sélection de ventes récentes de terrains vacants substituables, vérification des conditions de vente, ajustements de transaction en pourcentage puis ajustements de propriété en dollars, et pondération des prix ajustés. En notant $P_j$ le prix du terrain comparable $j$, $A_{jk}$ l'ajustement monétaire pour la caractéristique $k$, compté du point de vue du sujet, et $w_j$ les pondérations, | |
| 110 | +\begin{equation}\label{eq:25:comparaison} | |
| 111 | +\hat V_L = \sum_{j=1}^{n} w_j \left( P_j + \sum_{k=1}^{K} A_{jk} \right), \qquad \sum_j w_j = 1 . | |
| 112 | +\end{equation} | |
| 113 | +Les ajustements sont dérivés soit de ventes appariées, soit d'un modèle hédonique des terrains ; dans ce dernier cas, l'ajustement pour la caractéristique $k$ est $A_{jk} = B_j\,[\exp(\beta_k (x_{sk} - x_{jk})) - 1]$, appliqué en cascade sur la base $B_j$ déjà ajustée, comme au \cref{ch:17}. Les caractéristiques propres aux terrains, et l'ordre dans lequel elles sont ajustées, font l'objet de la \cref{sec:25:ajustements}. La difficulté de la méthode n'est pas conceptuelle mais empirique : dans un quartier entièrement bâti, les ventes de terrains vacants sont rares, souvent atypiques (terrain enclavé, reliquat, lot issu d'une subdivision), et parfois non sincères (vente à un voisin, à un constructeur lié au vendeur). L'évaluateur élargit alors le rayon et la fenêtre, accepte des terrains de secteurs voisins moyennant un ajustement de localisation, ou recourt aux méthodes indirectes. | |
| 114 | + | |
| 115 | +\subsection{L'allocation} | |
| 116 | + | |
| 117 | +L'allocation repose sur l'observation que, dans un secteur homogène, la part du terrain dans la valeur des propriétés bâties est relativement stable. Si $a$ désigne cette part et $\hat V$ la valeur de la propriété, | |
| 118 | +\begin{equation}\label{eq:25:allocation} | |
| 119 | +\hat V_L = a\,\hat V, \qquad a = \frac{V_L}{V_L + C_N - D} . | |
| 120 | +\end{equation} | |
| 121 | +Le ratio $a$ peut être tiré de trois sources : les ventes de maisons neuves dans des projets où le prix du lot est connu, qui donnent directement $a$ pour des bâtiments non dépréciés ; la répartition terrain--bâtiment du rôle d'évaluation foncière, dont l'encadré précédent a décrit les champs, qui donne un ratio à la date de référence du rôle et selon les barèmes du Manuel d'évaluation foncière ; et l'extraction sur un échantillon de ventes, décrite ci-après, qui produit une distribution de ratios. La méthode est grossière, et elle l'est pour une raison structurelle : à valeur de terrain donnée, la part $a$ croît avec l'âge et décroît avec la taille et la qualité du bâtiment, de sorte qu'un ratio moyen de secteur appliqué à une maison neuve surestime le terrain et appliqué à une vieille maison le sous-estime. Elle a néanmoins deux usages légitimes : fournir une première estimation lorsque rien d'autre n'est disponible, et servir de contrôle de vraisemblance aux autres méthodes ; un terrain estimé à 70 \% de la valeur d'une maison neuve dans un quartier où le rôle en attribue 30 \% au sol appelle une explication. | |
| 122 | + | |
| 123 | +Il faut distinguer la part du terrain de l'élasticité du prix à la superficie du terrain que livre un modèle hédonique sur les propriétés bâties. Le coefficient de $\ln T$ dans le modèle du cas 1 mesure l'effet d'un mètre carré \emph{supplémentaire} de terrain sur le prix d'une maison, toutes choses égales d'ailleurs : c'est un prix implicite marginal, | |
| 124 | +\begin{equation}\label{eq:25:marginal} | |
| 125 | +\frac{\partial P}{\partial T} = \beta_{\ln T}\,\frac{P}{T}, | |
| 126 | +\end{equation} | |
| 127 | +qui vaut, pour le sujet du cas 1, environ \parmsq{96}, alors que la valeur moyenne du terrain approche \parmsq{430}. L'écart n'est pas une contradiction : la valeur d'un terrain n'est pas le produit de sa superficie par le prix du dernier mètre carré, pour la raison exposée à la \cref{sec:25:unites}, et l'\cref{eq:25:marginal} ne sert qu'à ajuster des différences de superficie entre propriétés bâties, jamais à évaluer un terrain. | |
| 128 | + | |
| 129 | +\subsection{L'extraction} | |
| 130 | + | |
| 131 | +L'extraction (en anglais \emph{extraction} ou \emph{abstraction}) obtient la valeur du terrain d'une propriété vendue en retranchant du prix la contribution du bâtiment, estimée par son coût neuf diminué de la dépréciation : | |
| 132 | +\begin{equation}\label{eq:25:extraction} | |
| 133 | +\hat V_{L,j} = P_j - C_{N,j}\,(1 - \delta_j), | |
| 134 | +\end{equation} | |
| 135 | +où $\delta_j$ est le taux de dépréciation totale du bâtiment $j$. Appliquée à plusieurs ventes d'un secteur, elle produit des valeurs de terrain qui sont ensuite ramenées à l'unité de comparaison et ajustées vers le sujet comme des ventes de terrains. C'est l'identité de la méthode du coût lue à l'envers, et elle en hérite les conventions : le coût neuf est le coût de remplacement, estimé selon le \cref{ch:21} ; la dépréciation est celle du \cref{ch:24}, dont la convention retenue doit être déclarée. La méthode est d'autant plus fiable que $\delta_j$ est petit, c'est-à-dire que les bâtiments vendus sont récents, et elle devient hasardeuse pour des bâtiments anciens où $\delta_j$ atteint la moitié du coût neuf et où une erreur de dix points sur $\delta_j$ déplace le terrain de 5 \% du coût neuf. Une dépréciation dérivée du marché lui-même, par exemple le profil d'âge d'un modèle hédonique, est préférable à une règle âge-vie posée a priori, parce qu'elle est cohérente avec les prix dont on part ; l'exemple intégral compare les deux. Dans les marchés déprimés où les prix tombent sous le coût de construction, l'extraction donne des terrains de valeur nulle ou négative : ce n'est pas un échec de la méthode mais un fait économique, celui des villes en déclin où le logement durable se vend sous son coût de remplacement \parencite{glaeserGyourko2005}, et le \cref{ch:24} le traite comme une désuétude externe. | |
| 136 | + | |
| 137 | +\subsection{La technique résiduelle du terrain} | |
| 138 | + | |
| 139 | +La technique résiduelle du terrain (\emph{land residual technique}) transpose au revenu ce que l'extraction fait au prix. Elle part du revenu net d'exploitation stabilisé d'un immeuble, lui retranche le revenu nécessaire pour rémunérer et récupérer le capital investi dans le bâtiment, et capitalise le reste au taux de rendement du terrain. Sa dérivation suit la décomposition du taux global par bandes de capital : si la valeur de la propriété est $V = V_L + C_B$, où $C_B$ est la contribution du bâtiment, et si le marché exige un rendement $R_L$ sur le terrain et $R_B$ sur le bâtiment, le revenu net se partage selon | |
| 140 | +\begin{equation}\label{eq:25:bandes} | |
| 141 | +\NOI = R_L\,V_L + R_B\,C_B, | |
| 142 | +\end{equation} | |
| 143 | +d'où | |
| 144 | +\begin{equation}\label{eq:25:residuelle} | |
| 145 | +\hat V_L = \frac{\NOI - R_B\,C_B}{R_L}. | |
| 146 | +\end{equation} | |
| 147 | +Le taux du bâtiment excède celui du terrain parce que le bâtiment se consomme : si l'on retient une récupération linéaire du capital sur la durée de vie économique restante $n$, $R_B = R_L + 1/n$ ; une récupération par fonds d'amortissement au taux $R_L$ donne $R_B = R_L + R_L/[(1+R_L)^n - 1]$, moins exigeante. Le terrain, lui, ne se consomme pas et n'appelle aucune récupération, ce qui justifie $R_L < R_B$ et, en général, $R_L$ inférieur au taux global observé. La technique a été conçue pour les bâtiments neufs ou hypothétiques qui représentent la plus haute et meilleure utilisation du site, cas où $C_B = C_N$ est connu avec une précision raisonnable et où elle sert à vérifier qu'un projet « paie » le terrain ; le \cref{ch:41} l'emploie dans ce rôle. Appliquée à un bâtiment ancien, elle cumule les faiblesses de l'extraction, puisque $C_B$ exige une dépréciation, et celles de la capitalisation, puisque deux taux doivent être posés. La proposition suivante en mesure la sensibilité. | |
| 148 | + | |
| 149 | +\begin{proposition}{Sensibilité de la valeur résiduelle du terrain}{sensibilite-residuelle} | |
| 150 | +Sous l'\cref{eq:25:residuelle}, les élasticités de $\hat V_L$ aux trois intrants sont | |
| 151 | +\begin{equation}\label{eq:25:elasticites-res} | |
| 152 | +\frac{\partial \hat V_L}{\partial R_L}\,\frac{R_L}{\hat V_L} = -\left(1 + \frac{C_B}{\hat V_L}\right), \qquad | |
| 153 | +\frac{\partial \hat V_L}{\partial C_B}\,\frac{C_B}{\hat V_L} = -\frac{R_B\,C_B}{R_L\,\hat V_L}, \qquad | |
| 154 | +\frac{\partial \hat V_L}{\partial \NOI}\,\frac{\NOI}{\hat V_L} = \frac{\NOI}{R_L\,\hat V_L} . | |
| 155 | +\end{equation} | |
| 156 | +Toutes dépassent l'unité en valeur absolue dès que $R_B C_B$ représente une part appréciable du revenu net : la technique amplifie l'erreur de chaque intrant. | |
| 157 | +\end{proposition} | |
| 158 | +\begin{proof} | |
| 159 | +En écrivant $R_B = R_L + 1/n$, l'\cref{eq:25:residuelle} devient $\hat V_L = (\NOI - C_B/n)/R_L - C_B$. La dérivée par rapport à $R_L$ est $-(\NOI - C_B/n)/R_L^2 = -(\hat V_L + C_B)/R_L$, d'où la première élasticité. La dérivée par rapport à $C_B$ est $-1/(nR_L) - 1 = -R_B/R_L$, d'où la deuxième après multiplication par $C_B/\hat V_L$. La dérivée par rapport au revenu net est $1/R_L$, d'où la troisième. Comme $\NOI = R_L \hat V_L + R_B C_B > R_L \hat V_L$, la troisième élasticité excède un, et les deux premières excèdent un en valeur absolue dès que $C_B > 0$. | |
| 160 | +\end{proof} | |
| 161 | + | |
| 162 | +\subsection{Le lotissement actualisé} | |
| 163 | + | |
| 164 | +La méthode du lotissement, ou méthode du développement (\emph{subdivision development method}), évalue un terrain brut par ce qu'un promoteur pourrait en tirer : le produit de la vente des lots finis, diminué de tous les coûts nécessaires pour les produire et les vendre, du profit que le promoteur exige et du coût du temps. Soit $R_t$ le produit des ventes de lots de l'année $t$, $C_t$ les coûts de viabilisation, d'honoraires, de taxes et de vente engagés cette année-là, $E_t$ le profit du promoteur imputé aux ventes de l'année et $r$ le taux d'actualisation qui reflète le risque du développement ; la valeur du site brut à la date d'évaluation est | |
| 165 | +\begin{equation}\label{eq:25:lotissement} | |
| 166 | +\hat V_L = \sum_{t=0}^{T} \frac{R_t - C_t - E_t}{(1+r)^t} . | |
| 167 | +\end{equation} | |
| 168 | +La version statique de la méthode, qui soustrait simplement les coûts et le profit du produit total sans actualiser, surestime le terrain d'autant plus que l'absorption est lente ; la \cref{sec:25:lotissement} chiffre l'écart. Chaque terme de l'\cref{eq:25:lotissement} est une hypothèse : le prix des lots finis vient de la comparaison directe sur le marché des lots ; les coûts de rue, d'aqueduc, d'égout et d'éclairage viennent de soumissions ou de projets comparables ; la contribution pour fins de parcs est fixée par le règlement municipal dans la limite de la loi ; le rythme d'absorption vient des ventes observées dans les projets voisins ; le profit et le taux viennent des attentes des promoteurs. La méthode est la seule qui convienne à un terrain dont la valeur dépend de sa transformation, mais elle est aussi la plus fragile, parce qu'une dizaine d'hypothèses s'y combinent ; \textcite{byrne1996} et \textcite{geltnerMillerClaytonEichholtz2014} insistent sur la nécessité d'une analyse de sensibilité systématique, et l'on verra que le prix des lots et le rythme d'absorption dominent. | |
| 169 | + | |
| 170 | +\subsection{La capitalisation de la rente foncière} | |
| 171 | + | |
| 172 | +Lorsqu'un terrain est loué, par bail foncier ou par emphytéose, la rente qu'il procure est l'observation la plus directe du rendement du sol, et sa capitalisation donne la valeur du terrain. Pour une rente $\rho$ constante et perpétuelle, $\hat V_L = \rho / R_L$ ; pour une rente qui croît au taux $g$ à partir de $\rho_1$, | |
| 173 | +\begin{equation}\label{eq:25:gordon} | |
| 174 | +\hat V_L = \frac{\rho_1}{R_L - g}, \qquad R_L > g, | |
| 175 | +\end{equation} | |
| 176 | +qui est la formule de Gordon appliquée au sol et le pendant, pour le terrain, de l'\cref{eq:25:residuelle}. Pour un bail de durée finie $n$ au terme duquel le terrain revient au bailleur avec les constructions, on actualise les rentes puis la réversion : | |
| 177 | +\begin{equation}\label{eq:25:bail} | |
| 178 | +\hat V_L = \sum_{t=1}^{n} \frac{\rho_1 (1+g)^{t-1}}{(1+R_L)^t} + \frac{V_{\text{rév}}}{(1+R_L)^n}, | |
| 179 | +\end{equation} | |
| 180 | +où $V_{\text{rév}}$ est la valeur anticipée du bien à l'échéance, qui dépend des stipulations du contrat sur le sort des constructions. Le \cref{ch:02} a décrit l'emphytéose et le \cref{ch:06} le régime des droits démembrés ; on retiendra ici que la rente contractuelle n'est la rente de marché que si le bail est récent ou révisé, et que la valeur ainsi obtenue est celle du droit du propriétaire du fonds, non celle du terrain libre. L'\cref{eq:25:gordon} rejoint la décomposition de \textcite{capozzaHelsley1989} rappelée au \cref{ch:05} : le prix d'un terrain urbain capitalise la rente courante et la croissance anticipée de cette rente, de sorte qu'un terrain dont la rente est faible mais appelée à croître vaut bien plus que la capitalisation de sa rente courante. Dans une ville incertaine, \textcite{capozzaHelsley1990} et \textcite{titman1985} montrent qu'il faut y ajouter une valeur d'attente, l'option de différer le développement, que \textcite{quigg1993} a estimée empiriquement à quelque 6 \% du prix des terrains ; le \cref{ch:41} développe ce point. | |
| 181 | + | |
| 182 | +\section{Les ajustements propres aux terrains}\label{sec:25:ajustements} | |
| 183 | + | |
| 184 | +La grille d'ajustements des terrains suit la structure de la grille des maisons, conditions de transaction en pourcentage puis caractéristiques en dollars, mais les caractéristiques diffèrent. Le \cref{tab:25:grille-ajust} les recense dans l'ordre d'application, avec le signe attendu et la façon d'estimer le prix implicite. Trois d'entre elles méritent un commentaire. | |
| 185 | + | |
| 186 | +\begin{table}[htbp] | |
| 187 | +\caption{Grille d'ajustements des terrains résidentiels : éléments, mesure, signe attendu et source du prix implicite}\label{tab:25:grille-ajust} | |
| 188 | +\centering\footnotesize | |
| 189 | +\begin{tabularx}{\textwidth}{@{}L{27mm}L{30mm}YL{40mm}@{}} | |
| 190 | +\toprule | |
| 191 | +Élément & Mesure & Effet attendu sur le prix & Source de l'ajustement \\ | |
| 192 | +\midrule | |
| 193 | +Droits, financement, conditions de vente & Qualitatif & Exclusion ou ajustement en pourcentage (\cref{ch:17}) & Vérification de la vente \\ | |
| 194 | +Conditions du marché & Mois entre la vente et la date d'évaluation & Tendance des prix des terrains, qui peut différer de celle des maisons & Coefficient temporel du modèle ; indice de prix des terrains \\ | |
| 195 | +Localisation & Secteur, rue, voisinage & Prime ou décote de secteur ; nuisances ; vue & Indicatrices de secteur ; ventes appariées \\ | |
| 196 | +Superficie & m\textsuperscript{2} & Élasticité $\varepsilon_T < 1$ : valeur unitaire décroissante & Coefficient de $\ln T$ \eqref{eq:25:elasticite} \\ | |
| 197 | +Façade et profondeur & m ; rapport façade/profondeur & Faible à superficie donnée en banlieue ; important sur artère & Coefficient de $\ln F$ ; règles de profondeur vérifiées \\ | |
| 198 | +Forme & Régulier / irrégulier (drapeau, triangle) & Décote : enveloppe constructible réduite, aménagement coûteux & Indicatrice ; ventes appariées \\ | |
| 199 | +Services & Aqueduc et égout ; rue pavée ; électricité & Décote du non-desservi : coût du puits et de l'installation septique, délai & Indicatrice ; coût des installations \\ | |
| 200 | +Topographie et sol & Plat, pente, roc, remblai, nappe & Décote : excavation, dynamitage, fondations spéciales & Indicatrice ; coût des travaux de préparation \\ | |
| 201 | +Zonage et densité & Logements constructibles ; COS & Prime par logement supplémentaire ; unité par logement \eqref{eq:25:logement} & Coefficient par logement ; comparaison par logement \\ | |
| 202 | +Contraintes & Zone inondable, servitudes, milieu humide, bande riveraine & Décote ou inconstructibilité ; vérification cartographique & Ventes appariées ; coût d'immunisation ; \cref{ch:43} \\ | |
| 203 | +\bottomrule | |
| 204 | +\end{tabularx} | |
| 205 | +\tabsource{synthèse de l'auteur ; ordre d'application conforme aux conventions de calcul de l'ouvrage (annexe~\ref{app:conventions-calcul}).} | |
| 206 | +\end{table} | |
| 207 | + | |
| 208 | +L'ajustement de \emph{services} est le plus lourd en dollars et le plus facile à borner. Un terrain non desservi oblige l'acheteur à forer un puits et à installer un système de traitement des eaux usées, dont le coût dépend du sol et de la réglementation applicable ; la décote de marché devrait être voisine de ce coût, augmentée du délai et du risque, et c'est ce que l'on vérifie en comparant la décote estimée au coût des installations. Dans le jeu synthétique du chapitre, la décote est de l'ordre du quart du prix d'un terrain desservi, mais les terrains non desservis y sont aussi beaucoup plus grands et périurbains, ce qui illustre la difficulté : le non-desservi se vend dans d'autres secteurs, à d'autres acheteurs, et la comparaison directe entre les deux marchés est rarement nécessaire. | |
| 209 | + | |
| 210 | +L'ajustement de \emph{topographie} se raisonne de la même façon, par le coût des travaux qu'une pente marquée, un roc affleurant ou un remblai imposent au constructeur : excavation supplémentaire, dynamitage, murs de soutènement, fondations spéciales, drainage. Une pente peut aussi apporter une vue ou un sous-sol à aire ouverte que le marché paie ; le signe n'est donc pas toujours négatif, et l'évaluateur documente ce que la pente coûte et ce qu'elle offre. | |
| 211 | + | |
| 212 | +L'ajustement de \emph{zonage}, enfin, change la nature du bien plus qu'il ne le corrige : un terrain où trois logements sont permis ne se compare à un terrain unifamilial qu'après conversion en valeur par logement constructible, et un ajustement en pourcentage par logement supplémentaire, comme celui qu'estime l'exemple, n'est qu'une approximation valable pour de faibles différences de densité. Au-delà, on change d'unité et de comparables. | |
| 213 | + | |
| 214 | +\begin{quebec}[Lotissement, parcs, zones inondables et zone agricole : ce qui borne la valeur d'un terrain] | |
| 215 | +Quatre régimes, détaillés au \cref{ch:08} et au \cref{ch:43}, bornent ce qu'un terrain permet et donc ce qu'il vaut. Le règlement de lotissement fixe la superficie et les dimensions minimales des lots par zone, selon qu'ils sont desservis ou non, et peut prohiber le lotissement dans les zones exposées aux inondations \parencite[art.~115 al.~2, par.~1°, 3° et 4°]{lau} ; le nombre de lots qu'un site peut produire en découle, et la méthode du lotissement en dépend. La municipalité peut exiger, comme condition du permis de lotissement ou de construction, une contribution pour fins de parcs sous forme de terrain, de servitude ou de somme, qui « ne doivent pas excéder 10 \% de la superficie et de la valeur, respectivement, du site » \parencite[art.~117.1, 117.2 et 117.4 al.~1]{lau} ; ces dispositions ont été modifiées en 2023 \parencite{loi2023c12}, et la Cour suprême a jugé en 2025 qu'une cession de terrains excédant ce que la municipalité pouvait exiger s'analyse comme une réserve ouvrant droit à une indemnité égale à la valeur marchande \parencite{laroda2025}. L'exemple de lotissement de la \cref{sec:25:lotissement} cède exactement 10 \% de la superficie du site. En matière d'inondations, le cadre en vigueur depuis le 1\ier{} mars 2026 classe l'exposition en quatre classes d'intensité et interdit toute nouvelle résidence dans le littoral, la rive et les classes très élevée, élevée et modérée, ne l'admettant sous conditions qu'en classe faible \parencite{zonesInond2026,inondcartes} ; un terrain vacant situé dans l'une des classes prohibées n'a plus de valeur résidentielle, et l'évaluateur vérifie la carte en vigueur pour chaque terrain riverain avant toute comparaison. Enfin, en zone agricole, nul ne peut utiliser un lot à une fin autre que l'agriculture, ni le lotir, sans l'autorisation de la Commission de protection du territoire agricole \parencite[art.~26, 28 et 29]{lptaa}, sous réserve des droits acquis des articles 101 à 105 ; la valeur d'un lot agricole dont l'usage résidentiel est espéré est une espérance pondérée par la probabilité d'autorisation, que le \cref{ch:08} a formalisée. Les ventes de terrains de Gatineau peuvent être croisées avec les couches de zonage et de zones inondables que la Ville diffuse en données ouvertes \parencite{gatzonage}. | |
| 216 | +\end{quebec} | |
| 217 | + | |
| 218 | +\section{Terrains intercalaires et densification}\label{sec:25:intercalaires} | |
| 219 | + | |
| 220 | +Un \motcle{terrain intercalaire} (\emph{infill lot}) est un terrain vacant ou sous-utilisé enclavé dans un tissu urbain bâti et desservi : reliquat d'un lotissement ancien, lot libéré par une démolition, stationnement de surface, cour arrière subdivisible. Son évaluation réunit toutes les difficultés du chapitre. Les ventes comparables de terrains vacants manquent dans le quartier, et les ventes de terrains de lotissement en périphérie ne sont pas substituables, parce que l'acheteur d'un terrain intercalaire achète la proximité des services existants et paie le surcoût d'un chantier contraint. Le zonage, souvent hérité d'un tissu de maisons, peut permettre une densité que les lots voisins n'atteignent pas, et c'est précisément ce potentiel qui fait la valeur du terrain. Enfin, le terrain peut être occupé par un bâtiment en fin de vie dont la contribution est nulle, voire négative s'il faut le démolir et décontaminer. | |
| 221 | + | |
| 222 | +L'analyse procède alors par la plus haute et meilleure utilisation, que le \cref{ch:41} développe et dont on ne retient ici que la conséquence pour la valeur du terrain : celle-ci est le maximum des valeurs que les usages légalement permis, physiquement possibles et financièrement faisables lui confèrent. Pour un usage de densification à $n$ logements, la valeur du terrain s'obtient par la technique résiduelle appliquée au projet, c'est-à-dire par la différence entre la valeur de l'immeuble achevé et la somme des coûts de construction, des coûts indirects, du profit du promoteur et, le cas échéant, de la démolition : | |
| 223 | +\begin{equation}\label{eq:25:densification} | |
| 224 | +\hat V_L^{\,\text{dens}} = \frac{V_{\text{achevé}}(n) - C_N(n)\,(1+\tau_E) - C_{\text{démol}}}{(1+r)^{T}}, | |
| 225 | +\end{equation} | |
| 226 | +où $T$ est le délai jusqu'à la livraison et $r$ le taux qui reflète le risque du projet. L'évaluateur compare $\hat V_L^{\,\text{dens}}$ à la valeur du terrain pour l'usage unifamilial et à la valeur de la propriété dans son usage actuel ; le terrain intercalaire vaut la plus grande des trois, et la différence entre la valeur de densification et la valeur unifamiliale mesure ce que le marché paie pour le droit de densifier. La littérature a montré que ce droit est une option : les travaux de \textcite{rosenthalHelsley1994} et de \textcite{munneke1996} sur la décision de redéveloppement, ceux de \textcite{dyeMcmillen2007} et de \textcite{mcmillenOsullivan2013} sur les démolitions-reconstructions résidentielles et ceux de \textcite{clappSalavei2010}, \textcite{clappBardosWong2012} et \textcite{munnekeWomack2020} sur la prime d'option dans les prix des propriétés bâties établissent que la valeur d'un terrain susceptible de densification excède la valeur résiduelle de son meilleur projet immédiat, parce que le propriétaire peut attendre un meilleur moment. Pour l'évaluateur, la conséquence pratique est double : les ventes de propriétés « à démolir » dans un quartier en densification sont des ventes de terrains, et elles constituent souvent les meilleurs comparables d'un terrain intercalaire une fois le coût de démolition ajouté au prix ; et la prime observée sur ces ventes, par rapport à la valeur résiduelle du projet le plus probable, mesure l'option que le marché attribue au site. | |
| 227 | + | |
| 228 | +Dans le jeu synthétique du chapitre, le prix implicite d'un logement constructible supplémentaire est estimé à environ 15 \% du prix d'un terrain unifamilial, ce qui signifie qu'un terrain où trois logements sont permis vaut un tiers de plus que le même terrain limité à un seul. Ce chiffre est une hypothèse de génération, non une mesure du marché de Gatineau ; il illustre la logique de l'unité par logement constructible plus qu'il ne renseigne sur un marché réel, et il est très inférieur à ce qu'un passage de un à trois logements vaut dans les quartiers centraux de Montréal, où le terrain unifamilial est lui-même rare. | |
| 229 | + | |
| 230 | +\section{Exemple intégral : le terrain du sujet du cas 1}\label{sec:25:exemple} | |
| 231 | + | |
| 232 | +\begin{synthetique} | |
| 233 | +Le terrain du sujet du cas 1 (cottage de 1998, \msq{165} habitables, terrain de \msq{620}, secteur Hull de Gatineau, évalué au 1\ier{} septembre 2026 ; \texttt{data/synthetic/cas1\_gatineau\_sujet.json}) est réputé vacant, desservi par l'aqueduc et l'égout, plat, de forme régulière, zoné pour une habitation unifamiliale, avec une façade posée à \qty{20}{\metre} (hypothèse de l'exemple, le dossier du cas ne précisant pas la façade). Les ventes de terrains vacants utilisées, \texttt{data/synthetic/ch25\_terrains\_ventes.csv}, sont synthétiques : 200 ventes fictives de janvier 2023 à août 2026 dans les cinq secteurs de Gatineau (70 à Hull, 60 dans le secteur Gatineau, 40 à Aylmer, 15 à Buckingham et 15 à Masson-Angers, dont 156 desservies), générées par \texttt{analysis/python/cases/ch25\_terrain.py} avec la graine 20261031 selon une loi déclarée dans \texttt{data/synthetic/README.md} : logarithme du prix égal à celui d'un terrain de référence de \msq{560} à Hull (\dollars{225000} au 1\ier{} juillet 2024), plus 0,50 fois le logarithme du rapport des superficies, 0,08 fois celui des façades, une décote de 30 points de logarithme pour l'absence de services, de 6 pour une pente, de 12 pour le roc, de 5 pour une forme irrégulière, une prime de 12 points par logement constructible supplémentaire, la prime de secteur du cas 1 (logarithme du rapport des médianes APCIQ du troisième trimestre de 2026 à celle de Hull), une tendance de 0,36 \% par mois et un bruit d'écart-type 0,10. Le prix de référence de \dollars{225000} est une hypothèse pédagogique, choisie pour la cohérence interne avec l'extraction terrain--bâtiment du cas 1 ; aucune vente réelle de terrain à Gatineau n'a servi à la calibration. Le coût neuf du sujet, \dollars{397567}, est celui du \cref{ch:21} ; le revenu net du cas 3 provient de \texttt{traite.cas3}. Tous les chiffres de la section sont imprimés par \texttt{analysis/python/cases/ch25\_terrain.py} et vérifiés par \texttt{analysis/python/tests/test\_ch25.py}. | |
| 234 | +\end{synthetique} | |
| 235 | + | |
| 236 | +\begin{exemple}{{Valeur du terrain de 620 m² du sujet par comparaison, allocation et extraction}}{cas1-terrain} | |
| 237 | +L'estimation procède en quatre temps : lecture du marché synthétique des terrains et estimation d'un modèle hédonique qui fournit les prix implicites ; comparaison directe avec cinq ventes de terrains ; allocation et prix implicite marginal tirés du cas 1 ; extraction sur les cinq comparables bâtis du \cref{ch:16} sous deux conventions de dépréciation. Une synthèse retient ensuite une valeur. | |
| 238 | + | |
| 239 | +\emph{Étape 1 : le marché des terrains et ses prix implicites.} Les 156 terrains desservis se vendent à un prix médian de \dollars{233000} pour une superficie médiane de \msq{590}, soit \parmsq{380} ; les 44 terrains non desservis, beaucoup plus grands (médiane \msq{2479}), se vendent \dollars{300500} en médiane, soit \parmsq{136}. À Hull, la médiane est de \dollars{237750} pour \msq{614} (\parmsq{384}) ; à Aylmer, de \dollars{284500} pour \msq{772} (\parmsq{379}) ; à Buckingham, de \dollars{260000} pour \msq{1808} (\parmsq{126}). La \cref{fig:25:unitaire} montre la décroissance de la valeur unitaire avec la superficie et l'écart entre terrains desservis et non desservis. Le modèle hédonique du \cref{tab:25:hedonique}, estimé par moindres carrés avec erreurs-types robustes sur les 200 ventes, retrouve les lois de génération aux erreurs d'échantillonnage près : élasticité de superficie de 0,527, décote de 25,5 \% pour l'absence de services, de 7,2 \% pour une pente, de 10,8 \% pour le roc et de 3,9 \% pour une forme irrégulière, prime de 15,0 \% par logement constructible supplémentaire, prime de 14,7 \% pour Aylmer et décotes de 17,1 \% et 20,6 \% pour Buckingham et Masson-Angers, tendance de 0,28 \% par mois. L'effet de la façade, 3,6 \% par doublement, n'est pas significatif : à superficie donnée, les terrains de banlieue de ce marché se distinguent peu par leur façade, et l'ajustement correspondant sera petit. Le modèle explique 89,5 \% de la variance des logarithmes de prix avec un écart-type résiduel de 0,089 ; appliqué directement au terrain du sujet, il prédit \dollars{253412}. | |
| 240 | + | |
| 241 | +\emph{Étape 2 : comparaison directe.} L'entonnoir de sélection, calqué sur celui du \cref{ch:16}, conserve 101 ventes dans une fenêtre de vingt-quatre mois, 29 dans un rayon de quatre kilomètres autour du sujet, 21 terrains desservis et zonés pour un seul logement, puis 20 terrains de 372 à \msq{868} (plus ou moins 40 \% de la superficie du sujet) ; la fenêtre et le rayon sont plus larges que pour les maisons parce que les ventes de terrains sont quatre fois moins nombreuses. Le classement par distance d'attributs (superficie, façade, distance géographique, ancienneté de la vente) retient cinq terrains, tous à Hull, vendus entre avril et août 2026 à moins de 2,1 kilomètres du sujet (\cref{tab:25:comparables} et \cref{fig:25:carte}). Leurs prix vont de \dollars{238000} à \dollars{320500}, soit de \parmsq{331} à \parmsq{449}, et leurs superficies de 575 à \msq{743}. Les ajustements, dérivés du modèle et appliqués en cascade (conditions du marché, localisation, superficie, façade, services, topographie, forme, densité), sont dominés par la superficie : les trois terrains plus grands que le sujet (T004, T038, T049) sont ajustés à la baisse de \dollars{17904} à \dollars{27259}, le plus petit (T030) à la hausse de \dollars{10384}. L'ajustement de conditions du marché ne dépasse pas \dollars{3507} pour la vente la plus ancienne ; celui de localisation est nul, tous les comparables étant du secteur du sujet ; celui de forme, pour le seul terrain irrégulier (T049), vaut \dollars{9046}. Les prix ajustés s'étagent de \dollars{232086} à \dollars{294813}, avec une moyenne de \dollars{265278} et une médiane de \dollars{265383}. Pondérés par l'inverse de l'ajustement brut, qui donne 40 \% du poids au comparable T059, presque identique au sujet, l'indication est de | |
| 242 | +\begin{equation}\label{eq:25:indication} | |
| 243 | +\hat V_L^{\,\text{comp}} = \dollars{267388}, \qquad \text{soit } \parmsq{431}, | |
| 244 | +\end{equation} | |
| 245 | +avec un écart-type pondéré des prix ajustés de \dollars{16085} et une étendue de 23,5 \% de l'indication. L'indication est proche de la prédiction hédonique directe (\dollars{253412}) : l'écart de 5,5 \% tient au bruit des cinq ventes retenues, dont les résidus sont en moyenne positifs, et il donne une idée de l'incertitude attachée à une comparaison sur cinq terrains. | |
| 246 | + | |
| 247 | +\emph{Étape 3 : allocation et prix implicite marginal.} La part du terrain dans les 186 ventes de maisons du secteur Hull du cas 1, obtenue par extraction avec la dépréciation implicite du marché (étape 4), a une médiane de 48,2 \% et un intervalle interquartile de 42,4 à 54,3 \% ; la valeur médiane du terrain ainsi extraite est de \dollars{243421}. Appliqué à la valeur de la maison du sujet indiquée par la grille d'ajustements du \cref{ch:17}, \dollars{581595} en moyenne des cinq prix ajustés, le ratio médian donne \dollars{280412} ; appliqué à la prédiction hédonique du \cref{ch:18}, \dollars{637953}, il donne \dollars{307584}. L'écart entre ces deux montants, \dollars{27000}, n'a rien à voir avec le terrain : il reproduit l'écart entre deux indications de la valeur de la maison, et c'est le \cref{ch:20} qui le tranchera. Le prix implicite marginal du terrain dans le modèle hédonique des maisons, par l'\cref{eq:25:marginal}, vaut $0{,}0937 \times \dollars{637953} / \msq{620} = \parmsq{96}$, et la contribution marginale $\beta_{\ln T} P = \dollars{59750}$ : moins du quart de la valeur du terrain. Le dernier mètre carré de cour vaut \parmsq{96} ; le terrain entier vaut plus de \parmsq{400}, parce que ses premiers mètres carrés portent la maison. | |
| 248 | + | |
| 249 | +\emph{Étape 4 : extraction sur les cinq comparables bâtis.} Le \cref{tab:25:extraction} applique l'\cref{eq:25:extraction} aux cinq comparables du \cref{ch:16}. Le coût neuf de chacun est transposé depuis celui du sujet par l'élasticité de taille du \cref{ch:21}, $C_{N,j} = \dollars{397567} \times (S_j/165)^{0{,}90}$, et corrigé de 10 \% par classe de qualité, hypothèse déclarée ; il va de \dollars{340196} pour G0575 (\msq{156}, qualité 2) à \dollars{489469} pour G0468 (\msq{187}, qualité 4). Deux conventions de dépréciation sont comparées. La première est une règle âge-vie linéaire sur soixante ans : la dépréciation va de 21,7 \% (13 ans) à 50 \% (30 ans), et les valeurs de terrain extraites, de \dollars{247013} à \dollars{398517}, soit de \parmsq{498} à \parmsq{742}, sont élevées et dispersées. La seconde est la dépréciation implicite du marché lui-même : le profil d'âge du modèle hédonique du cas 1 (coefficients de l'âge et de son carré) donne le rapport entre le prix observé et le prix qu'aurait la même maison neuve, de sorte que $P_{\text{neuf},j} = P_j / \exp(\beta_a a_j + \beta_{a^2} a_j^2/100)$, et la perte de valeur $P_{\text{neuf},j} - P_j$, imputée en entier au bâtiment puisque le sol ne vieillit pas, est la dépréciation. L'\cref{eq:25:extraction} se réduit alors à $\hat V_{L,j} = P_{\text{neuf},j} - C_{N,j}$ : ce que vaudrait la maison neuve, moins ce qu'elle coûte à construire. Les taux de dépréciation implicites vont de 9,6 \% (13 ans) à 20,7 \% (30 ans), soit 0,7 à 0,8 \% par année, dans l'ordre de grandeur que la littérature trouve pour le logement entretenu \parencite{malpezziOzanneThibodeau1987,hardingRosenthalSirmans2007}, et les valeurs de terrain extraites, de \dollars{174883} à \dollars{281458} (\parmsq{325} à \parmsq{619}), sont plus basses et plus cohérentes avec le marché des terrains. Transposées au terrain de \msq{620} du sujet avec l'élasticité de superficie de 0,50 du marché des terrains, elles ont une médiane de \dollars{242545} ; sous la règle âge-vie, la médiane transposée est de \dollars{354826}, supérieure de 46 \%. L'écart entre les deux conventions, \dollars{112000} sur le terrain, est exactement l'écart de dépréciation imputé au bâtiment : c'est le levier de la \cref{sec:25:pourquoi}, et il dit pourquoi une extraction n'a de sens qu'avec une dépréciation cohérente avec les prix dont elle part. Pour le sujet lui-même, le profil d'âge donne un facteur de 0,885 à 28 ans, soit une dépréciation implicite de 20,8 \% du coût neuf, repère que le \cref{ch:24} confrontera à ses propres mesures. | |
| 250 | + | |
| 251 | +\emph{Synthèse.} Le \cref{tab:25:synthese} rassemble les indications. La comparaison directe (\dollars{267388}), l'extraction avec dépréciation de marché (\dollars{242545}) et l'allocation sur la grille du \cref{ch:17} (\dollars{280412}) encadrent une fourchette de \dollars{240000} à \dollars{280000} ; l'allocation sur la prédiction hédonique (\dollars{307584}) et l'extraction âge-vie (\dollars{354826}) s'en écartent pour des raisons identifiées, la première parce qu'elle hérite de l'écart entre deux indications de la maison, la seconde parce que sa dépréciation est incompatible avec les prix observés. La comparaison directe est la méthode privilégiée et la mieux documentée ; la valeur retenue pour le terrain du sujet est | |
| 252 | +\begin{equation}\label{eq:25:retenue} | |
| 253 | +V_L = \dollars{265000} \quad (\parmsq{427}), | |
| 254 | +\end{equation} | |
| 255 | +arrondie au \dollars{5000} près, avec une fourchette raisonnable de \dollars{240000} à \dollars{285000}. Elle représente 45,6 \% de l'indication par la grille du \cref{ch:17} et 41,5 \% de la prédiction hédonique, parts conformes au ratio médian du secteur. Cette valeur est celle que le \cref{ch:24} utilisera pour extraire la dépréciation du marché, que le \cref{ch:20} intégrera à la réconciliation par le coût et que le \cref{ch:45} reprendra dans le dossier complet. | |
| 256 | +\end{exemple} | |
| 257 | + | |
| 258 | +\begin{table}[htbp] | |
| 259 | +\caption{Modèle hédonique des terrains vacants (données synthétiques, $n = 200$) : coefficients, erreurs-types robustes (HC1) et effets en pourcentage}\label{tab:25:hedonique} | |
| 260 | +\centering\small | |
| 261 | +\begin{tabular}{@{}l S[table-format=-1.4] S[table-format=1.4] S[table-format=-2.1] l@{}} | |
| 262 | +\toprule | |
| 263 | +Variable & {Coefficient} & {Erreur-type} & {Effet (\%)} & Lecture \\ | |
| 264 | +\midrule | |
| 265 | +Constante & 12.3092 & 0.0167 & {---} & terrain de référence à Hull, juillet 2024 \\ | |
| 266 | +$\ln(T/560)$ & 0.5267 & 0.0300 & {---} & élasticité de superficie \\ | |
| 267 | +$\ln(F/18)$ & 0.0356 & 0.0468 & 3.6 & façade (non significatif) \\ | |
| 268 | +Non desservi & -0.2939 & 0.0282 & -25.5 & ni aqueduc ni égout \\ | |
| 269 | +Pente & -0.0743 & 0.0164 & -7.2 & topographie \\ | |
| 270 | +Roc ou remblai & -0.1147 & 0.0241 & -10.8 & topographie \\ | |
| 271 | +Forme irrégulière & -0.0398 & 0.0178 & -3.9 & forme \\ | |
| 272 | +Logement constructible supplémentaire & 0.1400 & 0.0127 & 15.0 & par logement au-delà du premier \\ | |
| 273 | +Secteur Gatineau & -0.0060 & 0.0150 & -0.6 & référence : Hull \\ | |
| 274 | +Secteur Aylmer & 0.1370 & 0.0175 & 14.7 & \\ | |
| 275 | +Secteur Buckingham & -0.1870 & 0.0355 & -17.1 & \\ | |
| 276 | +Secteur Masson-Angers & -0.2303 & 0.0292 & -20.6 & \\ | |
| 277 | +Mois depuis juillet 2024 & 0.0028 & 0.0005 & 0.3 & tendance mensuelle \\ | |
| 278 | +\midrule | |
| 279 | +\multicolumn{5}{@{}l}{$R^2 = 0{,}895$ ; écart-type résiduel 0,089 ; facteur de Duan 1,004 ; effets en pourcentage : $100\,[\exp(\hat\beta) - 1]$ \parencite{halvorsenPalmquist1980}} \\ | |
| 280 | +\bottomrule | |
| 281 | +\end{tabular} | |
| 282 | +\tabsource{\synth{\texttt{analysis/python/cases/ch25\_terrain.py}, fonction \texttt{hedonique\_terrains} ; MCO de \texttt{traite.hedonique.mco}}.} | |
| 283 | +\end{table} | |
| 284 | + | |
| 285 | +\begin{figure}[htbp] | |
| 286 | +\centering | |
| 287 | +\includegraphics[width=\linewidth]{ch25/ch25-fig-valeur-unitaire-superficie.pdf} | |
| 288 | +\caption{Prix par mètre carré des 200 ventes synthétiques de terrains selon la superficie (échelle logarithmique), pour les terrains desservis et non desservis, avec les courbes du modèle hédonique pour un terrain plat, régulier, unifamilial, à Hull, en juillet 2024. La valeur unitaire décroît comme $T^{\,\varepsilon_T - 1}$ avec $\varepsilon_T = 0{,}53$ ; l'étoile situe le terrain du sujet à la valeur retenue de \parmsq{427}.}\label{fig:25:unitaire} | |
| 289 | +\figsource{\synth{script \texttt{analysis/python/figures/ch25\_figures.py}, graine 20261031}.} | |
| 290 | +\end{figure} | |
| 291 | + | |
| 292 | +\begin{table}[htbp] | |
| 293 | +\caption{Les cinq terrains comparables retenus pour le sujet du cas 1 et leur grille d'ajustements (dollars ; données synthétiques)}\label{tab:25:comparables} | |
| 294 | +\centering\footnotesize\setlength{\tabcolsep}{3.5pt} | |
| 295 | +\begin{tabular}{@{}lcccccc@{}} | |
| 296 | +\toprule | |
| 297 | + & Sujet & T059 & T004 & T030 & T038 & T049 \\ | |
| 298 | +\midrule | |
| 299 | +Date de vente & --- & 2026-04-06 & 2026-06-03 & 2026-08-13 & 2026-08-16 & 2026-07-28 \\ | |
| 300 | +Ancienneté (mois) & 0 & 4,9 & 3,0 & 0,6 & 0,5 & 1,1 \\ | |
| 301 | +Distance au sujet (km) & 0 & 0,59 & 0,82 & 1,56 & 1,94 & 2,05 \\ | |
| 302 | +Superficie (m\textsuperscript{2}) & 620 & 604 & 743 & 575 & 734 & 719 \\ | |
| 303 | +Façade (m) & 20,0 & 17,5 & 19,8 & 12,1 & 18,0 & 15,2 \\ | |
| 304 | +Topographie ; forme & plat ; rég. & plat ; rég. & plat ; rég. & plat ; rég. & plat ; rég. & plat ; irrég. \\ | |
| 305 | +Distance d'attributs $d_j$ & --- & 1,06 & 1,93 & 1,99 & 2,29 & 2,35 \\ | |
| 306 | +\midrule | |
| 307 | +Prix de vente (\$) & --- & 257 000 & 283 500 & 258 500 & 320 500 & 238 000 \\ | |
| 308 | +Prix par m\textsuperscript{2} (\$) & --- & 426 & 382 & 449 & 437 & 331 \\ | |
| 309 | +\addlinespace | |
| 310 | +Conditions du marché & & +3 507 & +2 346 & +450 & +470 & +764 \\ | |
| 311 | +Localisation & & 0 & 0 & 0 & 0 & 0 \\ | |
| 312 | +Superficie & & +3 635 & $-$26 006 & +10 384 & $-$27 259 & $-$17 904 \\ | |
| 313 | +Façade & & +1 241 & +102 & +4 831 & +1 102 & +2 181 \\ | |
| 314 | +Services ; topographie ; densité & & 0 & 0 & 0 & 0 & 0 \\ | |
| 315 | +Forme & & 0 & 0 & 0 & 0 & +9 046 \\ | |
| 316 | +\midrule | |
| 317 | +Prix ajusté (\$) & --- & 265 383 & 259 943 & 274 166 & 294 813 & 232 086 \\ | |
| 318 | +Ajustement brut ; net (\%) & --- & 3,3 ; +3,3 & 10,0 ; $-$8,3 & 6,1 ; +6,1 & 9,0 ; $-$8,0 & 12,6 ; $-$2,5 \\ | |
| 319 | +Pondération (inverse du brut) & --- & 0,402 & 0,131 & 0,217 & 0,146 & 0,104 \\ | |
| 320 | +\bottomrule | |
| 321 | +\end{tabular} | |
| 322 | +\tabsource{\synth{\texttt{analysis/python/cases/ch25\_terrain.py}, fonctions \texttt{selection\_terrains}, \texttt{grille\_terrains} et \texttt{reconcilier}} ; indication pondérée \dollars{267388}.} | |
| 323 | +\end{table} | |
| 324 | + | |
| 325 | +\begin{figure}[htbp] | |
| 326 | +\centering | |
| 327 | +\includegraphics[width=\linewidth]{ch25/ch25-fig-carte-terrains.pdf} | |
| 328 | +\caption{Carte synthétique des 200 ventes de terrains vacants (points pleins : desservis ; cercles : non desservis), du sujet du cas 1 (étoile) et des cinq terrains comparables retenus, avec le rayon de recherche de quatre kilomètres. Les coordonnées sont fictives ; les terrains non desservis se concentrent dans les secteurs périurbains de Buckingham et de Masson-Angers.}\label{fig:25:carte} | |
| 329 | +\figsource{\synth{script \texttt{analysis/python/figures/ch25\_figures.py}, graine 20261031}.} | |
| 330 | +\end{figure} | |
| 331 | + | |
| 332 | +\begin{table}[htbp] | |
| 333 | +\caption{Extraction de la valeur du terrain sur les cinq comparables bâtis du chapitre 16, sous deux conventions de dépréciation (dollars ; données synthétiques)}\label{tab:25:extraction} | |
| 334 | +\centering\footnotesize\setlength{\tabcolsep}{3.5pt} | |
| 335 | +\begin{tabular}{@{}lccccc@{}} | |
| 336 | +\toprule | |
| 337 | + & G0574 & G0404 & G0468 & G0477 & G0575 \\ | |
| 338 | +\midrule | |
| 339 | +Prix de vente (\$) & 598 000 & 506 500 & 624 500 & 538 000 & 513 500 \\ | |
| 340 | +Superficie habitable (m\textsuperscript{2}) ; qualité & 149 ; 4 & 160 ; 3 & 187 ; 4 & 146 ; 4 & 156 ; 2 \\ | |
| 341 | +Terrain (m\textsuperscript{2}) ; âge (ans) & 592 ; 30 & 538 ; 23 & 586 ; 27 & 452 ; 24 & 333 ; 13 \\ | |
| 342 | +Coût neuf transposé $C_{N,j}$ (\$) & 398 966 & 386 708 & 489 469 & 391 729 & 340 196 \\ | |
| 343 | +\addlinespace | |
| 344 | +\multicolumn{6}{@{}l}{\textit{Convention âge-vie linéaire, vie économique de 60 ans}} \\ | |
| 345 | +Dépréciation $\delta_j$ (\%) & 50,0 & 38,3 & 45,0 & 40,0 & 21,7 \\ | |
| 346 | +Terrain extrait (\$) & 398 517 & 268 030 & 355 292 & 302 963 & 247 013 \\ | |
| 347 | +Terrain extrait (\$/m\textsuperscript{2}) & 673 & 498 & 606 & 670 & 742 \\ | |
| 348 | +Transposé à 620 m\textsuperscript{2} (\$) & 407 833 & 287 732 & 365 454 & 354 826 & 337 049 \\ | |
| 349 | +\addlinespace | |
| 350 | +\multicolumn{6}{@{}l}{\textit{Convention de marché : profil d'âge du modèle hédonique du cas 1}} \\ | |
| 351 | +Prix de la maison neuve $P_{\text{neuf},j}$ (\$) & 680 424 & 561 591 & 702 963 & 598 821 & 546 232 \\ | |
| 352 | +Dépréciation implicite $\delta_j$ (\%) & 20,7 & 14,2 & 16,0 & 15,5 & 9,6 \\ | |
| 353 | +Terrain extrait $P_{\text{neuf},j} - C_{N,j}$ (\$) & 281 458 & 174 883 & 213 494 & 207 093 & 206 035 \\ | |
| 354 | +Terrain extrait (\$/m\textsuperscript{2}) & 475 & 325 & 364 & 458 & 619 \\ | |
| 355 | +Part du terrain dans le prix (\%) & 47,1 & 34,5 & 34,2 & 38,5 & 40,1 \\ | |
| 356 | +Transposé à 620 m\textsuperscript{2} (\$) & 288 037 & 187 738 & 219 600 & 242 545 & 281 135 \\ | |
| 357 | +\bottomrule | |
| 358 | +\end{tabular} | |
| 359 | +\tabsource{\synth{\texttt{analysis/python/cases/ch25\_terrain.py}, fonction \texttt{extraction\_cas1} ; coût neuf du sujet : \texttt{ch21\_cout\_neuf.py} ; profil d'âge : \texttt{traite.cas1.hedonique}} ; transposition à \msq{620} par $(620/T_j)^{0{,}50}$. Médianes transposées : \dollars{354826} (âge-vie) et \dollars{242545} (marché).} | |
| 360 | +\end{table} | |
| 361 | + | |
| 362 | +\begin{table}[htbp] | |
| 363 | +\caption{Synthèse des indications de valeur du terrain du sujet du cas 1 (620 m², Hull, 1\ier{} septembre 2026)}\label{tab:25:synthese} | |
| 364 | +\centering\small | |
| 365 | +\begin{tabular}{@{}l S[table-format=6.0] S[table-format=3.0] l@{}} | |
| 366 | +\toprule | |
| 367 | +Méthode & {Indication (\$)} & {\$/m\textsuperscript{2}} & Appréciation \\ | |
| 368 | +\midrule | |
| 369 | +Comparaison directe, cinq terrains, pondération inverse du brut & 267388 & 431 & privilégiée ; étendue 23,5 \% \\ | |
| 370 | +Prédiction hédonique directe (200 terrains) & 253412 & 409 & recoupement de la comparaison \\ | |
| 371 | +Extraction, dépréciation de marché (médiane des cinq) & 242545 & 391 & cohérente avec les prix ; levier élevé \\ | |
| 372 | +Allocation, ratio 48,2 \% sur la grille du ch.~17 & 280412 & 452 & grossière ; hérite de l'indication de la maison \\ | |
| 373 | +Allocation, ratio 48,2 \% sur la prédiction hédonique & 307584 & 496 & idem ; écart maison non résolu (ch.~20) \\ | |
| 374 | +Extraction, âge-vie 60 ans (médiane des cinq) & 354826 & 572 & dépréciation incompatible avec les prix \\ | |
| 375 | +\midrule | |
| 376 | +Valeur retenue & 265000 & 427 & fourchette \dollars{240000} -- \dollars{285000} \\ | |
| 377 | +\bottomrule | |
| 378 | +\end{tabular} | |
| 379 | +\tabsource{\synth{\texttt{analysis/python/cases/ch25\_terrain.py}, fonction \texttt{synthese}}.} | |
| 380 | +\end{table} | |
| 381 | + | |
| 382 | +\section{La technique résiduelle sur le cas 3}\label{sec:25:residuelle-cas3} | |
| 383 | + | |
| 384 | +L'immeuble de douze logements du cas 3, construit en 1962 sur un terrain de \msq{740} à Rosemont, a été évalué par le revenu au \cref{ch:29} et au \cref{ch:30} ; le \cref{ch:47} y écarte la méthode du coût parce que la dépréciation d'un bâtiment de 1962 ne se mesure pas avec fiabilité. La technique résiduelle du terrain souffre de la même limite, et c'est précisément pourquoi elle est illustrée ici : l'exercice montre ce que la méthode exige, ce qu'elle produit et pourquoi elle ne peut servir que de recoupement pour un immeuble ancien. La \cref{fig:25:schema-residuel} schématise le calcul et le \cref{tab:25:residuelle} en donne les chiffres. | |
| 385 | + | |
| 386 | +\begin{figure}[htbp] | |
| 387 | +\centering | |
| 388 | +\begin{tikzpicture}[ | |
| 389 | + bloc/.style={draw, rounded corners=2pt, minimum height=9mm, text width=36mm, align=center, font=\sffamily\footnotesize, line width=0.6pt}, | |
| 390 | + rev/.style={bloc, fill=brandLight, draw=brandPrimary}, | |
| 391 | + bat/.style={bloc, fill=orange!8, draw=brandAmber}, | |
| 392 | + ter/.style={bloc, fill=white, draw=brandDark}, | |
| 393 | + res/.style={bloc, fill=brandPrimary, text=white, draw=brandPrimary}, | |
| 394 | + op/.style={font=\sffamily\footnotesize, color=brandGray, align=center}, | |
| 395 | + fl/.style={-{Stealth[length=2mm]}, line width=0.6pt, color=brandGray}] | |
| 396 | + \node[rev] (noi) at (0,0) {Revenu net d'exploitation stabilisé\\ $\NOI = \dollars{89956}$}; | |
| 397 | + \node[bat, below left=10mm and -6mm of noi] (cb) {Contribution du bâtiment\\ $C_B = C_N(1-\delta) = \dollars{1140000}$}; | |
| 398 | + \node[bat, below=6mm of cb] (rb) {Taux du bâtiment\\ $R_B = R_L + 1/n = 6{,}25\,\%$}; | |
| 399 | + \node[bat, right=8mm of rb, text width=34mm] (rbcb) {Revenu requis par le bâtiment\\ $R_B C_B = \dollars{71250}$}; | |
| 400 | + \node[ter, below=8mm of rbcb, text width=34mm] (rt) {Revenu résiduel du terrain\\ $\NOI - R_B C_B = \dollars{18706}$}; | |
| 401 | + \node[ter, left=8mm of rt, text width=36mm] (rl) {Taux du terrain\\ $R_L = 3{,}75\,\%$}; | |
| 402 | + \node[res, below=8mm of rt, text width=40mm] (vl) {Valeur résiduelle du terrain\\ $\hat V_L = \dollars{498820}$\\ (\parmsq{674})}; | |
| 403 | + \draw[fl] (cb) -- (rb); | |
| 404 | + \draw[fl] (rb) -- node[op, above] {$\times$} (rbcb); | |
| 405 | + \draw[fl] (noi.south) -- ++(0,-4mm) -| node[op, pos=0.25, above] {$-$} (rbcb.north); | |
| 406 | + \draw[fl] (rbcb) -- (rt); | |
| 407 | + \draw[fl] (rl) -- node[op, above] {$\div$} (rt); | |
| 408 | + \draw[fl] (rt) -- (vl); | |
| 409 | +\end{tikzpicture} | |
| 410 | +\caption{Schéma de la technique résiduelle du terrain appliquée au cas 3 : le revenu net stabilisé est amputé du revenu nécessaire pour rémunérer et récupérer le capital investi dans le bâtiment, et le reste est capitalisé au taux du terrain. Chaque case est une hypothèse déclarée ; la \cref{fig:25:residuelle} montre ce qu'il advient quand elles varient.}\label{fig:25:schema-residuel} | |
| 411 | +\figsource{schéma de l'auteur (TikZ, \texttt{manuscript/chapters/ch25.tex}) ; chiffres de \texttt{analysis/python/cases/ch25\_terrain.py}.} | |
| 412 | +\end{figure} | |
| 413 | + | |
| 414 | +Le revenu net stabilisé de \dollars{89956} est celui de \texttt{traite.cas3}, établi au \cref{ch:28} avec la réserve de remplacement incluse ; le taux global médian extrait des quarante ventes du dossier est de 4,415 \% et la valeur par capitalisation directe de \dollars{2037503} (\cref{ch:29}). Le bâtiment appelle trois hypothèses, toutes déclarées et aucune tirée d'une source publique : un coût neuf de remplacement de \parmsq{2500} sur une superficie brute de \msq{950} (la superficie locative de \msq{825} majorée de 15 \% pour les aires communes), soit $C_N = \dollars{2375000}$, dans l'ordre de grandeur du coût unitaire du cas 1, aucune fourchette publique de coût du multilogement n'ayant été trouvée ; une dépréciation totale de 52 \% pour un bâtiment de 64 ans partiellement rénové, soit $C_B = \dollars{1140000}$ ; et une durée de vie économique restante de 40 ans, d'où une récupération linéaire de 2,5 \% par année. Le taux du terrain est posé à 3,75 \%, soit la différence entre le taux d'actualisation du cas 3 (7,25 \%) et la croissance des loyers de marché retenue dans ses hypothèses (3,5 \%), ce qui en fait le taux « sans récupération » cohérent avec le dossier ; le taux du bâtiment vaut alors $R_B = 3{,}75 + 2{,}5 = 6{,}25\,\%$. | |
| 415 | + | |
| 416 | +Le revenu requis par le bâtiment, $R_B C_B = \dollars{71250}$, absorbe 79 \% du revenu net ; le revenu résiduel du terrain, \dollars{18706}, capitalisé à 3,75 \%, donne une valeur résiduelle de \dollars{498820}, soit \parmsq{674} et 30,4 \% de la somme terrain plus bâtiment. Cette somme, \dollars{1638820}, est inférieure de 19,6 \% à la valeur par capitalisation directe, et l'écart est instructif : le taux global de 4,415 \% extrait du marché montréalais incorpore des anticipations de croissance des loyers et une prime d'option de redéveloppement que la récupération linéaire du bâtiment ignore. Si l'on impose la cohérence avec la capitalisation directe, c'est-à-dire $V_L + C_B = \dollars{2037503}$, le taux du terrain implicite tombe à 2,08 \%, valeur qu'aucun investisseur n'accepterait comme rendement courant mais qui s'interprète comme $r - g$ avec une croissance attendue de la rente foncière plus forte que celle des loyers ; et l'extraction sur la valeur capitalisée, $\dollars{2037503} - \dollars{1140000} = \dollars{897503}$, donne un terrain de \parmsq{1213}, près du double du résultat résiduel. Entre \dollars{499000} et \dollars{898000}, l'écart tient tout entier aux hypothèses sur le bâtiment et sur les taux, non au terrain. | |
| 417 | + | |
| 418 | +\begin{table}[htbp] | |
| 419 | +\caption{Technique résiduelle du terrain sur le cas 3 : cas de base et sensibilité à la dépréciation du bâtiment, à sa durée de vie restante et au taux du terrain (valeur du terrain en dollars)}\label{tab:25:residuelle} | |
| 420 | +\centering\small | |
| 421 | +\begin{tabular}{@{}l S[table-format=2.0] S[table-format=-7.0] S[table-format=-7.0] S[table-format=-7.0] S[table-format=-7.0] S[table-format=-7.0]@{}} | |
| 422 | +\toprule | |
| 423 | +Dépréciation ; $C_B$ (\$) & {$n$ (ans)} & {$R_L$ 3,25 \%} & {3,50 \%} & {3,75 \%} & {4,00 \%} & {4,25 \%} \\ | |
| 424 | +\midrule | |
| 425 | +44 \% ; 1 330 000 & 30 & 73767 & -26502 & -113402 & -189440 & -256531 \\ | |
| 426 | + & 40 & 414792 & 290164 & 182153 & 87644 & 4253 \\ | |
| 427 | + & 50 & 619408 & 480164 & 359487 & 253894 & 160724 \\ | |
| 428 | +\addlinespace | |
| 429 | +52 \% ; 1 140 000 & 30 & 458639 & 344450 & 245487 & 158894 & 82488 \\ | |
| 430 | + & 40 & 750946 & 615879 & \bfseries 498820 & 396394 & 306018 \\ | |
| 431 | + & 50 & 926331 & 778736 & 650820 & 538894 & 440135 \\ | |
| 432 | +\addlinespace | |
| 433 | +60 \% ; 950 000 & 30 & 843510 & 715402 & 604376 & 507227 & 421508 \\ | |
| 434 | + & 40 & 1087100 & 941593 & 815487 & 705144 & 607782 \\ | |
| 435 | + & 50 & 1233254 & 1077307 & 942153 & 823894 & 719547 \\ | |
| 436 | +\bottomrule | |
| 437 | +\end{tabular} | |
| 438 | +\tabsource{\synth{\texttt{analysis/python/cases/ch25\_terrain.py}, fonction \texttt{sensibilite\_residuelle} ; RNE de \texttt{traite.cas3}} ; $R_B = R_L + 1/n$ ; le cas de base est en gras.} | |
| 439 | +\end{table} | |
| 440 | + | |
| 441 | +\begin{figure}[htbp] | |
| 442 | +\centering | |
| 443 | +\includegraphics[width=\linewidth]{ch25/ch25-fig-residuelle-sensibilite.pdf} | |
| 444 | +\caption{Valeur résiduelle du terrain du cas 3 selon le taux du terrain $R_L$, pour trois niveaux de dépréciation du bâtiment (44, 52 et 60 \%, soit un bâtiment déprécié de \dollars{1330000}, \dollars{1140000} et \dollars{950000}) et une récupération linéaire sur 40 ans. Le point marque le cas de base ; la ligne pointillée, l'extraction sur la valeur capitalisée. La valeur devient négative lorsque le revenu requis par le bâtiment dépasse le revenu net.}\label{fig:25:residuelle} | |
| 445 | +\figsource{\synth{script \texttt{analysis/python/figures/ch25\_figures.py}, graine 20261031}.} | |
| 446 | +\end{figure} | |
| 447 | + | |
| 448 | +Le \cref{tab:25:residuelle} et la \cref{fig:25:residuelle} donnent la mesure de la \cref{prop:sensibilite-residuelle}. Un déplacement du taux du terrain de 3,75 à 4,25 \%, cinquante points de base, retranche 38,6 \% à la valeur résiduelle ; huit points de dépréciation en plus ou en moins (44 ou 60 \%) la font passer de \dollars{182153} à \dollars{815487} ; dix années de vie restante en moins (30 ans au lieu de 40) la divisent par deux. Avec un bâtiment peu déprécié, une vie restante courte et un taux du terrain élevé, la valeur devient négative, ce qui signifie seulement que le revenu net ne suffit pas à rémunérer le bâtiment aux conditions posées, donc que ces conditions sont incompatibles avec le prix du marché. La leçon rejoint celle du \cref{ch:47} : pour un immeuble ancien, la technique résiduelle ne détermine pas la valeur du terrain ; elle teste la cohérence d'un jeu d'hypothèses sur le bâtiment et les taux, et elle n'est probante que pour un bâtiment neuf représentant la plus haute et meilleure utilisation, où $C_B = C_N$ est connu et où $n$ est la vie économique entière. | |
| 449 | + | |
| 450 | +\section{Le lotissement actualisé : un site de un hectare}\label{sec:25:lotissement} | |
| 451 | + | |
| 452 | +L'exemple suivant est entièrement fictif et ses hypothèses sont des choix de l'auteur, énoncés pour illustrer la mécanique de l'\cref{eq:25:lotissement}. Un site brut de \msq{10000} dans le secteur Hull, zoné pour l'habitation unifamiliale, est lotissable en douze lots de \msq{625} desservis, après cession de \msq{1500} pour la rue et de \msq{1000}, soit 10 \% du site, à la municipalité pour fins de parcs, plafond de l'article 117.4 de la Loi sur l'aménagement et l'urbanisme. Le prix d'un lot fini de \msq{625} à façade de \qty{20}{\metre}, plat et régulier, à Hull, au 1\ier{} septembre 2026, est prédit par le modèle hédonique des terrains : \dollars{254486}, soit un produit brut de \dollars{3053830} pour les douze lots. Les coûts de viabilisation (rue, aqueduc, égout, éclairage, bordures) sont posés à \dollars{65000} par lot, soit \dollars{780000}, décaissés à la fin de la première année ; les honoraires d'arpentage, de génie et d'urbanisme et les permis, à \dollars{90000} à la date d'évaluation ; les taxes foncières, à \dollars{12000} par année au prorata des lots invendus ; les frais de vente, à 4 \% du produit ; et le profit du promoteur, à 15 \% du produit, imputé aux ventes de chaque année. L'absorption est de quatre lots par année sur trois ans, les ventes étant réputées encaissées en fin d'année, et le taux d'actualisation de 10 \% reflète le risque d'un développement de courte durée à faible préventes, supérieur au taux de 7,25 \% retenu pour les flux d'un immeuble loué au \cref{ch:30}. | |
| 453 | + | |
| 454 | +\begin{table}[htbp] | |
| 455 | +\caption{Flux du lotissement d'un site fictif de 10 000 m² en douze lots (dollars ; hypothèses déclarées dans le texte)}\label{tab:25:lotissement} | |
| 456 | +\centering\small | |
| 457 | +\begin{tabular}{@{}l S[table-format=7.0] S[table-format=7.0] S[table-format=7.0] S[table-format=7.0] S[table-format=7.0]@{}} | |
| 458 | +\toprule | |
| 459 | +Poste & {Année 0} & {Année 1} & {Année 2} & {Année 3} & {Total} \\ | |
| 460 | +\midrule | |
| 461 | +Lots vendus (nombre) & 0 & 4 & 4 & 4 & 12 \\ | |
| 462 | +Produit des ventes & 0 & 1017943 & 1017943 & 1017943 & 3053830 \\ | |
| 463 | +Viabilisation (65 000 \$ par lot) & 0 & -780000 & 0 & 0 & -780000 \\ | |
| 464 | +Honoraires et permis & -90000 & 0 & 0 & 0 & -90000 \\ | |
| 465 | +Taxes foncières (prorata des lots invendus) & 0 & -12000 & -8000 & -4000 & -24000 \\ | |
| 466 | +Frais de vente (4 \%) & 0 & -40718 & -40718 & -40718 & -122153 \\ | |
| 467 | +Profit du promoteur (15 \%) & 0 & -152692 & -152692 & -152692 & -458075 \\ | |
| 468 | +\midrule | |
| 469 | +Flux net & -90000 & 32534 & 816534 & 820534 & 1579602 \\ | |
| 470 | +Facteur d'actualisation (10 \%) & 1.0000 & 0.9091 & 0.8264 & 0.7513 & {---} \\ | |
| 471 | +Flux actualisé & -90000 & 29576 & 674822 & 616480 & 1230878 \\ | |
| 472 | +\bottomrule | |
| 473 | +\end{tabular} | |
| 474 | +\tabsource{\synth{\texttt{analysis/python/cases/ch25\_terrain.py}, fonction \texttt{lotissement} ; prix du lot : modèle hédonique des terrains ; actualisation : \texttt{traite.finance.van}}.} | |
| 475 | +\end{table} | |
| 476 | + | |
| 477 | +Le \cref{tab:25:lotissement} déroule le calcul. La valeur actualisée des flux nets est de \dollars{1230878}, soit \parmsq{123} de site brut et 40,3 \% du produit brut des lots ; la version statique, qui additionne les flux sans les actualiser, donne \dollars{1579602}, soit \parmsq{158}, et surestime le terrain de 28 \% parce qu'elle ignore que les deux tiers du produit n'arrivent qu'après deux et trois ans. Le ratio de 40 \% entre le terrain brut et le produit des lots finis est un repère utile : il dit qu'un hectare brut vaut ici un peu moins de cinq lots finis, et que la viabilisation, les frais et le profit absorbent le reste. | |
| 478 | + | |
| 479 | +\begin{figure}[htbp] | |
| 480 | +\centering | |
| 481 | +\includegraphics[width=\linewidth]{ch25/ch25-fig-lotissement.pdf} | |
| 482 | +\caption{Lotissement du site fictif de 10 000 m² : (a) produit des ventes, coûts et profit par année, et valeur actualisée cumulée à 10 \% ; (b) tornade de la valeur du site brut lorsque chaque hypothèse varie seule autour du cas de base de \dollars{1230878}. Le prix des lots et le rythme d'absorption dominent ; le taux d'actualisation pèse le moins sur un horizon de trois ans.}\label{fig:25:lotissement} | |
| 483 | +\figsource{\synth{script \texttt{analysis/python/figures/ch25\_figures.py}, graine 20261031}.} | |
| 484 | +\end{figure} | |
| 485 | + | |
| 486 | +La \cref{fig:25:lotissement} montre ce qui pèse. Une variation de 10 \% du prix des lots déplace la valeur du site de 16,7 \% (\dollars{1025828} à \dollars{1435927}) : c'est l'effet de levier de l'\cref{eq:25:lotissement}, le terrain brut n'étant que 40 \% du produit. Une absorption de deux lots par année au lieu de quatre, qui porte le développement à six ans, ramène la valeur à \dollars{963545} (moins 21,7 \%), tandis qu'une absorption de six lots par année la porte à \dollars{1331556} ; le rythme d'absorption est une hypothèse de marché, à documenter par les ventes des projets voisins, non un paramètre technique. Le coût de viabilisation (\dollars{50000} à \dollars{80000} par lot) et le profit (10 à 20 \%) ont des effets symétriques d'environ \dollars{130000} à \dollars{165000} ; le taux d'actualisation (8 à 15 \%) a l'effet le moins marqué, parce que l'horizon est court. L'ordre des sensibilités s'inverserait pour un grand lotissement étalé sur dix ans, où le taux et l'absorption domineraient. Enfin, la cession de \msq{1000} pour fins de parcs a un coût d'opportunité que l'on peut chiffrer : ces mille mètres carrés auraient formé 1,6 lot de plus, dont le produit net de frais et de profit, encaissé la troisième année, vaut aujourd'hui quelque \dollars{248000} ; c'est le prix du parc pour le promoteur, et une municipalité qui exigerait la contribution en argent plutôt qu'en terrain obtiendrait, au plafond de 10 \% de la valeur du site, environ \dollars{123000}, soit la moitié. La forme de la contribution n'est donc pas neutre, et le promoteur comme l'évaluateur ont intérêt à lire le règlement municipal avant de poser l'hypothèse. | |
| 487 | + | |
| 488 | +\section{Sensibilité : ce qui pèse le plus}\label{sec:25:sensibilite} | |
| 489 | + | |
| 490 | +Les trois exemples du chapitre mesurent, chacun à sa manière, le même phénomène : la valeur du terrain obtenue par différence amplifie l'erreur commise sur ce que l'on soustrait. Dans l'extraction du cas 1, le passage d'une dépréciation de marché (15 à 21 \% pour des maisons de 23 à 30 ans) à une règle âge-vie sur soixante ans (38 à 50 \%) relève la valeur du terrain du sujet de \dollars{242545} à \dollars{354826}, soit 46 \%, alors que la valeur de la maison n'a pas changé d'un dollar ; une erreur de dix points de dépréciation vaut ici \dollars{40000} de terrain, 15 \% de sa valeur. Dans la technique résiduelle du cas 3, cinquante points de base sur le taux du terrain valent 38,6 \% de la valeur résiduelle, et huit points de dépréciation la multiplient ou la divisent par deux. Dans le lotissement, 10 \% sur le prix des lots valent 16,7 \% sur le site brut. La comparaison directe est la seule méthode qui échappe à ce levier, et c'est la raison de sa primauté : son incertitude, mesurée par l'étendue de 23,5 \% des prix ajustés et par l'écart de 5,5 \% avec la prédiction hédonique, est celle d'un échantillon de cinq ventes bruitées, non celle d'une différence entre deux grandeurs mal connues. Lorsque les ventes de terrains manquent et que l'évaluateur doit recourir aux méthodes indirectes, la conclusion prend la forme d'une fourchette dont la largeur est dictée par l'incertitude sur le terme soustrait, et le rapport doit exposer ce terme avec autant de soin que la valeur du terrain elle-même. | |
| 491 | + | |
| 492 | +\begin{erreurs} | |
| 493 | +\begin{itemize} | |
| 494 | +\item \emph{Multiplier la superficie par un prix au mètre carré sans borner la taille.} La valeur unitaire décroît avec la superficie ; appliquer le prix unitaire de petits terrains à un grand terrain le surestime, et l'inverse le sous-estime. L'élasticité de superficie doit être estimée ou, à défaut, les comparables choisis de taille voisine. | |
| 495 | +\item \emph{Prendre le prix implicite marginal d'un modèle hédonique pour la valeur du terrain.} Le coefficient de la superficie du terrain dans un modèle de prix de maisons mesure le dernier mètre carré de cour (\parmsq{96} pour le sujet du cas 1), non le terrain (\parmsq{427}). | |
| 496 | +\item \emph{Extraire le terrain avec une dépréciation incohérente avec les prix.} Une règle âge-vie posée a priori sur des maisons anciennes transfère au terrain tout ce qu'elle exagère sur le bâtiment ; la dépréciation doit venir du marché dont on part (\cref{ch:24}). | |
| 497 | +\item \emph{Compter deux fois les services.} Un terrain évalué par comparaison avec des terrains viabilisés inclut les raccordements ; ils ne doivent pas réapparaître dans le coût neuf du bâtiment (\cref{ch:21}). | |
| 498 | +\item \emph{Appliquer la technique résiduelle à un bâtiment ancien et en présenter le résultat comme une valeur.} Elle teste la cohérence des hypothèses ; elle ne les remplace pas. Une valeur négative signale des hypothèses incompatibles, non un terrain sans valeur. | |
| 499 | +\item \emph{Lotir sans actualiser.} La version statique de la méthode du lotissement surestime le terrain de 28 \% dans l'exemple, davantage si l'absorption est lente ; et la contribution pour fins de parcs, en terrain ou en argent, change le résultat. | |
| 500 | +\item \emph{Ignorer les contraintes du site.} Un terrain en zone inondable de classe élevée, en zone agricole sans autorisation ou grevé d'une servitude qui réduit l'enveloppe constructible n'est pas comparable à un terrain libre, quelle que soit sa superficie. | |
| 501 | +\item \emph{Lire la valeur du terrain au rôle comme une valeur marchande à la date d'évaluation.} Elle est établie à la date de référence du rôle, selon l'utilisation la plus probable et les conventions du Manuel ; elle informe sur la part du terrain dans un secteur, non sur la valeur d'un terrain donné aujourd'hui. | |
| 502 | +\end{itemize} | |
| 503 | +\end{erreurs} | |
| 504 | + | |
| 505 | +\begin{limites} | |
| 506 | +\begin{itemize} | |
| 507 | +\item Les 200 ventes de terrains du chapitre sont synthétiques et leur prix de référence (\dollars{225000} pour \msq{560} à Hull en juillet 2024) est une hypothèse de cohérence interne avec le cas 1, non une mesure du marché de Gatineau ; les élasticités et les décotes (services, topographie, forme, densité) sont des hypothèses de génération vraisemblables, non des estimations sur données réelles. La valeur de \dollars{265000} retenue pour le terrain du sujet est une valeur du monde synthétique du traité. | |
| 508 | +\item Les hypothèses du cas 3 pour la technique résiduelle (coût neuf de \parmsq{2500}, superficie brute de \msq{950}, dépréciation de 52 \%, vie restante de 40 ans, taux du terrain de 3,75 \%) ne reposent sur aucune source publique ; aucune fourchette publique de coût de construction du multilogement n'a été trouvée (\texttt{sources/notes-E.md}). | |
| 509 | +\item Les paramètres du lotissement (coût de viabilisation, honoraires, frais de vente, profit, absorption, taux) sont des choix de l'auteur ; dans un mandat réel, chacun exige une source (soumissions, projets comparables, entretiens avec des promoteurs). | |
| 510 | +\item La façade du sujet (\qty{20}{\metre}) et le coût neuf des comparables bâtis (transposé par une élasticité de 0,90 et une correction de 10 \% par classe de qualité) sont des hypothèses de l'exemple. | |
| 511 | +\item Les dispositions de la Loi sur la fiscalité municipale relatives aux terrains vagues desservis (art. 244.36 et 244.49) et de la Loi sur l'aménagement et l'urbanisme (art. 115, 117.1 à 117.4) ont été vérifiées sur le texte à jour au 15 octobre 2026 ; l'article 117.6 sur l'évaluation du site par un évaluateur agréé n'a pas été lu. Le pourvoi \emph{Jardins de Vérone} est en délibéré : le droit peut changer. Les règles détaillées par classe d'intensité du cadre des zones inondables n'ont pas été extraites (\cref{ch:43}). | |
| 512 | +\item La grille de terrains de l'auteur, mentionnée dans d'autres travaux, n'est pas dans le dépôt de l'ouvrage et n'a pas été utilisée. | |
| 513 | +\end{itemize} | |
| 514 | +\end{limites} | |
| 515 | + | |
| 516 | +\begin{synthese} | |
| 517 | +\begin{itemize} | |
| 518 | +\item Le terrain est évalué séparément, réputé vacant et disponible pour sa plus haute et meilleure utilisation ; au rôle, l'unité d'évaluation et la valeur réelle sont définies par l'utilisation la plus probable, et la catégorie des terrains vagues desservis dépend du rapport bâtiment--terrain. | |
| 519 | +\item La valeur unitaire d'un terrain décroît avec la superficie ($P_L \propto T^{\varepsilon_T}$, $\varepsilon_T < 1$, estimé à 0,53 dans l'exemple) ; l'unité de comparaison (m², façade, logement constructible, lot) doit refléter ce que l'acheteur achète. | |
| 520 | +\item Six méthodes : la comparaison directe est privilégiée parce qu'elle seule échappe au levier ; l'allocation sert de contrôle ; l'extraction exige une dépréciation cohérente avec les prix ; la technique résiduelle $V_L = (\NOI - R_B C_B)/R_L$ n'est probante que pour un bâtiment neuf ; le lotissement actualisé évalue les terrains de développement ; la capitalisation de la rente s'applique aux terrains loués. | |
| 521 | +\item Les ajustements de terrain portent sur le marché, la localisation, la superficie, la façade, la forme, les services, la topographie, le zonage et les contraintes ; les décotes de services et de topographie se vérifient par le coût des travaux qu'elles évitent. | |
| 522 | +\item Pour le sujet du cas 1 : comparaison \dollars{267388}, extraction de marché \dollars{242545}, allocation \dollars{280412} ; valeur retenue \dollars{265000} (\parmsq{427}), soit 45,6 \% de l'indication de la grille du \cref{ch:17}. | |
| 523 | +\item Toute valeur de terrain obtenue par différence amplifie l'erreur du terme soustrait : dix points de dépréciation valent 15 \% du terrain dans l'extraction du cas 1, cinquante points de base valent 39 \% dans la technique résiduelle du cas 3, 10 \% sur le prix des lots valent 17 \% du site brut dans le lotissement. Conclure une fourchette. | |
| 524 | +\end{itemize} | |
| 525 | +\end{synthese} | |
| 526 | + | |
| 527 | +\section*{Exercices} | |
| 528 | +\addcontentsline{toc}{section}{Exercices} | |
| 529 | + | |
| 530 | +\begin{exercice}[1]{Unités de comparaison des terrains}{ex:25:1} | |
| 531 | +Trois terrains desservis d'un même secteur se sont vendus récemment : \dollars{240000} pour \msq{560} et \qty{17}{\metre} de façade ; \dollars{268000} pour \msq{720} et \qty{20}{\metre} ; \dollars{227500} pour \msq{480} et \qty{15}{\metre}. Calculez le prix par mètre carré et le prix par mètre de façade de chaque vente, puis l'indication obtenue pour un terrain de \msq{620} et \qty{20}{\metre} de façade en appliquant la médiane de chaque unité. Expliquez pourquoi les deux indications divergent et laquelle vous privilégieriez pour un terrain unifamilial de banlieue. | |
| 532 | +\end{exercice} | |
| 533 | + | |
| 534 | +\begin{exercice}[1]{Allocation et rôle d'évaluation}{ex:25:2} | |
| 535 | +Dans un secteur, la part médiane du terrain dans la valeur des propriétés est estimée à 45 \%. Une maison s'y est vendue \dollars{560000}. (a) Quelle valeur de terrain l'allocation indique-t-elle ? (b) Le rôle d'évaluation de cette propriété inscrit \dollars{180000} pour le terrain et \dollars{300000} pour le bâtiment : quelle part du terrain le rôle implique-t-il, et pour quelles raisons peut-elle différer de 45 \% ? (c) Expliquez pourquoi un ratio de secteur appliqué à une maison neuve et à une maison de soixante ans ne peut pas être exact pour les deux. | |
| 536 | +\end{exercice} | |
| 537 | + | |
| 538 | +\begin{exercice}[2]{Extraction et convention de dépréciation}{ex:25:3} | |
| 539 | +Le comparable G0477 du cas 1 s'est vendu \dollars{538000} ; il a \msq{146} habitables, une qualité de 4, 24 ans et un terrain de \msq{452}. Son coût neuf transposé est de \dollars{391729}. (a) Extrayez la valeur du terrain avec une dépréciation âge-vie linéaire sur 60 ans, puis avec la dépréciation implicite du marché de 15,5 \%. (b) Exprimez chaque résultat en dollars par mètre carré et transposez-le au terrain de \msq{620} du sujet avec une élasticité de superficie de 0,50. (c) Expliquez pourquoi l'écart entre les deux valeurs de terrain est égal à l'écart des dépréciations en dollars et ce que cela implique pour le choix de la convention. | |
| 540 | +\end{exercice} | |
| 541 | + | |
| 542 | +\begin{exercice}[2]{Technique résiduelle et effet de levier}{ex:25:4} | |
| 543 | +Pour l'immeuble du cas 3, le revenu net stabilisé est de \dollars{89956}, la contribution du bâtiment de \dollars{1140000}, la vie économique restante de 40 ans et le taux du terrain de 3,75 \%. (a) Calculez le taux du bâtiment avec récupération linéaire, le revenu requis par le bâtiment et la valeur résiduelle du terrain. (b) Recalculez avec un taux du terrain de 4,25 \% et mesurez la variation relative de la valeur du terrain. (c) Vérifiez le résultat à l'aide de la première élasticité de la \cref{prop:sensibilite-residuelle} et commentez. | |
| 544 | +\end{exercice} | |
| 545 | + | |
| 546 | +\begin{exercice}[2]{Ajustement de superficie : élasticité contre proportionnalité}{ex:25:5} | |
| 547 | +Le terrain comparable T004 (\msq{743}) s'est vendu \dollars{283500}. Ajustez son prix au terrain du sujet (\msq{620}) de deux manières : (a) en supposant le prix proportionnel à la superficie ; (b) avec l'\cref{eq:25:elasticite} et $\varepsilon_T = 0{,}50$. Comparez les deux prix ajustés à l'ajustement de superficie du \cref{tab:25:comparables} et expliquez le sens et l'ampleur de l'écart entre les deux méthodes. | |
| 548 | +\end{exercice} | |
| 549 | + | |
| 550 | +\begin{exercice}[3]{Lotissement : absorption, taux et contribution pour fins de parcs}{ex:25:6} | |
| 551 | +À l'aide de la fonction \texttt{lotissement} du script \texttt{analysis/python/cases/ch25\_terrain.py}, ou à la main avec les données du \cref{tab:25:lotissement} : (a) recalculez la valeur du site brut si l'absorption tombe à deux lots par année et le taux d'actualisation monte à 12 \% ; mesurez la variation par rapport au cas de base. (b) Chiffrez le coût d'opportunité, pour le promoteur, de la cession de \msq{1000} pour fins de parcs, en supposant que cette superficie aurait formé 1,6 lot vendu la troisième année net de frais de vente et de profit. (c) Comparez ce coût à la contribution en argent que la municipalité pourrait exiger au plafond de l'article 117.4 de la Loi sur l'aménagement et l'urbanisme, et discutez l'effet de la forme de la contribution sur la valeur du terrain. | |
| 552 | +\end{exercice} | |
| 553 | + | |
| 554 | +\begin{exercice}[3]{Rente foncière, croissance et réversion}{ex:25:7} | |
| 555 | +Un terrain est loué par bail emphytéotique de 40 ans à une rente de \dollars{11000} la première année, indexée de 2 \% par année ; à l'échéance, le terrain et les constructions reviennent au bailleur pour une valeur anticipée de \dollars{300000}. Le taux du terrain est de 5 \%. (a) Calculez la valeur du droit du bailleur par l'\cref{eq:25:bail}. (b) Comparez-la à la capitalisation perpétuelle de la rente constante et à la formule de Gordon \eqref{eq:25:gordon}, et dérivez cette dernière comme limite de la somme des rentes actualisées. (c) Reliez les trois montants aux composantes du prix du terrain de \textcite{capozzaHelsley1989} et expliquez pourquoi aucun des trois n'est la valeur du terrain libre. | |
| 556 | +\end{exercice} | |
| 557 | + | |
| 558 | +\section*{Pour aller plus loin} | |
| 559 | +\addcontentsline{toc}{section}{Pour aller plus loin} | |
| 560 | + | |
| 561 | +Le traitement professionnel de référence des six méthodes d'évaluation du terrain reste celui de \textcite{appraisal2026}, dont l'édition canadienne \parencite{appraisalCdn} adapte la terminologie ; \textcite{achour1992} en donne le vocabulaire français utilisé au Québec, et \textcite{wyatt2022} la perspective britannique, où la méthode résiduelle du développement occupe une place centrale. Les fondements économiques de la valeur du sol sont ceux du \cref{ch:05} : \textcite{ricardo1817} pour la rente comme résidu, \textcite{alonso1964} pour l'enchère foncière, et surtout \textcite{capozzaHelsley1989} pour la décomposition du prix du terrain urbain en valeur agricole, coût de conversion, accessibilité et prime de croissance, que \textcite{capozzaHelsley1990} et \textcite{titman1985} prolongent en univers incertain par la valeur d'attente, testée empiriquement par \textcite{quigg1993} et par \textcite{cunningham2006}. Sur la part du terrain dans la valeur des logements et sa mesure par la méthode résiduelle agrégée, \textcite{davisHeathcote2007} et \textcite{albouyEhrlichShin2018} sont incontournables, et \textcite{glaeserGyourko2005} expliquent pourquoi l'extraction peut donner des terrains sans valeur dans les villes en déclin. La littérature sur le redéveloppement et les terrains intercalaires, de \textcite{rosenthalHelsley1994} et \textcite{munneke1996} à \textcite{dyeMcmillen2007}, \textcite{mcmillenOsullivan2013}, \textcite{clappSalavei2010} et \textcite{munnekeWomack2020}, prépare le \cref{ch:41}. Pour l'analyse de développement et sa sensibilité, \textcite{byrne1996} et \textcite{geltnerMillerClaytonEichholtz2014} restent les guides les plus complets. Les fondements analytiques de la grille d'ajustements, communs aux terrains et aux maisons, sont chez \textcite{colwellCannadayWu1983}, et les travaux québécois de \textcite{theriaultDesrosiers2011} et de \textcite{kestensTheriaultDesrosiers2006} documentent les effets de l'usage du sol et de l'accessibilité sur les valeurs résidentielles de la région de Québec. | |
modified
manuscript/chapters/ch26.tex
+2 −2
@@ -348,13 +348,13 @@ et l'opération inverse, qui reconstitue un loyer « tout inclus » à partir d' | ||
| 348 | 348 | |
| 349 | 349 | \subsection{Un exemple chiffré : le tarif D d'Hydro-Québec} |
| 350 | 350 | |
| 351 | −Le tarif domestique D d'Hydro-Québec en vigueur le 1\ier{} avril 2026 comporte une redevance d'abonnement de \qty{46.154}{\cent} par jour, un prix de \qty{7.065}{\cent} par kilowattheure pour l'énergie consommée jusqu'à concurrence de 40 kilowattheures par jour, et un prix de \qty{11.142}{\cent} par kilowattheure au-delà \parencite{hydrotarifs2026} ; la Régie de l'énergie a autorisé une hausse de \pct{3.0} pour la clientèle domestique en 2026 et annoncé des hausses de \pct{3.0} en 2027 et de \pct{2.6} en 2028 \parencite{regieenergie2026}. Pour une période de facturation de $d$ jours et une consommation $q$, | |
| 351 | +Le tarif domestique D d'Hydro-Québec en vigueur le 1\ier{} avril 2026 comporte une redevance d'abonnement de \num{46.154}~¢ par jour, un prix de \num{7.065}~¢ par kilowattheure pour l'énergie consommée jusqu'à concurrence de 40 kilowattheures par jour, et un prix de \num{11.142}~¢ par kilowattheure au-delà \parencite{hydrotarifs2026} ; la Régie de l'énergie a autorisé une hausse de \pct{3.0} pour la clientèle domestique en 2026 et annoncé des hausses de \pct{3.0} en 2027 et de \pct{2.6} en 2028 \parencite{regieenergie2026}. Pour une période de facturation de $d$ jours et une consommation $q$, | |
| 352 | 352 | \begin{equation}\label{eq:26:tarifD} |
| 353 | 353 | C(q, d) = a\,d + p_1 \min\{q,\ 40\,d\} + p_2 \max\{q - 40\,d,\ 0\}, |
| 354 | 354 | \end{equation} |
| 355 | 355 | avec $a = 0{,}46154$, $p_1 = 0{,}07065$ et $p_2 = 0{,}11142$ dollars, hors taxes de vente. La structure à deux tranches est essentielle : un logement chauffé à l'électricité dépasse le seuil de 40 kilowattheures par jour en hiver et paie alors une part de sa consommation au prix supérieur, de sorte que le coût annuel n'est pas proportionnel à la consommation et qu'un calcul fondé sur un prix moyen se trompe. |
| 356 | 356 | |
| 357 | −Aucune statistique officielle de la facture moyenne d'un logement n'a pu être vérifiée pour ce chapitre, la Régie ne publiant que les hausses mensuelles estimées. L'exemple repose donc sur une hypothèse de travail déclarée : un 4½ d'environ 70 mètres carrés chauffé à l'électricité consomme 12 000 kilowattheures par an selon un profil mensuel pointu en hiver, de 1 900 kilowattheures en janvier à 500 en juillet et en août. Le \cref{tab:26:electricite} et la \cref{fig:26:normalisation} donnent le coût mensuel qui en résulte. Trois mois dépassent le seuil de la première tranche, pour 1 400 kilowattheures facturés au prix supérieur ; le coût annuel est de \dollars{1073.34}, soit \dollars{89.45} par mois en moyenne, \qty{8.94}{\cent} par kilowattheure toutes composantes comprises, et la redevance représente \pct{15.7} du total. Le coût de janvier, \dollars{175.45}, est trois fois et demie celui de juillet, \dollars{49.63}. Si un comparable de 4½ est offert à \dollars{1450} par mois chauffé et éclairé, son loyer nu équivalent est de $1450 - 89{,}45 = \dollars{1360.55}$ ; c'est ce chiffre, et non \dollars{1450}, qui se compare aux loyers de marché nus de \dollars{1240} à \dollars{1478} estimés pour les 4½ du cas 3. Pour une projection, le coût mensuel indexé de la hausse de \pct{3.0} de 2027 serait de \dollars{92.13}, approximation qui applique la hausse moyenne à toutes les composantes du tarif. | |
| 357 | +Aucune statistique officielle de la facture moyenne d'un logement n'a pu être vérifiée pour ce chapitre, la Régie ne publiant que les hausses mensuelles estimées. L'exemple repose donc sur une hypothèse de travail déclarée : un 4½ d'environ 70 mètres carrés chauffé à l'électricité consomme 12 000 kilowattheures par an selon un profil mensuel pointu en hiver, de 1 900 kilowattheures en janvier à 500 en juillet et en août. Le \cref{tab:26:electricite} et la \cref{fig:26:normalisation} donnent le coût mensuel qui en résulte. Trois mois dépassent le seuil de la première tranche, pour 1 400 kilowattheures facturés au prix supérieur ; le coût annuel est de \dollars{1073.34}, soit \dollars{89.45} par mois en moyenne, \num{8.94}~¢ par kilowattheure toutes composantes comprises, et la redevance représente \pct{15.7} du total. Le coût de janvier, \dollars{175.45}, est trois fois et demie celui de juillet, \dollars{49.63}. Si un comparable de 4½ est offert à \dollars{1450} par mois chauffé et éclairé, son loyer nu équivalent est de $1450 - 89{,}45 = \dollars{1360.55}$ ; c'est ce chiffre, et non \dollars{1450}, qui se compare aux loyers de marché nus de \dollars{1240} à \dollars{1478} estimés pour les 4½ du cas 3. Pour une projection, le coût mensuel indexé de la hausse de \pct{3.0} de 2027 serait de \dollars{92.13}, approximation qui applique la hausse moyenne à toutes les composantes du tarif. | |
| 358 | 358 | |
| 359 | 359 | \begin{table}[htbp] |
| 360 | 360 | \caption{Coût mensuel de l'électricité d'un 4½ chauffé à l'électricité au tarif D du 1\ier{} avril 2026, pour un profil hypothétique de \num{12000} kWh par an (hors taxes de vente)}\label{tab:26:electricite} |
modified
manuscript/chapters/ch27.tex
+44 −45
@@ -51,19 +51,19 @@ Les deux immeubles de ce chapitre sont les dossiers synthétiques des cas~3 et~2 | ||
| 51 | 51 | Le \cref{tab:27:etat-type} résume l'état locatif du cas~3 par type de logement ; le détail bail par bail figure au \cref{ch:47}, qui en fait l'analyse complète, et n'est pas répété ici. Les loyers contractuels totalisent \dollars{13795} par mois, soit un RBP contractuel de \dollars{165540} ; les loyers de marché estimés totalisent \dollars{15503}, soit \dollars{186036}. Le déficit de loyer est de \dollars{20496} par année, \pct{11.0} du RBP au marché, et sa structure est éloquente : il atteint \pct{15.8} pour les quatre 3½, dont les locataires sont en place depuis neuf ans en moyenne, \pct{11.1} pour les six 4½ et seulement \pct{4.9} pour les deux 5½, reloués depuis moins de trois ans. C'est la signature d'un régime d'encadrement des loyers dits « de deuxième génération », qui plafonne les hausses des baux reconduits sans fixer le loyer des nouvelles locations : la dispersion entre anciens et nouveaux locataires s'accroît avec le temps \parencite{arnott1995,kholodilin2024}. |
| 52 | 52 | |
| 53 | 53 | \begin{table}[htbp] |
| 54 | −\caption{Cas~3 : état locatif résumé par type de logement au 1\textsuperscript{er} septembre 2026 (loyers mensuels en dollars ; écart = loyer de marché moins loyer contractuel).} | |
| 54 | +\caption{Cas~3 : état locatif résumé par type de logement au 1\textsuperscript{er} septembre 2026 (loyers mensuels en dollars ; écart en pourcentage du loyer de marché ; RBP annuel = 12 × total mensuel : \dollars{165540} contractuel, \dollars{186036} au marché).} | |
| 55 | 55 | \label{tab:27:etat-type} |
| 56 | 56 | \centering |
| 57 | −\footnotesize\setlength{\tabcolsep}{4pt} | |
| 58 | −\begin{tabular}{l S[table-format=2.0] S[table-format=3.0] S[table-format=4.2] S[table-format=4.2] S[table-format=3.0] S[table-format=2.1] S[table-format=1.1] S[table-format=6.0] S[table-format=6.0]} | |
| 57 | +\scriptsize\setlength{\tabcolsep}{3pt} | |
| 58 | +\begin{tabular}{l S[table-format=2.0] S[table-format=3.0] S[table-format=5.0] S[table-format=5.0] S[table-format=4.2] S[table-format=4.2] S[table-format=2.1] S[table-format=1.1]} | |
| 59 | 59 | \toprule |
| 60 | −{Type} & {Log.} & {Sup. (m\textsuperscript{2})} & {Contrat moyen (\$)} & {Marché moyen (\$)} & {Écart total (\$)} & {Écart (\%)} & {Anc. (ans)} & {RBP contrat (\$)} & {RBP marché (\$)} \\ | |
| 60 | +{Type} & {Log.} & {m\textsuperscript{2}} & {Contrat (\$/mois)} & {Marché (\$/mois)} & {Contrat moyen (\$)} & {Marché moyen (\$)} & {Écart (\%)} & {Anc. (ans)} \\ | |
| 61 | 61 | \midrule |
| 62 | −3½ & 4 & 207 & 875.25 & 1039.00 & 655 & 15.8 & 9.0 & 42012 & 49872 \\ | |
| 63 | −4½ & 6 & 429 & 1192.00 & 1340.33 & 890 & 11.1 & 5.8 & 85824 & 96504 \\ | |
| 64 | −5½ & 2 & 189 & 1571.00 & 1652.50 & 163 & 4.9 & 2.5 & 37704 & 39660 \\ | |
| 62 | +3½ & 4 & 207 & 3501 & 4156 & 875.25 & 1039.00 & 15.8 & 9.0 \\ | |
| 63 | +4½ & 6 & 429 & 7152 & 8042 & 1192.00 & 1340.33 & 11.1 & 5.8 \\ | |
| 64 | +5½ & 2 & 189 & 3142 & 3305 & 1571.00 & 1652.50 & 4.9 & 2.5 \\ | |
| 65 | 65 | \midrule |
| 66 | −Total & 12 & 825 & 1149.58 & 1291.92 & 1708 & 11.0 & 6.3 & 165540 & 186036 \\ | |
| 66 | +Total & 12 & 825 & 13795 & 15503 & 1149.58 & 1291.92 & 11.0 & 6.3 \\ | |
| 67 | 67 | \bottomrule |
| 68 | 68 | \end{tabular} |
| 69 | 69 | \tabsource{\synth{\texttt{analysis/python/cases/ch27\_revenus.py}, fonction \texttt{par\_type\_cas3} ; état locatif \texttt{cas3\_montreal\_etat\_locatif.csv}, graine 20261031}} |
@@ -99,6 +99,7 @@ L'Enquête sur les logements locatifs de la SCHL est la seule mesure publique et | ||
| 99 | 99 | \caption{Taux d'inoccupation et taux de rotation des appartements d'initiative privée (immeubles de trois logements et plus), six RMR du Québec, octobre 2024 et octobre 2025 (pourcentages).} |
| 100 | 100 | \label{tab:27:schl-rmr} |
| 101 | 101 | \centering |
| 102 | +\footnotesize\setlength{\tabcolsep}{4.5pt} | |
| 102 | 103 | \begin{tabular}{l S[table-format=1.1] S[table-format=1.1] S[table-format=1.1] S[table-format=2.1] S[table-format=2.1]} |
| 103 | 104 | \toprule |
| 104 | 105 | {RMR} & {Inocc. 2024} & {Inocc. 2025} & {Inocc. 2 ch. 2025} & {Rotation 2024} & {Rotation 2025} \\ |
@@ -130,21 +131,21 @@ Les ventilations de la SCHL par taille d'immeuble, par année de construction et | ||
| 130 | 131 | \caption{Structure de l'inoccupation et de la rotation, Montréal, octobre 2025 : selon la taille de l'immeuble (RMR et île), selon le quartile de loyer (RMR) et selon l'année de construction (île) ; loyer moyen des logements inoccupés et occupés (île). Pourcentages et dollars par mois.} |
| 131 | 132 | \label{tab:27:schl-structure} |
| 132 | 133 | \centering |
| 133 | −\footnotesize\setlength{\tabcolsep}{4.5pt} | |
| 134 | +\scriptsize\setlength{\tabcolsep}{3pt} | |
| 134 | 135 | \begin{tabular}{l S[table-format=1.1] S[table-format=1.1] S[table-format=2.1] l S[table-format=1.1] l S[table-format=1.1]} |
| 135 | 136 | \toprule |
| 136 | −\multicolumn{4}{l}{\emph{Taille de l'immeuble}} & \multicolumn{2}{l}{\emph{Quartile de loyer (RMR)}} & \multicolumn{2}{l}{\emph{Année de construction (île)}} \\ | |
| 137 | +\multicolumn{4}{l}{\emph{Taille de l'immeuble (logements)}} & \multicolumn{2}{l}{\emph{Quartile de loyer (RMR)}} & \multicolumn{2}{l}{\emph{Année de construction (île)}} \\ | |
| 137 | 138 | \cmidrule(lr){1-4}\cmidrule(lr){5-6}\cmidrule(lr){7-8} |
| 138 | −{Logements} & {Inocc. RMR} & {Inocc. île} & {Rotation RMR} & {Quartile} & {Inocc.} & {Période} & {Inocc.} \\ | |
| 139 | +{Taille} & {Inocc. RMR} & {Inocc. île} & {Rotation RMR} & {Quartile} & {Inocc.} & {Période} & {Inocc.} \\ | |
| 139 | 140 | \midrule |
| 140 | −3 à 5 & 2.1 & 2.3 & 7.6 & Q1 (loyers les plus bas) & 1.3 & Avant 1940 & 2.2 \\ | |
| 141 | −6 à 19 & 2.1 & 2.2 & 8.5 & Q2 & 1.9 & 1940 à 1959 & 2.6 \\ | |
| 142 | −20 à 49 & 3.4 & 3.9 & 9.4 & Q3 & 3.0 & 1960 à 1974 & 3.3 \\ | |
| 143 | −50 à 99 & 3.7 & 3.8 & 12.3 & Q4 (loyers les plus élevés) & 4.9 & 1975 à 1989 & 2.8 \\ | |
| 141 | +3 à 5 & 2.1 & 2.3 & 7.6 & Q1 (loyers bas) & 1.3 & Avant 1940 & 2.2 \\ | |
| 142 | +6 à 19 & 2.1 & 2.2 & 8.5 & Q2 & 1.9 & 1940-1959 & 2.6 \\ | |
| 143 | +20 à 49 & 3.4 & 3.9 & 9.4 & Q3 & 3.0 & 1960-1974 & 3.3 \\ | |
| 144 | +50 à 99 & 3.7 & 3.8 & 12.3 & Q4 (loyers élevés) & 4.9 & 1975-1989 & 2.8 \\ | |
| 144 | 145 | 100 et plus & 5.7 & 5.1 & 14.2 & & & 2015 ou après & 5.6 \\ |
| 145 | 146 | Tous & 2.9 & 3.1 & 9.4 & & & Tous & 3.1 \\ |
| 146 | 147 | \midrule |
| 147 | −\multicolumn{8}{l}{\emph{Loyer moyen (\$/mois), île de Montréal} : logements inoccupés \num{1573} contre occupés \num{1275} (tous les types, $+\pct{23.4}$) ; deux chambres \num{1815} contre \num{1349} ($+\pct{34.5}$).} \\ | |
| 148 | +\multicolumn{8}{p{118mm}}{\emph{Loyer moyen (\$/mois), île de Montréal} : logements inoccupés \num{1573} contre occupés \num{1275} (tous les types, $+\pct{23.4}$) ; deux chambres \num{1815} contre \num{1349} ($+\pct{34.5}$).} \\ | |
| 148 | 149 | \bottomrule |
| 149 | 150 | \end{tabular} |
| 150 | 151 | \tabsource{SCHL, Enquête sur les logements locatifs, octobre 2025, tableaux 1.3.1, 1.3.4, 1.4, 1.2.1 et 1.1.9 du fichier de la RMR de Montréal \parencite{schlrmltables2025}, consultés le 31~octobre 2026 ; chiffres cités avec attribution ; les cellules de 1990 à 2014 sont supprimées par la SCHL ; lecture par \texttt{analysis/python/cases/ch27\_revenus.py}.} |
@@ -220,7 +221,7 @@ Le \motcle{revenu brut effectif} (RBE, \emph{effective gross income}) est le rev | ||
| 220 | 221 | \begin{equation}\label{eq:27:rbe} |
| 221 | 222 | RBE = RBP_c\,(1 - v) + R_{\text{autres}} , |
| 222 | 223 | \end{equation} |
| 223 | −où $RBP_c$ est le revenu brut potentiel contractuel (ou mixte lorsqu'il y a des logements vacants), $v$ la provision combinée pour inoccupation, mauvaises créances et concessions, et $R_{\text{autres}}$ les autres revenus stabilisés. C'est le RBE, et non le RBP, qui sert d'assiette au revenu net d'exploitation du \cref{ch:28} : $\NOI = RBE - DE - RR$. La fonction \texttt{traite.finance.revenu\_brut\_effectif} implante l'\cref{eq:27:rbe} et toutes les fonctions des cas y recourent. | |
| 224 | +où $RBP_c$ est le revenu brut potentiel contractuel (ou mixte lorsqu'il y a des logements vacants), $v$ la provision combinée pour inoccupation, mauvaises créances et concessions, et $R_{\text{autres}}$ les autres revenus stabilisés. C'est le RBE, et non le RBP, qui sert d'assiette au revenu net d'exploitation du \cref{ch:28} : $\NOI = RBE - DE - RR$. Dans la bibliothèque de l'ouvrage, la fonction \texttt{revenu\_brut\_effectif} du module \texttt{traite.finance} implante l'\cref{eq:27:rbe}, et toutes les fonctions des cas y recourent. | |
| 224 | 225 | |
| 225 | 226 | Deux conventions concurrentes existent et il faut savoir les reconnaître dans un rapport ou une fiche de vente. La première applique la provision à l'ensemble des revenus, $RBE' = (RBP_c + R_{\text{autres}})(1-v)$ ; elle est plus prudente d'un montant $v\,R_{\text{autres}}$, soit \dollars{365} pour le cas~3, ce qui est négligeable ici mais ne l'est plus pour un immeuble où les autres revenus pèsent dix ou quinze pour cent. La seconde applique la provision au RBP de marché, $RBE'' = RBP_m(1-v) + R_{\text{autres}}$, et constitue une erreur lorsque les baux sont en place : pour le cas~3, elle donnerait \dollars{188141} au lieu de \dollars{168444}, soit \pct{11.7} de trop, et conduirait à une surévaluation du même ordre si le taux de capitalisation n'était pas ajusté en conséquence, comme le \cref{ch:29} le montre. L'écart entre ces conventions n'est pas une affaire de goût : il doit être le même pour le sujet et pour les comparables dont on extrait les taux et les multiplicateurs. |
| 226 | 227 | |
@@ -245,11 +246,11 @@ où $A$ est l'IPC moyen de la période de référence et $B$, $C$, $D$ ceux des | ||
| 245 | 246 | \subsection{Le modèle de projection} |
| 246 | 247 | |
| 247 | 248 | Le revenu brut potentiel d'un immeuble sous encadrement se projette logement par logement. Soit $L_{i,t}$ le loyer mensuel contractuel du logement $i$ l'année $t$, $M_{i,t}$ son loyer de marché, $g_c$ le taux d'indexation des baux reconduits et $g_m$ la croissance des loyers de marché. Chaque année, une fraction $\rho$ des logements se libère et chaque logement libéré est reloué à son loyer de marché ; les autres sont reconduits avec l'indexation : |
| 248 | −\begin{equation}\label{eq:27:trajectoire} | |
| 249 | −M_{i,t} = M_{i,1}(1+g_m)^{t-1}, \qquad | |
| 250 | −L_{i,t} = \begin{cases} M_{i,t} & \text{si le logement } i \text{ est reloué l'année } t, \\ L_{i,t-1}(1+g_c) & \text{sinon,} \end{cases} \qquad | |
| 251 | −RBP_t = 12 \sum_{i=1}^{n} L_{i,t} . | |
| 252 | −\end{equation} | |
| 249 | +\begin{align}\label{eq:27:trajectoire} | |
| 250 | +M_{i,t} &= M_{i,1}(1+g_m)^{t-1}, & | |
| 251 | +L_{i,t} &= \begin{cases} M_{i,t} & \text{si le logement } i \text{ est reloué l'année } t, \\ L_{i,t-1}(1+g_c) & \text{sinon,} \end{cases} \notag\\ | |
| 252 | +RBP_t &= 12 \sum_{i=1}^{n} L_{i,t} . && | |
| 253 | +\end{align} | |
| 253 | 254 | Trois trajectoires de référence découlent de ce modèle. Lorsque $\rho = 0$, le RBP croît au taux $g_c$ et, si $g_c < g_m$, s'éloigne indéfiniment du marché : c'est la trajectoire « TAL seul », plancher de la projection. Lorsque tous les logements sont au marché, $RBP_t = RBP_{m,1}(1+g_m)^{t-1}$ : c'est la trajectoire « indice de marché », plafond de la projection. Entre les deux, la trajectoire « rotation » dépend de $\rho$ et de l'ordre dans lequel les logements se libèrent ; l'hypothèse du cas~3, partagée avec les chapitres~30 et~47, est que les logements les plus sous le marché se libèrent en premier, ce qui est favorable au locateur et doit être testé. La fonction \texttt{traite.cas3.projection\_dcf} implante ce modèle, avec $g_c = \pct{3.1}$, $g_m = \pct{3.5}$ et $\rho = \pct{15}$ dans le dossier de base ; la valeur de $g_m$ est volontairement inférieure aux hausses de 2024-2025, qu'aucun analyste ne prolonge sur dix ans, et légèrement supérieure à l'inflation. |
| 254 | 255 | |
| 255 | 256 | Le choix de $\rho$ est le plus lourd de conséquences. La SCHL mesurait une rotation de \pct{9.4} dans la RMR de Montréal en 2025 et de \pct{8.5} pour les immeubles de 6 à 19 logements ; le dossier du cas~3 retient \pct{15}, soit environ deux logements par an, en posant que la composition de l'immeuble (quatre 3½ et six 4½ occupés par des ménages plus mobiles) justifie une rotation supérieure à la moyenne régionale. C'est une hypothèse favorable au propriétaire, que le \cref{ch:47} soumet au test de résistance ; le présent chapitre en mesure l'effet par une variante à \pct{9.4}. La Loi~31 de 2024, en permettant au locateur de refuser une cession de bail pour un motif autre qu'un motif sérieux, le bail étant alors résilié \parencite[art.~1978.2]{ccq,loi31_2024}, a supprimé le principal mécanisme par lequel un loyer bas se transmettait d'un locataire au suivant, ce qui soutient l'hypothèse de relocation au marché ; mais le droit du nouveau locataire de demander la fixation après avoir pris connaissance du loyer précédent \parencite[art.~1950]{ccq} la tempère, et un évaluateur prudent peut ne relouer qu'à une fraction du marché. |
@@ -259,24 +260,24 @@ Le choix de $\rho$ est le plus lourd de conséquences. La SCHL mesurait une rota | ||
| 259 | 260 | Le \cref{tab:27:trajectoires} et la \cref{fig:27:trajectoires} présentent les trajectoires du RBP du cas~3 sur l'horizon de dix ans du dossier. Elles partent toutes du même point, \dollars{165540} en 2026, sauf la trajectoire de marché qui part de \dollars{186036}. Avec l'indexation seule, le RBP atteint \dollars{217887} en 2035, et l'écart au marché se creuse de \pct{11.0} à \pct{14.1} : un immeuble sans rotation voit son retard s'aggraver chaque année de la différence $g_m - g_c$. Avec la rotation de \pct{15} du dossier, le RBP atteint \dollars{251101} et l'écart au marché se referme à \pct{1.0} dès la septième année ; la croissance annuelle moyenne du RBP est alors de \pct{4.74}, soit l'indexation de \pct{3.1} augmentée d'un rattrapage d'environ \num{1.6} point par an qui s'épuise à mesure que les baux anciens disparaissent. Avec la rotation régionale de \pct{9.4}, le RBP atteint \dollars{247212} et l'écart résiduel est de \pct{2.5} en 2035 ; la croissance moyenne est de \pct{4.56}. La somme des RBP des dix années, qui est ce que l'actualisation pondère, est de \dollars{1906494} pour l'indexation seule, \dollars{2057623} pour la rotation régionale, \dollars{2113053} pour la rotation du dossier et \dollars{2182461} au marché. |
| 260 | 261 | |
| 261 | 262 | \begin{table}[htbp] |
| 262 | −\caption{Cas~3 : revenu brut potentiel projeté selon quatre trajectoires (dollars courants) et écart au marché (pourcentage du RBP au marché) ; $g_c = \pct{3.1}$, $g_m = \pct{3.5}$, relocation au marché des logements les plus sous le marché en premier.} | |
| 263 | +\caption{Cas~3 : revenu brut potentiel projeté selon quatre trajectoires (dollars courants) et écart au marché (pourcentage du RBP au marché) ; $g_c = \pct{3.1}$, $g_m = \pct{3.5}$, relocation au marché des logements les plus sous le marché en premier ; l'exercice court du 1\textsuperscript{er} septembre au 31~août.} | |
| 263 | 264 | \label{tab:27:trajectoires} |
| 264 | 265 | \centering |
| 265 | −\footnotesize\setlength{\tabcolsep}{4pt} | |
| 266 | −\begin{tabular}{S[table-format=2.0] l S[table-format=6.0] S[table-format=6.0] S[table-format=6.0] S[table-format=6.0] S[table-format=2.1] S[table-format=2.1] S[table-format=2.1]} | |
| 266 | +\scriptsize\setlength{\tabcolsep}{3pt} | |
| 267 | +\begin{tabular}{l S[table-format=7.0] S[table-format=7.0] S[table-format=7.0] S[table-format=7.0] S[table-format=2.1] S[table-format=2.1] S[table-format=2.1]} | |
| 267 | 268 | \toprule |
| 268 | −{Année} & {Exercice} & {TAL seul (\$)} & {Rotation 9,4 \% (\$)} & {Rotation 15 \% (\$)} & {Marché (\$)} & {Écart TAL (\%)} & {Écart 9,4 \% (\%)} & {Écart 15 \% (\%)} \\ | |
| 269 | +{Année} & {TAL seul (\$)} & {Rot. 9,4 \% (\$)} & {Rot. 15 \% (\$)} & {Marché (\$)} & {Écart TAL} & {Écart 9,4 \%} & {Écart 15 \%} \\ | |
| 269 | 270 | \midrule |
| 270 | −1 & 2026-2027 & 165540 & 165540 & 165540 & 186036 & 11.0 & 11.0 & 11.0 \\ | |
| 271 | −2 & 2027-2028 & 170672 & 174669 & 177389 & 192547 & 11.4 & 9.3 & 7.9 \\ | |
| 272 | −3 & 2028-2029 & 175963 & 182938 & 188095 & 199286 & 11.7 & 8.2 & 5.6 \\ | |
| 273 | −5 & 2030-2031 & 187041 & 200200 & 209340 & 213481 & 12.4 & 6.2 & 1.9 \\ | |
| 274 | −7 & 2032-2033 & 198818 & 219817 & 226565 & 228686 & 13.1 & 3.9 & 0.9 \\ | |
| 275 | −10 & 2035-2036 & 217887 & 247212 & 251101 & 253548 & 14.1 & 2.5 & 1.0 \\ | |
| 271 | +1 (2026-2027) & 165540 & 165540 & 165540 & 186036 & 11.0 & 11.0 & 11.0 \\ | |
| 272 | +2 (2027-2028) & 170672 & 174669 & 177389 & 192547 & 11.4 & 9.3 & 7.9 \\ | |
| 273 | +3 (2028-2029) & 175963 & 182938 & 188095 & 199286 & 11.7 & 8.2 & 5.6 \\ | |
| 274 | +5 (2030-2031) & 187041 & 200200 & 209340 & 213481 & 12.4 & 6.2 & 1.9 \\ | |
| 275 | +7 (2032-2033) & 198818 & 219817 & 226565 & 228686 & 13.1 & 3.9 & 0.9 \\ | |
| 276 | +10 (2035-2036) & 217887 & 247212 & 251101 & 253548 & 14.1 & 2.5 & 1.0 \\ | |
| 276 | 277 | \midrule |
| 277 | −\multicolumn{2}{l}{Croissance annuelle moyenne, années 1 à 10} & {\pct{3.10}} & {\pct{4.56}} & {\pct{4.74}} & {\pct{3.50}} & & & \\ | |
| 278 | −\multicolumn{2}{l}{Somme des RBP, années 1 à 10} & 1906494 & 2057623 & 2113053 & 2182461 & & & \\ | |
| 279 | −\multicolumn{2}{l}{Valeur par flux actualisés (pour mémoire)} & 1756414 & 2140916 & 2208566 & {—} & & & \\ | |
| 278 | +Croissance moyenne, années 1 à 10 & \multicolumn{1}{r}{\pct{3.10}} & \multicolumn{1}{r}{\pct{4.56}} & \multicolumn{1}{r}{\pct{4.74}} & \multicolumn{1}{r}{\pct{3.50}} & & & \\ | |
| 279 | +Somme des RBP, années 1 à 10 & 1906494 & 2057623 & 2113053 & 2182461 & & & \\ | |
| 280 | +Valeur par flux actualisés (mémoire) & 1756414 & 2140916 & 2208566 & \multicolumn{1}{r}{—} & & & \\ | |
| 280 | 281 | \bottomrule |
| 281 | 282 | \end{tabular} |
| 282 | 283 | \tabsource{\synth{\texttt{traite.cas3.projection\_dcf} avec rotation 0, \pct{9.4} et \pct{15}, via \texttt{analysis/python/cases/ch27\_revenus.py} (fonction \texttt{trajectoires\_cas3}) ; valeur DCF : \texttt{traite.cas3.valeur\_dcf} avec les hypothèses du dossier (\cref{ch:30}) ; graine 20261031}} |
@@ -306,8 +307,8 @@ Le \cref{tab:27:cascade} présente le calcul complet et la \cref{fig:27:cascade} | ||
| 306 | 307 | \caption{Cas~3 : du revenu brut potentiel au revenu brut effectif, première année d'exploitation (1\textsuperscript{er} septembre 2026 au 31~août 2027), dollars courants.} |
| 307 | 308 | \label{tab:27:cascade} |
| 308 | 309 | \centering |
| 309 | −\footnotesize\setlength{\tabcolsep}{4.5pt} | |
| 310 | −\begin{tabular}{L{58mm} S[table-format=6.2] S[table-format=3.1] S[table-format=5.0] S[table-format=3.2]} | |
| 310 | +\footnotesize\setlength{\tabcolsep}{3.5pt} | |
| 311 | +\begin{tabular}{L{52mm} S[table-format=-6.2] S[table-format=-3.1] S[table-format=-5.0] S[table-format=-3.2]} | |
| 311 | 312 | \toprule |
| 312 | 313 | {Poste} & {Montant (\$)} & {\% du RBP} & {Par logement (\$)} & {Par m\textsuperscript{2} (\$)} \\ |
| 313 | 314 | \midrule |
@@ -323,8 +324,7 @@ Plus : autres revenus (stationnements non inclus, buanderie, rangement) & 9360.0 | ||
| 323 | 324 | \midrule |
| 324 | 325 | \textbf{Revenu brut effectif (RBE)} & {\textbf{\num{168443.94}}} & {\textbf{101,8}} & {\textbf{\num{14037}}} & {\textbf{204,17}} \\ |
| 325 | 326 | \midrule |
| 326 | −\multicolumn{5}{l}{Taux d'occupation économique $\theta = \num{0.961} \times \num{0.890} = \pct{85.5}$ ; RBE aux loyers de marché (même $v$, mêmes autres revenus) : \dollars{188140.60}.} \\ | |
| 327 | −\multicolumn{5}{l}{Variante « $v$ sur tous les revenus » : $(\dollars{165540} + \dollars{9360}) \times \num{0.961} = \dollars{168078.90}$, soit \dollars{365.04} de moins.} \\ | |
| 327 | +\multicolumn{5}{p{122mm}}{Taux d'occupation économique $\theta = \num{0.961} \times \num{0.890} = \pct{85.5}$ ; RBE aux loyers de marché (même $v$, mêmes autres revenus) : \dollars{188140.60}. Variante « $v$ sur tous les revenus » : $(\dollars{165540} + \dollars{9360}) \times \num{0.961} = \dollars{168078.90}$, soit \dollars{365.04} de moins.} \\ | |
| 328 | 328 | \bottomrule |
| 329 | 329 | \end{tabular} |
| 330 | 330 | \tabsource{\synth{\texttt{traite.cas3.revenus} via \texttt{analysis/python/cases/ch27\_revenus.py} ; décomposition de la provision : convention déclarée du dossier ; graine 20261031}} |
@@ -348,10 +348,10 @@ Le triplex du cas~2 illustre la même cascade à petite échelle, avec deux part | ||
| 348 | 348 | \caption{Cas~2 : état locatif du triplex de Limoilou au 1\textsuperscript{er} septembre 2026 et revenu brut effectif de première année (dollars courants).} |
| 349 | 349 | \label{tab:27:cas2} |
| 350 | 350 | \centering |
| 351 | −\footnotesize | |
| 352 | −\begin{tabular}{l l S[table-format=2.0] S[table-format=4.0] S[table-format=4.0] S[table-format=2.1] l} | |
| 351 | +\footnotesize\setlength{\tabcolsep}{4pt} | |
| 352 | +\begin{tabular}{l l S[table-format=3.0] S[table-format=4.0] S[table-format=4.0] S[table-format=2.1] l} | |
| 353 | 353 | \toprule |
| 354 | −{Logement} & {Type} & {m\textsuperscript{2}} & {Loyer contractuel (\$/mois)} & {Loyer de marché (\$/mois)} & {Écart (\%)} & {Locataire depuis} \\ | |
| 354 | +{Logement} & {Type} & {m\textsuperscript{2}} & {Contrat (\$/mois)} & {Marché (\$/mois)} & {Écart (\%)} & {Locataire depuis} \\ | |
| 355 | 355 | \midrule |
| 356 | 356 | Rez-de-chaussée & 5½ & 92 & 1047 & 1430 & 26.8 & 2019 \\ |
| 357 | 357 | Deuxième & 5½ & 92 & 1188 & 1430 & 16.9 & 2022 \\ |
@@ -359,9 +359,8 @@ Troisième & 4½ & 78 & 1251 & 1251 & 0.0 & 2025 \\ | ||
| 359 | 359 | \midrule |
| 360 | 360 | Total mensuel & & 262 & 3486 & 4111 & 15.2 & \\ |
| 361 | 361 | \midrule |
| 362 | −\multicolumn{7}{l}{RBP contractuel $12 \times \dollars{3486} = \dollars{41832}$ ; RBP au marché $\dollars{49332}$ ; déficit de loyer $\dollars{7500}$ (\pct{15.2}).} \\ | |
| 363 | −\multicolumn{7}{l}{Inoccupation et pertes (\pct{3} : SCHL Québec \pct{2.4} + créances $\approx \pct{0.6}$) : $-\dollars{1254.96}$ ; autres revenus : nuls (stationnement inclus au bail).} \\ | |
| 364 | −\multicolumn{7}{l}{\textbf{RBE = \dollars{40577.04}} (\dollars{13526} par logement) ; RBE aux loyers de marché \dollars{47852.04} ; $\theta = \pct{82.3}$ ; variante occupant (provision sur deux logements) \dollars{40953.96}.} \\ | |
| 362 | +\multicolumn{7}{p{118mm}}{RBP contractuel $12 \times \dollars{3486} = \dollars{41832}$ ; RBP au marché $\dollars{49332}$ ; déficit de loyer $\dollars{7500}$ (\pct{15.2}). Inoccupation et pertes (\pct{3} : SCHL Québec \pct{2.4} + créances $\approx \pct{0.6}$) : $-\dollars{1254.96}$ ; autres revenus : nuls (stationnement inclus au bail).} \\ | |
| 363 | +\multicolumn{7}{p{118mm}}{\textbf{RBE = \dollars{40577.04}} (\dollars{13526} par logement) ; RBE aux loyers de marché \dollars{47852.04} ; $\theta = \pct{82.3}$ ; variante occupant (provision sur deux logements) \dollars{40953.96}.} \\ | |
| 365 | 364 | \bottomrule |
| 366 | 365 | \end{tabular} |
| 367 | 366 | \tabsource{\synth{\texttt{traite.cas2.revenus} via \texttt{analysis/python/cases/ch27\_revenus.py} ; \texttt{cas2\_quebec\_loyers.csv}, graine 20261031 ; loyer de marché calibré sur la SCHL, RMR de Québec, octobre 2025 \parencite{schlrmltables2025}}} |
modified
manuscript/chapters/ch28.tex
+9 −9
Large diff (72 lines) is not loaded by default to keep the page fast.Load diff
modified
manuscript/chapters/ch32.tex
+522 −1
Large diff (524 lines) is not loaded by default to keep the page fast.Load diff
modified
manuscript/chapters/ch33.tex
+161 −0
Large diff (164 lines) is not loaded by default to keep the page fast.Load diff
added
references/lib-ch31.bib
+10 −0
Large diff (10 lines) is not loaded by default to keep the page fast.Load diff
modified
solutions/ch25.tex
+57 −0
Large diff (58 lines) is not loaded by default to keep the page fast.Load diff
modified
solutions/ch26.tex
+45 −0
Large diff (46 lines) is not loaded by default to keep the page fast.Load diff
modified
solutions/ch31.tex
+3 −3
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
modified
solutions/ch32.tex
+29 −0
Large diff (30 lines) is not loaded by default to keep the page fast.Load diff
modified
sources/registry.csv
+15 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
modified
tools/merge_sources.py
+4 −3
Large diff (18 lines) is not loaded by default to keep the page fast.Load diff
modified
verification/calculations.csv
+25 −7
Large diff (57 lines) is not loaded by default to keep the page fast.Load diff
added
verification/chapters/ch14-claims.csv
+22 −0
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
added
verification/chapters/ch14-registry.csv
+9 −0
Large diff (9 lines) is not loaded by default to keep the page fast.Load diff
added
verification/chapters/ch15-claims.csv
+15 −0
Large diff (15 lines) is not loaded by default to keep the page fast.Load diff
added
verification/chapters/ch15-registry.csv
+8 −0
Large diff (8 lines) is not loaded by default to keep the page fast.Load diff
added
verification/chapters/ch15.md
+24 −0
Large diff (24 lines) is not loaded by default to keep the page fast.Load diff
added
verification/chapters/ch22.md
+40 −0
Large diff (40 lines) is not loaded by default to keep the page fast.Load diff
added
verification/chapters/ch25-figures.csv
+6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added
verification/chapters/ch31-calculations.csv
+19 −0
Large diff (19 lines) is not loaded by default to keep the page fast.Load diff
added
verification/chapters/ch31-claims.csv
+19 −0
Large diff (19 lines) is not loaded by default to keep the page fast.Load diff
added
verification/chapters/ch31-figures.csv
+5 −0
Large diff (5 lines) is not loaded by default to keep the page fast.Load diff
added
verification/chapters/ch31-registry.csv
+7 −0
Large diff (7 lines) is not loaded by default to keep the page fast.Load diff
modified
verification/claims.csv
+61 −8
Large diff (107 lines) is not loaded by default to keep the page fast.Load diff
modified
verification/figures.csv
+11 −2
Large diff (23 lines) is not loaded by default to keep the page fast.Load diff