SPB Git

spb/wp11_uqo

Public

UQO Working Paper No. 11 — Half a million prices, twenty models: a systematic assessment of hedonic specifications.

révision scientifique complète (editorial board, 2026-10-17)

- scoreboard uniforme (règle médiane pour tous les modèles ; Duan en robustesse) : le
  « renversement » forward-in-time de la v1.0 était un artefact de retransformation
- inférence : bootstrap par grappes (municipalités) + tests DM/GW groupés sur toutes
  les comparaisons ; décomposition niveau/compétence du generalization gap
- robustesse : splits groupés parcelle/bâtiment, FE spatiaux emboîtés, Box–Cox fin,
  sensibilité HGB ; nouvelle section 7, 9 tables et 1 figure
- méthodologie formalisée (13 équations) ; littérature 33 → 58 références vérifiées
- docs/REVIEW-REPORT.md, docs/CHANGELOG-REVISION.md ; version 1.1, October 2026

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Simon-Pierre Boucher committed (Oct 18, 2026) parent 984118f Browse files

62 changed files +3,545 −758

62 changed files
modified README.md +76 −36
@@ -4,7 +4,7 @@
4 4 **UQO Working Paper No. 11** — *A Systematic Assessment of Hedonic Specifications
5 5 and Estimation Methods for the Quebec Housing Market, 2021–2026*
6 6
7 −[![Paper](https://img.shields.io/badge/paper-PDF%20(23%20p.)-b31b1b?logo=latex&logoColor=white)](paper/main.pdf)
7 +[![Paper](https://img.shields.io/badge/paper-PDF%20(40%20p.)-b31b1b?logo=latex&logoColor=white)](paper/main.pdf)
8 8 [![Python](https://img.shields.io/badge/python-3.11%2B-3776AB?logo=python&logoColor=white)](requirements.txt)
9 9 [![Data](https://img.shields.io/badge/data-514%2C212%20sales%20·%20roll--matched%20parquet-4051b5)](data/raw/README.md)
10 10 [![Models](https://img.shields.io/badge/models-20%20·%204%20design%20axes-4051b5)](src/wp11/models.py)
@@ -15,13 +15,19 @@ and Estimation Methods for the Quebec Housing Market, 2021–2026*
15 15 > **TL;DR** — A controlled horse race of **20 hedonic models** on 514,212 Quebec sales
16 16 > (2021–2026) with assessor-grade structural attributes: 6 functional forms × a time-FE
17 17 > ladder × a spatial-FE ladder × 6 estimation methods, all scored on the **same
18 −> price-level scoreboard** (Duan smearing / Box–Cox inversion) under **two holdouts**
19 −> (random 80/20 and forward-in-time). Functional form is second-order (±2 pp of MdAPE);
20 −> spatial controls are first-order (~10 pp) but overfit at ~1 km granularity; **gradient
21 −> boosting wins under random validation** (MdAPE 14.4% vs 16.5% for the best linear
22 −> model) — but under the forward-in-time split *every* model degrades and the ML
23 −> advantage **reverses** (splines 19.1% vs boosting 21.2%, identical R²_ln): random
24 −> cross-validation is the wrong experiment for valuation models.
18 +> price-level scoreboard** (one retransformation rule for every model) under **two
19 +> holdouts** (random 80/20 and forward-in-time), with municipality-clustered bootstrap
20 +> intervals and Diebold–Mariano-type tests on every comparison. Functional form is
21 +> second-order (1.5 pp of MdAPE); spatial controls are first-order (~10 pp), and a ~1 km
22 +> grid overfits when used alone but becomes the best linear specification once nested in
23 +> municipalities; **gradient boosting wins under random validation** (14.4% vs 17.6% for
24 +> the best linear model, −3.2 pp [−4.7, −1.9]), a gain that survives parcel- and
25 +> building-grouped holdouts. Under the forward-in-time split (train < 2025, test 2025–26)
26 +> every model degrades and the gap shrinks to 0.5 pp and to insignificance — but the
27 +> decomposition shows this is a *level* (staleness) effect: re-levelled, boosting still
28 +> leads by 2.9 pp. Random cross-validation hides the staleness cost; it does not reverse
29 +> the ranking (the reversal reported in v1.0 was an artefact of an asymmetric
30 +> retransformation, corrected in v1.1).
25 31
26 32 ---
27 33
@@ -29,8 +35,8 @@ and Estimation Methods for the Quebec Housing Market, 2021–2026*
29 35
30 36 | Item | Value |
31 37 |---|---|
32 −| Version | 1.0 (August 2026) |
33 −| SSRN | [7626698](https://ssrn.com/abstract=7626698) — submitted 2026-10-17 (preliminary upload) |
38 +| Version | **1.1 (October 2026)** — revised 2026-10-17 by the editorial-board review (see `docs/`); v1.0 = August 2026 |
39 +| SSRN | [7626698](https://ssrn.com/abstract=7626698) — v1.0 uploaded 2026-10-17; v1.1 PDF to be uploaded as a revision |
34 40 | Journal | not yet submitted |
35 41 | Code & data | reproducible from `scripts/` (see Quick start); raw parquet snapshot not redistributed |
36 42
@@ -77,23 +83,35 @@ and accuracy by market segment.
77 83
78 84 ## 🏆 Headline results
79 85
86 +All MdAPE in %, median retransformation rule for every model (v1.1 scoreboard).
87 +
80 88 | Object | Random 80/20 holdout | Forward-in-time holdout |
81 89 |---|---|---|
82 −| Functional-form range (A1–A6), MdAPE | 16.5 % (splines) – 18.6 % (Box–Cox) | 19.1 % – 21.0 % |
83 −| Data-driven Box–Cox exponent | λ̂ = 0.25, buys nothing out of sample | — |
84 −| Dropping spatial FE (C1 vs C2) | 27.9 % vs 18.1 % (+10 pp) | 26.5 % vs 20.5 % |
85 −| ~1.1 km grid FE (C4) | 19.4 % — **overfits** vs 17.5 % at ~5.5 km | 22.1 % |
86 −| Dropping time FE (B1 vs B3) | 21.1 % vs 18.1 % | 25.4 % vs 20.5 % |
87 −| Gradient boosting (D4) | **14.4 %** (−13 % vs best linear 16.5 %) | 21.2 % |
88 −| Random forest (D3) | 14.6 % | 21.3 % |
89 −| Boosting without coordinates (D5) | 23.2 % | 26.2 % |
90 −| Semi-log + splines (A6) | 16.5 % | **19.1 %** — beats boosting, same R²_ln (0.52) |
91 −| Implied monthly indices across forms | agree within a few index points | |
92 −| Boosted implicit age / area profiles | track quadratic OLS closely | |
93 −
94 −Practical synthesis: a semi-log with splines, quarter effects and spatial FE matched to
95 −market thickness is within two points of the frontier in deployment conditions —
96 −transparent, auditable, fast. Validate against the future, not a shuffle of the past.
90 +| Functional-form range (A1–A6) | 17.6 (splines) – 19.2 (quadratics) | 20.4 (linear) – 23.3 |
91 +| Splines vs. semi-log | −1.4 pp [−1.8, −1.1] | −1.4 pp [−2.3, −0.8] |
92 +| Data-driven Box–Cox exponent | λ̂ = 0.25 (0.35 on a fine grid), −0.5 pp vs. semi-log, worse on MAPE | — |
93 +| Dropping spatial FE (C1 vs C2) | 28.8 vs 19.2 (+9.6 pp) | 29.0 vs 23.3 |
94 +| ~5.5 km grid vs. municipality FE (C3 vs C2) | 18.7 vs 19.2 — **not significant** (−0.45 [−1.07, +0.37]) | 24.3 vs 23.3 |
95 +| ~1.1 km grid alone (C4) | 21.0 — overfits (+1.8 pp [+1.2, +2.3]) | 25.3 |
96 +| ~1.1 km grid **nested in municipalities** (C4′) | **17.3** — best linear specification | 21.6 |
97 +| Dropping time FE (B1 vs B3) | 22.0 vs 19.2 | 29.3 vs 23.3 |
98 +| Gradient boosting (D4) vs. best linear (A6) | **14.4** vs 17.6, −3.2 pp [−4.7, −1.9], DM t = −3.6 | 21.2 vs 21.7, −0.5 pp [−1.7, +0.6], n.s. |
99 +| Random forest (D3) | 14.6 | 21.3 |
100 +| Boosting without coordinates (D5) | 23.2 | 26.2 |
101 +| Parcel- / building-grouped holdout, D4 vs A6 | 14.5 vs 17.6 / 14.6 vs 17.8 (gap unchanged) | — |
102 +| Staleness cost (forward − same-period random) | — | D4 +7.5 pp, A6 +4.7, A1 +3.3 |
103 +| Median log level error, forward split | — | D4 +0.18, A6 +0.16, A1 +0.10 |
104 +| Re-levelled forward MdAPE | — | **D4 13.9 vs A6 16.8** (gap 2.9 ≈ random 3.5) |
105 +| Boosting lead over splines by test quarter | — | 1.5 pp (2025Q1) → 0.0 (2026Q3) |
106 +| Monthly indices, four linear forms | agree within 2.5 index points | |
107 +| Boosted imputation index, July 2026 | 160.5 vs 168.6–171.0 for the linear forms | |
108 +| Boosted age profile vs. quadratic OLS | same shape, 0.10–0.13 log points flatter from age 20 | |
109 +
110 +Practical synthesis: a semi-log with splines, quarter effects and spatial fixed effects
111 +nested from municipality down to a fine grid is within three points of the frontier under
112 +random validation and indistinguishable from it in deployment. Supply the price level from
113 +an index or a frequent refit, spend the flexibility budget on the spatial surface, and
114 +validate against the future, not a shuffle of the past.
97 115
98 116 ## 🗂 Repository layout
99 117
@@ -148,8 +166,9 @@ peak RAM ≈ 8 GB.
148 166 | 01 | `01_build_sample.py` | residential use codes, roll match ≤ 50 m / score ≥ 150, price ≥ $50k, floor area 20–2,000 m², known year built, 1/99 % trims within sale year; builds grid cells | `data/processed/`, `results/reproduced/sample_counts.csv`, `summary_stats.csv` |
149 167 | 02 | `02_horserace.py` | fits the 20 models on each split, retransforms predictions to price levels, scores MdAPE/MAPE/RMSE_ln/R²_ln; Box–Cox profile likelihood | `horserace_random.csv`, `horserace_temporal.csv`, `boxcox.csv` |
150 168 | 03 | `03_extensions.py` | constant-quality monthly indices by form, implicit ln-price profiles (quadratic OLS vs boosting), learning curves, accuracy by segment | `index.csv`, `profiles.csv`, `learning.csv`, `segments.csv` |
151 −| 04 | `04_make_figures.py` | the 9 figures | `figures/fig_*.png` |
152 −| 05 | `05_make_tables.py` | the 7 LaTeX tables | `results/tables/*.tex` |
169 +| 04 | `04_make_figures.py` | the 10 figures | `figures/fig_*.png` |
170 +| 05 | `05_make_tables.py` | the 16 LaTeX tables | `results/tables/*.tex` |
171 +| 06 | `06_robustness.py` | cluster-bootstrap CIs + clustered DM tests, same-period and by-quarter decomposition, level re-levelling, leakage decomposition, parcel- and building-grouped races, nested spatial FE, fine Box–Cox grid, boosting hyper-parameter sensitivity (run after 02; ≈ 20 min) | `inference_*.csv`, `pairs.csv`, `same_period.csv`, `by_quarter.csv`, `relevel.csv`, `leakage.csv`, `horserace_group_*.csv`, `nested_fe.csv`, `boxcox_fine.csv`, `hgb_sensitivity.csv` |
153 172
154 173 ## 🗃 Data
155 174
@@ -161,23 +180,28 @@ physical configuration, use code. Sample cascade (paper §3): residential use co
161 180 high-confidence match → price ≥ $50,000 → plausible floor area → known year built →
162 181 1/99 % trims ⇒ **514,212 sales** (348,253 single-family, 75,734 condominiums, 74,909
163 182 plexes, 10,349 cottages, 4,881 mobile homes) over 1,115 municipalities, 5,255 cells of
164 −~5.5 km and 30,548 cells of ~1.1 km. Mean price $462,000 (median $399,000). The raw
183 +~5.5 km and 30,548 cells of ~1.1 km. Mean price $440,207 (median $397,375); 86 further dwellings of undetermined class. One fifth of sales are repeat sales of the same parcel and 30% share exact coordinates with another sale (92% of condominiums). The raw
165 184 parquet (100 MB, transaction microdata) is **not redistributed**.
166 185
167 186 ## 🔬 Methodology
168 187
169 188 1. **One attribute set, one sample** for every model (`src/wp11/sample.py`).
170 189 2. **Axis A** — six functional forms on a municipality + quarter FE backbone; Box–Cox λ by
171 − profile likelihood; log models retransformed with Duan smearing, Box–Cox inverted
172 − (`src/wp11/models.py`).
190 + profile likelihood. Every transformed-scale prediction is inverted with the same
191 + *median rule* (plain inversion); Duan smearing is computed for every model and
192 + reported as a robustness scoreboard (`src/wp11/models.py`).
173 193 3. **Axis B / C** — time-FE ladder (none → month) and spatial-FE ladder (none → ~1.1 km
174 194 grid) on the quadratic semi-log backbone.
175 195 4. **Axis D** — OLS, cross-validated ridge, random forest, gradient boosting with and
176 196 without coordinates, spatial k-NN comparables, all on the identical attribute set.
177 197 5. **Two holdouts** — random 80/20 and forward-in-time (train < 2025, test 2025–26, time
178 − effects carried forward); metrics on price levels, design clustered by municipality.
198 + effects carried forward), plus parcel- and building-grouped holdouts; metrics on price
199 + levels; municipality-clustered bootstrap intervals and clustered Diebold–Mariano tests
200 + (`src/wp11/inference.py`); level/skill decomposition of the forward error.
179 201 6. **Extensions** — implied monthly indices, implicit-price profiles, learning curves,
180 202 segment accuracy (`scripts/03_extensions.py`).
203 +7. **Robustness** — retransformation rule, leakage-free holdouts, nested spatial FE, fine
204 + Box–Cox grid, boosting hyper-parameters (`scripts/06_robustness.py`).
181 205
182 206 ## 🖼 Figures & tables inventory
183 207
@@ -192,10 +216,13 @@ parquet (100 MB, transaction microdata) is **not redistributed**.
192 216 | `fig_profiles` | implicit ln-price profiles: quadratic OLS vs gradient boosting |
193 217 | `fig_learning` | learning curves: MdAPE against training-set size |
194 218 | `fig_segments` | MdAPE by market segment (random holdout) |
219 +| `fig_horizon` | forward-in-time MdAPE by test quarter (distance from the training window) |
195 220
196 221 Tables (`results/tables/*.tex`): summary statistics, scoreboard random holdout,
197 −scoreboard forward-in-time holdout, Box–Cox profile, generalization gap, learning
198 −curves, segments.
222 +scoreboard forward-in-time holdout, inference (bootstrap CIs + DM tests), targeted pairs,
223 +Box–Cox profile, generalization gap, same-period / level decomposition, by-quarter
224 +accuracy, learning curves, segments, median vs. Duan retransformation, grouped holdouts,
225 +seen/unseen leakage decomposition, nested spatial FE, boosting hyper-parameters.
199 226
200 227 ## ⚠️ Limitations
201 228
@@ -206,8 +233,13 @@ curves, segments.
206 233 - Attributes are those of the assessment roll (no interior quality, renovations or
207 234 listing text); the ML advantage measured here is the value of flexible *spatial*
208 235 learning on that attribute set, not of richer data.
209 −- Tree ensembles are tuned lightly (fixed hyper-parameters); the ranking is robust to
210 − the choices tried but not exhaustively optimised.
236 +- Tree ensembles use fixed, conventional hyper-parameters; four materially different
237 + configurations (including early stopping on a time-ordered validation set) leave the
238 + ranking unchanged (paper §7.5), but no linear model with a continuous spatial surface
239 + (kriging, bivariate splines) is estimated as a competitor.
240 +- The forward-in-time test covers one regime (the 2025–26 recovery); the level
241 + re-levelling uses the test-set median ratio (an oracle upper bound for what a published
242 + index would deliver).
211 243
212 244 ## 📝 Citation
213 245
@@ -222,7 +254,8 @@ curves, segments.
222 254 type = {Working Paper},
223 255 number = {11},
224 256 year = {2026},
225 − month = {August}
257 + month = {October},
258 + note = {Version 1.1}
226 259 }
227 260 ```
228 261
@@ -239,3 +272,10 @@ Université du Québec en Outaouais (UQO), Gatineau, QC.
239 272 Language-Model and Vision Features* (now **WP 14**) and *Does the Sales Comparison
240 273 Approach Actually Work?* (now **WP 16**).
241 274 - Cover page, metadata and layout follow `Recherche-UQO/HARMONISATION.md` (2026-10-17).
275 +- **Revision 2026-10-17 (v1.1)**: full editorial-board review. Scientific report in
276 + `docs/REVIEW-REPORT.md`, audit trail (every changed number, old → new) in
277 + `docs/CHANGELOG-REVISION.md`; pre-revision PDF kept as `docs/main_pre-revision-20261017.pdf`
278 + (git tag `pre-revision-20261017`). Main correction: v1.0 applied Duan smearing to the
279 + linear log models but not to the tree ensembles; under a uniform rule the forward-in-time
280 + "reversal" disappears (the gap shrinks to 0.5 pp, n.s.) and the paper now decomposes the
281 + forward error into a common level (staleness) component and intact relative skill.
added docs/CHANGELOG-REVISION.md +165 −0
@@ -0,0 +1,165 @@
1 +# Changelog — révision scientifique complète (editorial board, 2026-10-17)
2 +
3 +Papier : **WP 11 — Half a Million Prices, Twenty Models** (v1.0, August 2026 → **v1.1, October 2026**).
4 +État de référence : tag git `pre-revision-20261017`, PDF `docs/main_pre-revision-20261017.pdf` (23 pages).
5 +Rapport scientifique associé : `docs/REVIEW-REPORT.md`.
6 +
7 +## 1. Corrections majeures (où / avant / après / pourquoi / preuve)
8 +
9 +### 1.1 Règle de retransformation asymétrique → scoreboard uniforme (correction centrale)
10 +- **Où** : `src/wp11/models.py` (`fit_predict`, `run_horserace`), §4.3 Methodology, §5, §7.1, abstract, intro, conclusion.
11 +- **Avant** : les modèles linéaires en log (A2, A3, A5, A6, B*, C*, D1, D2) étaient multipliés par le facteur de
12 + smearing de Duan (ŝ ≈ 1.06–1.08) ; les ensembles d'arbres (D3, D4, D5) et le k-NN (D6) ne l'étaient pas
13 + (`np.exp(pred)` nu). Les métriques log (RMSE_ln, R²_ln) étaient calculées sur la prédiction smearée pour une
14 + famille et non pour l'autre.
15 +- **Après** : règle « médiane » (inversion directe de la prédiction transformée, éq. 10) appliquée **à tous** les
16 + modèles pour le tableau principal ; règle « moyenne » (Duan, éq. 11, généralisée au Box–Cox par moyenne sur
17 + 1 000 résidus) calculée pour tous et rapportée en robustesse (Table 12).
18 +- **Pourquoi** : la comparaison v1.0 opposait un A6 smearé (19.1 %) à un D4 non smearé (21.2 %) dans le split
19 + temporel — le « renversement » annoncé en titre de la v1.0 était un artefact : (i) résidus log asymétriques
20 + à gauche (skewness −1.4 à −1.8, médiane +0.06) donc le smearing abaisse par coïncidence la MdAPE de tout modèle
21 + log ; (ii) marché haussier en 2025-26 : tout facteur > 1 compense une partie de la staleness. Appliquée
22 + uniformément, aucune des deux règles ne renverse le classement (médiane : A6 21.7 vs D4 21.2 ; moyenne :
23 + 19.1 vs 18.4).
24 +- **Preuve** : `results/reproduced/horserace_{random,temporal}.csv` (colonnes `mdape` vs `mdape_mean`, `smear`),
25 + `results/tables/retransformation.tex`, médianes de résidus vérifiées sur `data/processed/predictions_*.parquet`.
26 +- **Chiffres modifiés (ancien → nouveau, MdAPE %)** — random : A1 18.2→18.2, A2 18.2→19.0, A3 17.0→18.0, A4 18.6→18.6,
27 + A5 18.1→19.2, A6 16.5→17.6, B1 21.1→22.0, B2 18.1→19.1, B4 18.3→19.3, C1 27.9→28.8, C3 17.5→18.7, C4 19.4→21.0,
28 + D2 16.7→17.7 ; D3/D4/D5/D6 inchangés (14.6/14.4/23.2/21.2). Forward : A1 20.4→20.4, A2 20.6→23.2, A3 19.2→21.8,
29 + A4 21.0→21.0, A5 20.5→23.3, A6 19.1→21.7, B1 25.4→29.3, B2 21.0→23.7, B4 20.3→22.9, C1 26.5→29.0, C3 21.3→24.3,
30 + C4 22.1→25.3, D2 19.5→22.3 ; D3/D4/D5/D6 inchangés (21.3/21.2/26.2/25.6). R²_ln des modèles log : +0.01 à +0.04
31 + (random), −0.03 à −0.04 (forward).
32 +- **Conséquence narrative** : « the ranking reverses » (v1.0) → « the gap shrinks from 3.2 to 0.5 points and loses
33 + significance ; relative skill transfers intact, the level does not » (v1.1). Abstract, §1, §5.5, §8, §9 réécrits.
34 +
35 +### 1.2 Inférence statistique ajoutée (absente en v1.0)
36 +- **Avant** : aucun intervalle, aucun test ; le README affirmait « design clustered by municipality » sans aucune
37 + implémentation.
38 +- **Après** : `src/wp11/inference.py` — bootstrap par grappes (municipalités, B = 500) pour la MdAPE de chaque
39 + modèle et pour les différences ; test de type Diebold–Mariano / Giacomini–White à erreurs-types groupées sur les
40 + pertes APE et log² (éq. 13). Tables 4 (tous les modèles vs A6) et 5 (13 paires ciblées).
41 +- **Résultats clés** : D4 vs A6 random −3.2 [−4.7, −1.9] (t = −3.6) ; forward −0.5 [−1.7, +0.6] (t = −1.6, p = 0.11) ;
42 + C3 vs C2 random −0.45 [−1.07, +0.37] (n.s.) ; C4 vs C2 +1.8 [+1.2, +2.3] ; B4 vs B3 +0.19 [+0.01, +0.37] ;
43 + D2 vs A6 +0.06 [−0.02, +0.16] (n.s.).
44 +- **Conséquence** : la phrase « the 5.5 km grid beats municipality effects » est ramenée à « nominally better,
45 + within bootstrap noise » ; « month effects indistinguishable from quarter » précisé (légèrement pires, significatif).
46 +
47 +### 1.3 Décomposition du « generalization gap » (nouveau)
48 +- Comparaison à période fixe (modèles random évalués sur les 31 465 ventes 2025-26 de leur test) : D4 13.7 → 21.2
49 + (coût de staleness 7.5), A6 17.0 → 21.7 (4.7), A1 17.1 → 20.4 (3.3). Biais de niveau médian forward : D4 +0.183,
50 + A6 +0.161, A1 +0.102. MdAPE re-nivelée forward : D4 13.9 vs A6 16.8 (écart 2.9 ≈ écart random 3.5).
51 + Par trimestre : avance D4 sur A6 de 1.5 pt (2025Q1) → 0 (2026Q3).
52 +- Fichiers : `same_period.csv`, `relevel.csv`, `by_quarter.csv` ; Tables 8–9, Figure 6 (nouvelle).
53 +
54 +### 1.4 Fuite d'information dans le split aléatoire (nouveau)
55 +- Faits : 20.6 % des ventes sont des reventes d'une même parcelle ; 30.3 % partagent des coordonnées exactes avec
56 + une autre vente (91.6 % des condos). Colonnes `parcel`, `coord` ajoutées à `sample.py` (reconstruction du
57 + parquet d'analyse, 514 212 ventes identiques).
58 +- Splits groupés (`split("group_parcel")`, `split("group_coord")`) : course complète. Parcelle : D4 14.5 / A6 17.6
59 + (≈ inchangé). Bâtiment : D4 14.6 / A6 17.8 (écart 3.2 identique) ; seul D6 se dégrade (21.2 → 22.3).
60 + Décomposition vu/non vu : D4 12.0 vs 15.3 (coord.), A6 17.8 vs 17.6 ; condos D4 8.9 vs 10.2.
61 +- Tables 13–14 ; §4.4, §7.2.
62 +
63 +### 1.5 Effets spatiaux fins : « seventeen K sales » et repli arbitraire
64 +- **Avant** (§5.3) : « its cells average seventeen K sales each » — faux : 514 212 / 30 548 = 16.8 ventes par cellule
65 + (médiane 3). Corrigé. Cellules non vues (2.5 % des ventes test) tarifées au niveau de la cellule de référence :
66 + désormais explicité.
67 +- **Nouveau** : C3′ (muni + grille 5.5 km) et C4′ (muni + grille 1.1 km) — solution de norme minimale (ridge α→0)
68 + ≈ pooling partiel vers la municipalité. Random : C4′ 17.3 % (meilleure spécification linéaire du papier),
69 + C3′ 17.7 % ; forward : 21.6 / 21.5 vs C2 23.3. Conclusion de l'axe C reformulée : « hierarchy, not coarseness ».
70 + Table 15 ; `nested_fe.csv`.
71 +
72 +### 1.6 Box–Cox : grille fine
73 +- Grille 0.05 sur [−0.25, 0.75] : λ̂ = 0.35 (profil plat 0.25–0.55 à la tolérance du solveur itératif) ;
74 + MdAPE random 18.4 % (vs 18.6 % à 0.25). `boxcox_fine.csv`. Texte §5.1 et §7.4.
75 +
76 +### 1.7 Hyper-paramètres du boosting
77 +- Quatre configurations alternatives (shallow, deep, régularisée, early stopping sur les 10 % derniers mois
78 + d'entraînement) sous les deux splits. `hgb_sensitivity.csv`, Table 16, §7.5. Random 14.3–14.7 % (baseline 14.4), forward 21.2–21.6 % (baseline 21.2) ; early stopping : 700 / 1 000 itérations, reproduit le baseline à 0.1 pt.
79 +
80 +### 1.8 Statistiques descriptives incohérentes
81 +- **Avant** (§3.2, README) : « Prices average $462,000 (median $399,000) ». **Table 1** : 440 207 / 397 375.
82 + **Après** : texte aligné sur la table ; ajout des 86 logements de classe indéterminée (la somme des classes v1.0
83 + faisait 514 126 ≠ 514 212) ; répartition par année ; nettoyage des lots > P99.5 explicité (était silencieux
84 + dans `sample.py`) ; bornes âge/étages/logements explicitées.
85 +
86 +### 1.9 Indices et profils : affirmations adoucies
87 +- **Avant** : « all five [indices] agree to within a few index points » ; « curves sit within a tenth of a log
88 + point ». **Après** : les quatre formes linéaires s'accordent à ≤ 2.5 points ; l'indice boosting finit 9 points
89 + plus bas (160.5 vs 168.6–171.0 ; écart max 10.9) ; profil d'âge du boosting uniformément plus plat de 0.10–0.13
90 + log-point à partir de 20 ans (−0.20 vs −0.31 à 40 ans), surface : ≤ 0.05. Chiffres vérifiés dans
91 + `index.csv`, `profiles.csv`.
92 +- Learning curves recalculées (règle médiane) : OLS 19.1 → 19.2 (v1.0 : 18.4 → 18.1) ; GB 17.6 → 14.5 ; écart
93 + 1.6 → 4.7 pts (v1.0 : < 1 → 3.6). Segments : condo 18.2 vs 9.1 (v1.0 OLS 20.4), grandes villes 17.7 vs 11.9,
94 + petites municipalités 24.8 vs 18.7 (v1.0 23.3), chalets 34.3 vs 32.1 (v1.0 33.9).
95 +
96 +### 1.10 Méthodologie formalisée
97 +- §4 réécrit : équations (1)–(13) — fonction hédonique générale, six formes A1–A6, profil de vraisemblance Box–Cox
98 + (avec jacobien), ridge, règle k-NN, règles médiane/Duan, métriques, test DM groupé. Documentation du traitement
99 + des catégories non vues, du carry-forward et de son analogue pour les arbres (correction de la phrase « clamped
100 + month counter » : rien n'est écrêté dans le code ; les arbres sont constants par morceaux).
101 +
102 +### 1.11 Autres corrections éditoriales
103 +- « 13 % improvement » → « 18 % » (14.4 vs 17.6) ; « 13–21 % » → « 18–25 % » ; intro « 27.9 % versus 17.5 % »
104 + vs README « vs 18.1 % » harmonisé (28.8 vs 19.2, référence = backbone C2).
105 +- Hiérarchie de la discussion : liste à puces → prose (règle de style du protocole).
106 +- Mots-clés harmonisés au vocabulaire commun (« hedonic price function », « forward-in-time holdout »,
107 + « automated valuation model »).
108 +- `\WPversion` 1.0 → 1.1 ; `\WPdate` August 2026 → October 2026 ; page titre canonique intacte ; macro
109 + `\companionpaper` conservée (main.tex / main_anon.tex).
110 +
111 +## 2. Références
112 +
113 +### Vérifiées (Crossref `api.crossref.org/works?query.bibliographic=…`, 2026-10-17) et corrigées
114 +Toutes les entrées conservées de la v1.0 (31) ont été retrouvées sur Crossref et dotées de leur DOI. Corrections :
115 +- `box1964analysis` : pages 211–252 → **211–243** (244–252 = discussion).
116 +- `bogin2020house` : number 1 → **1–2** ; DOI 10.1007/s11146-019-09712-0.
117 +- `silver2018house` : l'article EURONA 2018 n'est pas indexé ; remplacé par la version vérifiée **IMF Working Paper
118 + 16/213 (2016)**, DOI 10.5089/9781475552249.001, même titre (ordre des mots corrigé).
119 +- `ke2017lightgbm` : @article → **@inproceedings** (NIPS 2017, non indexé Crossref ; actes Curran Associates).
120 +- `malpezzi2003hedonic` : DOI 10.1002/9780470690680.ch5 ; `anselin1988spatial` : DOI 10.1007/978-94-015-7799-1.
121 +
122 +### Retirées (non citées dans le texte et bibliographiquement défectueuses)
123 +- `knight2003listing` (volume/pages vides ; en réalité chapitre Springer 2008, pp. 39–54).
124 +- `diewert2004hedonic` (« Mimeo » en champ journal ; non indexé).
125 +
126 +### Ajoutées (27, toutes vérifiées sur Crossref, DOI dans le .bib)
127 +hill2018geospatial (RIW 64(4) 737–756) · pace2020residuals (JREFE 60 170–180) · lorenz2023interpretable
128 +(REE 51(5) 1178–1208) · diewert2016tokyo (RSUE 60 300–315) · diewert2015decomposition (Econometric Reviews 34
129 +106–126) · diebold1995comparing (JBES 13(3) 253–263) · giacomini2006tests (Econometrica 74(6) 1545–1578) ·
130 +bergmeir2012crossvalidation (Information Sciences 191 192–213) · roberts2017crossvalidation (Ecography 40(8)
131 +913–929) · kuminoff2010which (JEEM 60(3) 145–160) · bishop2020best (REEP 14(2) 260–281) · bourassa2007spatial
132 +(JREFE 35(2) 143–160) · bourassa2003submarkets (JHE 12(1) 12–28) · goodman2003segmentation (JHE 12(3) 181–201) ·
133 +zurada2011comparison (JRER 33(3) 349–388) · antipov2012mass (ESWA 39(2) 1772–1778) · perezrave2019machine
134 +(J. Property Research 36(1) 59–96) · mccluskey2013prediction (JPR 30(4) 239–265) · schulz2014automated (JPR 31(2)
135 +131–153) · fik2003modeling (REE 31(4) 623–646) · clapp2003semiparametric (JREFE 27(3) 303–320) ·
136 +pace1998spatiotemporal (JREFE 17(1) 15–33) · dube2013pooled (LSRS 6(1) 1–18) · hill2009boom (JHE 18(3) 193–205) ·
137 +manning2001estimating (J. Health Econ. 20(4) 461–494) · thibodeau2003marking (REE 31(1) 1–22) ·
138 +khoshnoud2023evolution (JREL 31(1) 1–47).
139 +Total : 33 → **58** entrées (31 conservées + 27 ajoutées), toutes citées, toutes vérifiées.
140 +
141 +## 3. Réanalyses exécutées (laptop, Apple Silicon 18 cœurs, Python 3.14 / scikit-learn 1.6.1)
142 +
143 +| Script | Contenu | Durée | Sorties |
144 +|---|---|---|---|
145 +| `01_build_sample.py` | reconstruction de l'échantillon (+ clés `parcel`, `coord`) — 514 212 ventes identiques | 2 s | `data/processed/analysis.parquet` |
146 +| `02_horserace.py` | 20 modèles × 2 splits, règles médiane + Duan, prédictions sauvegardées | 3 min 28 s | `horserace_*.csv`, `boxcox.csv`, `predictions_*.parquet` (non commités) |
147 +| `03_extensions.py` | indices, profils, learning curves, segments (règle médiane) | 4 min 18 s | `index.csv`, `profiles.csv`, `learning.csv`, `segments.csv` |
148 +| `06_robustness.py` (nouveau) | bootstrap + DM, même période, par trimestre, fuite, re-nivellement, paires, splits groupés (2 courses complètes), FE emboîtés, Box–Cox fin, sensibilité HGB | 16 min 16 s | `inference_*.csv`, `same_period.csv`, `by_quarter.csv`, `leakage.csv`, `relevel.csv`, `pairs.csv`, `horserace_group_*.csv`, `nested_fe.csv`, `boxcox_fine.csv`, `hgb_sensitivity.csv` |
149 +| `04_make_figures.py` | 10 figures (+ `fig_horizon.png`) | < 1 min | `figures/` |
150 +| `05_make_tables.py` | 16 tables LaTeX (9 nouvelles) | < 1 s | `results/tables/` |
151 +
152 +Tous les nombres du texte proviennent de ces sorties ; aucune table n'est tapée à la main.
153 +
154 +## 4. Éléments non modifiés / analyses recommandées non exécutées
155 +- Modèle linéaire à surface spatiale (krigeage des résidus, splines bivariées en lat/lng, effets hiérarchiques
156 + bayésiens) : non estimé (hors cadre « 20 modèles ») — recommandé pour fermer l'écart linéaire/boosting par l'autre
157 + côté.
158 +- Holdout spatialement bloqué (cellules entières en test) : non exécuté (change la question en extrapolation
159 + spatiale ; les FE spatiaux y sont par construction inopérants).
160 +- Re-nivellement par un indice **publié** (hors échantillon, non oracle) : non exécuté (aucun indice externe
161 + chargé ; le re-nivellement présenté utilise le ratio médian du test, borne supérieure).
162 +- Variante « médiane calibrée » (exp(ẑ + médiane des résidus d'entraînement)) : discutée, non tabulée.
163 +- Fenêtres temporelles alternatives (p. ex. train < 2024, test 2024) : non exécutées — limite déclarée §8.4.
164 +- Comparaison avec LightGBM / XGBoost natifs ou réseaux de neurones : hors périmètre.
165 +- La règle de nettoyage des lots > P99.5 → 0 (héritée) est documentée mais conservée pour préserver l'échantillon.
added docs/REVIEW-REPORT.md +118 −0
@@ -0,0 +1,118 @@
1 +# Rapport de l'editorial board — WP 11 « Half a Million Prices, Twenty Models » (2026-10-17)
2 +
3 +Révision v1.0 (August 2026, 23 p.) → v1.1 (October 2026). Journal d'audit détaillé : `docs/CHANGELOG-REVISION.md`.
4 +Comité : économie immobilière, économétrie appliquée, économétrie spatiale, évaluation foncière, apprentissage
5 +automatique, édition scientifique. Revue cible : *Journal of Housing Economics* (repli JRER / IJF).
6 +
7 +## 1. Diagnostic général
8 +
9 +Le papier pose une question nette et utile — quels choix de spécification hédonique comptent réellement pour la
10 +précision hors échantillon — et y répond par un dispositif expérimental propre (un jeu d'attributs, quatre axes, un
11 +seul scoreboard, deux holdouts) sur un échantillon rare par sa taille et la qualité des descripteurs (rôle
12 +d'évaluation). La contribution est réelle et conservée. Trois faiblesses structurelles de la v1.0 ont été
13 +identifiées et corrigées :
14 +
15 +1. **Le résultat phare était un artefact.** Les modèles linéaires en log étaient retransformés par smearing de Duan
16 + et les ensembles d'arbres non. Dans le split temporel, le smearing (facteur ≈ 1.06) compense une partie de la
17 + staleness du niveau dans un marché haussier ; c'est ce qui produisait « A6 19.1 % vs D4 21.2 % » et le
18 + « renversement » affiché en abstract. Sous une règle uniforme, le boosting reste devant (21.2 vs 21.7, écart non
19 + significatif). Correction intégrale (code, tables, texte) ; la v1.1 le dit explicitement.
20 +2. **Aucune inférence.** Des différences de 0.2 à 0.6 point étaient interprétées comme des résultats. Ajout d'un
21 + bootstrap par grappes (municipalités) et de tests Diebold–Mariano/Giacomini–White groupés sur toutes les
22 + comparaisons. Plusieurs affirmations tombent (grille 5.5 km > municipalités ; mois ≈ trimestre) ou se précisent.
23 +3. **Mécanisme du « generalization gap » non identifié.** La v1.0 confondait difficulté de la période test et
24 + staleness du modèle. Décomposition ajoutée (même période, biais de niveau, re-nivellement, horizon par
25 + trimestre) : la compétence relative des ensembles transfère intacte (écart re-nivelé 2.9 pts ≈ 3.5 en random),
26 + c'est le niveau qui ne transfère pas, un peu plus pour les arbres (feuille terminale en t). Ce résultat est plus
27 + faible que le « renversement » mais plus utile et défendable.
28 +
29 +## 2. Diagnostic par section
30 +
31 +| Section | Forces | Faiblesses / erreurs trouvées | Action |
32 +|---|---|---|---|
33 +| Abstract | clair, chiffré | chiffres issus du scoreboard asymétrique ; « reverses », « identical R² » faux ; trop long pour la page 2 (débordait sur une page blanche) | réécrit, 4 leçons reformulées, mention de la correction |
34 +| 1 Introduction | bonne mise en situation Rosen → ML | « 13 % improvement » (vrai : 18 %) ; « 27.9 vs 17.5 » (comparait C1 à C3 au lieu du backbone) ; aucune mention de l'inférence ni des fuites | réécrit ; renvoi à la nouvelle §7 |
35 +| 2 Literature | couvre les trois courants | mince (33 réf., 29 citées) ; manquaient Hill–Scholz, Pace–Hayunga, Lorenz et al., Diewert–Shimizu, Kuminoff et al., DM/GW, Bergmeir–Benítez, Roberts et al., Dubé–Legros ; deux entrées non citées et défectueuses | +27 réf. vérifiées, −2 retirées ; Mayer et al. 2019 identifié comme antécédent direct (updating) |
36 +| 3 Data | cascade d'échantillon transparente | moyenne/médiane des prix fausses dans le texte (462k/399k vs 440k/397k) ; 86 ventes « other » omises ; nettoyage des lots > P99.5 non documenté ; bornes âge/étages non dites | corrigé ; répartition annuelle ; repeat sales et coordonnées partagées quantifiés |
37 +| 4 Methodology | design clair | aucune équation ; Duan non écrit ; inversion Box–Cox sans discussion du biais ; « clamped month counter » inexact (rien n'est écrêté ; arbres constants par morceaux) ; catégories non vues → référence arbitraire non dit ; hyper-paramètres « a priori » sans analyse | 13 équations ; règles médiane/moyenne ; carry-forward ; holdouts groupés ; inférence ; décomposition niveau/skill |
38 +| 5 Results | lecture par axe efficace | « seventeen K sales » (17) ; ordre A sous split temporel non discuté (A1 gagne par coïncidence de biais) ; différences non testées | réécrit avec IC/tests ; §5.5 refondue (décomposition) |
39 +| 6 Extensions | objets économiques pertinents | « all five agree within a few points » (indice GB −9 pts) ; « within a tenth of a log point » (0.10–0.13 systématique, profil plus plat) ; learning/segments chiffrés sous scoreboard asymétrique | affirmations ramenées aux chiffres ; mécanismes de l'écart d'indice discutés |
40 +| 7 Robustness | — (n'existait pas) | — | nouvelle section : retransformation, fuites, FE emboîtés, Box–Cox fin, hyper-paramètres HGB |
41 +| 8 Discussion | hiérarchie utile | liste à puces ; « the machines lose their edge » (faux) ; « 3–7 points » sans mécanisme | prose ; hiérarchie révisée ; mécanisme niveau vs skill ; implications réécrites |
42 +| 9 Conclusion | synthèse pratique | reprenait le renversement ; « within two points of the frontier in deployment » | réécrite |
43 +
44 +## 3. Méthodologie — verdict motivé (§3 du master prompt)
45 +
46 +- **Spécification justifiée** : oui, le design par axes est la force du papier ; la v1.1 le formalise (éq. 1–9).
47 +- **Hypothèses d'estimation explicites** : désormais oui (OLS via ridge α = 10⁻⁶, solution de norme minimale ;
48 + encodage one-hot avec référence ; splines : 6 nœuds uniformes, 8 fonctions de base ; RF/HGB : paramètres listés).
49 +- **Variables définies** : oui (notation unifiée §4.1 ; bornes et nettoyages §3.2).
50 +- **Effets fixes appropriés** : oui, avec la nuance majeure trouvée en révision : les FE fins doivent être emboîtés
51 + (C4′ 17.3 % = meilleure spécification linéaire ; C4 seule 21.0 %). Le repli « cellule de référence » pour les
52 + cellules non vues est désormais documenté et corrigé par l'emboîtement.
53 +- **Dépendance spatiale/temporelle** : traitée par l'inférence groupée (municipalités) et par les holdouts
54 + temporel, par parcelle et par bâtiment. Limite : pas de holdout bloqué spatialement (déclaré).
55 +- **Erreurs-types** : absentes en v1.0 → bootstrap par grappes + DM groupé (éq. 13). Le DM sur la perte APE teste la
56 + MAPE, pas la MdAPE ; le bootstrap couvre la médiane — distinction explicitée.
57 +- **Construction de l'échantillon transparente** : oui (cascade 745 119 → 514 212, reproduite à l'identique).
58 +- **Robustesse** : cinq analyses ajoutées (§7) ; toutes exécutées, aucune revendiquée sans sortie.
59 +- **Interprétation** : « 18 % improvement » = (17.6−14.4)/17.6 ; « ten points » = 28.8 − 19.2 ; profils en log-points.
60 +- **Significativité statistique vs économique** : distinguée systématiquement (ex. C3 vs C2, D2 vs A6, D4 vs A6
61 + forward : non significatifs ; D4 vs A6 random : −3.2 [−4.7, −1.9]).
62 +- **Langage causal** : aucun ; le papier est prédictif/descriptif.
63 +
64 +## 4. Résultats — incohérences trouvées et état des réanalyses
65 +
66 +- Toutes les incohérences texte/table de la v1.0 sont listées au CHANGELOG §1.1, 1.5, 1.8, 1.9, 1.11.
67 +- Nouveaux résultats (tous issus de `results/reproduced/*.csv`) :
68 + - Scoreboard uniforme (Tables 2–3) ; IC et tests (Tables 4–5) ; décomposition (Tables 8–9, Fig. 6) ;
69 + retransformation (Table 12) ; splits groupés (Table 13) ; vu/non vu (Table 14) ; FE emboîtés (Table 15) ;
70 + sensibilité HGB (Table 16) ; Box–Cox fin (texte §7.4).
71 + - Sensibilité HGB : quatre configurations alternatives (shallow, deep, régularisée, early stopping sur les 10 % derniers mois) donnent 14.3–14.7 % (random) et 21.2–21.6 % (forward) contre 14.4 / 21.2 pour le baseline ; le classement et la décomposition ne dépendent pas des hyper-paramètres fixés a priori.
72 +- Vérifications de cohérence finales : abstract ↔ §1 ↔ §5 ↔ §8–9 ↔ README ↔ tables (chiffres relus un à un après
73 + régénération des tables ; voir CHANGELOG §1.1 pour la liste ancien → nouveau).
74 +
75 +## 5. Littérature
76 +
77 +33 entrées en v1.0 → 58 en v1.1 ; 100 % vérifiées sur Crossref avec DOI (sauf LightGBM, actes NIPS non indexés,
78 +référence standard). 2 entrées retirées (non citées, défectueuses), 5 corrigées, 27 ajoutées et intégrées à
79 +l'argument (fonctionnelle : Kuminoff et al. 2010, Bishop et al. 2020, Khoshnoud et al. 2023 ; spatial : Pace et al.
80 +1998, Clapp 2003, Fik et al. 2003, Bourassa et al. 2003/2007, Goodman–Thibodeau 2003, Pace–Hayunga 2020,
81 +Dubé–Legros 2013 ; indices : Hill et al. 2009, Hill–Scholz 2018, Diewert et al. 2015, Diewert–Shimizu 2016 ;
82 +ML/AVM : Zurada et al. 2011, Antipov–Pokryshevskaya 2012, McCluskey et al. 2013, Schulz et al. 2014, Pérez-Rave et al.
83 +2019, Lorenz et al. 2023, Thibodeau 2003 ; validation : Diebold–Mariano 1995, Giacomini–White 2006,
84 +Bergmeir–Benítez 2012, Roberts et al. 2017 ; retransformation : Manning–Mullahy 2001).
85 +
86 +## 6. Limites restantes
87 +
88 +1. Un seul régime temporel testé (reprise 2025-26, +15 % en 18 mois) ; l'ordre des coûts de staleness entre
89 + familles pourrait différer dans un marché plat ou baissier.
90 +2. Le re-nivellement utilise le ratio médian du test (oracle) : borne supérieure de ce qu'un indice publié
91 + permettrait.
92 +3. Pas de modèle linéaire à surface spatiale continue (krigeage, splines bivariées) ni d'effets hiérarchiques
93 + proprement estimés ; l'emboîtement C4′ est un pooling partiel implicite (norme minimale), pas un modèle
94 + hiérarchique explicite.
95 +4. Les holdouts groupés neutralisent reventes et bâtiments partagés, pas le voisinage immédiat.
96 +5. Attributs du rôle seulement (pas de qualité intérieure, texte d'annonce, photos) ; l'avantage ML mesuré est celui
97 + de la flexibilité spatiale sur cet ensemble d'attributs.
98 +6. La règle « lots > P99.5 → 0 » héritée du pipeline est documentée mais discutable.
99 +7. Longueur : 40 pages avec 16 tables et 10 figures ; pour la soumission, les Tables 4–5, 12–16 iraient en annexe.
100 +
101 +## 7. Analyses recommandées non exécutées
102 +
103 +Voir CHANGELOG §4 : surface spatiale linéaire (krigeage / splines lat-lng / hiérarchique bayésien) ; holdout bloqué
104 +spatialement ; re-nivellement par indice externe ; fenêtres temporelles alternatives (rolling origin) ; variante
105 +« médiane calibrée » ; LightGBM/XGBoost natifs et réseaux de neurones ; coût de retraining mensuel (course
106 +glissante) — cette dernière est la plus importante pour la revue cible.
107 +
108 +## 8. Maturité pour publication
109 +
110 +- **Verdict** : manuscrit désormais défendable en revue (JHE) sous réserve d'une coupe (annexes) et, idéalement, d'une
111 + course glissante (retraining mensuel) qui transformerait la §5.5 en recommandation opérationnelle chiffrée.
112 +- **Risques de rejet** : (i) « un seul marché, une seule période » — mitigé par l'échelle provinciale et la
113 + décomposition ; (ii) absence d'un modèle linéaire spatialement sophistiqué comme concurrent (un rapporteur
114 + spatial le demandera) ; (iii) la correction d'un résultat phare publié en v1.0 sur SSRN doit être assumée
115 + explicitement (fait dans l'abstract et §7.1) — c'est un point d'intégrité, pas une faiblesse.
116 +- **Points forts pour la revue** : taille et qualité des données, design expérimental, inférence complète,
117 + décomposition niveau/compétence inédite dans la littérature AVM, résultat « hierarchy, not coarseness » sur les FE
118 + spatiaux.
modified figures/fig_forms.png +0 −0

Binary file not shown.

modified figures/fig_generalization.png +0 −0

Binary file not shown.

added figures/fig_horizon.png +0 −0

Binary file not shown.

modified figures/fig_learning.png +0 −0

Binary file not shown.

modified figures/fig_methods.png +0 −0

Binary file not shown.

modified figures/fig_segments.png +0 −0

Binary file not shown.

modified figures/fig_space.png +0 −0

Binary file not shown.

modified figures/fig_time.png +0 −0

Binary file not shown.

modified paper/main.pdf +0 −0

Binary file not shown.

modified paper/main.tex +41 −30
@@ -48,6 +48,11 @@
48 48 \usepackage{enumitem}
49 49 \setlist{nosep,leftmargin=*}
50 50
51 +% Float placement: let text and floats share pages
52 +\setcounter{topnumber}{3}\setcounter{bottomnumber}{2}\setcounter{totalnumber}{4}
53 +\renewcommand{\topfraction}{0.9}\renewcommand{\bottomfraction}{0.6}
54 +\renewcommand{\textfraction}{0.08}\renewcommand{\floatpagefraction}{0.5}
55 +
51 56 % ============================================================================
52 57 % METADATA
53 58 % ============================================================================
@@ -55,9 +60,9 @@
55 60 \newcommand{\WPtitle}{Half a Million Prices, Twenty Models}
56 61 \newcommand{\WPsubtitle}{A Systematic Assessment of Hedonic Specifications and
57 62 Estimation Methods for the Quebec Housing Market, 2021--2026}
58 −\newcommand{\WPdate}{August 2026}
59 −\newcommand{\WPversion}{1.0}
60 −\newcommand{\WPkeywords}{hedonic pricing, functional form, house price indexes, machine learning, automated valuation, out-of-sample prediction}
63 +\newcommand{\WPdate}{October 2026}
64 +\newcommand{\WPversion}{1.1}
65 +\newcommand{\WPkeywords}{hedonic price function, functional form, spatial fixed effects, machine learning, automated valuation model, forward-in-time holdout, house price index}
61 66 \newcommand{\WPjel}{R31, C21, C52, C53}
62 67
63 68 \newcommand{\WPauthor}{Simon-Pierre Boucher}
@@ -68,34 +73,39 @@
68 73 283, boulevard Alexandre-Tach\'e\\ Gatineau, Qu\'ebec, Canada J9A 1L8}
69 74
70 75 \newcommand{\WPabstract}{%
71 −Fifty years after \mbox{Rosen (1974)}, applied hedonic practice still rests
72 −on a series of specification choices --- functional form, temporal controls,
73 −spatial controls, estimation method --- that are usually made by convention
74 −and rarely stress-tested jointly. Using 514{,}212 Quebec residential sales
76 +Fifty years after \mbox{Rosen (1974)}, applied hedonic practice still
77 +rests on specification choices---functional form, temporal controls,
78 +spatial controls, estimation method---that are made by convention and
79 +rarely stress-tested jointly. Using 514{,}212 Quebec residential sales
75 80 (2021--2026) whose structural descriptors come from the provincial
76 81 assessment roll, we run a controlled horse race of twenty hedonic models
77 −organised along those four axes, scoring every model on identical holdouts
78 −and on the same price-level scoreboard (log models are Duan-retransformed,
79 −Box--Cox inverted). Four lessons emerge. (1)~Functional form is a
80 −second-order choice: from linear to splines, the median absolute error
81 −spans 16.5--18.6\%, and the data-driven Box--Cox exponent
82 −($\hat\lambda=0.25$) buys nothing out of sample. (2)~Controls are
83 −first-order: dropping spatial fixed effects costs ten error points ---
84 −location granularity matters far more than curvature, but only up to the
85 −point where cells thin out (a $\sim$1~km grid \emph{overfits}).
86 −(3)~Under random validation, estimation method matters most: gradient
87 −boosting reaches 14.4\% --- a 13\% improvement over the best linear model
88 −--- with random forests close behind, and coordinates alone reproduce
89 −what thousands of dummies buy. (4)~But the ranking is an artifact of the
90 −split: under a forward-in-time holdout (train $<$~2025, test 2025--26)
91 −every model degrades and the machine-learning advantage \emph{reverses}
92 −--- the spline hedonic posts a lower median error than gradient boosting
93 −and an identical log-scale $R^2$ --- a stark warning against evaluating
94 −valuation models with random cross-validation alone. Constant-quality
95 −monthly indices implied by the competing forms agree to within a few
96 −index points, and the boosted model's implicit age and floor-area
97 −profiles track the quadratic OLS closely --- interpretation and
98 −prediction disagree less than the random-validation gap suggests.}
82 +organised along those four axes, scoring every model on identical
83 +holdouts and on the same price-level scoreboard with a single
84 +retransformation rule, with a municipality-clustered bootstrap interval
85 +and a Diebold--Mariano-type test on every comparison. Four lessons
86 +emerge. (1)~Functional form is second-order: from linear to splines the
87 +median absolute error spans 17.6--19.2\%, and the data-driven Box--Cox
88 +exponent gains half a point. (2)~Controls are first-order: dropping
89 +spatial fixed effects costs ten error points; a $\sim$1~km grid used
90 +alone overfits, but nested within municipalities it becomes the most
91 +accurate linear specification---the bias--variance trade-off in
92 +absorbing location is resolved by hierarchy, not coarseness. (3)~Under
93 +random validation the estimation method dominates: gradient boosting
94 +reaches 14.4\%, an 18\% improvement over the best linear model
95 +(95\% interval 1.9--4.7 points) that survives holdouts grouped by parcel
96 +and by building and comes almost entirely from a flexible surface over
97 +space. (4)~Under a forward-in-time holdout (train $<$~2025, test
98 +2025--26) every model degrades and the gap shrinks to half a point and
99 +to insignificance. Decomposing the error shows that relative pricing
100 +skill transfers forward intact (re-levelled, boosting leads by 2.9
101 +points) while every frozen model under-prices the typical future sale
102 +by 10--20\%, the ensembles slightly more. Random cross-validation hides
103 +this staleness cost; it does not, as a previous version of this paper
104 +claimed on the basis of an asymmetric retransformation, reverse the
105 +ranking. Constant-quality indices agree across functional forms to
106 +within 2.5 points but a boosted imputation index rises nine points less,
107 +and the boosted model's implicit age and area profiles share the shape
108 +of the quadratic OLS gradients with a milder depreciation path.}
99 109
100 110 \hypersetup{pdftitle={Half a Million Prices, Twenty Models}, pdfauthor={Simon-Pierre Boucher}}
101 111
@@ -113,10 +123,11 @@ prediction disagree less than the random-validation gap suggests.}
113 123 \input{sections/methodology}
114 124 \input{sections/results}
115 125 \input{sections/extensions}
126 +\input{sections/robustness}
116 127 \input{sections/discussion}
117 128 \input{sections/conclusion}
118 129
119 −\newpage
130 +\clearpage
120 131 \bibliography{references}
121 132
122 133 \end{document}
modified paper/main_anon.pdf +0 −0

Binary file not shown.

modified paper/main_anon.tex +41 −30
@@ -48,6 +48,11 @@
48 48 \usepackage{enumitem}
49 49 \setlist{nosep,leftmargin=*}
50 50
51 +% Float placement: let text and floats share pages
52 +\setcounter{topnumber}{3}\setcounter{bottomnumber}{2}\setcounter{totalnumber}{4}
53 +\renewcommand{\topfraction}{0.9}\renewcommand{\bottomfraction}{0.6}
54 +\renewcommand{\textfraction}{0.08}\renewcommand{\floatpagefraction}{0.5}
55 +
51 56 % ============================================================================
52 57 % METADATA
53 58 % ============================================================================
@@ -55,9 +60,9 @@
55 60 \newcommand{\WPtitle}{Half a Million Prices, Twenty Models}
56 61 \newcommand{\WPsubtitle}{A Systematic Assessment of Hedonic Specifications and
57 62 Estimation Methods for the Quebec Housing Market, 2021--2026}
58 −\newcommand{\WPdate}{August 2026}
59 −\newcommand{\WPversion}{1.0}
60 −\newcommand{\WPkeywords}{hedonic pricing, functional form, house price indexes, machine learning, automated valuation, out-of-sample prediction}
63 +\newcommand{\WPdate}{October 2026}
64 +\newcommand{\WPversion}{1.1}
65 +\newcommand{\WPkeywords}{hedonic price function, functional form, spatial fixed effects, machine learning, automated valuation model, forward-in-time holdout, house price index}
61 66 \newcommand{\WPjel}{R31, C21, C52, C53}
62 67
63 68 \newcommand{\WPauthor}{Simon-Pierre Boucher}
@@ -68,34 +73,39 @@
68 73 283, boulevard Alexandre-Tach\'e\\ Gatineau, Qu\'ebec, Canada J9A 1L8}
69 74
70 75 \newcommand{\WPabstract}{%
71 −Fifty years after \mbox{Rosen (1974)}, applied hedonic practice still rests
72 −on a series of specification choices --- functional form, temporal controls,
73 −spatial controls, estimation method --- that are usually made by convention
74 −and rarely stress-tested jointly. Using 514{,}212 Quebec residential sales
76 +Fifty years after \mbox{Rosen (1974)}, applied hedonic practice still
77 +rests on specification choices---functional form, temporal controls,
78 +spatial controls, estimation method---that are made by convention and
79 +rarely stress-tested jointly. Using 514{,}212 Quebec residential sales
75 80 (2021--2026) whose structural descriptors come from the provincial
76 81 assessment roll, we run a controlled horse race of twenty hedonic models
77 −organised along those four axes, scoring every model on identical holdouts
78 −and on the same price-level scoreboard (log models are Duan-retransformed,
79 −Box--Cox inverted). Four lessons emerge. (1)~Functional form is a
80 −second-order choice: from linear to splines, the median absolute error
81 −spans 16.5--18.6\%, and the data-driven Box--Cox exponent
82 −($\hat\lambda=0.25$) buys nothing out of sample. (2)~Controls are
83 −first-order: dropping spatial fixed effects costs ten error points ---
84 −location granularity matters far more than curvature, but only up to the
85 −point where cells thin out (a $\sim$1~km grid \emph{overfits}).
86 −(3)~Under random validation, estimation method matters most: gradient
87 −boosting reaches 14.4\% --- a 13\% improvement over the best linear model
88 −--- with random forests close behind, and coordinates alone reproduce
89 −what thousands of dummies buy. (4)~But the ranking is an artifact of the
90 −split: under a forward-in-time holdout (train $<$~2025, test 2025--26)
91 −every model degrades and the machine-learning advantage \emph{reverses}
92 −--- the spline hedonic posts a lower median error than gradient boosting
93 −and an identical log-scale $R^2$ --- a stark warning against evaluating
94 −valuation models with random cross-validation alone. Constant-quality
95 −monthly indices implied by the competing forms agree to within a few
96 −index points, and the boosted model's implicit age and floor-area
97 −profiles track the quadratic OLS closely --- interpretation and
98 −prediction disagree less than the random-validation gap suggests.}
82 +organised along those four axes, scoring every model on identical
83 +holdouts and on the same price-level scoreboard with a single
84 +retransformation rule, with a municipality-clustered bootstrap interval
85 +and a Diebold--Mariano-type test on every comparison. Four lessons
86 +emerge. (1)~Functional form is second-order: from linear to splines the
87 +median absolute error spans 17.6--19.2\%, and the data-driven Box--Cox
88 +exponent gains half a point. (2)~Controls are first-order: dropping
89 +spatial fixed effects costs ten error points; a $\sim$1~km grid used
90 +alone overfits, but nested within municipalities it becomes the most
91 +accurate linear specification---the bias--variance trade-off in
92 +absorbing location is resolved by hierarchy, not coarseness. (3)~Under
93 +random validation the estimation method dominates: gradient boosting
94 +reaches 14.4\%, an 18\% improvement over the best linear model
95 +(95\% interval 1.9--4.7 points) that survives holdouts grouped by parcel
96 +and by building and comes almost entirely from a flexible surface over
97 +space. (4)~Under a forward-in-time holdout (train $<$~2025, test
98 +2025--26) every model degrades and the gap shrinks to half a point and
99 +to insignificance. Decomposing the error shows that relative pricing
100 +skill transfers forward intact (re-levelled, boosting leads by 2.9
101 +points) while every frozen model under-prices the typical future sale
102 +by 10--20\%, the ensembles slightly more. Random cross-validation hides
103 +this staleness cost; it does not, as a previous version of this paper
104 +claimed on the basis of an asymmetric retransformation, reverse the
105 +ranking. Constant-quality indices agree across functional forms to
106 +within 2.5 points but a boosted imputation index rises nine points less,
107 +and the boosted model's implicit age and area profiles share the shape
108 +of the quadratic OLS gradients with a milder depreciation path.}
99 109
100 110 \hypersetup{pdftitle={Half a Million Prices, Twenty Models}, pdfauthor={}}
101 111
@@ -113,10 +123,11 @@ prediction disagree less than the random-validation gap suggests.}
113 123 \input{sections/methodology}
114 124 \input{sections/results}
115 125 \input{sections/extensions}
126 +\input{sections/robustness}
116 127 \input{sections/discussion}
117 128 \input{sections/conclusion}
118 129
119 −\newpage
130 +\clearpage
120 131 \bibliography{references}
121 132
122 133 \end{document}
modified paper/references.bib +371 −60
@@ -7,7 +7,8 @@
7 7 year = {1974},
8 8 volume = {82},
9 9 number = {1},
10 − pages = {34--55}
10 + pages = {34--55},
11 + doi = {10.1086/260169}
11 12 }
12 13
13 14 @article{halvorsen1981choice,
@@ -17,7 +18,8 @@
17 18 year = {1981},
18 19 volume = {10},
19 20 number = {1},
20 − pages = {37--49}
21 + pages = {37--49},
22 + doi = {10.1016/0094-1190(81)90021-8}
21 23 }
22 24
23 25 @article{cassel1985cost,
@@ -27,7 +29,8 @@
27 29 year = {1985},
28 30 volume = {18},
29 31 number = {2},
30 − pages = {135--142}
32 + pages = {135--142},
33 + doi = {10.1016/0094-1190(85)90012-9}
31 34 }
32 35
33 36 @article{cropper1988choice,
@@ -37,7 +40,8 @@
37 40 year = {1988},
38 41 volume = {70},
39 42 number = {4},
40 − pages = {668--675}
43 + pages = {668--675},
44 + doi = {10.2307/1935831}
41 45 }
42 46
43 47 @article{box1964analysis,
@@ -47,7 +51,8 @@
47 51 year = {1964},
48 52 volume = {26},
49 53 number = {2},
50 − pages = {211--252}
54 + pages = {211--243},
55 + doi = {10.1111/j.2517-6161.1964.tb00553.x}
51 56 }
52 57
53 58 @incollection{malpezzi2003hedonic,
@@ -58,7 +63,8 @@
58 63 publisher = {Blackwell},
59 64 address = {Oxford},
60 65 year = {2003},
61 − pages = {67--89}
66 + pages = {67--89},
67 + doi = {10.1002/9780470690680.ch5}
62 68 }
63 69
64 70 @article{sirmans2005composition,
@@ -68,7 +74,8 @@
68 74 year = {2005},
69 75 volume = {13},
70 76 number = {1},
71 − pages = {1--44}
77 + pages = {1--44},
78 + doi = {10.1080/10835547.2005.12090154}
72 79 }
73 80
74 81 @article{duan1983smearing,
@@ -78,7 +85,8 @@
78 85 year = {1983},
79 86 volume = {78},
80 87 number = {383},
81 − pages = {605--610}
88 + pages = {605--610},
89 + doi = {10.1080/01621459.1983.10478017}
82 90 }
83 91
84 92 @article{goodman1998housing,
@@ -88,7 +96,8 @@
88 96 year = {1998},
89 97 volume = {7},
90 98 number = {2},
91 − pages = {121--143}
99 + pages = {121--143},
100 + doi = {10.1006/jhec.1998.0229}
92 101 }
93 102
94 103 @article{dubin1998spatial,
@@ -98,7 +107,8 @@
98 107 year = {1998},
99 108 volume = {7},
100 109 number = {4},
101 − pages = {304--327}
110 + pages = {304--327},
111 + doi = {10.1006/jhec.1998.0236}
102 112 }
103 113
104 114 @book{anselin1988spatial,
@@ -106,7 +116,8 @@
106 116 title = {Spatial Econometrics: Methods and Models},
107 117 publisher = {Kluwer Academic},
108 118 address = {Dordrecht},
109 − year = {1988}
119 + year = {1988},
120 + doi = {10.1007/978-94-015-7799-1}
110 121 }
111 122
112 123 @article{hill2013hedonic,
@@ -116,25 +127,19 @@
116 127 year = {2013},
117 128 volume = {27},
118 129 number = {5},
119 − pages = {879--914}
130 + pages = {879--914},
131 + doi = {10.1111/j.1467-6419.2012.00731.x}
120 132 }
121 133
122 −@article{silver2018house,
123 − author = {Silver, Mick},
124 − title = {How to Measure Hedonic Property Price Indexes Better},
125 − journal = {EURONA — Eurostat Review on National Accounts and Macroeconomic Indicators},
126 − year = {2018},
127 − volume = {1},
128 − pages = {35--66}
129 −}
130 −
131 −@article{diewert2004hedonic,
132 − author = {Diewert, W. Erwin},
133 − title = {Hedonic Regressions: A Review of Some Unresolved Issues},
134 − journal = {Mimeo, University of British Columbia},
135 − year = {2004},
136 − volume = {},
137 − pages = {}
134 +@techreport{silver2018house,
135 + author = {Silver, Mick},
136 + title = {How to Better Measure Hedonic Residential Property Price Indexes},
137 + institution = {International Monetary Fund},
138 + type = {IMF Working Paper},
139 + number = {16/213},
140 + address = {Washington, DC},
141 + year = {2016},
142 + doi = {10.5089/9781475552249.001}
138 143 }
139 144
140 145 @article{mullainathan2017machine,
@@ -144,7 +149,8 @@
144 149 year = {2017},
145 150 volume = {31},
146 151 number = {2},
147 − pages = {87--106}
152 + pages = {87--106},
153 + doi = {10.1257/jep.31.2.87}
148 154 }
149 155
150 156 @article{athey2019machine,
@@ -153,7 +159,8 @@
153 159 journal = {Annual Review of Economics},
154 160 year = {2019},
155 161 volume = {11},
156 − pages = {685--725}
162 + pages = {685--725},
163 + doi = {10.1146/annurev-economics-080217-053433}
157 164 }
158 165
159 166 @article{breiman2001random,
@@ -163,7 +170,8 @@
163 170 year = {2001},
164 171 volume = {45},
165 172 number = {1},
166 − pages = {5--32}
173 + pages = {5--32},
174 + doi = {10.1023/A:1010933404324}
167 175 }
168 176
169 177 @article{friedman2001greedy,
@@ -173,16 +181,18 @@
173 181 year = {2001},
174 182 volume = {29},
175 183 number = {5},
176 − pages = {1189--1232}
184 + pages = {1189--1232},
185 + doi = {10.1214/aos/1013203451}
177 186 }
178 187
179 −@article{ke2017lightgbm,
180 − author = {Ke, Guolin and Meng, Qi and Finley, Thomas and Wang, Taifeng and Chen, Wei and Ma, Weidong and Ye, Qiwei and Liu, Tie-Yan},
181 − title = {{LightGBM}: A Highly Efficient Gradient Boosting Decision Tree},
182 − journal = {Advances in Neural Information Processing Systems},
183 − year = {2017},
184 − volume = {30},
185 − pages = {3146--3154}
188 +@inproceedings{ke2017lightgbm,
189 + author = {Ke, Guolin and Meng, Qi and Finley, Thomas and Wang, Taifeng and Chen, Wei and Ma, Weidong and Ye, Qiwei and Liu, Tie-Yan},
190 + title = {{LightGBM}: A Highly Efficient Gradient Boosting Decision Tree},
191 + booktitle = {Advances in Neural Information Processing Systems 30 (NIPS 2017)},
192 + editor = {Guyon, I. and Von Luxburg, U. and Bengio, S. and Wallach, H. and Fergus, R. and Vishwanathan, S. and Garnett, R.},
193 + publisher = {Curran Associates},
194 + year = {2017},
195 + pages = {3146--3154}
186 196 }
187 197
188 198 @article{mayer2019estimation,
@@ -192,7 +202,8 @@
192 202 year = {2019},
193 203 volume = {12},
194 204 number = {1},
195 − pages = {134--150}
205 + pages = {134--150},
206 + doi = {10.1108/JERER-08-2018-0035}
196 207 }
197 208
198 209 @article{bogin2020house,
@@ -201,8 +212,9 @@
201 212 journal = {Journal of Real Estate Finance and Economics},
202 213 year = {2020},
203 214 volume = {60},
204 − number = {1},
205 − pages = {40--52}
215 + number = {1--2},
216 + pages = {40--52},
217 + doi = {10.1007/s11146-019-09712-0}
206 218 }
207 219
208 220 @article{steurer2021metrics,
@@ -212,7 +224,8 @@
212 224 year = {2021},
213 225 volume = {38},
214 226 number = {2},
215 − pages = {99--129}
227 + pages = {99--129},
228 + doi = {10.1080/09599916.2020.1858937}
216 229 }
217 230
218 231 @article{pace1997spatial,
@@ -222,7 +235,8 @@
222 235 year = {1997},
223 236 volume = {14},
224 237 number = {3},
225 − pages = {333--340}
238 + pages = {333--340},
239 + doi = {10.1023/A:1007762613901}
226 240 }
227 241
228 242 @article{case2004modeling,
@@ -232,7 +246,8 @@
232 246 year = {2004},
233 247 volume = {29},
234 248 number = {2},
235 − pages = {167--191}
249 + pages = {167--191},
250 + doi = {10.1023/B:REAL.0000035309.60607.53}
236 251 }
237 252
238 253 @article{bourassa2010predicting,
@@ -242,7 +257,8 @@
242 257 year = {2010},
243 258 volume = {32},
244 259 number = {2},
245 − pages = {139--159}
260 + pages = {139--159},
261 + doi = {10.1080/10835547.2010.12091276}
246 262 }
247 263
248 264 @article{desrosiers2000hedonic,
@@ -252,7 +268,8 @@
252 268 year = {2000},
253 269 volume = {18},
254 270 number = {3},
255 − pages = {291--315}
271 + pages = {291--315},
272 + doi = {10.1108/14635780010338245}
256 273 }
257 274
258 275 @article{gencay1996nonlinear,
@@ -262,7 +279,8 @@
262 279 year = {1996},
263 280 volume = {52},
264 281 number = {2},
265 − pages = {129--135}
282 + pages = {129--135},
283 + doi = {10.1016/S0165-1765(96)00851-8}
266 284 }
267 285
268 286 @article{kok2017big,
@@ -272,7 +290,8 @@
272 290 year = {2017},
273 291 volume = {43},
274 292 number = {6},
275 − pages = {202--211}
293 + pages = {202--211},
294 + doi = {10.3905/jpm.2017.43.6.202}
276 295 }
277 296
278 297 @article{hong2020machine,
@@ -282,16 +301,8 @@
282 301 year = {2020},
283 302 volume = {24},
284 303 number = {3},
285 − pages = {140--152}
286 −}
287 −
288 −@article{knight2003listing,
289 − author = {Knight, John R.},
290 − title = {Hedonic Modeling of the Home Selling Process},
291 − journal = {Journal of Real Estate Finance and Economics},
292 − year = {2003},
293 − volume = {},
294 − pages = {}
304 + pages = {140--152},
305 + doi = {10.3846/ijspm.2020.11544}
295 306 }
296 307
297 308 @book{iaao2013standard,
@@ -309,7 +320,8 @@
309 320 year = {2002},
310 321 volume = {24},
311 322 number = {1},
312 − pages = {1--26}
323 + pages = {1--26},
324 + doi = {10.1080/10835547.2002.12091087}
313 325 }
314 326
315 327 @techreport{oecd2013handbook,
@@ -319,3 +331,302 @@
319 331 address = {Luxembourg},
320 332 year = {2013}
321 333 }
334 +
335 +% ---------------------------------------------------------------------------
336 +% References added in the 2026-10-17 revision (all verified on Crossref)
337 +% ---------------------------------------------------------------------------
338 +
339 +@article{hill2018geospatial,
340 + author = {Hill, Robert J. and Scholz, Michael},
341 + title = {Can Geospatial Data Improve House Price Indexes? {A} Hedonic Imputation Approach with Splines},
342 + journal = {Review of Income and Wealth},
343 + year = {2018},
344 + volume = {64},
345 + number = {4},
346 + pages = {737--756},
347 + doi = {10.1111/roiw.12303}
348 +}
349 +
350 +@article{pace2020residuals,
351 + author = {Pace, R. Kelley and Hayunga, Darren},
352 + title = {Examining the Information Content of Residuals from Hedonic and Spatial Models Using Trees and Forests},
353 + journal = {Journal of Real Estate Finance and Economics},
354 + year = {2020},
355 + volume = {60},
356 + number = {1--2},
357 + pages = {170--180},
358 + doi = {10.1007/s11146-019-09724-w}
359 +}
360 +
361 +@article{lorenz2023interpretable,
362 + author = {Lorenz, Felix and Willwersch, Jonas and Cajias, Marcelo and Fuerst, Franz},
363 + title = {Interpretable Machine Learning for Real Estate Market Analysis},
364 + journal = {Real Estate Economics},
365 + year = {2023},
366 + volume = {51},
367 + number = {5},
368 + pages = {1178--1208},
369 + doi = {10.1111/1540-6229.12397}
370 +}
371 +
372 +@article{diewert2016tokyo,
373 + author = {Diewert, W. Erwin and Shimizu, Chihiro},
374 + title = {Hedonic Regression Models for {Tokyo} Condominium Sales},
375 + journal = {Regional Science and Urban Economics},
376 + year = {2016},
377 + volume = {60},
378 + pages = {300--315},
379 + doi = {10.1016/j.regsciurbeco.2016.08.002}
380 +}
381 +
382 +@article{diewert2015decomposition,
383 + author = {Diewert, W. Erwin and de Haan, Jan and Hendriks, Rens},
384 + title = {Hedonic Regressions and the Decomposition of a House Price Index into Land and Structure Components},
385 + journal = {Econometric Reviews},
386 + year = {2015},
387 + volume = {34},
388 + number = {1--2},
389 + pages = {106--126},
390 + doi = {10.1080/07474938.2014.944791}
391 +}
392 +
393 +@article{diebold1995comparing,
394 + author = {Diebold, Francis X. and Mariano, Roberto S.},
395 + title = {Comparing Predictive Accuracy},
396 + journal = {Journal of Business \& Economic Statistics},
397 + year = {1995},
398 + volume = {13},
399 + number = {3},
400 + pages = {253--263},
401 + doi = {10.1080/07350015.1995.10524599}
402 +}
403 +
404 +@article{giacomini2006tests,
405 + author = {Giacomini, Raffaella and White, Halbert},
406 + title = {Tests of Conditional Predictive Ability},
407 + journal = {Econometrica},
408 + year = {2006},
409 + volume = {74},
410 + number = {6},
411 + pages = {1545--1578},
412 + doi = {10.1111/j.1468-0262.2006.00718.x}
413 +}
414 +
415 +@article{bergmeir2012crossvalidation,
416 + author = {Bergmeir, Christoph and Ben{\'i}tez, Jos{\'e} M.},
417 + title = {On the Use of Cross-Validation for Time Series Predictor Evaluation},
418 + journal = {Information Sciences},
419 + year = {2012},
420 + volume = {191},
421 + pages = {192--213},
422 + doi = {10.1016/j.ins.2011.12.028}
423 +}
424 +
425 +@article{roberts2017crossvalidation,
426 + author = {Roberts, David R. and Bahn, Volker and Ciuti, Simone and Boyce, Mark S. and Elith, Jane and Guillera-Arroita, Gurutzeta and Hauenstein, Severin and Lahoz-Monfort, Jos{\'e} J. and Schr{\"o}der, Boris and Thuiller, Wilfried and Warton, David I. and Wintle, Brendan A. and Hartig, Florian and Dormann, Carsten F.},
427 + title = {Cross-Validation Strategies for Data with Temporal, Spatial, Hierarchical, or Phylogenetic Structure},
428 + journal = {Ecography},
429 + year = {2017},
430 + volume = {40},
431 + number = {8},
432 + pages = {913--929},
433 + doi = {10.1111/ecog.02881}
434 +}
435 +
436 +@article{kuminoff2010which,
437 + author = {Kuminoff, Nicolai V. and Parmeter, Christopher F. and Pope, Jaren C.},
438 + title = {Which Hedonic Models Can We Trust to Recover the Marginal Willingness to Pay for Environmental Amenities?},
439 + journal = {Journal of Environmental Economics and Management},
440 + year = {2010},
441 + volume = {60},
442 + number = {3},
443 + pages = {145--160},
444 + doi = {10.1016/j.jeem.2010.06.001}
445 +}
446 +
447 +@article{bishop2020best,
448 + author = {Bishop, Kelly C. and Kuminoff, Nicolai V. and Banzhaf, H. Spencer and Boyle, Kevin J. and von Gravenitz, Kathrine and Pope, Jaren C. and Smith, V. Kerry and Timmins, Christopher D.},
449 + title = {Best Practices for Using Hedonic Property Value Models to Measure Willingness to Pay for Environmental Quality},
450 + journal = {Review of Environmental Economics and Policy},
451 + year = {2020},
452 + volume = {14},
453 + number = {2},
454 + pages = {260--281},
455 + doi = {10.1093/reep/reaa001}
456 +}
457 +
458 +@article{bourassa2007spatial,
459 + author = {Bourassa, Steven C. and Cantoni, Eva and Hoesli, Martin},
460 + title = {Spatial Dependence, Housing Submarkets, and House Price Prediction},
461 + journal = {Journal of Real Estate Finance and Economics},
462 + year = {2007},
463 + volume = {35},
464 + number = {2},
465 + pages = {143--160},
466 + doi = {10.1007/s11146-007-9036-8}
467 +}
468 +
469 +@article{bourassa2003submarkets,
470 + author = {Bourassa, Steven C. and Hoesli, Martin and Peng, Vincent S.},
471 + title = {Do Housing Submarkets Really Matter?},
472 + journal = {Journal of Housing Economics},
473 + year = {2003},
474 + volume = {12},
475 + number = {1},
476 + pages = {12--28},
477 + doi = {10.1016/S1051-1377(03)00003-2}
478 +}
479 +
480 +@article{goodman2003segmentation,
481 + author = {Goodman, Allen C. and Thibodeau, Thomas G.},
482 + title = {Housing Market Segmentation and Hedonic Prediction Accuracy},
483 + journal = {Journal of Housing Economics},
484 + year = {2003},
485 + volume = {12},
486 + number = {3},
487 + pages = {181--201},
488 + doi = {10.1016/S1051-1377(03)00031-7}
489 +}
490 +
491 +@article{zurada2011comparison,
492 + author = {Zurada, Jozef and Levitan, Alan S. and Guan, Jian},
493 + title = {A Comparison of Regression and Artificial Intelligence Methods in a Mass Appraisal Context},
494 + journal = {Journal of Real Estate Research},
495 + year = {2011},
496 + volume = {33},
497 + number = {3},
498 + pages = {349--388},
499 + doi = {10.1080/10835547.2011.12091311}
500 +}
501 +
502 +@article{antipov2012mass,
503 + author = {Antipov, Evgeny A. and Pokryshevskaya, Elena B.},
504 + title = {Mass Appraisal of Residential Apartments: An Application of Random Forest for Valuation and a {CART}-Based Approach for Model Diagnostics},
505 + journal = {Expert Systems with Applications},
506 + year = {2012},
507 + volume = {39},
508 + number = {2},
509 + pages = {1772--1778},
510 + doi = {10.1016/j.eswa.2011.08.077}
511 +}
512 +
513 +@article{perezrave2019machine,
514 + author = {P{\'e}rez-Rave, Jorge Iv{\'a}n and Correa-Morales, Juan Carlos and Gonz{\'a}lez-Echavarr{\'i}a, Favi{\'a}n},
515 + title = {A Machine Learning Approach to Big Data Regression Analysis of Real Estate Prices for Inferential and Predictive Purposes},
516 + journal = {Journal of Property Research},
517 + year = {2019},
518 + volume = {36},
519 + number = {1},
520 + pages = {59--96},
521 + doi = {10.1080/09599916.2019.1587489}
522 +}
523 +
524 +@article{mccluskey2013prediction,
525 + author = {McCluskey, William J. and McCord, Michael and Davis, Peadar T. and Haran, Martin and McIlhatton, David},
526 + title = {Prediction Accuracy in Mass Appraisal: A Comparison of Modern Approaches},
527 + journal = {Journal of Property Research},
528 + year = {2013},
529 + volume = {30},
530 + number = {4},
531 + pages = {239--265},
532 + doi = {10.1080/09599916.2013.781204}
533 +}
534 +
535 +@article{schulz2014automated,
536 + author = {Schulz, Rainer and Wersing, Martin and Werwatz, Axel},
537 + title = {Automated Valuation Modelling: A Specification Exercise},
538 + journal = {Journal of Property Research},
539 + year = {2014},
540 + volume = {31},
541 + number = {2},
542 + pages = {131--153},
543 + doi = {10.1080/09599916.2013.846930}
544 +}
545 +
546 +@article{fik2003modeling,
547 + author = {Fik, Timothy J. and Ling, David C. and Mulligan, Gordon F.},
548 + title = {Modeling Spatial Variation in Housing Prices: A Variable Interaction Approach},
549 + journal = {Real Estate Economics},
550 + year = {2003},
551 + volume = {31},
552 + number = {4},
553 + pages = {623--646},
554 + doi = {10.1046/j.1080-8620.2003.00079.x}
555 +}
556 +
557 +@article{clapp2003semiparametric,
558 + author = {Clapp, John M.},
559 + title = {A Semiparametric Method for Valuing Residential Locations: Application to Automated Valuation},
560 + journal = {Journal of Real Estate Finance and Economics},
561 + year = {2003},
562 + volume = {27},
563 + number = {3},
564 + pages = {303--320},
565 + doi = {10.1023/A:1025838007297}
566 +}
567 +
568 +@article{pace1998spatiotemporal,
569 + author = {Pace, R. Kelley and Barry, Ronald and Clapp, John M. and Rodriquez, Mauricio},
570 + title = {Spatiotemporal Autoregressive Models of Neighborhood Effects},
571 + journal = {Journal of Real Estate Finance and Economics},
572 + year = {1998},
573 + volume = {17},
574 + number = {1},
575 + pages = {15--33},
576 + doi = {10.1023/A:1007799028599}
577 +}
578 +
579 +@article{dube2013pooled,
580 + author = {Dub{\'e}, Jean and Legros, Di{\`e}go},
581 + title = {Dealing with Spatial Data Pooled over Time in Statistical Models},
582 + journal = {Letters in Spatial and Resource Sciences},
583 + year = {2013},
584 + volume = {6},
585 + number = {1},
586 + pages = {1--18},
587 + doi = {10.1007/s12076-012-0082-3}
588 +}
589 +
590 +@article{hill2009boom,
591 + author = {Hill, Robert J. and Melser, Daniel and Syed, Iqbal},
592 + title = {Measuring a Boom and Bust: The {Sydney} Housing Market 2001--2006},
593 + journal = {Journal of Housing Economics},
594 + year = {2009},
595 + volume = {18},
596 + number = {3},
597 + pages = {193--205},
598 + doi = {10.1016/j.jhe.2009.07.010}
599 +}
600 +
601 +@article{manning2001estimating,
602 + author = {Manning, Willard G. and Mullahy, John},
603 + title = {Estimating Log Models: To Transform or Not to Transform?},
604 + journal = {Journal of Health Economics},
605 + year = {2001},
606 + volume = {20},
607 + number = {4},
608 + pages = {461--494},
609 + doi = {10.1016/S0167-6296(01)00086-8}
610 +}
611 +
612 +@article{thibodeau2003marking,
613 + author = {Thibodeau, Thomas G.},
614 + title = {Marking Single-Family Property Values to Market},
615 + journal = {Real Estate Economics},
616 + year = {2003},
617 + volume = {31},
618 + number = {1},
619 + pages = {1--22},
620 + doi = {10.1111/j.1080-8620.2003.00055.x}
621 +}
622 +
623 +@article{khoshnoud2023evolution,
624 + author = {Khoshnoud, Mahsa and Sirmans, G. Stacy and Zietz, Emily N.},
625 + title = {The Evolution of Hedonic Pricing Models},
626 + journal = {Journal of Real Estate Literature},
627 + year = {2023},
628 + volume = {31},
629 + number = {1},
630 + pages = {1--47},
631 + doi = {10.1080/09277544.2023.2201020}
632 +}
modified paper/sections/conclusion.tex +34 −24
@@ -5,28 +5,38 @@
5 5
6 6 We ran the hedonic specification debate as a controlled experiment:
7 7 twenty models, four design axes, one attribute set, one scoreboard, two
8 −holdouts, half a million sales. The verdict inverts the profession's
9 −implicit priorities. The choices that consume the most methodological
10 −attention --- functional form, transformation parameters --- move
11 −out-of-sample accuracy by at most two points of median error, while the
12 −choices often made by default --- whether and how finely to absorb space
13 −and time --- move it by three to ten. Machine-learning estimators
14 −dominate the standard scoreboard, but the standard scoreboard asks the
15 −wrong question: when the test set lies in the future, as it always does
16 −in deployment, the boosted ensemble's advantage reverses against a
17 −spline hedonic with good controls, because most of what it learned was a
18 −spatially fine price configuration that does not transfer across the
19 −market cycle.
8 +holdouts, half a million sales, and a bootstrap interval on every
9 +comparison. The verdict inverts the profession's implicit priorities.
10 +The choices that consume the most methodological attention---functional
11 +form, transformation parameters---move out-of-sample accuracy by at most
12 +two points of median error, while the choices often made by
13 +default---whether and how to absorb space and time---move it by three to
14 +ten, and the way fine spatial effects are implemented matters more than
15 +their resolution. Machine-learning estimators dominate the standard
16 +scoreboard by three points, a gain that is real, grows with the sample
17 +and comes almost entirely from a flexible surface over space. When the
18 +test set lies in the future, as it always does in deployment, that gain
19 +shrinks to half a point and loses significance, not because the learned
20 +surface fails to transfer---re-levelled, it prices future sales as well
21 +as it prices contemporaneous ones---but because every frozen model
22 +carries a stale price level, and a boosted model carries a slightly
23 +staler one than a linear model with carry-forward time effects.
20 24
21 −Meanwhile the objects economists actually harvest from hedonic models
22 −prove reassuringly stable: constant-quality indices agree across forms
23 −to within a few points over a full boom--bust--recovery cycle, and the
24 −machine's implicit age and area gradients replicate the quadratic OLS.
25 −The practical synthesis is almost embarrassingly simple: a semi-log with
26 −splines, quarter effects, and spatial fixed effects at a granularity
27 −matched to market thickness is within two points of the frontier in
28 −deployment conditions --- transparent, auditable, and fast. Where the
29 −extra accuracy of learning methods is worth its retraining cadence ---
30 −high-frequency AVMs, collateral monitoring --- our decomposition says to
31 −spend the flexibility budget on the spatial surface, and to validate,
32 −always, against the future rather than against a shuffle of the past.
25 +The objects economists harvest from hedonic models prove stable along
26 +the axis that generates the most debate and less so along the axis that
27 +generates the least: constant-quality indices agree across functional
28 +forms to within 2.5 points over a full boom--bust--recovery cycle but
29 +differ by nine points between a time-dummy index and a boosted
30 +imputation index, and the machine's implicit age and area gradients
31 +share the shape of the quadratic OLS with a milder depreciation path.
32 +The practical synthesis is simple. A semi-log with splines, quarter
33 +effects and spatial fixed effects nested from municipality down to a
34 +fine grid is within three points of the frontier under random
35 +validation and indistinguishable from it in deployment---transparent,
36 +auditable and fast. Where the extra within-period accuracy of learning
37 +methods is worth a retraining cadence---high-frequency automated
38 +valuation, collateral monitoring---our decomposition says to spend the
39 +flexibility budget on the spatial surface, to supply the price level
40 +from an index or a frequent refit rather than from the model, and to
41 +validate, always, against the future rather than against a shuffle of
42 +the past.
modified paper/sections/data.tex +43 −26
@@ -6,37 +6,53 @@
6 6 \subsection{Sources}
7 7
8 8 We use a registry of 745{,}119 Quebec residential-market transactions
9 −recorded between January 2021 and July 2026 --- sale price, date, address
10 −and coordinates --- each matched at the parcel level to the municipal
9 +recorded between January 2021 and July 2026---sale price, date, address
10 +and coordinates---each matched at the parcel level to the municipal
11 11 assessment roll in force at the sale date (median match distance
12 −0.6~metres, validated against the roll's recorded value). The roll
13 −contributes the structural descriptors that are notoriously missing from
14 −transaction registries: total floor area, lot area, year of construction,
15 −number of dwelling units, number of storeys, physical configuration
16 −(detached, semi-detached, row, apartment-linked) and the standardized use
17 −code. This combination --- market prices with assessor-grade structure
18 −for half a million sales across an entire province --- is what makes a
19 −controlled specification race feasible: every model sees exactly the same
20 −attributes.
12 +0.6~metres, validated against the roll's recorded value). The same
13 +snapshot underlies \companionpaper{}. The roll contributes the
14 +structural descriptors that are typically missing from transaction
15 +registries: total floor area, lot area, year of construction, number of
16 +dwelling units, number of storeys, physical configuration (detached,
17 +semi-detached, row, apartment-linked) and the standardised use code.
18 +This combination---market prices with assessor-grade structure for half a
19 +million sales across an entire province---is what makes a controlled
20 +specification race feasible: every model sees exactly the same
21 +attributes, and the attribute set is the one a mass-appraisal office
22 +actually holds.
21 23
22 24 \subsection{Sample}
23 25
24 26 We keep residential use codes (dwellings, cottages, mobile homes), require
25 −a high-confidence roll match (distance $\le 50$~m, score $\ge 150$), a
26 −price of at least \$50{,}000, a plausible floor area (20--2{,}000~m$^2$)
27 −and a known year of construction, and trim prices and floor areas at the
28 −1st and 99th percentiles within each sale year. The estimation sample
29 −contains \textbf{514{,}212 sales}: 348{,}253 single-family homes, 75{,}734
30 −condominiums, 74{,}909 plexes (2--5 units), 10{,}349 cottages and 4{,}881
31 −mobile homes, spread over 1{,}115 municipalities, 5{,}255 grid cells of
32 −$\sim$5.5~km and 30{,}548 cells of $\sim$1.1~km.
33 −Table~\ref{tab:sumstats} reports the descriptives. Prices average
34 −\$462{,}000 (median \$399{,}000); the window covers the tail of the
35 −post-pandemic boom, the 2022--2023 rate correction and the subsequent
36 −recovery --- a demanding environment for any static price model, which we
37 −exploit in the forward-in-time evaluation.
27 +a high-confidence roll match (distance $\le 50$~m, match score
28 +$\ge 150$), a price of at least \$50{,}000, a plausible floor area
29 +(20--2{,}000~m$^2$) and a known year of construction, and trim prices and
30 +floor areas at the 1st and 99th percentiles within each sale year.
31 +Building age is the sale year minus the year of construction, bounded
32 +between 0 and 150; storeys are bounded between 1 and 6 and dwelling units
33 +between 1 and 12; lot areas above the 99.5th percentile, which are
34 +implausible for residential parcels, are set to zero and treated as
35 +units without an exclusive lot, together with condominiums. The
36 +estimation sample contains \textbf{514{,}212 sales}: 348{,}253
37 +single-family homes, 75{,}734 condominiums, 74{,}909 plexes (two to five
38 +units), 10{,}349 cottages, 4{,}881 mobile homes and 86 dwellings of
39 +undetermined class, spread over 1{,}115 municipalities, 5{,}255 grid
40 +cells of $\sim$5.5~km and 30{,}548 cells of $\sim$1.1~km. Sales are
41 +spread across the window (97{,}868 in 2021, 90{,}733 in 2022, 76{,}411 in
42 +2023, 90{,}812 in 2024, 103{,}830 in 2025 and 54{,}558 in January--July
43 +2026). Table~\ref{tab:sumstats} reports the descriptive statistics.
44 +Prices average \$440{,}207 (median \$397{,}375), floor areas 132~m$^2$
45 +and building ages 44 years; the window covers the tail of the
46 +post-pandemic boom, the 2022--23 rate correction and the 2024--26
47 +recovery, during which the constant-quality price level rose by roughly
48 +70\% (Section~\ref{sec:ext}). This is a demanding environment for any
49 +static price model, which the forward-in-time evaluation exploits.
50 +One fifth of the sales (105{,}814) concern a parcel that sells more than
51 +once in the window and 30\% share their exact coordinates with another
52 +sale; Section~\ref{sec:holdouts} explains why these repeat and
53 +co-located sales matter for validation.
38 54
39 −\begin{table}[t]
55 +\begin{table}[tbp]
40 56 \centering
41 57 \begin{threeparttable}
42 58 \caption{Summary statistics, estimation sample}
@@ -47,7 +63,8 @@ exploit in the forward-in-time evaluation.
47 63 \item \textit{Notes:} 514{,}212 residential sales, January 2021 -- July
48 64 2026. Structural descriptors from the assessment roll in force at the
49 65 sale date. Lot area is zero for condominiums and other units without an
50 −exclusive lot.
66 +exclusive lot (and for the 0.5\% of lots above the 99.5th percentile,
67 +see text).
51 68 \end{tablenotes}
52 69 \end{threeparttable}
53 70 \end{table}
modified paper/sections/discussion.tex +94 −61
@@ -5,77 +5,110 @@
5 5
6 6 \subsection{A hierarchy of specification choices}
7 7
8 −Read jointly, the four axes imply a clear hierarchy of returns to
9 −specification effort, useful to anyone building a hedonic model:
8 +Read jointly, the four axes imply a hierarchy of returns to
9 +specification effort. The first and largest return is to location:
10 +any spatial absorption beats none by about ten points of median error, a
11 +margin that dwarfs every other choice, and the granularity question is
12 +one of implementation rather than of resolution. A fine grid used alone
13 +overfits because thin cells are estimated from a handful of sales and
14 +unseen cells are priced arbitrarily; the same grid nested within
15 +municipalities, which pools thin cells toward their municipality, is the
16 +most accurate linear specification we estimate. The second return is to
17 +time controls: in a moving market a model without time effects mistakes
18 +appreciation for attributes, at a cost of three points under random
19 +validation and six when the level must be carried forward, while
20 +granularity beyond quarters is cosmetic. The third return is to the
21 +estimator, and its size depends on the question asked. Under random
22 +validation gradient boosting buys three points over the best linear
23 +model, a gain that is statistically unambiguous and that grows with the
24 +training sample; in deployment the gain on the median error shrinks to
25 +half a point and loses significance, because the ensembles carry a
26 +slightly staler price level, while their relative pricing skill is
27 +intact. The fourth and smallest return is to functional form: splines
28 +are a cheap and reliable upgrade over the semi-log, and the Box--Cox
29 +machinery is not worth its complexity, exactly as
30 +\citet{cropper1988choice} concluded from simulations four decades ago.
10 31
11 −\begin{enumerate}
12 −\item \textbf{Get location right} ($\sim$10 points of median error):
13 −any spatial absorption beats none by a margin that dwarfs every other
14 −choice; the optimal granularity is interior --- around 5~km here ---
15 −because finer cells trade bias for variance.
16 −\item \textbf{Include some time control} ($\sim$3 points): in a moving
17 −market, a model without time effects mistakes appreciation for
18 −attributes; granularity beyond quarters is cosmetic.
19 −\item \textbf{Choose the estimator for the job} ($\sim$2 points
20 −deployed, $\sim$4 under random validation): boosting buys real accuracy
21 −in interpolation-heavy uses (filling gaps within a period, mass
22 −appraisal with contemporaneous comparables) and much less when the
23 −target is the future.
24 −\item \textbf{Stop worrying about functional form} ($\lesssim$2
25 −points): splines are a cheap upgrade; the Box--Cox machinery is not
26 −worth its complexity, exactly as \citet{cropper1988choice} concluded
27 −from simulations four decades ago.
28 −\end{enumerate}
32 +\subsection{Why the forward-in-time split compresses the ranking}
29 33
30 −\subsection{Why the machines lose their edge out of time}
31 −
32 −The decomposition rows explain the generalization gap. The boosting
33 −model's random-split advantage comes almost entirely from a flexible
34 −spatial surface (removing coordinates costs it 8.8 points). That surface
35 −is estimated \emph{jointly} with the time path, and trees clamp: beyond
36 −the last training month the model prices 2025--26 sales at a frozen
37 −level, exactly like the carry-forward linear models, while its
38 −fine-grained spatial fit --- calibrated on the 2021--24 price
39 −configuration --- partially decays as relative prices shift. The linear
40 −models, coarser but more rigid, carry a structure that transfers better.
41 −This is not an indictment of machine learning --- retrained monthly, the
42 −boosting model would presumably keep its interpolation advantage --- but
43 −it prices the \emph{retraining requirement} that random cross-validation
44 −hides, and it matches the practitioner evidence that AVM accuracy decays
45 −quickly out of sample period \citep{bogin2020house, kok2017big}.
34 +The decomposition of Section~\ref{sec:gap} clarifies what the
35 +forward-in-time holdout measures. The boosting model's random-split
36 +advantage comes almost entirely from a flexible spatial surface
37 +(removing the coordinates costs it 8.8 points), and that surface
38 +transfers to 2025--26 sales: re-levelled, the model prices them with a
39 +13.9\% median error, against 16.8\% for the spline hedonic. What does
40 +not transfer is the aggregate level. Trees are piecewise constant in the
41 +month counter and the terminal leaf in time averages the last training
42 +months rather than the last one, so a frozen boosted model enters the
43 +test period with a slightly staler level than a linear model whose last
44 +month effect is carried forward; by mid-2026 both are about 25\% below
45 +the market and indistinguishable. The lesson is not that machine
46 +learning fails out of sample. It is that the forward-in-time holdout
47 +conflates two things---the common level error that any static model
48 +incurs, and the relative accuracy the estimator contributes---and that
49 +the first dominates the second within a few quarters. Retrained monthly,
50 +or re-levelled with a published index as practitioners do
51 +\citep{thibodeau2003marking, mayer2019estimation}, the boosted model
52 +would presumably keep its interpolation advantage; the forward split
53 +prices the \emph{retraining or re-levelling requirement} that random
54 +cross-validation hides, and it matches the practitioner evidence that
55 +automated-valuation accuracy decays quickly outside the sample period
56 +\citep{bogin2020house, kok2017big}. It also explains why our first
57 +version, which smeared the linear models but not the ensembles, found a
58 +reversal: in a rising market an upward retransformation factor applied
59 +to one family only offsets part of that family's staleness.
46 60
47 61 \subsection{Implications}
48 62
49 −\paragraph{For research.} Hedonic coefficients and indices are robust
50 −objects: form and even estimator perturb them little
51 −(Section~\ref{sec:ext}). Researchers using hedonics to \emph{measure}
52 −--- indices, implicit prices, capitalization effects --- can keep simple
53 −forms with good controls and report validation under a temporal split
54 −when prediction claims are made.
63 +\paragraph{For research.} Hedonic indices are robust to functional form
64 +and implicit-price gradients are robust to the estimator in shape, if
65 +not in slope (Section~\ref{sec:ext}). Researchers using hedonic models to
66 +\emph{measure}---indices, implicit prices, capitalization effects---can
67 +keep simple forms with good, preferably hierarchical, spatial controls.
68 +When prediction claims are made, they should report a forward-in-time
69 +split alongside random cross-validation, and they should report
70 +intervals: several of the differences that organise the applied
71 +debate---a 5.5~km grid against municipality effects, month against
72 +quarter effects, boosting against splines in deployment---are not
73 +distinguishable from zero on half a million sales.
55 74
56 75 \paragraph{For mass appraisal.} Quebec's assessors face exactly this
57 −design problem every three years. Our results suggest the largest
58 −accuracy gains lie not in exotic estimators but in spatial resolution
59 −chosen by market thickness --- and that any model, linear or boosted,
60 −frozen at a reference date degrades by 3--7 points of median error
61 −within two years. This quantifies the staleness mechanism behind the
62 −assessment inequities documented in \companionpaper{}: the
63 −valuation technology's out-of-time decay is of the same magnitude as the
64 −inequities measured there.
76 +design problem every three years. Our results suggest that the largest
77 +accuracy gains lie in spatial resolution implemented hierarchically, that
78 +flexible learners add a further three points within the period they are
79 +estimated on, and that any model, linear or boosted, frozen at a
80 +reference date under-prices the typical sale by 10--20\% within eighteen
81 +months in a market like 2025--26. This quantifies the staleness
82 +mechanism behind the assessment inequities documented in
83 +\companionpaper{}: the valuation technology's out-of-time decay is of the
84 +same order as the inequities measured there, and it is a level problem
85 +that an index adjustment addresses before any change of estimator.
65 86
66 −\paragraph{For the AVM literature.} Every comparison should report a
67 −forward-in-time split alongside random cross-validation
68 −\citep{steurer2021metrics}. On our data, the choice of split changes not
69 −just magnitudes but the \emph{winner}.
87 +\paragraph{For the automated-valuation literature.} Every comparison
88 +should report a forward-in-time split, a leakage-free grouped split when
89 +properties sell repeatedly or share coordinates, and a single
90 +retransformation rule applied to all models
91 +\citep{steurer2021metrics}. On our data the first changes the size and
92 +significance of the headline gap, the second changes nothing, and the
93 +third, applied asymmetrically, is enough to manufacture a reversal.
70 94
71 95 \subsection{Limitations}
72 96
73 97 Our attribute set, though assessor-grade, omits listing-level quality
74 98 (renovations, finishes, views); richer features would likely raise the
75 −machines' interpolation advantage. Hyper-parameters were deliberately
76 −conventional --- a tuned boosted model would gain somewhat, as would a
77 −spatially smarter linear model (e.g.\ kriging residuals,
78 −\citealp{case2004modeling}). The forward split covers one specific
79 −regime change (the 2025--26 recovery); other windows would shift
80 −magnitudes. And Quebec's institutional homogeneity aids transferability
81 −of results across municipalities but may limit it across countries.
99 +learners' within-period advantage. Hyper-parameters were deliberately
100 +conventional, and Section~\ref{sec:robust} shows that materially
101 +different boosting configurations, including one tuned on a time-ordered
102 +validation set, leave the ranking unchanged; a spatially smarter linear
103 +model (kriged residuals, \citealp{case2004modeling}; semiparametric
104 +location surfaces, \citealp{clapp2003semiparametric}) would narrow the
105 +gap from the other side and is not estimated here. The forward split
106 +covers one specific regime (the 2025--26 recovery), in which prices rose
107 +by about 15\% in eighteen months; a flat or falling period would produce
108 +a smaller level error and possibly a different ordering of staleness
109 +across model families. The grouped holdouts remove leakage through
110 +repeat sales and shared coordinates but not through neighbouring parcels
111 +in the same street, which a spatially blocked holdout would address at
112 +the cost of changing the question to spatial extrapolation. Finally,
113 +Quebec's institutional homogeneity aids transferability of results
114 +across municipalities but may limit it across countries.
modified paper/sections/extensions.tex +90 −61
Large diff (199 lines) is not loaded by default to keep the page fast.Load diff
modified paper/sections/introduction.tex +96 −68
Large diff (183 lines) is not loaded by default to keep the page fast.Load diff
modified paper/sections/literature.tex +92 −50
Large diff (154 lines) is not loaded by default to keep the page fast.Load diff
modified paper/sections/methodology.tex +264 −70
Large diff (344 lines) is not loaded by default to keep the page fast.Load diff
modified paper/sections/results.tex +282 −86
Large diff (441 lines) is not loaded by default to keep the page fast.Load diff
added paper/sections/robustness.tex +216 −0
Large diff (216 lines) is not loaded by default to keep the page fast.Load diff
added results/reproduced/boxcox_fine.csv +22 −0
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
added results/reproduced/by_quarter.csv +36 −0
Large diff (36 lines) is not loaded by default to keep the page fast.Load diff
added results/reproduced/hgb_sensitivity.csv +11 −0
Large diff (11 lines) is not loaded by default to keep the page fast.Load diff
added results/reproduced/horserace_group_coord.csv +21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
added results/reproduced/horserace_group_parcel.csv +21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
modified results/reproduced/horserace_random.csv +21 −21
Large diff (42 lines) is not loaded by default to keep the page fast.Load diff
modified results/reproduced/horserace_temporal.csv +21 −21
Large diff (42 lines) is not loaded by default to keep the page fast.Load diff
added results/reproduced/inference_random.csv +21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
added results/reproduced/inference_temporal.csv +21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
added results/reproduced/leakage.csv +37 −0
Large diff (37 lines) is not loaded by default to keep the page fast.Load diff
modified results/reproduced/learning.csv +6 −6
Large diff (19 lines) is not loaded by default to keep the page fast.Load diff
added results/reproduced/nested_fe.csv +5 −0
Large diff (5 lines) is not loaded by default to keep the page fast.Load diff
added results/reproduced/pairs.csv +27 −0
Large diff (27 lines) is not loaded by default to keep the page fast.Load diff
added results/reproduced/relevel.csv +41 −0
Large diff (41 lines) is not loaded by default to keep the page fast.Load diff
added results/reproduced/same_period.csv +21 −0
Large diff (21 lines) is not loaded by default to keep the page fast.Load diff
modified results/reproduced/segments.csv +7 −7
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
added results/tables/by_quarter.tex +13 −0
Large diff (14 lines) is not loaded by default to keep the page fast.Load diff
modified results/tables/generalization.tex +5 −5
Large diff (16 lines) is not loaded by default to keep the page fast.Load diff
added results/tables/group_splits.tex +34 −0
Large diff (35 lines) is not loaded by default to keep the page fast.Load diff
added results/tables/hgb_sensitivity.tex +13 −0
Large diff (14 lines) is not loaded by default to keep the page fast.Load diff
modified results/tables/horserace_random.tex +18 −18
Large diff (49 lines) is not loaded by default to keep the page fast.Load diff
modified results/tables/horserace_temporal.tex +18 −18
Large diff (50 lines) is not loaded by default to keep the page fast.Load diff
added results/tables/inference.tex +32 −0
Large diff (33 lines) is not loaded by default to keep the page fast.Load diff
added results/tables/leakage.tex +21 −0
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
modified results/tables/learning.tex +6 −6
Large diff (18 lines) is not loaded by default to keep the page fast.Load diff
added results/tables/nested_fe.tex +13 −0
Large diff (14 lines) is not loaded by default to keep the page fast.Load diff
added results/tables/pairs.tex +21 −0
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
added results/tables/retransformation.tex +18 −0
Large diff (19 lines) is not loaded by default to keep the page fast.Load diff
added results/tables/same_period.tex +21 −0
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
modified results/tables/segments.tex +7 −7
Large diff (20 lines) is not loaded by default to keep the page fast.Load diff
modified scripts/02_horserace.py +7 −2
Large diff (22 lines) is not loaded by default to keep the page fast.Load diff
modified scripts/04_make_figures.py +33 −0
Large diff (45 lines) is not loaded by default to keep the page fast.Load diff
modified scripts/05_make_tables.py +306 −0
Large diff (318 lines) is not loaded by default to keep the page fast.Load diff
added scripts/06_robustness.py +274 −0
Large diff (274 lines) is not loaded by default to keep the page fast.Load diff
added src/wp11/inference.py +95 −0
Large diff (95 lines) is not loaded by default to keep the page fast.Load diff
modified src/wp11/models.py +220 −43
Large diff (348 lines) is not loaded by default to keep the page fast.Load diff
modified src/wp11/sample.py +8 −2
Large diff (23 lines) is not loaded by default to keep the page fast.Load diff
Menu

Theme