SPB Git forge

spb/wp23_uqo

Public
6commits 1branches 0releases
32.7 MBsize
maindefault branch
2 h agolast push
TeX 62.3% Python 37.6%
8.1 KB · 115 lines markdown
Rendered Raw Blame History
1<!-- Author: Simon-Pierre Boucher — simon-pierre.boucher@uqo.ca -->2# 📈 Beyond Hedonic Models: Spatiotemporal, Hierarchical and Probabilistic Architectures for Residential Real Estate Price Forecasting34**UQO Working Paper No. 23** — *A pseudo-real-time evaluation on 632,000 Quebec transactions and 82 local market indices, 2021–2026*56[![Paper](https://img.shields.io/badge/paper-PDF%20(56%20p.)-b31b1b?logo=latex&logoColor=white)](paper/main.pdf)7[![Python](https://img.shields.io/badge/python-3.14%20·%20PyTorch%202.12-3776AB?logo=python&logoColor=white)](requirements.txt)8[![Data](https://img.shields.io/badge/data-WP22%20snapshot%20(read--only)-4051b5)](../sharp-hpi-quebec/data/raw/README.md)9[![Reproducible](https://img.shields.io/badge/reproducible-pseudo--real--time%20pipeline-2e7d32)](scripts/)10[![Institution](https://img.shields.io/badge/UQO-D%C3%A9pt.%20des%20sciences%20administratives-16365c)](https://uqo.ca)11[![Author](https://img.shields.io/badge/author-Simon--Pierre%20Boucher-16365c)](mailto:simon-pierre.boucher@uqo.ca)1213> **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).1415---1617## 📌 Status1819| Item | Value |20|---|---|21| Version | 1.1 (October 2026) — extended analyses and completed appendices |22| SSRN | not yet submitted |23| Journal | — |24| Code & data | reproducible from `scripts/`; inputs are WP22 artefacts (read-only) |2526## 🎯 What this paper does2728Tests, 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.2930## 🏆 Headline results3132| Object | Estimate |33|---|---|34| Task A, 1–3 months: MAE (log ×100) LightGBM / HSHN partial / hedonic OLS / naive municipal median | 21.21 / 22.36 / 23.24 / 34.96 |35| Task A, 7–12 months: LightGBM MAE / bias of all models | 22.70 / −4 to −9 log pts (market not extrapolated) |36| 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 |37| Task B, h = 12: best = AR(2) MASE 0.63; pooled models worse than no change (bias +6 to +11 log pts) | — |38| 90 % coverage at h = 3: QANSS / BHPF / ridge / LightGBM / DSGFN / TFT-lite | 97 / 90 / 90 / 76 / 73 / 73 % |39| 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 |40| Seed variability (h = 3): DSGFN 3.76–4.05, TFT-lite 4.33–4.83, QANSS 3.75–3.96 | — |41| Simulation (municipal, h = 3, MAE / no change): regimes AR(2) 0.78 · momentum ridge 1.53 · spillover DSGFN 1.29 · rw QANSS 2.04 | — |42| 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) |43| 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 |44| Task B, h = 3, directional accuracy all / at turning points: DSGFN / QREFA / LightGBM | 77 / 76 / 75 % overall; 65 / 66 / 65 % at turning points |45| Task C, h = 3, Brier skill of P(decline) vs climatology: QREFA / LightGBM / QANSS / no change | +0.17 / +0.15 / +0.07 / -0.02 |46| Task B, h = 3, 192 municipal cells: share where LightGBM / QANSS / ridge beats no change; LightGBM median MASE | 91 / 83 / 72 %; 0.74 |47| Equal-weight combinations (h = 3): LightGBM alone / LightGBM + QANSS / four models / QREFA stack | 0.754 / 0.760 / 0.765 / 0.816 |48| 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 |4950Every number is a generated macro (`paper/tables/numbers.tex`).5152## 🗂 Repository layout5354```55forecasting-architectures-quebec/56├── CLAUDE.md                  # protocol (as received; truncated section completed)57├── src/wp23/                  # config, data (Task A), data_b (Task B), evaluation, models_a(+_torch), models_b(+_torch)58├── 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 figures59├── tests/60├── data/processed/            # task_b_panel.parquet (built from WP22 vintages; not committed)61├── 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)62├── docs/                      # PLAN, decision_log, leakage_audit, limitations, literature/ (152 verified refs, novelty scan)63└── paper/                     # main.tex, sections/, appendix/, tables/ (generated), references.bib64```6566## 🚀 Quick start6768```bash69# WP22 must be present as ../sharp-hpi-quebec with its processed layers and index_vintages.parquet70python3 -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')"71python3 scripts/10_task_a.py --family trees; python3 scripts/10_task_a.py --family torch     # separate processes (OpenMP conflict on macOS)72python3 scripts/20_task_b.py --family classic; python3 scripts/20_task_b.py --family trees; python3 scripts/20_task_b.py --family torch73python3 scripts/30_evaluate.py a; python3 scripts/30_evaluate.py b74python3 scripts/35_interpret.py; python3 scripts/36_ablation.py; python3 scripts/37_ablation_summary.py; python3 scripts/38_robustness.py75python3 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.py76python3 scripts/50_tables.py; python3 scripts/60_figures.py; cd paper && latexmk -pdf main.tex77```7879Heavy runs were executed on a 32-core Mac Studio (M3U96b) with the same code.8081## 🗃 Data8283WP22 (`../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.8485## 🔬 Methodology8687See `paper/sections/{targets,architectures,benchmarks,framework}.tex` and `docs/leakage_audit.md`.8889## ⚠️ Limitations9091See `docs/limitations.md` and the paper's final section.9293## 📝 Citation9495```bibtex96@techreport{boucher2026forecasting,97  author      = {Boucher, Simon-Pierre},98  title       = {Beyond Hedonic Models: Spatiotemporal, Hierarchical and Probabilistic Architectures for Residential Real Estate Price Forecasting},99  institution = {Universit\'e du Qu\'ebec en Outaouais, D\'epartement des sciences administratives},100  type        = {Working Paper},101  number      = {23},102  year        = {2026},103  month       = {October}104}105```106107## 👤 Author & contact108109**Simon-Pierre Boucher** — Département des sciences administratives, Université du Québec en Outaouais (UQO), Gatineau, QC.110📧 [simon-pierre.boucher@uqo.ca](mailto:simon-pierre.boucher@uqo.ca)111112## 🗒 Notes113114- 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`).115