Ch. 40 livré et validé (compilation isolée, tests, fusion des registres)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
12 changed files +191 −60
modified
analysis/python/figures/ch45_figures.py
+27 −24
@@ -44,28 +44,28 @@ def fig_carte(D): | ||
| 44 | 44 | |
| 45 | 45 | |
| 46 | 46 | def fig_cascade(D): |
| 47 | − """Prix bruts → ajustements par groupe → prix ajustés, pour les 5 comparables (grille du ch. 17), et valeur pondérée.""" | |
| 47 | + """Prix bruts → ajustements par groupe (empilés) → prix ajustés, pour les 5 comparables (grille du ch. 17), et valeur pondérée.""" | |
| 48 | 48 | a = D["adj17"]; grp = [g for g in c17.GROUPES if (a[g].abs() > 1).any()] |
| 49 | − fig, ax = plt.subplots(figsize=(LARGEUR, 3.6)) | |
| 50 | − x = np.arange(len(a)); w = 0.36 | |
| 51 | − ax.bar(x - w / 2, a["prix_vente"], width=w, color=palette.cat[0], alpha=0.5, label="prix de vente") | |
| 52 | − ax.bar(x + w / 2, a["prix_ajuste"], width=w, color=palette.cat[1], label="prix ajusté") | |
| 53 | − # ajustements empilés (positifs vers le haut, négatifs vers le bas) sur le prix brut | |
| 49 | + fig, ax = plt.subplots(figsize=(LARGEUR, 3.9)) | |
| 50 | + x = np.arange(len(a)); w = 0.27 | |
| 51 | + ax.bar(x - 0.3, a["prix_vente"], width=w, color=palette.cat[0], alpha=0.5, label="prix de vente") | |
| 52 | + ax.bar(x + 0.3, a["prix_ajuste"], width=w, color=palette.cat[1], label="prix ajusté") | |
| 54 | 53 | cols = [palette.cat[(i + 2) % len(palette.cat)] for i in range(len(grp))] |
| 55 | 54 | for i, (_, r) in enumerate(a.iterrows()): |
| 56 | 55 | pos = r["prix_vente"]; neg = r["prix_vente"] |
| 57 | 56 | for g, c in zip(grp, cols): |
| 58 | 57 | v = r[g] |
| 59 | 58 | if v >= 0: |
| 60 | − ax.bar(x[i] + w / 2, v, bottom=pos, width=w * 0.55, color=c, edgecolor="white", lw=0.3, label=c17.LIBELLES[g] if i == 0 else None); pos += v | |
| 59 | + ax.bar(x[i], v, bottom=pos, width=w, color=c, edgecolor="white", lw=0.3, label=c17.LIBELLES[g] if i == 0 else None); pos += v | |
| 61 | 60 | else: |
| 62 | − ax.bar(x[i] + w / 2, v, bottom=neg, width=w * 0.55, color=c, edgecolor="white", lw=0.3, label=c17.LIBELLES[g] if i == 0 else None); neg += v | |
| 63 | − ax.text(x[i] + w / 2, r["prix_ajuste"] + 6000, fmt_d(r["prix_ajuste"]), ha="center", fontsize=6.5) | |
| 64 | − ax.text(x[i] - w / 2, r["prix_vente"] + 6000, fmt_d(r["prix_vente"]), ha="center", fontsize=6.5, color=palette.ink2) | |
| 65 | − ax.text(x[i], 455000, f"brut {r['ajust_brut_pct']*100:.1f} %\npoids {D['poids17'][i]:.3f}".replace(".", ","), ha="center", fontsize=6.5, color=palette.ink2) | |
| 66 | − ax.axhline(D["V_comp"], color=palette.ink, lw=1.0, ls="--"); ax.text(len(a) - 0.5, D["V_comp"] + 4000, f"valeur pondérée {fmt_d(D['V_comp'])}", ha="right", fontsize=7) | |
| 67 | − ax.axhline(D["V_hed"], color=palette.ink2, lw=0.8, ls=":"); ax.text(len(a) - 0.5, D["V_hed"] + 4000, f"prédiction hédonique {fmt_d(D['V_hed'])}", ha="right", fontsize=7, color=palette.ink2) | |
| 68 | − ax.set_xticks(x); ax.set_xticklabels(a["id_vente"]); ax.set_ylim(440000, 700000); ax.yaxis.set_major_formatter(FuncFormatter(fmt_k)) | |
| 61 | + ax.bar(x[i], v, bottom=neg, width=w, color=c, edgecolor="white", lw=0.3, label=c17.LIBELLES[g] if i == 0 else None); neg += v | |
| 62 | + ax.plot([x[i] - 0.3 - w / 2, x[i] + w / 2], [r["prix_vente"]] * 2, color=palette.ink2, lw=0.5, ls=":") | |
| 63 | + ax.text(x[i] + 0.3, r["prix_ajuste"] + 5000, fmt_d(r["prix_ajuste"]), ha="center", fontsize=6.3) | |
| 64 | + ax.text(x[i] - 0.3, r["prix_vente"] + 5000, fmt_d(r["prix_vente"]), ha="center", fontsize=6.3, color=palette.ink2) | |
| 65 | + ax.axhline(D["V_comp"], color=palette.ink, lw=1.0, ls="--"); ax.text(len(a) - 0.55, D["V_comp"] - 11000, f"valeur pondérée {fmt_d(D['V_comp'])}", ha="right", fontsize=7) | |
| 66 | + ax.axhline(D["V_hed"], color=palette.ink2, lw=0.8, ls=":"); ax.text(len(a) - 0.55, D["V_hed"] + 4000, f"prédiction hédonique {fmt_d(D['V_hed'])}", ha="right", fontsize=7, color=palette.ink2) | |
| 67 | + ax.set_xticks(x); ax.set_xticklabels([f"{r['id_vente']}\nbrut {r['ajust_brut_pct']*100:.1f} %\npoids {D['poids17'][i]:.3f}".replace(".", ",") for i, (_, r) in enumerate(a.iterrows())], fontsize=7) | |
| 68 | + ax.set_ylim(440000, 770000); ax.yaxis.set_major_formatter(FuncFormatter(fmt_k)) | |
| 69 | 69 | ax.set_ylabel("Prix ($)"); ax.legend(loc="upper left", fontsize=6.3, frameon=False, ncol=3) |
| 70 | 70 | fig.tight_layout() |
| 71 | 71 | savefig(fig, "ch45/ch45-fig-grille-cascade.pdf") |
@@ -86,15 +86,15 @@ def fig_fourchettes(D): | ||
| 86 | 86 | ax.plot(extra[1], [y, y], color=palette.cat[0], lw=5, alpha=0.35, solid_capstyle="butt") |
| 87 | 87 | ax.errorbar([v], [y], xerr=[[sd], [sd]], fmt="o", color=palette.cat[1] if i < 3 else palette.ink, capsize=3, ms=5, lw=1.4) |
| 88 | 88 | ax.text(v, y + 0.22, fmt_d(v), ha="center", fontsize=7) |
| 89 | − ax.text(515000, y, lab, ha="right", va="center", fontsize=7.5) | |
| 89 | + ax.set_yticks([len(lignes) - i for i in range(len(lignes))]); ax.set_yticklabels([l[0] for l in lignes], fontsize=7.5) | |
| 90 | 90 | ax.axvspan(*D["fourchette"], color=palette.cat[1], alpha=0.10) |
| 91 | 91 | ax.axvspan(*D["bande90"], color=palette.cat[1], alpha=0.14) |
| 92 | 92 | ax.axvline(D["conclusion"], color=palette.ink, lw=1.3); ax.text(D["conclusion"], 4.75, f"valeur la plus probable {fmt_d(D['conclusion'])}", ha="center", fontsize=7.5) |
| 93 | − ax.text(D["fourchette"][0], 0.35, f"fourchette {fmt_d(D['fourchette'][0])} – {fmt_d(D['fourchette'][1])}", fontsize=7, ha="left") | |
| 93 | + ax.text(D["fourchette"][0] + 2000, 0.35, f"fourchette {fmt_d(D['fourchette'][0])} – {fmt_d(D['fourchette'][1])}", fontsize=7, ha="left") | |
| 94 | 94 | ax.text(D["bande90"][0], 0.08, f"bande bootstrap 90 % {fmt_d(D['bande90'][0])} – {fmt_d(D['bande90'][1])}", fontsize=6.5, ha="left", color=palette.ink2) |
| 95 | 95 | ax.axvline(D["role"], color=palette.ink2, lw=0.8, ls=":"); ax.text(D["role"], 0.35, "rôle (fictif)\n" + fmt_d(D["role"]), ha="center", fontsize=6.5, color=palette.ink2) |
| 96 | − ax.axvline(D["valeur_reelle_2024"], color=palette.ink2, lw=0.8, ls=":"); ax.text(D["valeur_reelle_2024"], 4.35, "valeur réelle\n2024-07-01", ha="center", fontsize=6.5, color=palette.ink2) | |
| 97 | − ax.set_yticks([]); ax.set_ylim(-0.1, 5.1); ax.set_xlim(445000, 775000); ax.xaxis.set_major_formatter(FuncFormatter(fmt_k)) | |
| 96 | + ax.axvline(D["valeur_reelle_2024"], color=palette.ink2, lw=0.8, ls=":"); ax.text(D["valeur_reelle_2024"] - 2500, 0.72, "valeur réelle au\n2024-07-01 (ch. 9)", ha="right", fontsize=6.5, color=palette.ink2) | |
| 97 | + ax.set_ylim(-0.1, 5.1); ax.set_xlim(445000, 775000); ax.xaxis.set_major_formatter(FuncFormatter(fmt_k)) | |
| 98 | 98 | ax.set_xlabel("Valeur ($) — points : indications ; barres : ± 1 écart-type attribué au ch. 20") |
| 99 | 99 | fig.tight_layout() |
| 100 | 100 | savefig(fig, "ch45/ch45-fig-fourchettes.pdf") |
@@ -114,15 +114,18 @@ def fig_depreciation(D): | ||
| 114 | 114 | ax.xaxis.set_major_formatter(FuncFormatter(fmt_k)); ax.legend(loc="lower right", fontsize=6.5, frameon=False) |
| 115 | 115 | ax.set_title(f"(a) Ventilée : {fmt_d(D['dv11']['total'])} ({D['dv11']['taux']*100:.1f} % du coût neuf)".replace(".", ","), loc="left", fontsize=8) |
| 116 | 116 | ax = axes[1] |
| 117 | − cats = ["Terrain\n(ch. 25)", "Coût neuf\n(ch. 21)", "Dépréciation\nextraite\n(ch. 24)", "Carence\nsalle d'eau", "Valeur\npar le coût"] | |
| 117 | + cats = ["Terrain", "Coût\nneuf", "Dépréc.\nextraite", "Carence\nsalle d'eau", "Valeur\npar le coût"] | |
| 118 | 118 | vals = [D["V_L"], D["CN"], -D["D_ext"], -D["D_fonc"], D["V_cout"]] |
| 119 | 119 | bottoms = [0, D["V_L"], D["V_L"] + D["CN"] - D["D_ext"], D["V_L"] + D["CN"] - D["D_ext"] - D["D_fonc"], 0] |
| 120 | 120 | cols = [palette.cat[2], palette.cat[0], palette.cat[1], palette.cat[1], palette.ink] |
| 121 | 121 | ax.bar(cats, [abs(v) for v in vals], bottom=bottoms, color=cols, edgecolor="white", lw=0.5) |
| 122 | 122 | for i, (v, b) in enumerate(zip(vals, bottoms)): |
| 123 | − ax.text(i, b + abs(v) + 8000, fmt_d(abs(v)), ha="center", fontsize=6.5) | |
| 124 | − ax.axhline(D["V_L"] + D["CN"], color=palette.ink2, lw=0.7, ls=":"); ax.text(1.5, D["V_L"] + D["CN"] + 8000, f"terrain + coût neuf {fmt_d(D['V_L'] + D['CN'])}", fontsize=6.5, ha="center", color=palette.ink2) | |
| 125 | − ax.yaxis.set_major_formatter(FuncFormatter(fmt_k)); ax.tick_params(axis="x", labelsize=6.5); ax.set_ylim(0, 760000) | |
| 123 | + if v < 0: | |
| 124 | + ax.text(i, b + abs(v) / 2 if i == 2 else b - 12000, ("−" + fmt_d(abs(v))), ha="center", va="center", fontsize=6.3, color=palette.ink if i == 3 else "white") | |
| 125 | + else: | |
| 126 | + ax.text(i, b + abs(v) + 8000, fmt_d(abs(v)), ha="center", fontsize=6.5) | |
| 127 | + ax.axhline(D["V_L"] + D["CN"], color=palette.ink2, lw=0.7, ls=":"); ax.text(0.0, D["V_L"] + D["CN"] + 30000, f"terrain + coût neuf\n{fmt_d(D['V_L'] + D['CN'])}", fontsize=6.5, ha="left", color=palette.ink2) | |
| 128 | + ax.yaxis.set_major_formatter(FuncFormatter(fmt_k)); ax.tick_params(axis="x", labelsize=6.3); ax.set_ylim(0, 790000) | |
| 126 | 129 | ax.set_title(f"(b) Extraction : {D['taux_tot']*100:.2f} % → {fmt_d(D['V_cout_arrondie'])}".replace(".", ","), loc="left", fontsize=8) |
| 127 | 130 | fig.tight_layout(w_pad=1.5) |
| 128 | 131 | savefig(fig, "ch45/ch45-fig-depreciation.pdf") |
@@ -147,8 +150,8 @@ def fig_financement(D): | ||
| 147 | 150 | ax.plot(ren["hausse_pb"], ren["paiement"], marker="o", color=palette.cat[1], lw=1.6, label="paiement mensuel") |
| 148 | 151 | for _, r in ren.iterrows(): |
| 149 | 152 | ax.annotate(f"{r['paiement']:,.0f} $\n({r['hausse_paiement_pct']*100:+.1f} %)".replace(",", " ").replace(".", ","), (r["hausse_pb"], r["paiement"]), textcoords="offset points", xytext=(0, 8), ha="center", fontsize=6.5) |
| 150 | − ax.axhline(F["minimale"]["paiement_mqr"], color=palette.cat[0], lw=0.9, ls="--"); ax.text(300, F["minimale"]["paiement_mqr"] + 25, "paiement de qualification initial", fontsize=6.5, ha="right", color=palette.cat[0]) | |
| 151 | − ax.set_xlabel("Hausse du taux au renouvellement (points de base)"); ax.set_ylabel("Paiement mensuel ($)"); ax.set_ylim(2900, 4400) | |
| 153 | + ax.axhline(F["minimale"]["paiement_mqr"], color=palette.cat[0], lw=0.9, ls="--"); ax.text(0, F["minimale"]["paiement_mqr"] + 25, "paiement au taux admissible initial (6,12 %)", fontsize=6.5, ha="left", color=palette.cat[0]) | |
| 154 | + ax.set_xlabel("Hausse du taux au renouvellement (points de base)"); ax.set_ylabel("Paiement mensuel ($)"); ax.set_ylim(2900, 4450) | |
| 152 | 155 | ax.set_xticks(ren["hausse_pb"]); ax.set_title(f"(b) Solde à 60 mois {fmt_d(F['minimale']['solde_terme'])}, 20 ans restants", loc="left", fontsize=8) |
| 153 | 156 | fig.tight_layout(w_pad=1.5) |
| 154 | 157 | savefig(fig, "ch45/ch45-fig-financement.pdf") |
modified
analysis/python/tests/test_ch46.py
+5 −1
@@ -122,6 +122,10 @@ def test_exercices_et_figures(D): | ||
| 122 | 122 | E = ch.exercices(D) |
| 123 | 123 | assert E["1"]["v_cap_2026"] - E["1"]["v_cap_declare"] == pytest.approx(E["1"]["ecart"] / D["revenu"]["taux_ajuste"]) |
| 124 | 124 | assert E["5"]["cout_net_2e"] > E["5"]["cout_net_rc"] |
| 125 | − assert min(E["6"].values()) < 920000 < max(E["6"].values()) | |
| 125 | + alt = [E["6"][k] for k in ("retenue 40/35/25", "45/30/25", "égale", "comparaison seule 60/40/0", "revenu dominant 20/20/60")] | |
| 126 | + assert min(alt) < 920000 < max(alt) and E["6"]["valeur_inverse_variance"] == pytest.approx(968084.32, abs=0.01) | |
| 127 | + assert E["5"]["promesse"]["paiement"] == pytest.approx(fin.Hypotheque(830500, 0.0412, 300).paiement) and E["5"]["promesse"]["droits_mutation"] == pytest.approx(16210.5) | |
| 128 | + assert E["2"]["va_rotation_9_4"] == pytest.approx(39668.94, abs=0.01) and E["2"]["va_rotation_20"] == pytest.approx(19968.98, abs=0.01) | |
| 129 | + assert E["7"]["terrain_m2_pour_egaler"] == pytest.approx((920000 - D["cout"]["contribution_batiment"]) / 310) | |
| 126 | 130 | for slug in ("loyers", "cascade", "mrb", "occupation", "fourchettes"): |
| 127 | 131 | assert (ROOT / f"assets/figures/ch46/ch46-fig-{slug}.pdf").exists() |
modified
assets/figures/ch45/ch45-fig-carte-comparables.pdf
+0 −0
Binary file not shown.
modified
assets/figures/ch45/ch45-fig-depreciation.pdf
+0 −0
Binary file not shown.
modified
assets/figures/ch45/ch45-fig-financement.pdf
+0 −0
Binary file not shown.
modified
assets/figures/ch45/ch45-fig-fourchettes.pdf
+0 −0
Binary file not shown.
modified
assets/figures/ch45/ch45-fig-grille-cascade.pdf
+0 −0
Binary file not shown.
modified
manuscript/chapters/ch46.tex
+34 −34
@@ -169,24 +169,24 @@ L'analyse de marché d'un plex porte, comme celle d'un immeuble de rapport, sur | ||
| 169 | 169 | |
| 170 | 170 | \begin{table}[htbp]\centering |
| 171 | 171 | \caption{Indicateurs de marché retenus à la date d'évaluation (sources publiques, consultées le 31~octobre 2026).}\label{tab:46:marche} |
| 172 | −\footnotesize\setlength{\tabcolsep}{4pt}\begin{tabular}{@{}L{5.1cm}L{2.9cm}L{4.2cm}@{}} | |
| 172 | +\footnotesize\setlength{\tabcolsep}{3pt}\begin{tabular}{@{}L{4.7cm}L{3.5cm}L{4.5cm}@{}} | |
| 173 | 173 | \toprule |
| 174 | 174 | Indicateur & Valeur & Source et période \\ |
| 175 | 175 | \midrule |
| 176 | −Prix médian des plex (2 à 5 log.), RMR de Québec / agglomération / secteur La Cité--Basse-Ville et Limoilou & 600~000 / 618~500 / 647~500~\$ (+\pct{17} / +\pct{12} / +\pct{13} sur un an) & \textcite{apciqt32026,apciqbaroquebec2026}, T3 2026 \\ | |
| 176 | +Prix médian des plex (2 à 5 log.), RMR de Québec / agglomération / secteur La Cité--Basse-Ville et Limoilou & 600~000 \$ / 618~500 \$ / 647~500 \$ & \textcite{apciqt32026,apciqbaroquebec2026}, T3 2026 ; variations sur un an +17 \%, +12 \%, +13 \% \\ | |
| 177 | 177 | Ventes résidentielles, secteur La Cité--Basse-Ville et Limoilou & 107 (−\pct{14}) & \textcite{apciqbaroquebec2026}, T3 2026 \\ |
| 178 | 178 | Délai de vente médian, RMR de Québec (plex) & 30~jours & \textcite{apciqt32026}, T3 2026 \\ |
| 179 | 179 | Prix médian des plex, RMR de Québec (actes publiés) & 590~000~\$ (+\pct{17}) & \textcite{jlr202608}, août 2026 \\ |
| 180 | −Taux d'inoccupation, RMR de Québec (tous logements) & \pct{2.4} (\pct{0.9} en 2024) & \textcite{schlLocatif2025}, octobre 2025 \\ | |
| 181 | −Loyer moyen, RMR de Québec : 1~ch. / 2~ch. / 3~ch.+ / tous & 1~107 / 1~277 / 1~475 / 1~227~\$ & \textcite{schlrmltables2025}, octobre 2025 \\ | |
| 180 | +Taux d'inoccupation, RMR de Québec (tous logements) & 2,4 \% (0,9 \% en 2024) & \textcite{schlLocatif2025}, octobre 2025 \\ | |
| 181 | +Loyer moyen, RMR de Québec : 1~ch. / 2~ch. / 3~ch.+ / tous & 1~107 \$ / 1~277 \$ / 1~475 \$ / 1~227 \$ & \textcite{schlrmltables2025}, octobre 2025 \\ | |
| 182 | 182 | Variation des loyers, même échantillon, RMR de Québec (2~ch.) & +\pct{6.1} & \textcite{schlLocatif2025}, 2024--2025 \\ |
| 183 | −Zone SCHL Basse-Ville : loyer moyen / inoccupation & 1~139~\$ (+\pct{5.3}) / \pct{2.7} & page de la Ville de Québec reprenant la SCHL, octobre 2025 (source secondaire) \\ | |
| 183 | +Zone SCHL Basse-Ville : loyer moyen / inoccupation & 1~139 \$ (+5,3 \%) / 2,7 \% & page de la Ville de Québec reprenant la SCHL, octobre 2025 (source secondaire) \\ | |
| 184 | 184 | Taux de rotation des locataires, RMR de Québec & \pct{13.0} & \textcite{schlrmltables2025}, octobre 2025 \\ |
| 185 | 185 | Pourcentage de base du TAL (avis à compter du 1\textsuperscript{er} janvier 2026) & \pct{3.1} & \textcite{talIndices2026} \\ |
| 186 | −Taux de capitalisation, Québec, multirésidentiel faible hauteur catégorie B & \pct{5.00} à \pct{6.00} (stables) & \textcite{cbrecaprates2026q3}, T3 2026 \\ | |
| 187 | −Taux directeur de la Banque du Canada & \pct{2.25} (jusqu'au 28 oct. 2026) ; \pct{2.50} depuis & \textcite{bdc20261028,bdcvalet} \\ | |
| 186 | +Taux de capitalisation, Québec, multirésidentiel faible hauteur catégorie B & 5,00 \% à 6,00 \% (stables) & \textcite{cbrecaprates2026q3}, T3 2026 \\ | |
| 187 | +Taux directeur de la Banque du Canada & 2,25 \% jusqu'au 28 oct. 2026 ; 2,50 \% depuis & \textcite{bdc20261028,bdcvalet} \\ | |
| 188 | 188 | Taux hypothécaire conventionnel 5~ans affiché & \pct{6.19} & \textcite{bdcvalet}, 28 oct. 2026 \\ |
| 189 | −Fonds avancés, prêts assurés fixes 5~ans et plus / non assurés & \pct{4.12} / \pct{4.58} & \textcite{bdctauxhypothecaires2026}, août 2026 \\ | |
| 189 | +Fonds avancés, prêts assurés fixes 5~ans et plus / non assurés & 4,12 \% / 4,58 \% & \textcite{bdctauxhypothecaires2026}, août 2026 \\ | |
| 190 | 190 | Obligation du Canada 5~ans & \pct{3.58} & \textcite{bdcvalet}, 29 oct. 2026 \\ |
| 191 | 191 | IPC du Québec, variation annuelle & \pct{3.1} & \textcite{statcanipc}, septembre 2026 \\ |
| 192 | 192 | \bottomrule |
@@ -232,8 +232,8 @@ Les autres postes sont conservés aux montants justifiés, parce qu'ils reposent | ||
| 232 | 232 | \toprule |
| 233 | 233 | Poste & {Déclaré (\$)} & Règle de normalisation & {Normalisé (\$)} & {\% du RBE} \\ |
| 234 | 234 | \midrule |
| 235 | −Taxes municipales & 5900 & rôle 495 000 \$ $\times$ 0,7464~\$/100~\$ + 3 $\times$ (386 + 195)~\$ & 5437.68 & 13.4 \\ | |
| 236 | −Taxe scolaire & 470 & (495 000 − 25 000)~\$ $\times$ 0,07899~\$/100~\$ & 371.25 & 0.9 \\ | |
| 235 | +Taxes municipales & 5900 & rôle 495 000 \$ au taux de 0,7464 \$ par 100 \$, plus tarifs 3 $\times$ (386 + 195) \$ & 5437.68 & 13.4 \\ | |
| 236 | +Taxe scolaire & 470 & (495 000 − 25 000) \$ au taux de 0,07899 \$ par 100 \$ & 371.25 & 0.9 \\ | |
| 237 | 237 | Assurances & 3400 & police en vigueur & 3400.00 & 8.4 \\ |
| 238 | 238 | Électricité (aires communes) & 650 & factures de l'exercice & 650.00 & 1.6 \\ |
| 239 | 239 | Déneigement et entretien extérieur & 1500 & contrat & 1500.00 & 3.7 \\ |
@@ -264,22 +264,22 @@ La méthode de comparaison est la méthode principale pour un triplex de quartie | ||
| 264 | 264 | |
| 265 | 265 | \begin{table}[htbp]\centering |
| 266 | 266 | \caption{Le sujet et les cinq comparables triplex de Limoilou (données synthétiques).}\label{tab:46:comparables} |
| 267 | −\footnotesize\setlength{\tabcolsep}{2.4pt}\begin{tabular}{@{}l l S[table-format=3.0] S[table-format=2.1] S[table-format=3.0] c S[table-format=4.0] S[table-format=4.0] S[table-format=1.3] S[table-format=7.0] S[table-format=6.0] S[table-format=2.2] S[table-format=1.2]@{}} | |
| 267 | +\footnotesize\setlength{\tabcolsep}{3pt}\begin{tabular}{@{}l S[table-format=3.0] S[table-format=2.1] S[table-format=3.0] c S[table-format=4.0] S[table-format=4.0] S[table-format=1.3] S[table-format=7.0] S[table-format=6.0] S[table-format=2.2] S[table-format=1.2]@{}} | |
| 268 | 268 | \toprule |
| 269 | −Vente & Date & {m\textsuperscript{2}} & {m\textsuperscript{2}/log.} & {Âge} & État & {Contrat (\$)} & {Marché (\$)} & {$\rho$} & {Prix (\$)} & {Prix/log. (\$)} & {MRB} & {Taux (\%)} \\ | |
| 269 | +Vente & {m\textsuperscript{2}} & {m\textsuperscript{2}/log.} & {Âge} & État & {Contrat (\$)} & {Marché (\$)} & {$\rho$} & {Prix (\$)} & {Prix/log. (\$)} & {MRB} & {Taux (\%)} \\ | |
| 270 | 270 | \midrule |
| 271 | −Sujet & 2026-09-01 & 262 & 87.3 & 78 & 3 & 1162 & 1370 & 0.848 & {—} & {—} & {—} & {—} \\ | |
| 271 | +Sujet & 262 & 87.3 & 78 & 3 & 1162 & 1370 & 0.848 & {—} & {—} & {—} & {—} \\ | |
| 272 | 272 | \midrule |
| 273 | −Q0187 & 2025-11-20 & 243 & 81.0 & 76 & 3 & 1053 & 1173 & 0.898 & 787000 & 262333 & 20.75 & 2.97 \\ | |
| 274 | −Q0222 & 2026-05-13 & 286 & 95.3 & 92 & 4 & 1092 & 1187 & 0.920 & 918000 & 306000 & 23.35 & 2.62 \\ | |
| 275 | −Q0243 & 2026-07-24 & 247 & 82.3 & 96 & 3 & 1286 & 1352 & 0.951 & 1023000 & 341000 & 22.09 & 2.99 \\ | |
| 276 | −Q0207 & 2026-03-08 & 269 & 89.7 & 69 & 2 & 1146 & 1197 & 0.957 & 910000 & 303333 & 22.05 & 3.09 \\ | |
| 277 | −Q0235 & 2026-06-22 & 275 & 91.7 & 103 & 1 & 1214 & 1327 & 0.915 & 922000 & 307333 & 21.10 & 2.68 \\ | |
| 273 | +Q0187 & 243 & 81.0 & 76 & 3 & 1053 & 1173 & 0.898 & 787000 & 262333 & 20.75 & 2.97 \\ | |
| 274 | +Q0222 & 286 & 95.3 & 92 & 4 & 1092 & 1187 & 0.920 & 918000 & 306000 & 23.35 & 2.62 \\ | |
| 275 | +Q0243 & 247 & 82.3 & 96 & 3 & 1286 & 1352 & 0.951 & 1023000 & 341000 & 22.09 & 2.99 \\ | |
| 276 | +Q0207 & 269 & 89.7 & 69 & 2 & 1146 & 1197 & 0.957 & 910000 & 303333 & 22.05 & 3.09 \\ | |
| 277 | +Q0235 & 275 & 91.7 & 103 & 1 & 1214 & 1327 & 0.915 & 922000 & 307333 & 21.10 & 2.68 \\ | |
| 278 | 278 | \midrule |
| 279 | −Médiane des cinq & & 269 & 89.7 & 92 & 3 & 1146 & 1197 & 0.920 & 918000 & 306000 & 22.05 & 2.97 \\ | |
| 279 | +Médiane des cinq & 269 & 89.7 & 92 & 3 & 1146 & 1197 & 0.920 & 918000 & 306000 & 22.05 & 2.97 \\ | |
| 280 | 280 | \bottomrule |
| 281 | 281 | \end{tabular} |
| 282 | −\tabsource{\synth{\texttt{cas2\_quebec\_ventes\_plex.csv} ; sélection par \texttt{ch32\_plex.selection\_comparables} (distance d'attributs du \cref{ch:16}) ; âge à la date d'évaluation (construction 1923 à 1957 ; sujet 1948) ; loyers mensuels moyens par logement ; tous les comparables ont une case de stationnement ; script \texttt{ch46\_dossier.py}.}} | |
| 282 | +\tabsource{\synth{\texttt{cas2\_quebec\_ventes\_plex.csv} ; sélection par \texttt{ch32\_plex.selection\_comparables} (distance d'attributs du \cref{ch:16}) ; dates de vente au \cref{tab:46:grille} ; âge à la date d'évaluation (construction 1923 à 1957 ; sujet 1948) ; loyers mensuels moyens par logement ; tous les comparables ont une case de stationnement ; script \texttt{ch46\_dossier.py}.}} | |
| 283 | 283 | \end{table} |
| 284 | 284 | |
| 285 | 285 | \subsection{Extraction des ajustements par régression auxiliaire} |
@@ -326,16 +326,16 @@ où $P_j$ est le prix par logement, $m_j$ l'ancienneté de la vente en mois, $P^ | ||
| 326 | 326 | \caption{Grille d'ajustements des prix par logement des cinq comparables (données synthétiques, \$ par logement).}\label{tab:46:grille} |
| 327 | 327 | \footnotesize\setlength{\tabcolsep}{2.8pt}\begin{tabular}{@{}l S[table-format=6.0] S[table-format=5.0] S[table-format=-5.0] S[table-format=-5.0] S[table-format=-5.0] S[table-format=5.0] S[table-format=6.0] S[table-format=2.1] S[table-format=2.1] S[table-format=1.3]@{}} |
| 328 | 328 | \toprule |
| 329 | −Vente & {Prix/log.} & {Temps} & {Superf.} & {Âge} & {État} & {Loyer m.} & {Prix aj.} & {Brut (\%)} & {Net (\%)} & {Poids} \\ | |
| 329 | +Vente (date) & {Prix/log.} & {Temps} & {Superf.} & {Âge} & {État} & {Loyer m.} & {Prix aj.} & {Brut (\%)} & {Net (\%)} & {Poids} \\ | |
| 330 | 330 | \midrule |
| 331 | −Q0187 & 262333 & 15134 & 13792 & -2215 & 0 & 11558 & 300603 & 16.3 & 14.6 & 0.220 \\ | |
| 332 | −Q0222 & 306000 & 6758 & -17175 & 18046 & -14930 & 12015 & 310715 & 22.5 & 1.5 & 0.159 \\ | |
| 333 | −Q0243 & 341000 & 2627 & 13306 & 25699 & 0 & 1217 & 383849 & 12.6 & 12.6 & 0.285 \\ | |
| 334 | −Q0207 & 303333 & 10752 & -5291 & -11125 & 15744 & 11349 & 324762 & 17.9 & 7.1 & 0.200 \\ | |
| 335 | −Q0235 & 307333 & 4324 & -9575 & 32836 & 32029 & 2640 & 369586 & 26.5 & 20.3 & 0.135 \\ | |
| 331 | +Q0187 (25-11) & 262333 & 15134 & 13792 & -2215 & 0 & 11558 & 300603 & 16.3 & 14.6 & 0.220 \\ | |
| 332 | +Q0222 (26-05) & 306000 & 6758 & -17175 & 18046 & -14930 & 12015 & 310715 & 22.5 & 1.5 & 0.159 \\ | |
| 333 | +Q0243 (26-07) & 341000 & 2627 & 13306 & 25699 & 0 & 1217 & 383849 & 12.6 & 12.6 & 0.285 \\ | |
| 334 | +Q0207 (26-03) & 303333 & 10752 & -5291 & -11125 & 15744 & 11349 & 324762 & 17.9 & 7.1 & 0.200 \\ | |
| 335 | +Q0235 (26-06) & 307333 & 4324 & -9575 & 32836 & 32029 & 2640 & 369586 & 26.5 & 20.3 & 0.135 \\ | |
| 336 | 336 | \midrule |
| 337 | −\multicolumn{7}{@{}l}{Prix par logement pondéré (poids $\propto 1/$brut) ; valeur $= 3 \times$ prix pondéré} & 340122 & & & 1.000 \\ | |
| 338 | −\multicolumn{11}{@{}l}{Moyenne simple 337~903 ; médiane 324~762 ; min. 300~603 ; max. 383~849 ; écart-type pondéré 34~516 ; stationnement et $\rho$ : ajustements nuls.} \\ | |
| 337 | +\multicolumn{7}{@{}l}{Prix par logement pondéré (poids $\propto 1/$brut)} & 340122 & & & 1.000 \\ | |
| 338 | +\multicolumn{11}{@{}p{12.8cm}@{}}{Valeur $= 3 \times 340\,122 = 1\,020\,367$~\$ ; moyenne simple 337~903 ; médiane 324~762 ; min. 300~603 ; max. 383~849 ; écart-type pondéré 34~516 ; stationnement et $\rho$ : ajustements nuls.} \\ | |
| 339 | 339 | \bottomrule |
| 340 | 340 | \end{tabular} |
| 341 | 341 | \tabsource{\synth{\texttt{traite.comparables} (\texttt{ajustement\_temps\_taux}, \texttt{ComparableAjuste}, \texttt{poids\_inverse\_brut}, \texttt{reconciliation}) ; stationnement : tous ont une case ; $\rho$ : coefficient non significatif, non appliqué ; script \texttt{ch46\_dossier.py}, fonction \texttt{grille\_ajustements}.}} |
@@ -522,16 +522,16 @@ Le \cref{tab:46:financement-sens} et la \cref{fig:46:occupation} font varier les | ||
| 522 | 522 | |
| 523 | 523 | \begin{table}[htbp]\centering |
| 524 | 524 | \caption{Sensibilité du financement et du coût d'occupation au taux, à la mise de fonds et à l'amortissement (prix \dollars{920000}, données synthétiques, \$).}\label{tab:46:financement-sens} |
| 525 | −\scriptsize\setlength{\tabcolsep}{2.6pt}\begin{tabular}{@{}L{4.3cm}S[table-format=6.0]S[table-format=2.1]S[table-format=6.0]S[table-format=4.2]S[table-format=4.2]S[table-format=4.2]S[table-format=4.2]@{}} | |
| 525 | +\scriptsize\setlength{\tabcolsep}{2.2pt}\begin{tabular}{@{}L{3.4cm}S[table-format=6.0]S[table-format=2.1]S[table-format=6.0]S[table-format=4.2]S[table-format=4.2]S[table-format=4.2]S[table-format=4.2]@{}} | |
| 526 | 526 | \toprule |
| 527 | −Scénario & {Mise de fonds} & {RPV (\%)} & {Prêt} & {Versement} & {Versement TAM} & {Coût net/mois} & {Hors capital} \\ | |
| 527 | +Scénario & {Mise} & {RPV (\%)} & {Prêt} & {Versement} & {Vers. TAM} & {Coût net} & {Hors cap.} \\ | |
| 528 | 528 | \midrule |
| 529 | −Assuré, mise minimale, 4,12~\%, 25 ans (base) & 67000 & 92.7 & 853000 & 4542.61 & 5518.54 & 3739.91 & 1925.15 \\ | |
| 530 | −Assuré, mise minimale, 30 ans (premier acheteur) & 67000 & 92.7 & 853000 & 4114.30 & 5137.99 & 3311.60 & 1971.14 \\ | |
| 529 | +Base : assuré, mise min., 4,12~\%, 25 ans & 67000 & 92.7 & 853000 & 4542.61 & 5518.54 & 3739.91 & 1925.15 \\ | |
| 530 | +Assuré, mise min., 30 ans (1\textsuperscript{er} acheteur) & 67000 & 92.7 & 853000 & 4114.30 & 5137.99 & 3311.60 & 1971.14 \\ | |
| 531 | 531 | Assuré, mise de 10~\% & 92000 & 90.0 & 828000 & 4409.48 & 5356.80 & 3681.36 & 1919.79 \\ |
| 532 | 532 | Non assuré, mise de 20~\%, 4,58~\% & 184000 & 80.0 & 736000 & 4106.36 & 4965.65 & 3652.71 & 2169.94 \\ |
| 533 | −Assuré, mise minimale, taux +100~pb (5,12~\%) & 67000 & 92.7 & 853000 & 5019.52 & 6037.88 & 4216.82 & 2606.57 \\ | |
| 534 | −Assuré, mise minimale, taux +200~pb (6,12~\%) & 67000 & 92.7 & 853000 & 5518.54 & 6575.65 & 4715.84 & 3292.46 \\ | |
| 533 | +Assuré, mise min., +100~pb (5,12~\%) & 67000 & 92.7 & 853000 & 5019.52 & 6037.88 & 4216.82 & 2606.57 \\ | |
| 534 | +Assuré, mise min., +200~pb (6,12~\%) & 67000 & 92.7 & 853000 & 5518.54 & 6575.65 & 4715.84 & 3292.46 \\ | |
| 535 | 535 | \bottomrule |
| 536 | 536 | \end{tabular} |
| 537 | 537 | \tabsource{\synth{script \texttt{ch46\_dossier.py}, fonction \texttt{financement} (variantes), via \texttt{ch32\_plex.financement\_occupant} et \texttt{cout\_occupation} ; TAM : taux admissible minimal $\max(i + 2~\%, 5{,}25~\%)$.}} |
modified
verification/calculations.csv
+36 −0
@@ -723,3 +723,39 @@ CALC-46-029,46,Part du versement couverte par les loyers bruts des 2 logements c | ||
| 723 | 723 | CALC-46-030,46,Reprise RC : Δ₁ = 383 × 12 × 0,97 ; VA 10 ans sans rotation (g_m 3,5 % ; g_TAL 3,1 % ; r 6 %) ; VA sous rotation 13 % (éq. 26 va-ecart) ; différence ; variantes 9,4 % et 20 %,ch46_dossier.py::va_ecart_rc ; exercices()[2],test_ch46.py::test_reprise |
| 724 | 724 | CALC-46-031,46,Exercice 5 au prix de 895 000 $ : mise 64 500 ; prêt 830 500 ; versement 4 422,79 ; TAM 5 372,98 ; droits 16 210,50 ; coût net 3 612,63 ; hors capital 1 845,74 ; 2e étage 3 749,40 / 1 982 |
| 725 | 725 | CALC-46-032,46,Exercice 4 : RNE au ratio médian des ventes 40 577,04 × (1 − 0,357) = 26 091,04 ; capitalisation à 3,02 % = 863 880 ; taux implicite 2,56 % ; écart restant 46 pb,ch46_dossier.py::exercices()[4] |
| 726 | +CALC-48-001,48,Sommaire du portefeuille : 48 immeubles ; 888 logements ; valeur 143 363 000 ; RNE 7 447 030 ; dette 85 766 000,analysis/python/cases/ch48_portefeuille.py,analysis/python/tests/test_ch48.py::test_sommaire_identites,48 ; 888 ; 143363000 ; 7447030 ; 85766000,48 ; 888 ; 143363000 ; 7447030 ; 85766000,verifie,2026-10-31 | |
| 727 | +CALC-48-002,48,Taux global pondéré = RNE agrégé / valeur agrégée (eq. 48.taux-pondere) ; médiane et moyenne simple des 48 taux,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_sommaire_identites,"5,19 % ; 5,59 % ; 5,46 %","5,1945 % ; 5,585 % ; 5,456 %",verifie,2026-10-31 | |
| 728 | +CALC-48-003,48,RPV agrégé 59,8 % ; valeur/logement 161 445 $ ; part de la valeur en zone inondable 6,66 % ; sols 3,54 %,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_sommaire_identites,"0,5982 ; 161445 ; 0,0666 ; 0,0354" | |
| 729 | +CALC-48-004,48,Sommaire par RMR (valeur Montréal 65 171 000 ; taux pondéré 4,49 % ; 206 237 $/log. ; Saguenay 6,39 % ; 101 969 $/log.),analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_sommaire_identites,"65171000 ; 0,0449 ; 206237 ; 0,0639 ; 101969","65171000 ; 0,044948 ; 206237,34 ; 0,063936 ; 101968,75" | |
| 730 | +CALC-48-005,48,Indices de Herfindahl (eq. 48.hhi) : par RMR 0,280 (n équiv. 3,6) ; par immeuble 0,0364 (27,5) ; part des 5 plus grands 30,8 %,analysis/python/cases/ch48_portefeuille.py | |
| 731 | +CALC-48-006,48,Régression semi-log du taux (eq. 48.modele) : coefficients identiques à traite.cas4.effets_regionaux ; Gatineau +19,6 % ; ln n −0,0315 ; inondable +7,9 % ; R² 0,883 ; sigma 0,0537 ; Duan 1,0011 | |
| 732 | +CALC-48-007,48,P45 : taux prédit 5,461 % → valeur 6 716 534 $ (identique au ch. 33),analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_modele_de_masse_coherent_avec_cas4_et_ch33,"0,05461 ; 6716534","0,054610 ; 6716534,09",verifie | |
| 733 | +CALC-48-008,48,Somme des valeurs prédites 142 572 511 $ vs somme des indications 143 363 000 $ (−0,55 %),analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_modele_de_masse_coherent_avec_cas4_et_ch33,"142572511 ; −0,0055","142572510,99 ; −0,00551",verifie | |
| 734 | +CALC-48-009,48,Statistiques de ratio IAAO (traite.hedonique.statistiques_ratio) portefeuille : médiane 1,002 ; COD 3,83 ; PRD 1,005 ; PRB 0,001 (se 0,006),analysis/python/cases/ch48_portefeuille.py | |
| 735 | +CALC-48-010,48,Ratios extrêmes : P25 1,115 (7,00 vs 6,28 %) ; P28 0,904 ; P09 0,908 ; P15 1,085 ; P38 1 | |
| 736 | +CALC-48-011,48,Croissance tendancielle du RNE agrégé 3,03 %/an (eq. 48.croissance) ; volatilité agrégée 1,34 % ; médiane immeubles 2,92 % / 3,23 % ; RNE 2016T1 annualisé 5 474 240 → 2026T2 7 447 028,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_dynamique_rne | |
| 737 | +CALC-48-012,48,Croissance agrégée par RMR : Gatineau 4,78 % ; Montréal 3,20 ; Québec 2,67 ; Sherbrooke 2,30 ; Trois-Rivières 2,15 ; Saguenay 1,53 | |
| 738 | +CALC-48-013,48,Choc pandémique (eq. 48.choc) : portefeuille −2,53 % ; Québec −1,55 ; Trois-Rivières −4,01 ; variation glissante 4 trim. min −0,12 % (2021T1),analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_dynamique_rne | |
| 739 | +CALC-48-014,48,Corrélations des variations trimestrielles de ln RNE : intra-RMR 0,155 (221 paires) ; inter-RMR 0,171 (907) ; hors pandémie ≈ 0 ; agrégats régionaux 0,35 à 0,63,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_dynamique_rne | |
| 740 | +CALC-48-015,48,Risque inondation : 3 immeubles 9 546 000 $ (6,66 % valeur ; 7,6 % RNE) ; majoration du taux +7,86 % ; décote de valeur −7,29 % = e^{−β}−1 (eq. 48.decote) ; P36 +45 pb,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_risques_et_reconciliation | |
| 741 | +CALC-48-016,48,Risque sols : 2 immeubles 5 073 000 $ (3,54 %) ; majoration +5,50 % ; décote −5,21 % ; +26 pb,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_risques_et_reconciliation,"5073000 ; 0,0354 ; 0,0550 ; −0,0521 ; 26" | |
| 742 | +CALC-48-017,48,Dette (480 mois) : service 4 617 283 $ ; RCD agrégé 1,613 ; médian 1,798 ; min 0,939 (P16) ; 5 imm. < 1,20 (17 218 000 $) ; 1 < 1,00 ; constante pondérée 5,38 % ; levier négatif 20 imm. (57 % valeur) | |
| 743 | +CALC-48-018,48,P45 : SD 318 363 $ ; RCD 1,152 (480 mois) ; 0,954 (300 mois) — cohérent avec ch. 33 (1,15 / 0,95),analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_dette_identites | |
| 744 | +CALC-48-019,48,Échéancier : 2027 21 748 000 (25,4 %) ; 2028 30 867 000 (36,0 %) ; 2029 10 146 000 ; 2030 4 730 000 ; 2031 18 275 000 ; 2027-2028 = 61,3 %,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_dette_identites,"21748000 ; 30867000 ; 10146000 ; 4730000 ; 18275000 ; 0,613" | |
| 745 | +CALC-48-020,48,Renouvellement (eq. 48.renouvellement et 48.capacite) RNE constant : RCD agrégé +0/+100/+200 pb = 1,613/1,418/1,258 ; imm. < 1,20 : 5/7/16 ; < 1,00 : 1/4/7 ; injection 1 631 775 / 4 178 882 / 7 413 155 $,analysis/python/cases/ch48_portefeuille.py | |
| 746 | +CALC-48-021,48,Variantes : amortissement 300 mois (RCD 1,304 ; 13 < 1,20 ; 5 < 1,00 ; constante 6,66 % ; +200 pb RCD 1,094 injection 11 760 592) ; RNE croissant +200 pb (RCD 1,366 ; 10 ; 3 ; 5 395 891) | |
| 747 | +CALC-48-022,48,P45 renouvellement 2028 : solde 5 329 169 $ ; à 7,17 % sur 456 mois SD 404 324 $ ; RCD 0,907 ; capacité RCD 4 028 826 $ ; injection 1 300 342 $,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_dette_identites,"5329169 ; 404324 ; 0,907 ; 4028826 ; 1300342","5329168,74 ; 404323,53 ; 0,90719 ; 4028826,25 ; 1300342,49" | |
| 748 | +CALC-48-023,48,Monte-Carlo corrélation déclarée (10 000 tirages graine 20261031) : médiane 143 349 709 ; moyenne 143 527 636 ; écart-type 6 267 078 ; CV 4,37 % ; q05 133 506 790 ; q95 154 224 548,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_monte_carlo_reproductible_et_diversification,"143349709 ; 143527636 ; 6267078 ; 0,0437 ; 133506790 ; 154224548","143349709,0 ; 143527635,7 ; 6267077,6 ; 0,04366 ; 133506789,6 ; 154224547,5",verifie | |
| 749 | +CALC-48-024,48,VaR 95 % (eq. 48.var) : portefeuille 9 856 210 $ ; somme des VaR individuelles 14 283 432 $ ; ratio 0,690 ; indépendant 2 517 633 (0,179) ; parfait 14 296 704 (0,999) ; ES95 12 358 203,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_monte_carlo_reproductible_et_diversification,"9856210 ; 14283432 ; 0,690 ; 2517633 ; 0,179 ; 14296704 ; 0,999 ; 12358203" | |
| 750 | +CALC-48-025,48,Probabilités (déclaré) : RPV > 65 % 2,96 % ; > 70 % 0,03 % ; > 75 % 0 ; baisse > 10 % 0,83 % ; V < 130 M$ 1,27 % ; parfait : 9,78 / 0,68 / 4 | |
| 751 | +CALC-48-026,48,Diversification par RMR : VaR Montréal 5 055 475 vs somme 6 526 478 (0,775) ; somme des VaR régionales 11 380 268 (0,797) ; portefeuille/régions 0,866,analysis/python/cases/ch48_portefeuille.py,script (impression),"5055475 ; 6526478 ; 0,775 ; 11380268 ; 0,797 ; 0,866" | |
| 752 | +CALC-48-027,48,Démonstration analytique (prop. 48.1) : sigma_ln individuel médian 0,0627 ; portefeuille 0,0389 (déclaré) ; parfait 0,0627 ; indépendant 0,0120,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_monte_carlo_reproductible_et_diversification | |
| 753 | +CALC-48-028,48,Allocation : classement par lambda = (R+g−3,84 %)/sigma et drapeaux ; conserver P10 P24 P02 P25 P39 P37 ; céder P46 P44 P28 P34 P41 P26 ; après cession 42 imm. 121 898 000 $ taux 5,30 % RPV 59,5 % produit net 7 795 700 $,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_frontiere_et_allocation,"listes ; 121898000 ; 0,0530 ; 0,595 ; 7795700" | |
| 754 | +CALC-48-029,48,Frontière (eq. 48.frontiere) : mu RMR 7,70/8,44/10,22/8,04/8,44/7,93 % ; sigma 4 | |
| 755 | +CALC-48-030,48,Réconciliation : valeur retenue 143 400 000 $ (arrondi 100 000) ; 161 486 $/log. ; taux implicite 5,19 % ; RPV 59,8 % ; MRB 11,25 ; fonds propres 57 634 000 ; fourchette MC −6,9 %/+7,6 %,analysis/python/cases/ch48_portefeuille.py | |
| 756 | +CALC-48-031,48,Exercice 1 (Sherbrooke) : taux pondéré 5,740 % ; moyenne simple 5,667 % ; médiane 5,71 % ; valeur au taux moyen 18 363 822 $ (+1,28 %),analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_sommaire_identites | |
| 757 | +CALC-48-032,48,Exercice 2 : taux prédit TR 24 log. inondable 6,841 % (sans Duan 6,833) ; hors zone 6,343 % ; Montréal 4,525 % ; valeurs 2 192 675 / 2 364 969 / 3 314 944 $ ; écart −7,29 % ; 49,8 pb | |
| 758 | +CALC-48-033,48,Exercice 4 : ratios IAAO Montréal (n = 17) médiane 1,007 ; pondéré 0,985 ; COD 4,37 ; PRD 1,016 ; PRB −0,015 (se 0,012) | |
| 759 | +CALC-48-034,48,Exercice 5 : P36 croissance 2,01 % volatilité 3,29 % ; Québec agrégé 2,67 % ; choc Québec −1,55 % ; R+g 8,15 %,analysis/python/cases/ch48_portefeuille.py | |
| 760 | +CALC-48-035,48,Exercice 6 : rho taux 0,90/0,95 : q05 131 200 853 ; q95 156 508 072 ; CV 5,39 % ; VaR 12 162 147 ; ratio 0,854 ; P(RPV>75 %) 0,analysis/python/cases/ch48_portefeuille.py,script (fonction exercices) | |
| 761 | +CALC-48-036,48,Exercice 7 : cession P36 P41 P43 : produit net 3 951 080 $ ; RNE perdu 566 928 ; reste 133 817 000 $ taux 5,14 % RPV 60,1 % RCD 1,587 ; CV 4,30 % ; VaR 9 058 169 ; ratio 0,694,analysis/python/cases/ch48_portefeuille.py | |
added
verification/chapters/ch39.md
+51 −0
@@ -0,0 +1,51 @@ | ||
| 1 | +# Chapitre 39 — Modèles bayésiens et intervalles : bilan de rédaction (2026-10-31) | |
| 2 | + | |
| 3 | +## Compteurs | |
| 4 | +- Prose : ≈ 15 070 mots avec la regex de `tools/check_manuscript.py` (tableaux et arguments de commandes compris) ; ≈ 9 300 mots de prose stricte (hors tableaux, équations, commandes) ; 38 pages compilées (chapitre + solutions + bibliographie du chapitre). | |
| 5 | +- Figures : 5 PDF Matplotlib (`ch39-fig-posterieures`, `-predictive`, `-prior-informatif`, `-traces`, `-retrecissement`), toutes synthétiques (cas 1, graine 20261031), produites par `analysis/python/figures/ch39_figures.py` ; inscrites dans `verification/chapters/ch39-figures.csv`. | |
| 6 | +- Tableaux : 9 (vocabulaire fréquentiste/bayésien, régression conjuguée vs MCO, prédictive du sujet selon trois approches, petit marché et a priori emprunté, modèle hiérarchique vs effets fixes, diagnostics des deux échantillonneurs, expérience Masson-Angers, critères WAIC/LOO, sensibilité à l'a priori sur τ). | |
| 7 | +- Équations numérotées : 16 (Bayes, prédictive, normale–normale, NIG a priori, postérieure NIG, prédictive de Student, modèle hiérarchique, rétrécissement, conditionnelles β / α0 / variances, bloc (β, α), R̂, ESS, lppd, WAIC) ; 1 définition (intervalle de crédibilité) ; 4 propositions démontrées (postérieure NIG, a priori de référence = MCO, prédictive conjuguée, rétrécissement) ; 1 exemple intégral en six étapes. | |
| 8 | +- Exercices : 7 (niveaux 1, 1, 2, 2, 2, 3, 3) ; solutions détaillées dans `solutions/ch39.tex`, chiffres testés (`test_exercices`) ; les variantes des ex. 6 (b-c) et 7 (d) ont été calculées hors script le 2026-10-31 et consignées dans CALC-39-15. | |
| 9 | +- Encadrés : objectifs, synthetique, exemple, quebec (intervalles, « prix le plus probable », preuve d'expert), pratique, erreurs (8), limites (7), synthese (7). | |
| 10 | +- Citations `\parencite`/`\textcite` : 16 clés, toutes présentes dans `references/library.bib` (gelman2013, gelmanHill2007, mcelreath2020, carpenter2017, koop2003, gelfandGhoshKnightSirmans1998, banerjeeGelfandKnightSirmans2004, banerjeeCarlinGelfand2014, rueMartinoChopin2009, lindgrenRueLindstrom2011, goetzmann1992, rubin1976, oeaqNormes, lfm, apciqgatineaut32026, gatineaurole2027). Neuf références nouvelles vérifiées (Crossref / page JMLR) dans `references/lib-ch39.bib`, données en toutes lettres avec DOI dans des notes de bas de page (à remplacer par `\parencite` après fusion). | |
| 11 | + | |
| 12 | +## Contrôles | |
| 13 | +- `tools/compile_chapter.sh 39` → `OK ch39 : 38 pages, 0 references/citations non definies, 0 overfull hbox`. | |
| 14 | +- `python3 -m pytest -q analysis/python/tests/test_ch39.py` → 16 passed (≈ 6 s). | |
| 15 | +- `python3 tools/check_manuscript.py --no-log` : aucun problème imputable au ch. 39 (les seuls signalés concernent ch48). | |
| 16 | +- PDF inspecté : planches de contact des 38 pages + pages 16, 18, 20, 21 à 80 dpi ; aucun débordement ; les cinq figures sont lisibles ; légendes des figures déplacées hors des courbes (prédictive, rétrécissement). | |
| 17 | +- Convention `\cref` sans article respectée ; labels à deux chiffres (`eq:39:…`, `fig:39:…`, `tab:39:…`, `sec:39:…`, `ex:39:k`, `prop:39-…`, `def:39-credibilite`). | |
| 18 | + | |
| 19 | +## Implémentation (numpy/scipy uniquement ; pymc et arviz absents) | |
| 20 | +- `analysis/python/cases/ch39_bayes.py` : a priori de référence (impropre) et NIG propre ; `nig_posterieure`, `nig_tirages`, `predictive_t`, `prior_marche_voisin` (pentes empruntées, constante plate, facteur κ), `loo_exact_nig` ; Gibbs hiérarchique `gibbs_hierarchique` (paramétrisation centrée, a priori uniforme sur τ / IG / τ fixé ; `bloc=True` tire (β, α) ensemble, `bloc=False` un à la fois) ; `rhat_scinde`, `ess` (variogramme + règle de Geyer), `waic`, `loo_tronque` ; `simuler_depuis_generateur` pour les tests de récupération ; `exercices`. | |
| 21 | +- Le modèle de référence `traite.cas1.hedonique`/`matrice`/`intervalle_prediction` n'est pas modifié ; la bibliothèque `traite/` est inchangée. | |
| 22 | +- Temps d'exécution : ≈ 5 s pour `main()` (13 exécutions de Gibbs à 4 chaînes × 3 000 itérations). | |
| 23 | + | |
| 24 | +## Résultats partagés (à reprendre dans les ch. 20, 40, 45, 48) | |
| 25 | +- Conjugué, a priori de référence (600 ventes) : m_n = β̂ exactement ; ν = 584 ; E[σ|y] = 0,0832 ; prédictive de Student du sujet : médiane 635 821 $, 90 % [553 979 ; 729 754], 95 % [539 504 ; 749 334] — à 0,03 % de l'IC fréquentiste du ch. 18 [539 682 ; 749 087]. | |
| 26 | +- Hiérarchique (Gibbs par blocs) : σ 0,0832 ; τ médiane 0,181 ; effets relatifs à Hull : Gatineau −0,015, Aylmer 0,098, Buckingham −0,207, Masson-Angers −0,224 (effets fixes ch. 18 : −0,022 / 0,085 / −0,250 / −0,263) ; prédictive du sujet médiane 634 748 $, moyenne 637 727 $ (Duan ch. 18 : 637 953 $), 95 % [540 309 ; 749 431]. | |
| 27 | +- Expérience Masson-Angers (5/10/20/47 ventes) : effet fixe −0,342 / −0,321 / −0,280 / −0,263 ; effet aléatoire −0,300 / −0,282 / −0,239 / −0,224 ; B = 0,970 / 0,984 / 0,990 / 0,996. | |
| 28 | +- Critères : elpd_WAIC pooling 497,8 ; effets fixes 633,2 ; hiérarchique 632,9 (différence fixes–aléatoires 0,3 pour une erreur-type de 16 : non départagés). | |
| 29 | +- Diagnostics : Gibbs un paramètre à la fois → R̂ 1,06–1,07 et ESS ≈ 90 pour la distance au centre et les niveaux des secteurs périphériques (colinéarité structurelle déjà signalée au ch. 18) ; Gibbs par blocs → R̂ ≤ 1,001, ESS ≥ 2 985. | |
| 30 | + | |
| 31 | +## Points non vérifiés ou partiellement vérifiés (voir ch39-claims.csv) | |
| 32 | +1. Numéros de section de BDA3 cités (§5.7 a priori sur τ ; §11.4 R̂ scindé ; §11.5 ESS) : d'après la table des matières de l'édition 2013, non relus sur l'exemplaire (CLM-39-03, CLM-39-06, partiellement_verifie pour les numéros). | |
| 33 | +2. Seuils R̂ < 1,01 et ESS « de quelques centaines à quelques milliers » : conventions d'usage, présentées comme telles (CLM-39-07). | |
| 34 | +3. Troncature des poids d'importance (Ionides 2008) : nommée dans le docstring du script seulement, non citée dans le chapitre (CLM-39-09, non_verifie). | |
| 35 | +4. Exigence des NPP sur l'intelligibilité du raisonnement : formulée en termes généraux avec renvoi au ch. 10, sans numéro de règle (CLM-39-14). | |
| 36 | +5. Coût cubique des processus gaussiens : résultat standard, page de Banerjee–Carlin–Gelfand non vérifiée (CLM-39-16). | |
| 37 | +6. Zellner (1971) évoqué (« tradition de Zellner ») sans référence bibliographique, faute de vérification à la page. | |
| 38 | + | |
| 39 | +## Difficultés et choix | |
| 40 | +- Le Gibbs « un paramètre à la fois » mélange mal (ESS ≈ 90 sur 8 000) à cause de la colinéarité distance au centre / secteurs périphériques ; le chapitre en fait un enseignement (traces, tableau des diagnostics) et adopte le Gibbs par blocs pour tous les résultats. | |
| 41 | +- Les secteurs de Gatineau sont très contrastés (τ ≈ 0,18 contre σ ≈ 0,083) : le rétrécissement est modeste même à 5 ventes (B = 0,97). Le texte l'explique et la figure du facteur B(n) montre le cas τ = 0,05 où il devient déterminant ; la limite est déclarée. | |
| 42 | +- La moyenne d'une loi log-Student n'existe pas : le tableau de la prédictive l'indique (« n'existe pas ») et le texte explique pourquoi la médiane est la quantité à communiquer ; la moyenne hiérarchique (637 727 $) est donnée pour comparaison avec Duan. | |
| 43 | +- L'a priori NIG propre « vague » donne a_n = n/2 et E[σ] = 0,0821 < 0,0830 : signalé comme prix d'un a priori propre ; l'a priori de référence est retenu pour les 600 ventes et le petit marché. | |
| 44 | + | |
| 45 | +## Suggestions pour l'harmonisation | |
| 46 | +- Fusionner `lib-ch39.bib` dans `library.bib` puis remplacer les neuf notes de bas de page « (vérifié ; lib-ch39.bib) » par des `\parencite`. | |
| 47 | +- Ch. 20 : reprendre la prédictive de Student (ν = 584) et l'intervalle hiérarchique [540 309 ; 749 431] comme « version bayésienne » annoncée au ch. 18 ; distinguer intervalle de crédibilité du prix (sd log 0,083) et de la valeur espérée (sd log 0,010). | |
| 48 | +- Ch. 40 : les 8 000 tirages de `hier["pred"]["tirages"]` peuvent servir d'entrée à la simulation de Monte-Carlo (distribution prédictive du prix du sujet). | |
| 49 | +- Ch. 14 : la promesse « imputation multiple dans un cadre bayésien » est honorée par un paragraphe de la section Extensions (renvoi à `rubin1976`), sans calcul. | |
| 50 | +- Ch. 48 : le modèle hiérarchique à régions (6 RMR, 48 immeubles) est le prolongement naturel ; `gibbs_hierarchique` est réutilisable tel quel (J quelconque). | |
| 51 | +- Glossaire : `\motcle` posés pour marchés minces, information d'expert, interprétation des intervalles, distribution a priori / vraisemblance / a posteriori / prédictive, intervalle de crédibilité, conjugué, normale–inverse-gamma, faiblement informatif, informatif, effets fixes, regroupement complet, hiérarchique, effets aléatoires, rétrécissement, MCMC, échantillonneur de Gibbs, conditionnelle complète, Gibbs par blocs, mélange, taille d'échantillon effective, WAIC, processus gaussien. | |
modified
verification/chapters/ch44.md
+1 −1
@@ -10,7 +10,7 @@ | ||
| 10 | 10 | - Citations : 33 clés, toutes dans `references/library.bib` ; `references/lib-ch44.bib` ne contient aucune entrée (commentaire). Sources web revérifiées pour le chapitre : `ch44-registry.csv` (SRC-44-001 à 009). |
| 11 | 11 | |
| 12 | 12 | ## Contrôles |
| 13 | −- `tools/compile_chapter.sh 44` → `OK ch44 : 38 pages, 0 references/citations non definies, ≤ 4 overfull hbox` (les 3 restants sont dans la bibliographie générée — URL de RNCan et petites capitales — et 1 de 1 pt dans le tableau des indicateurs). | |
| 13 | +- `tools/compile_chapter.sh 44` → `OK ch44 : 38 pages, 0 references/citations non definies, 4 overfull hbox` : 3 proviennent de la bibliographie générée (URL de RNCan et petites capitales, hors du fichier du chapitre) et 1 de 6 pt (≈ 2 mm, invisible à l'impression) du tableau de taxonomie (`tabularx`, lignes 53–64). | |
| 14 | 14 | - `python3 -m pytest -q analysis/python/tests/test_ch44.py` → 22 passed ; test_ch11, test_ch21, test_ch24 et test_cas1 toujours verts. |
| 15 | 15 | - `python3 tools/check_manuscript.py --no-log` : aucune remarque pour ch44 (figures présentes ; inscrites dans `ch44-figures.csv` selon la règle de collision). |
| 16 | 16 | - PDF relu : planche de contact des 38 pages + pages 3, 8, 9, 12, 13, 18, 19, 22 à 60 dpi ; tableaux larges redimensionnés (`tabularx` avec `\hsize`), frise TikZ ramenée dans la justification. |
added
verification/chapters/ch48-calculations.csv
+37 −0
@@ -0,0 +1,37 @@ | ||
| 1 | +id,chapitre,description,script,test,resultat_attendu,resultat_obtenu,statut,date | |
| 2 | +CALC-48-001,48,Sommaire du portefeuille : 48 immeubles ; 888 logements ; valeur 143 363 000 ; RNE 7 447 030 ; dette 85 766 000,analysis/python/cases/ch48_portefeuille.py,analysis/python/tests/test_ch48.py::test_sommaire_identites,48 ; 888 ; 143363000 ; 7447030 ; 85766000,48 ; 888 ; 143363000 ; 7447030 ; 85766000,verifie,2026-10-31 | |
| 3 | +CALC-48-002,48,Taux global pondéré = RNE agrégé / valeur agrégée (eq. 48.taux-pondere) ; médiane et moyenne simple des 48 taux,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_sommaire_identites,"5,19 % ; 5,59 % ; 5,46 %","5,1945 % ; 5,585 % ; 5,456 %",verifie,2026-10-31 | |
| 4 | +CALC-48-003,48,RPV agrégé 59,8 % ; valeur/logement 161 445 $ ; part de la valeur en zone inondable 6,66 % ; sols 3,54 %,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_sommaire_identites,"0,5982 ; 161445 ; 0,0666 ; 0,0354","0,598244 ; 161444,82 ; 0,066586 ; 0,035386",verifie,2026-10-31 | |
| 5 | +CALC-48-004,48,Sommaire par RMR (valeur Montréal 65 171 000 ; taux pondéré 4,49 % ; 206 237 $/log. ; Saguenay 6,39 % ; 101 969 $/log.),analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_sommaire_identites,"65171000 ; 0,0449 ; 206237 ; 0,0639 ; 101969","65171000 ; 0,044948 ; 206237,34 ; 0,063936 ; 101968,75",verifie,2026-10-31 | |
| 6 | +CALC-48-005,48,Indices de Herfindahl (eq. 48.hhi) : par RMR 0,280 (n équiv. 3,6) ; par immeuble 0,0364 (27,5) ; part des 5 plus grands 30,8 %,analysis/python/cases/ch48_portefeuille.py,script (impression),"0,280 ; 3,57 ; 0,0364 ; 27,5 ; 0,308","0,28014 ; 3,5696 ; 0,036364 ; 27,499 ; 0,30844",verifie,2026-10-31 | |
| 7 | +CALC-48-006,48,Régression semi-log du taux (eq. 48.modele) : coefficients identiques à traite.cas4.effets_regionaux ; Gatineau +19,6 % ; ln n −0,0315 ; inondable +7,9 % ; R² 0,883 ; sigma 0,0537 ; Duan 1,0011,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_modele_de_masse_coherent_avec_cas4_et_ch33,"allclose ; 0,1962 ; −0,0315 ; 0,0786 ; 0,883 ; 0,0537 ; 1,0011","allclose ; 0,19620 ; −0,031528 ; 0,078577 ; 0,8833 ; 0,05373 ; 1,00111",verifie,2026-10-31 | |
| 8 | +CALC-48-007,48,P45 : taux prédit 5,461 % → valeur 6 716 534 $ (identique au ch. 33),analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_modele_de_masse_coherent_avec_cas4_et_ch33,"0,05461 ; 6716534","0,054610 ; 6716534,09",verifie,2026-10-31 | |
| 9 | +CALC-48-008,48,Somme des valeurs prédites 142 572 511 $ vs somme des indications 143 363 000 $ (−0,55 %),analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_modele_de_masse_coherent_avec_cas4_et_ch33,"142572511 ; −0,0055","142572510,99 ; −0,00551",verifie,2026-10-31 | |
| 10 | +CALC-48-009,48,Statistiques de ratio IAAO (traite.hedonique.statistiques_ratio) portefeuille : médiane 1,002 ; COD 3,83 ; PRD 1,005 ; PRB 0,001 (se 0,006),analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_modele_de_masse_coherent_avec_cas4_et_ch33,"1,002 ; 3,83 ; 1,005 ; 0,001","1,00194 ; 3,8298 ; 1,0053 ; 0,00065 (0,00585)",verifie,2026-10-31 | |
| 11 | +CALC-48-010,48,Ratios extrêmes : P25 1,115 (7,00 vs 6,28 %) ; P28 0,904 ; P09 0,908 ; P15 1,085 ; P38 1,079,analysis/python/cases/ch48_portefeuille.py,script (impression),"1,115 ; 0,904 ; 0,908 ; 1,085 ; 1,079","1,1148 ; 0,9037 ; 0,9076 ; 1,0853 ; 1,0791",verifie,2026-10-31 | |
| 12 | +CALC-48-011,48,Croissance tendancielle du RNE agrégé 3,03 %/an (eq. 48.croissance) ; volatilité agrégée 1,34 % ; médiane immeubles 2,92 % / 3,23 % ; RNE 2016T1 annualisé 5 474 240 → 2026T2 7 447 028,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_dynamique_rne,"0,0303 ; 0,0134 ; 0,0292 ; 0,0323 ; 5474240 ; 7447028","0,03026 ; 0,01344 ; 0,02921 ; 0,03234 ; 5474240 ; 7447028",verifie,2026-10-31 | |
| 13 | +CALC-48-012,48,Croissance agrégée par RMR : Gatineau 4,78 % ; Montréal 3,20 ; Québec 2,67 ; Sherbrooke 2,30 ; Trois-Rivières 2,15 ; Saguenay 1,53,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_dynamique_rne,"4,78 ; 3,20 ; 2,67 ; 2,30 ; 2,15 ; 1,53","4,78 ; 3,20 ; 2,67 ; 2,30 ; 2,15 ; 1,53",verifie,2026-10-31 | |
| 14 | +CALC-48-013,48,Choc pandémique (eq. 48.choc) : portefeuille −2,53 % ; Québec −1,55 ; Trois-Rivières −4,01 ; variation glissante 4 trim. min −0,12 % (2021T1),analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_dynamique_rne,"−0,0253 ; −0,0155 ; −0,0401 ; −0,0012","−0,02529 ; −0,01547 ; −0,04014 ; −0,0012",verifie,2026-10-31 | |
| 15 | +CALC-48-014,48,Corrélations des variations trimestrielles de ln RNE : intra-RMR 0,155 (221 paires) ; inter-RMR 0,171 (907) ; hors pandémie ≈ 0 ; agrégats régionaux 0,35 à 0,63,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_dynamique_rne,"0,155 ; 0,171 ; |.| < 0,05 ; 0,35–0,63","0,1550 ; 0,1707 ; −0,0009 / −0,0018 ; 0,353–0,629",verifie,2026-10-31 | |
| 16 | +CALC-48-015,48,Risque inondation : 3 immeubles 9 546 000 $ (6,66 % valeur ; 7,6 % RNE) ; majoration du taux +7,86 % ; décote de valeur −7,29 % = e^{−β}−1 (eq. 48.decote) ; P36 +45 pb,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_risques_et_reconciliation,"9546000 ; 0,0666 ; 0,0786 ; −0,0729 ; 44,7","9546000 ; 0,06659 ; 0,07858 ; −0,07285 ; 44,73",verifie,2026-10-31 | |
| 17 | +CALC-48-016,48,Risque sols : 2 immeubles 5 073 000 $ (3,54 %) ; majoration +5,50 % ; décote −5,21 % ; +26 pb,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_risques_et_reconciliation,"5073000 ; 0,0354 ; 0,0550 ; −0,0521 ; 26","5073000 ; 0,03539 ; 0,05501 ; −0,05214 ; 26,2",verifie,2026-10-31 | |
| 18 | +CALC-48-017,48,Dette (480 mois) : service 4 617 283 $ ; RCD agrégé 1,613 ; médian 1,798 ; min 0,939 (P16) ; 5 imm. < 1,20 (17 218 000 $) ; 1 < 1,00 ; constante pondérée 5,38 % ; levier négatif 20 imm. (57 % valeur),analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_dette_identites,"4617283 ; 1,613 ; 1,798 ; 0,939 ; 5 ; 1 ; 0,0538 ; 20","4617282,63 ; 1,6129 ; 1,7983 ; 0,9389 ; 5 ; 1 ; 0,0538 ; 20",verifie,2026-10-31 | |
| 19 | +CALC-48-018,48,P45 : SD 318 363 $ ; RCD 1,152 (480 mois) ; 0,954 (300 mois) — cohérent avec ch. 33 (1,15 / 0,95),analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_dette_identites,"318363 ; 1,15 ; 0,95","318363,17 ; 1,1521 ; 0,9544",verifie,2026-10-31 | |
| 20 | +CALC-48-019,48,Échéancier : 2027 21 748 000 (25,4 %) ; 2028 30 867 000 (36,0 %) ; 2029 10 146 000 ; 2030 4 730 000 ; 2031 18 275 000 ; 2027-2028 = 61,3 %,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_dette_identites,"21748000 ; 30867000 ; 10146000 ; 4730000 ; 18275000 ; 0,613","idem ; 0,6135",verifie,2026-10-31 | |
| 21 | +CALC-48-020,48,Renouvellement (eq. 48.renouvellement et 48.capacite) RNE constant : RCD agrégé +0/+100/+200 pb = 1,613/1,418/1,258 ; imm. < 1,20 : 5/7/16 ; < 1,00 : 1/4/7 ; injection 1 631 775 / 4 178 882 / 7 413 155 $,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_dette_identites,"1,613/1,418/1,258 ; 5/7/16 ; 1/4/7 ; 1631775/4178882/7413155","1,6129/1,4175/1,2579 ; 5/7/16 ; 1/4/7 ; 1631774,53/4178881,72/7413155,15",verifie,2026-10-31 | |
| 22 | +CALC-48-021,48,Variantes : amortissement 300 mois (RCD 1,304 ; 13 < 1,20 ; 5 < 1,00 ; constante 6,66 % ; +200 pb RCD 1,094 injection 11 760 592) ; RNE croissant +200 pb (RCD 1,366 ; 10 ; 3 ; 5 395 891),analysis/python/cases/ch48_portefeuille.py,script (impression),"1,304 ; 13 ; 5 ; 0,0666 ; 1,094 ; 11760592 ; 1,366 ; 10 ; 3 ; 5395891","1,3039 ; 13 ; 5 ; 0,0666 ; 1,0943 ; 11760591,93 ; 1,3656 ; 10 ; 3 ; 5395891,43",verifie,2026-10-31 | |
| 23 | +CALC-48-022,48,P45 renouvellement 2028 : solde 5 329 169 $ ; à 7,17 % sur 456 mois SD 404 324 $ ; RCD 0,907 ; capacité RCD 4 028 826 $ ; injection 1 300 342 $,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_dette_identites,"5329169 ; 404324 ; 0,907 ; 4028826 ; 1300342","5329168,74 ; 404323,53 ; 0,90719 ; 4028826,25 ; 1300342,49",verifie,2026-10-31 | |
| 24 | +CALC-48-023,48,Monte-Carlo corrélation déclarée (10 000 tirages graine 20261031) : médiane 143 349 709 ; moyenne 143 527 636 ; écart-type 6 267 078 ; CV 4,37 % ; q05 133 506 790 ; q95 154 224 548,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_monte_carlo_reproductible_et_diversification,"143349709 ; 143527636 ; 6267078 ; 0,0437 ; 133506790 ; 154224548","143349709,0 ; 143527635,7 ; 6267077,6 ; 0,04366 ; 133506789,6 ; 154224547,5",verifie,2026-10-31 | |
| 25 | +CALC-48-024,48,VaR 95 % (eq. 48.var) : portefeuille 9 856 210 $ ; somme des VaR individuelles 14 283 432 $ ; ratio 0,690 ; indépendant 2 517 633 (0,179) ; parfait 14 296 704 (0,999) ; ES95 12 358 203,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_monte_carlo_reproductible_et_diversification,"9856210 ; 14283432 ; 0,690 ; 2517633 ; 0,179 ; 14296704 ; 0,999 ; 12358203","9856210 ; 14283432 ; 0,6900 ; 2517633 ; 0,1787 ; 14296704 ; 0,9994 ; 12358203",verifie,2026-10-31 | |
| 26 | +CALC-48-025,48,Probabilités (déclaré) : RPV > 65 % 2,96 % ; > 70 % 0,03 % ; > 75 % 0 ; baisse > 10 % 0,83 % ; V < 130 M$ 1,27 % ; parfait : 9,78 / 0,68 / 4,92 / 6,42 %,analysis/python/cases/ch48_portefeuille.py,script (impression),"0,0296 ; 0,0003 ; 0 ; 0,0083 ; 0,0127 ; 0,0978 ; 0,0068 ; 0,0492 ; 0,0642","idem",verifie,2026-10-31 | |
| 27 | +CALC-48-026,48,Diversification par RMR : VaR Montréal 5 055 475 vs somme 6 526 478 (0,775) ; somme des VaR régionales 11 380 268 (0,797) ; portefeuille/régions 0,866,analysis/python/cases/ch48_portefeuille.py,script (impression),"5055475 ; 6526478 ; 0,775 ; 11380268 ; 0,797 ; 0,866","5055475 ; 6526478 ; 0,7746 ; 11380268 ; 0,7968 ; 0,8661",verifie,2026-10-31 | |
| 28 | +CALC-48-027,48,Démonstration analytique (prop. 48.1) : sigma_ln individuel médian 0,0627 ; portefeuille 0,0389 (déclaré) ; parfait 0,0627 ; indépendant 0,0120,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_monte_carlo_reproductible_et_diversification,"0,0627 ; 0,0389 ; 0,0627 ; 0,0120","0,06267 ; 0,03885 ; 0,06269 ; 0,01197",verifie,2026-10-31 | |
| 29 | +CALC-48-028,48,Allocation : classement par lambda = (R+g−3,84 %)/sigma et drapeaux ; conserver P10 P24 P02 P25 P39 P37 ; céder P46 P44 P28 P34 P41 P26 ; après cession 42 imm. 121 898 000 $ taux 5,30 % RPV 59,5 % produit net 7 795 700 $,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_frontiere_et_allocation,"listes ; 121898000 ; 0,0530 ; 0,595 ; 7795700","listes ; 121898000 ; 0,05296 ; 0,5950 ; 7795700",verifie,2026-10-31 | |
| 30 | +CALC-48-029,48,Frontière (eq. 48.frontiere) : mu RMR 7,70/8,44/10,22/8,04/8,44/7,93 % ; sigma 4,96–5,25 % ; actuel mu 8,29 % sigma 4,36 % ; min var équipondéré 8,46 % / 4,27 % ; même mu sigma 4,28 % ; même sigma mu 9,12 %,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_frontiere_et_allocation,"idem","0,07697/0,08439/0,1022/0,08042/0,08437/0,07927 ; 0,0496–0,0525 ; 0,08291/0,04364 ; 0,0846/0,04273 ; 0,04283 ; 0,09118",verifie,2026-10-31 | |
| 31 | +CALC-48-030,48,Réconciliation : valeur retenue 143 400 000 $ (arrondi 100 000) ; 161 486 $/log. ; taux implicite 5,19 % ; RPV 59,8 % ; MRB 11,25 ; fonds propres 57 634 000 ; fourchette MC −6,9 %/+7,6 %,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_risques_et_reconciliation,"143400000 ; 161486 ; 0,0519 ; 0,598 ; 11,25 ; 57634000 ; −0,069/+0,076","143400000 ; 161486,49 ; 0,05193 ; 0,59809 ; 11,247 ; 57634000 ; −0,0688/+0,0758",verifie,2026-10-31 | |
| 32 | +CALC-48-031,48,Exercice 1 (Sherbrooke) : taux pondéré 5,740 % ; moyenne simple 5,667 % ; médiane 5,71 % ; valeur au taux moyen 18 363 822 $ (+1,28 %),analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_sommaire_identites,"0,0574 ; 0,05667 ; 0,0571 ; 18363822 ; 0,0128","0,05740 ; 0,05667 ; 0,0571 ; 18363821,53 ; 0,01279",verifie,2026-10-31 | |
| 33 | +CALC-48-032,48,Exercice 2 : taux prédit TR 24 log. inondable 6,841 % (sans Duan 6,833) ; hors zone 6,343 % ; Montréal 4,525 % ; valeurs 2 192 675 / 2 364 969 / 3 314 944 $ ; écart −7,29 % ; 49,8 pb,analysis/python/cases/ch48_portefeuille.py,script (fonction exercices),"0,06841 ; 0,06833 ; 0,06343 ; 0,04525 ; 2192675 ; 2364969 ; 3314944 ; −0,0729 ; 49,8","idem",verifie,2026-10-31 | |
| 34 | +CALC-48-033,48,Exercice 4 : ratios IAAO Montréal (n = 17) médiane 1,007 ; pondéré 0,985 ; COD 4,37 ; PRD 1,016 ; PRB −0,015 (se 0,012),analysis/python/cases/ch48_portefeuille.py,script (fonction exercices),"1,007 ; 0,985 ; 4,37 ; 1,016 ; −0,015 (0,012)","1,00673 ; 0,9846 ; 4,3731 ; 1,01566 ; −0,01527 (0,01159)",verifie,2026-10-31 | |
| 35 | +CALC-48-034,48,Exercice 5 : P36 croissance 2,01 % volatilité 3,29 % ; Québec agrégé 2,67 % ; choc Québec −1,55 % ; R+g 8,15 %,analysis/python/cases/ch48_portefeuille.py,script (fonction exercices),"0,0201 ; 0,0329 ; 0,0267 ; −0,0155 ; 0,0815","0,02007 ; 0,03285 ; 0,02671 ; −0,01547 ; 0,08147",verifie,2026-10-31 | |
| 36 | +CALC-48-035,48,Exercice 6 : rho taux 0,90/0,95 : q05 131 200 853 ; q95 156 508 072 ; CV 5,39 % ; VaR 12 162 147 ; ratio 0,854 ; P(RPV>75 %) 0,analysis/python/cases/ch48_portefeuille.py,script (fonction exercices),"131200853 ; 156508072 ; 0,0539 ; 12162147 ; 0,854 ; 0","131200853 ; 156508072 ; 0,05386 ; 12162147 ; 0,8539 ; 0",verifie,2026-10-31 | |
| 37 | +CALC-48-036,48,Exercice 7 : cession P36 P41 P43 : produit net 3 951 080 $ ; RNE perdu 566 928 ; reste 133 817 000 $ taux 5,14 % RPV 60,1 % RCD 1,587 ; CV 4,30 % ; VaR 9 058 169 ; ratio 0,694,analysis/python/cases/ch48_portefeuille.py,test_ch48.py::test_risques_et_reconciliation,"3951080 ; 566928 ; 133817000 ; 0,0514 ; 0,601 ; 1,587 ; 0,0430 ; 9058169 ; 0,694","3951080 ; 566928 ; 133817000 ; 0,05141 ; 0,60054 ; 1,58684 ; 0,04296 ; 9058169 ; 0,69396",verifie,2026-10-31 | |
| 38 | ||