# 📈 Beyond Hedonic Models: Spatiotemporal, Hierarchical and Probabilistic Architectures for Residential Real Estate Price Forecasting **UQO Working Paper No. 23** — *A pseudo-real-time evaluation on 632,000 Quebec transactions and 82 local market indices, 2021–2026* [![Paper](https://img.shields.io/badge/paper-PDF%20(56%20p.)-b31b1b?logo=latex&logoColor=white)](paper/main.pdf) [![Python](https://img.shields.io/badge/python-3.14%20·%20PyTorch%202.12-3776AB?logo=python&logoColor=white)](requirements.txt) [![Data](https://img.shields.io/badge/data-WP22%20snapshot%20(read--only)-4051b5)](../sharp-hpi-quebec/data/raw/README.md) [![Reproducible](https://img.shields.io/badge/reproducible-pseudo--real--time%20pipeline-2e7d32)](scripts/) [![Institution](https://img.shields.io/badge/UQO-D%C3%A9pt.%20des%20sciences%20administratives-16365c)](https://uqo.ca) [![Author](https://img.shields.io/badge/author-Simon--Pierre%20Boucher-16365c)](mailto:simon-pierre.boucher@uqo.ca) > **TL;DR** — Three forecasting tasks on the WP22 Quebec registry data in a strict forward-chaining design: (A) the price of a dwelling sold 1–12 months after the origin, (B) the 1/3/6/12-month change of municipal, regional and provincial quality-adjusted indices (predictors = WP22 real-time vintages only), (C) calibrated predictive distributions. Five candidate architectures (HSHN, DSGFN, RAREF, BHPF, QANSS) and an integrated stack (QREFA) against ~25 benchmarks (naive, AR, local linear trend, ridge, LightGBM, XGBoost, random forest, SVR, MLP, LSTM/GRU/TCN/TFT-lite). Inference: Diebold–Mariano (HAC), Giacomini–White, model confidence sets, stationary bootstrap; simulation study with known latent dynamics (random walk, momentum, regimes, spillovers, sparse). Verified bibliography (152 entries). --- ## 📌 Status | Item | Value | |---|---| | Version | 1.1 (October 2026) — extended analyses and completed appendices | | SSRN | not yet submitted | | Journal | — | | Code & data | reproducible from `scripts/`; inputs are WP22 artefacts (read-only) | ## 🎯 What this paper does Tests, on the same transaction-level data, whether spatial, hierarchical, regime-adaptive, Bayesian and state-space forecasting mechanisms beat strong conventional forecasts, and when. Every architecture is classified against the verified literature (application / adaptation / new combination); none is claimed unprecedented. ## 🏆 Headline results | Object | Estimate | |---|---| | Task A, 1–3 months: MAE (log ×100) LightGBM / HSHN partial / hedonic OLS / naive municipal median | 21.21 / 22.36 / 23.24 / 34.96 | | Task A, 7–12 months: LightGBM MAE / bias of all models | 22.70 / −4 to −9 log pts (market not extrapolated) | | Task B, h = 3: MASE vs no change — LightGBM panel / QREFA / QANSS / ridge / AR(2) / DSGFN | 0.75 / 0.82 / 0.83 / 0.84 / 0.90 / 0.88 | | Task B, h = 12: best = AR(2) MASE 0.63; pooled models worse than no change (bias +6 to +11 log pts) | — | | 90 % coverage at h = 3: QANSS / BHPF / ridge / LightGBM / DSGFN / TFT-lite | 97 / 90 / 90 / 76 / 73 / 73 % | | Ablations (municipal, h = 6): DSGFN without graph vs full / equal-weight combo vs QREFA / ridge without momentum | -0.59 / -0.38 / +0.53 log pts | | Seed variability (h = 3): DSGFN 3.76–4.05, TFT-lite 4.33–4.83, QANSS 3.75–3.96 | — | | Simulation (municipal, h = 3, MAE / no change): regimes AR(2) 0.78 · momentum ridge 1.53 · spillover DSGFN 1.29 · rw QANSS 2.04 | — | | Task B, h = 3, by ex-post provincial regime: LightGBM MASE rising windows (17 origins) / flat (13) | 0.63 / 1.00 (the gain is the forecastability of spring upswings) | | Task B, h = 3, Holm-adjusted DM p-value vs no change: LightGBM / QANSS (unadjusted 0.007 / 0.037) | 0.11 / 0.59 — no improvement survives a 10 % family-wise rate | | Task B, h = 3, directional accuracy all / at turning points: DSGFN / QREFA / LightGBM | 77 / 76 / 75 % overall; 65 / 66 / 65 % at turning points | | Task C, h = 3, Brier skill of P(decline) vs climatology: QREFA / LightGBM / QANSS / no change | +0.17 / +0.15 / +0.07 / -0.02 | | Task B, h = 3, 192 municipal cells: share where LightGBM / QANSS / ridge beats no change; LightGBM median MASE | 91 / 83 / 72 %; 0.74 | | Equal-weight combinations (h = 3): LightGBM alone / LightGBM + QANSS / four models / QREFA stack | 0.754 / 0.760 / 0.765 / 0.816 | | Task A, 1–3 months, median absolute dollar error LightGBM vs municipal median: house / condo / plex | $61,102 vs $92,750 / $32,005 vs $127,000 / $80,115 vs $135,000 | Every number is a generated macro (`paper/tables/numbers.tex`). ## 🗂 Repository layout ``` forecasting-architectures-quebec/ ├── CLAUDE.md # protocol (as received; truncated section completed) ├── src/wp23/ # config, data (Task A), data_b (Task B), evaluation, models_a(+_torch), models_b(+_torch) ├── scripts/ # 10 task A · 20 task B · 30 evaluate · 35 interpret · 36/37 ablation · 38 robustness · 39 extra analyses · 40/41 simulation · 50 tables · 60 figures ├── tests/ ├── data/processed/ # task_b_panel.parquet (built from WP22 vintages; not committed) ├── results/ # task_a, task_b, eval_a, eval_b, ablation_b, robustness_b, simulation, interpret, extra (time/regime/direction/decline/combination/municipal/cost/dollar/selection) ├── docs/ # PLAN, decision_log, leakage_audit, limitations, literature/ (152 verified refs, novelty scan) └── paper/ # main.tex, sections/, appendix/, tables/ (generated), references.bib ``` ## 🚀 Quick start ```bash # WP22 must be present as ../sharp-hpi-quebec with its processed layers and index_vintages.parquet python3 -c "import sys; sys.path.insert(0,'src'); from wp23 import data_b; data_b.build_panel().write_parquet('data/processed/task_b_panel.parquet')" python3 scripts/10_task_a.py --family trees; python3 scripts/10_task_a.py --family torch # separate processes (OpenMP conflict on macOS) python3 scripts/20_task_b.py --family classic; python3 scripts/20_task_b.py --family trees; python3 scripts/20_task_b.py --family torch python3 scripts/30_evaluate.py a; python3 scripts/30_evaluate.py b python3 scripts/35_interpret.py; python3 scripts/36_ablation.py; python3 scripts/37_ablation_summary.py; python3 scripts/38_robustness.py python3 scripts/40_simulation.py --build --reps 10; for f in classic trees torch; do python3 scripts/40_simulation.py --reps 10 --family $f; done; python3 scripts/41_sim_summary.py python3 scripts/50_tables.py; python3 scripts/60_figures.py; cd paper && latexmk -pdf main.tex ``` Heavy runs were executed on a 32-core Mac Studio (M3U96b) with the same code. ## 🗃 Data WP22 (`../sharp-hpi-quebec`): headline sample of 632,006 sales (2021-01 → 2026-10-07), real-time SHARP-HPI vintages (publication dates July 2022 → October 2026, filtered and smoothed modes), retrospective panel (targets only), SDA boundaries. No listing, bedroom/bathroom, condition or image data exist in this source. ## 🔬 Methodology See `paper/sections/{targets,architectures,benchmarks,framework}.tex` and `docs/leakage_audit.md`. ## ⚠️ Limitations See `docs/limitations.md` and the paper's final section. ## 📝 Citation ```bibtex @techreport{boucher2026forecasting, author = {Boucher, Simon-Pierre}, title = {Beyond Hedonic Models: Spatiotemporal, Hierarchical and Probabilistic Architectures for Residential Real Estate Price Forecasting}, institution = {Universit\'e du Qu\'ebec en Outaouais, D\'epartement des sciences administratives}, type = {Working Paper}, number = {23}, year = {2026}, month = {October} } ``` ## 👤 Author & contact **Simon-Pierre Boucher** — Département des sciences administratives, Université du Québec en Outaouais (UQO), Gatineau, QC. 📧 [simon-pierre.boucher@uqo.ca](mailto:simon-pierre.boucher@uqo.ca) ## 🗒 Notes - Follows `Recherche-UQO/HARMONISATION.md`. The pasted protocol ended at section 17 ("11. Prob…"); the remaining sections were completed from the series conventions (see `CLAUDE.md`).