📈 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
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
# 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.texHeavy 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
@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
🗒 Notes
- Follows
Recherche-UQO/HARMONISATION.md. The pasted protocol ended at section 17 ("11. Prob…"); the remaining sections were completed from the series conventions (seeCLAUDE.md).