SPB Git

spb/wp3_uqo

Public

UQO Working Paper No. 3 — Hedonic housing price models for the US: parametric, quantile, and machine-learning approaches.

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

v1.1 → v1.2 (October 2026). Audit des données (variables scolaires imputées à 93 %, ln(lot)=0 pour 16,5 %,
valeurs aberrantes), inférence groupée ZIP3/État, estimation État par État, bootstrap apparié des tests
inter-quantiles, validation géographique étendue (courbe d'arbres, split apparié, GroupKFold, leave-one-state-out,
R² within-state), OLS hors État corrigé (0,539), 23 références vérifiées ajoutées + 28 DOI, sections réécrites,
docs/REVIEW-REPORT.md et docs/CHANGELOG-REVISION.md, scripts 05–08, 82 pages.

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

60 changed files +4,379 −1,085

60 changed files
modified README.md +85 −44
@@ -3,7 +3,7 @@
3 3
4 4 **UQO Working Paper No. 3** — *A Multi-Method Comparison of Parametric, Quantile, and Machine Learning Approaches*
5 5
6 −[![Paper](https://img.shields.io/badge/paper-PDF%20(60%20p.)-b31b1b?logo=latex&logoColor=white)](paper/main.pdf)
6 +[![Paper](https://img.shields.io/badge/paper-PDF%20(82%20p.)-b31b1b?logo=latex&logoColor=white)](paper/main.pdf)
7 7 [![Python](https://img.shields.io/badge/python-3.11%2B-3776AB?logo=python&logoColor=white)](requirements.txt)
8 8 [![Data](https://img.shields.io/badge/data-788%2C842%20Zillow%20listings%20·%20DuckDB-4051b5)](#-data)
9 9 [![Estimation](https://img.shields.io/badge/estimation-OLS%20HC3%20·%20QuantReg%20·%20XGBoost%20%2B%20SHAP-4051b5)](src/wp3/)
@@ -12,11 +12,16 @@
12 12 [![Author](https://img.shields.io/badge/author-Simon--Pierre%20Boucher-16365c)](mailto:simon-pierre.boucher@uqo.ca)
13 13
14 14 > **TL;DR** — Three hedonic frameworks are compared on **788,842 active Zillow listings** covering all 50 U.S. states and
15 −> DC. Semi-log OLS with 62 regressors gives R² = 0.634 (0.725 with 886 ZIP3 fixed effects; Moran's *I* = 0.27 on
16 −> residuals). Quantile regression rejects coefficient equality between τ = 0.10 and 0.90 for **11 of 13** key variables.
17 −> XGBoost reaches R² = 0.833 under a random split but only **0.425–0.547** when ten entire states are held out, and
18 −> *removing* geographic features improves geographic-holdout R² to 0.519 — random validation flatters machine learning
19 −> through spatial leakage.
15 +> DC. Semi-log OLS with 62 regressors gives R² = 0.634 (0.725 out of sample with 885 ZIP3 fixed effects; Moran's *I* = 0.27
16 +> on residuals); cluster-robust standard errors are 8–12× the HC3 errors and leave **33 of 63** coefficients significant.
17 +> State-by-state estimation shows living-area elasticities from 0.06 to 1.15; a fully interacted model gains +6.1 pp over
18 +> state fixed effects. Paired cluster-bootstrap Wald tests reject coefficient equality between τ = 0.10 and 0.90 for
19 +> **10 of 13** key variables. XGBoost reaches R² = 0.833 under a random split but **0.425** when ten states are held
20 +> out (median **0.653** across 51 leave-one-state-out models); once 0.6 % of corrupt records are removed, **OLS is as
21 +> accurate out of state (0.539)** as the best tree ensemble. The gap is traced to memorised state price levels (within-state
22 +> R² = 0.62), to "neighbourhood" variables that are state-median imputations for **93 %** of listings, and to boosting
23 +> capacity (held-out R² peaks at 75 rounds). A coding error (ln lot = 0 for 16.5 % of listings) is corrected: lot
24 +> elasticity 0.095, not 0.018.
20 25
21 26 ---
22 27
@@ -24,7 +29,7 @@
24 29
25 30 | Item | Value |
26 31 |---|---|
27 −| Version | 1.1 (May 2026) — cover page harmonised to the UQO WP standard, October 2026 |
32 +| Version | **1.2 (October 2026)** — revised 2026-10-17 by the editorial-board review (`docs/REVIEW-REPORT.md`, `docs/CHANGELOG-REVISION.md`); v1.1 (May 2026) frozen as git tag `pre-revision-20261017` and `docs/main_pre-revision-20261017.pdf` |
28 33 | SSRN | not yet submitted |
29 34 | Journal | not yet submitted |
30 35 | Code & data | figures and tables reproducible from stored artifacts; raw Zillow extract (3.2 GB) available on request |
@@ -35,9 +40,9 @@ The paper compares three frameworks for hedonic housing valuation on a single la
35 40
36 41 | Framework | Question it answers | Headline result |
37 42 |---|---|---|
38 −| **Semi-log OLS** (62 regressors, HC3 SE) | Average conditional association between an attribute and log listing price | R² = 0.634; price-to-area elasticity 0.63 |
39 −| **Quantile regression** (τ ∈ {0.10, 0.25, 0.50, 0.75, 0.90}) | How attribute gradients vary across the price distribution | Equality rejected for 11 of 13 variables |
40 −| **Gradient boosting + SHAP** (XGBoost, LightGBM) | How well prices can be predicted, and which features drive predictions | R² = 0.833 (random) vs. 0.425–0.547 (geographic holdout) |
43 +| **Semi-log OLS** (62 regressors; HC3, ZIP3- and state-clustered SE; state-by-state) | Average conditional association between an attribute and log listing price, and how much it hides | R² = 0.634; area elasticity 0.63 (0.06–1.15 across states); lot elasticity 0.095 (recoded) |
44 +| **Quantile regression** (τ ∈ {0.10, 0.25, 0.50, 0.75, 0.90}; paired cluster bootstrap) | How attribute gradients vary across the price distribution | Equality rejected for 10 of 13 variables (11 under the independence test) |
45 +| **Gradient boosting + SHAP** (XGBoost, LightGBM; random / 10-state / GroupKFold / LOSO) | How well prices can be predicted, in seen and unseen markets, and which features drive predictions | R² = 0.833 (random) vs. 0.425 (10 states) vs. 0.653 (LOSO median); within-state 0.62 |
41 46
42 47 ```
43 48 ln P_i = α + x_i'β + μ_g(i) + ε_i g = Census region → state → ZIP3
@@ -45,33 +50,42 @@ ln P_i = α + x_i'β + μ_g(i) + ε_i g = Census region → state → ZIP3
45 50
46 51 The core methodological contribution is a systematic study of **spatial leakage** in hedonic model evaluation: random
47 52 train/test splits let geographically proximate listings appear on both sides of the split, inflating performance
48 −metrics. Three designs quantify the damage — a 10-state geographic holdout, a 6-stage feature-ablation cascade, and a
49 −latitude/longitude augmentation experiment. All estimates are *listing-price* gradients (asking prices), not causal
50 −willingness-to-pay parameters.
53 +metrics. The revision quantifies the damage with a 10-state holdout, grouped 5-fold CV by state, leave-one-state-out,
54 +a size-matched random split and a within-state R², and identifies its mechanics: region dummies, state-median-imputed
55 +"neighbourhood" variables (93 % of school ratings) and boosting capacity (held-out R² peaks at 75 rounds, falls to 0.425
56 +at 1,000). All estimates are *listing-price* gradients (asking prices), not causal willingness-to-pay parameters.
51 57
52 58 ## 🏆 Headline results
53 59
54 −| Model | Random R² | Geo-holdout R² | RMSE (random) |
55 −|---|---:|---:|---:|
56 −| OLS (62 regressors) | 0.630 | < 0 | 0.491 |
57 −| OLS + State FE | 0.678 | — | 0.459 |
58 −| OLS + ZIP3 FE | 0.725 | — | 0.423 |
59 −| Random Forest | 0.784 | 0.542 | 0.375 |
60 −| LightGBM | 0.809 | — | 0.353 |
61 −| **XGBoost** | **0.833** | **0.547** | **0.330** |
62 −| XGBoost, no geographic features | 0.830 | **0.519** | — |
63 −| XGBoost + lat/lon | 0.870 | 0.464 | — |
64 −
65 −- **Geography does the heavy lifting in OLS**: region dummies → state FE → 886 ZIP3 FE raises out-of-sample R² from
66 − 0.630 → 0.678 → 0.725.
67 −- **Residual spatial autocorrelation**: Moran's *I* = 0.2745 (SD 0.0076) across three 5,000-listing subsamples, all
68 − *p* < 0.001.
69 −- **Distributional heterogeneity**: the garage gradient is 10× larger at τ = 0.10 than at τ = 0.90 (*z* = 28.9); the pool
70 − premium only emerges above the median.
60 +| Model | Random R² | 10-state holdout R² | Within-state R² (10 states) | RMSE (random) |
61 +|---|---:|---:|---:|---:|
62 +| OLS (62 regressors) | 0.630 | **0.539** (implausible records removed; −2×10⁶ with them) | 0.560 | 0.491 |
63 +| OLS + State FE | 0.678 | — | — | 0.459 |
64 +| OLS + ZIP3 FE | 0.725 | — | — | 0.423 |
65 +| OLS, state-by-state (fully interacted) | 0.751 | — | — | — |
66 +| Random Forest | 0.784 | 0.542 | — | 0.375 |
67 +| LightGBM | 0.809 | — | — | 0.353 |
68 +| **XGBoost, 1,000 rounds** | **0.833** | **0.425** | **0.618** | **0.330** |
69 +| XGBoost, 75–100 rounds | 0.75–0.77 | 0.544–0.550 | — | — |
70 +| XGBoost, no region dummies | 0.830 | 0.519 | 0.621 | — |
71 +| XGBoost, no school variables | 0.817 | 0.377 | 0.596 | — |
72 +| XGBoost + 6 missingness indicators | 0.835 | 0.446 | 0.623 | — |
73 +| XGBoost + lat/lon | 0.870 | 0.464 | — | — |
74 +| XGBoost, grouped 5-fold by state (pooled) | — | 0.620 | 0.657 | — |
75 +| XGBoost, leave-one-state-out (51 models) | — | median 0.653 | — | — |
76 +
77 +- **Geography does the heavy lifting in OLS**: region dummies → state FE → 885 ZIP3 FE raises out-of-sample R² from
78 + 0.630 → 0.678 → 0.725; residual Moran's *I* = 0.2745 (SD 0.0076); tree-ensemble test residuals: 0.079 (XGBoost).
79 +- **Inference**: ZIP3- and state-clustered SEs are 7.6× and 11.6× HC3 (medians); significant coefficients 57 → 35 → 33 of 63.
80 +- **One market or 51?** State-by-state living-area elasticity 0.06–1.15; bedroom, pool, luxury and HOA coefficients change
81 + sign in 19–23 states; fully interacted OLS: +6.1 pp over state FE.
82 +- **Distributional heterogeneity**: the garage gradient is 10× larger at τ = 0.10 than at τ = 0.90; the pool premium
83 + only emerges above the median; 10 of 13 inter-quantile differences survive a paired ZIP3-cluster bootstrap.
71 84 - **Ablation cascade (XGBoost)**: structural 0.498 → +lot 0.546 → +amenities 0.638 → +neighbourhood **0.814** → +market
72 − 0.824 → full 0.833.
73 −- **SHAP rankings are model-stable** (Spearman ρ = 0.89–0.99 across XGBoost / LightGBM / RF) but not structural.
74 −- **Imputation matters**: the lot-size gradient triples (0.018 → 0.059) when state-median-imputed lot sizes are dropped.
85 + 0.824 → full 0.833 — but the neighbourhood block is mostly a state encoding (school variables imputed for 93 %).
86 +- **Boosting rounds**: held-out-state R² 0.550 at 75 rounds → 0.425 at 1,000 while within-training R² keeps rising.
87 +- **SHAP rankings are model-stable** (Spearman ρ = 0.89–0.99) but not structural: the 3rd-ranked feature is a state identifier.
88 +- **Lot-size coding**: ln(lot) was 0 for 16.5 % of listings; recoded elasticity 0.095 (not 0.018 / 0.059).
75 89
76 90 ## 🗂 Repository layout
77 91
@@ -79,7 +93,7 @@ willingness-to-pay parameters.
79 93 wp3_uqo/
80 94 ├── README.md
81 95 ├── requirements.txt # pinned dependencies (validated 2026-08-05)
82 −├── docs/ # AUDIT.md · CHANGES.md · PAPER_REVIEW.md · UPGRADE_REPORT.md
96 +├── docs/ # REVIEW-REPORT.md · CHANGELOG-REVISION.md (2026-10-17) · AUDIT.md · CHANGES.md · PAPER_REVIEW.md · UPGRADE_REPORT.md
83 97 ├── data/ # NOT tracked (3.2 GB)
84 98 │ ├── raw/us_housing.duckdb # raw Zillow extract (839,313 × 116 + 4 aux tables)
85 99 │ └── processed/ # analytical_sample.pkl · model_data.pkl · shap_data.pkl
@@ -91,13 +105,18 @@ wp3_uqo/
91 105 ├── scripts/ # the pipeline, in order
92 106 │ ├── 01_spatial_robustness.py # ZIP3 FE OLS · Moran's I · XGB ± geography · ablation
93 107 │ ├── 02_qr_imputation.py # QR stability · inter-quantile Wald · imputation · winsorisation
94 −│ ├── 03_make_figures.py # all 11 figures + verification stats
95 −│ └── 04_export_tables.py # paper tables → results/tables/*.csv
108 +│ ├── 03_make_figures.py # figures 1–11 + verification stats
109 +│ ├── 04_export_tables.py # paper tables → results/tables/*.csv
110 +│ ├── 05_revision_geo_validation.py # trees curve · size-matched split · variants · OLS geo · GroupKFold · LOSO (~25 min)
111 +│ ├── 06_revision_inference.py # missingness audit · clustered SE · lot recoding · state-by-state · R² bootstrap · Moran (~6 min)
112 +│ ├── 07_revision_qr_bootstrap.py # paired (obs. + ZIP3-cluster) bootstrap for inter-quantile Wald tests (~25 min)
113 +│ └── 08_revision_tables_figures.py # paper/tables/*.tex fragments + figures 12–14
96 114 ├── results/
97 115 │ ├── *.pkl # NOT tracked (up to 437 MB)
98 −│ └── tables/ # 13 CSVs mirroring the paper's tables
99 −├── figures/ # 11 paper figures (PNG, 300 dpi)
100 −└── paper/ # main.tex + sections/ + appendix/ + references.bib → main.pdf
116 +│ ├── tables/ # 13 CSVs mirroring the v1.1 tables
117 +│ └── revision/ # 18 CSVs feeding the v1.2 tables (scripts 05–07)
118 +├── figures/ # 14 paper figures (PNG, 300 dpi)
119 +└── paper/ # main.tex + sections/ + appendix/ + tables/ (generated) + references.bib → main.pdf
101 120 ```
102 121
103 122 ## 🚀 Quick start
@@ -110,10 +129,14 @@ export WP3_ROOT=/path/to/artifacts # optional, defaults to the repo roo
110 129
111 130 python scripts/01_spatial_robustness.py # ~1–2 h (16 XGBoost models)
112 131 python scripts/02_qr_imputation.py # ~1–3 h (12 quantile regressions on 150k obs)
113 −python scripts/03_make_figures.py # ~5 min, all 11 figures (--figs fig2 fig4 for a subset)
132 +python scripts/03_make_figures.py # ~5 min, figures 1–11 (--figs fig2 fig4 for a subset)
114 133 python scripts/04_export_tables.py # ~2 min, 13 CSV tables
134 +python scripts/05_revision_geo_validation.py # ~25 min (104 XGBoost fits)
135 +python scripts/06_revision_inference.py # ~6 min
136 +python scripts/07_revision_qr_bootstrap.py # ~25 min on 8 workers (--draws 200)
137 +python scripts/08_revision_tables_figures.py # <1 min, paper/tables/*.tex + figures 12–14
115 138
116 −cd paper && make # latexmk → main.pdf (60 pages)
139 +cd paper && make # latexmk → main.pdf (82 pages)
117 140 ```
118 141
119 142 Apple Silicon, 32 GB RAM; scripts use all cores. Every script prints verification statistics comparing recomputed values
@@ -147,6 +170,10 @@ with the numbers reported in the paper.
147 170 5. **Ablation** — 6 nested feature sets: structural → +lot → +amenities → +neighbourhood → +market → full.
148 171 6. **Interpretation** — TreeSHAP on 10,000 test obs; cross-model Spearman stability.
149 172 7. **Sensitivity** — state-median-imputation drop-out, lot-size winsorisation (p99.5), Bike Score cap.
173 +8. **Revision (v1.2)** — cluster-robust SE (ZIP3, state); state-by-state OLS and fully interacted prediction; paired
174 + cluster-bootstrap inter-quantile tests; size-matched split, within-state R², boosting-round curve, GroupKFold by state,
175 + leave-one-state-out; feature variants (no region, no school, missingness indicators); OLS geographic holdout on trimmed
176 + data; lot-size recoding; Moran's *I* on tree residuals; bootstrap CIs for R² (`scripts/05`–`08`).
150 177
151 178 ## 🖼 Figures & tables inventory
152 179
@@ -163,15 +190,23 @@ with the numbers reported in the paper.
163 190 | `fig9_marginal_effects` | Bivariate scatters + binned means (6 attributes) |
164 191 | `fig10_shap_dependence` | SHAP dependence, 8 key features |
165 192 | `fig11_shap_interactions` | SHAP for interaction terms (waterfront × sqft, pool × South) |
193 +| `fig12_geo_trees_curve` | Out-of-sample R² vs boosting rounds (random / early-stopping / 10 held-out states) |
194 +| `fig13_loso_by_state` | Leave-one-state-out R² by held-out state |
195 +| `fig14_state_heterogeneity` | State-by-state living-area elasticity and garage coefficient |
166 196
167 197 Tables (`results/tables/*.csv`, 13 files): OLS coefficients, QR paths, inter-quantile Wald tests, stability CVs,
168 198 Moran's *I*, imputation/winsorisation sensitivity, SHAP importance and cross-model correlations, ZIP3 FE, ablation.
199 +Revision tables (`results/revision/*.csv`, 18 files → `paper/tables/*.tex`): missingness audit, implausible values,
200 +list/Zestimate ratio, clustered SE, lot recoding, state heterogeneity, pooled vs interacted, R² bootstrap, Moran by model,
201 +designs, trees curve, variants, OLS geo holdout, grouped CV, LOSO, inter-quantile bootstrap.
169 202
170 203 ## ⚠️ Limitations
171 204
172 205 - Listing (asking) prices, not transactions; gradients are conditional associations, not willingness to pay.
173 206 - A single 2025–2026 snapshot: no time dimension, no repeat-sales control.
174 −- Lot size is state-median-imputed for part of the sample; the gradient is sensitive to that choice.
207 +- School variables are state medians for 93 % of listings; ln(lot) was coded 0 for 16.5 % (corrected for OLS in v1.2, not
208 + for QR/ablation/SHAP); 0.6 % of records carry corrupt secondary attributes.
209 +- Inference is cluster-robust but rests on 51 unequal state clusters; no spatial econometric model is estimated.
175 210 - The upstream sample-construction and primary-estimation scripts are lost; those stages are reproducible only from the
176 211 stored artifacts.
177 212
@@ -186,7 +221,8 @@ Moran's *I*, imputation/winsorisation sensitivity, SHAP importance and cross-mod
186 221 type = {Working Paper},
187 222 number = {3},
188 223 year = {2026},
189 − month = {May}
224 + month = {October},
225 + note = {Version 1.2}
190 226 }
191 227 ```
192 228
@@ -204,4 +240,9 @@ Université du Québec en Outaouais (UQO), Gatineau, QC.
204 240 `Recherche-UQO/_archives/versions-mai-2026/hedonic-models-united-states--immo-wp3-20260519/`; `docs/CHANGES.md` lists
205 241 the six manuscript inconsistencies corrected on 2026-08-05 (no scientific result altered).
206 242 - GitHub mirror: `spboucher-ai/wp3-hedonic-housing-us` (remote `github`); canonical remote is spbgit `wp3_uqo.git`.
207 −- Build verified 2026-10-17: 0 errors, 0 undefined references, 70 references rendered.
243 +- Scientific revision 2026-10-17 (v1.2): see `docs/REVIEW-REPORT.md` (editorial-board report) and
244 + `docs/CHANGELOG-REVISION.md` (audit trail of every correction, references added with DOIs, reanalyses run). The pre-revision
245 + state is tag `pre-revision-20261017` and `docs/main_pre-revision-20261017.pdf`.
246 +- Build verified 2026-10-17: 0 errors, 0 undefined references, 93 references rendered, 82 pages.
247 +- Table fragments in `paper/tables/` are generated by `scripts/08_revision_tables_figures.py`; their last row carries no `\\`
248 + (supplied after `\input` in the section files) to avoid a `Misplaced \noalign` error.
added docs/CHANGELOG-REVISION.md +111 −0
@@ -0,0 +1,111 @@
1 +# CHANGELOG — Révision scientifique complète (editorial board, 2026-10-17)
2 +
3 +Papier : **UQO WP 3 — Hedonic Housing Price Models for the United States** (v1.1, mai 2026 → **v1.2, octobre 2026**).
4 +État avant révision figé par le tag `pre-revision-20261017` et `docs/main_pre-revision-20261017.pdf` (60 pages).
5 +Rapport de l'editorial board : `docs/REVIEW-REPORT.md`. Aucun fichier original n'a été supprimé ; les anciens
6 +documents d'audit (`AUDIT.md`, `CHANGES.md`, `PAPER_REVIEW.md`, `UPGRADE_REPORT.md`) sont conservés tels quels.
7 +
8 +## 1. Corrections majeures (où · avant · après · pourquoi · preuve)
9 +
10 +| # | Où | Avant (v1.1) | Après (v1.2) | Pourquoi | Preuve |
11 +|---|---|---|---|---|---|
12 +| 1 | Data §3.6 (Table « Missing data »), Results §5.1.3, §5.7, §5.8, §5.9, Discussion, Abstract | Table des manquants : year built 19,4 %, lot 16,3 %, walk 3,1 %, bike 6,1 %, transit 70,1 %, garage 35,1 %. Les variables scolaires n'y figuraient pas ; « school rating » interprété comme qualité scolaire (coefficient négatif discuté via Black 1999 / Bayer 2007 ; 3e rang SHAP). | **avg_school_rating, school_count, nearest_school_distance manquants pour 93,0 % des annonces, imputés par la médiane de l'État** (school_count = 3 partout). Réinterprétation : identifiant d'État pour 93 % de l'échantillon ; coefficient OLS, bloc « neighbourhood » de l'ablation (+17,6 pp) et rang SHAP relus comme encodage de la géographie. | Lecture directe de `data/raw/us_housing.duckdb` (NULL) croisée avec `analytical_sample.pkl` (17 valeurs distinctes parmi les imputés = médianes d'État). | `results/revision/missingness_full.csv`, `variants_two_designs.csv` (sans variables scolaires : R² aléatoire 0,833 → 0,817 ; géo 0,425 → 0,377) |
13 +| 2 | Data §3.6, Robustness §6.1–6.3, Results Table OLS unstd, Abstract, Intro, Conclusion | « Lot size imputée par médiane d'État » ; β ln(lot) = 0,018 ; « triple à 0,059 quand on retire les imputés » ; interprété comme atténuation par imputation. | **ln(lot) = 0 pour 130 271 annonces (16,5 %)** (lot manquant ou nul ; la colonne lot_size_sqft est bien imputée mais le régresseur ln_lot a été calculé avant imputation). Recodage ln(médiane d'État) : **β = 0,095** (SE HC3 0,0007), R² 0,648 ; cas complets 0,095 ; indicateur de manquant −2,2 %. Le « triplement » est un artefact de codage, pas une atténuation par imputation ; la winsorisation publiée (0,058) était en fait un recodage partiel. | `exp(ln_lot)` = 1 pour tous les imputés dans `analytical_sample.pkl` ; code de winsorisation de `02_qr_imputation.py` recalcule ln_lot depuis le champ imputé. | `results/revision/lot_recoding.csv` |
14 +| 3 | Results §5.6.1 (Table geo holdout), Discussion, Conclusion, Abstract, README | « OLS fails catastrophically (R² < 0) because held-out states span all four regions » ; valeur stockée R² = −1 955 902. | **OLS R² = 0,539 (within-state 0,560, MdAPE 27,9 %)** sur le holdout de 10 États une fois retirés 4 970 enregistrements aberrants (parking > 20, étages > 10, lot > 1 mi², âge = 200) ; XGBoost sur le même jeu test : 0,544 (100 arbres) / 0,426 (1 000 arbres). L'OLS semi-log est aussi précis que le meilleur ensemble hors échantillon géographique. | La MdAPE des prédictions OLS publiées est 27,9 % : l'effondrement du R² vient de 204 annonces test à valeurs corrompues (parking max 1,1 × 10¹¹) sur lesquelles le modèle linéaire extrapole. | `results/revision/ols_geo_holdout.csv`, `xgb_geo_trimmed.csv`, `implausible_values.csv` |
15 +| 4 | Results §5.6.2 (nouvelle), Robustness matrix, Discussion | Deux valeurs géo pour le même modèle XGBoost (0,547 et 0,425) attribuées à « differences in training-set composition ». | **Courbe R² hors État vs nombre d'arbres** : pic 0,550 à 75 arbres, 0,425 à 1 000 ; R² sur l'ensemble d'arrêt précoce (États d'entraînement) monte de 0,77 à 0,83. 0,547 = modèle arrêté près du pic ; 0,425 = modèle complet. L'arrêt précoce sur un sous-ensemble aléatoire ne détecte pas le surapprentissage spatial. | Reproduction exacte de 0,4250 avec `src/wp3/models.py` ; `iteration_range` sur le même modèle. | `results/revision/geo_trees_curve.csv`, `figures/fig12_geo_trees_curve.png` |
16 +| 5 | Methodology §4.2, Results §5.1.5 (nouvelle Table cluster SE), toutes les étoiles | SE HC3 uniquement ; 57/63 coefficients significatifs à 5 %. | **SE groupées ZIP3 (885) et État (51)** : ratio médian 7,6 et 11,6 ; **35/63 et 33/63** significatifs. Non significatifs sous groupement État : age, pool, waterfront, walk, school rating, tax rate, condo, région Sud… | Moulton (1990) : régresseurs agrégés (État/ZIP) + résidus spatialement corrélés (Moran 0,27). | `results/revision/cluster_se.csv` |
17 +| 6 | Methodology §4.3, Results §5.4.2 (Table inter-quantile) | Équation avec terme −2 Cov ; note « computed from the joint covariance matrix » ; **le code (`02_qr_imputation.py`) met Cov = 0** (z = diff / √(se₁₀² + se₉₀²)). 11/13 rejets. | Bootstrap apparié (200 tirages, obs. et grappes ZIP3) sur le même sous-échantillon de 150 000 ; la table rapporte z indépendant, z bootstrap obs., z bootstrap ZIP3 et IC 95 %. **10/13 rejets** sous bootstrap ZIP3. | Lecture du code ; le texte v1.1 décrivait une covariance jointe jamais calculée. | `results/revision/iqr_wald_bootstrap.csv` |
18 +| 7 | Results §5.3 (nouvelle), Discussion, Intro | Une seule fonction hédonique nationale ; pas de discussion du marché unique de Rosen. | **Estimation État par État** (51 régressions, unités naturelles) : élasticité surface 0,06–1,15 (p10–p90 0,32–0,72) ; signe inversé dans 19 (chambres), 22 (piscine), 22 (luxe), 23 (HOA) États. R² test aléatoire : pooled 0,619 → + EF État 0,690 → **interagi par État 0,751** (+6,1 pp dus aux pentes). | Kuminoff–Parmeter–Pope 2010, Bishop et al. 2020, Bourassa et al. 2003, Goodman–Thibodeau 2003. | `results/revision/state_heterogeneity*.csv`, `pooled_vs_interacted.csv`, `figures/fig14_state_heterogeneity.png` |
19 +| 8 | Results §5.6.3 (nouvelle), Appendix C | Un seul découpage géographique (10 États = 55,6 % des données). | **Validation croisée groupée 5 plis par État** (R² poolé 0,620, plis 0,50–0,72, within 0,657) et **leave-one-state-out** (51 modèles ; médiane 0.653) ; **split aléatoire de taille appariée** (350 527 obs. : R² 0,829 → la taille n'explique que 0,4 pp) ; **R² within-state** (0,618) séparant erreur de niveau et structure intra-marché. | Roberts et al. 2017, Meyer & Pebesma 2021/2022, Schratz et al. 2019. | `grouped_cv_by_state.csv`, `loso_by_state.csv`, `size_matched_split.csv`, `figures/fig13_loso_by_state.png` |
20 +| 9 | Robustness §6.4 | Instabilité du coefficient d'âge (CV 78,6 %) attribuée à « geographic heterogeneity across subsamples ». | Les 10 sous-échantillons sont des tirages aléatoires nationaux (même composition géographique) : explication fausse. Cause réelle : imprécision (SE HC3 0,014, 10× les autres) par quasi-colinéarité age / age² / sqft×age / age×luxe + 19 % d'âges imputés. | Table OLS v1.1 elle-même. | — |
21 +| 10 | Results §5.2 (Table Moran OLS vs arbres) | Moran's I sur résidus OLS seulement. | I sur résidus test (split aléatoire) : OLS 0,263, LightGBM 0,110, **XGBoost 0,079** — les arbres absorbent ~70 % de l'autocorrélation spatiale sans coordonnées. | Pace & Hayunga 2020. | `moran_xgb_vs_ols.csv` |
22 +| 11 | Results §5.5 (Table bootstrap R²) | Aucune incertitude sur les R² test. | IC bootstrap (1 000 tirages, obs. et grappes ZIP3) : XGB − OLS = 0,203, IC ZIP3 [0,193 ; 0,213] ; test apparié des pertes quadratiques. | Diebold–Mariano 1995. | `r2_bootstrap.csv` |
23 +| 12 | Data §3.2 (Table list/Zestimate) | Écart prix affiché / transaction discuté sans mesure. | Ratio prix affiché / Zestimate (55 % des annonces) : médiane 1,020, IQR 1,008–1,037, 91,4 % > 1 ; Sud 1,023. Borne descriptive, avec mise en garde. | — | `list_to_zestimate.csv` |
24 +| 13 | Data §3.7 (Table valeurs aberrantes) | « Bike Score > 100 pour 38 obs. ; some lot sizes implausibly large ». | Dénombrement complet : parking > 20 (1 133), > 1 000 (67, max 1,1 × 10¹¹), étages > 10 (1 607), lot > 1 mi² (422), year_built > 2026 (121 → âge 0), < 1826 (1 838 → âge 200), ln(lot) = 0 (130 271). | — | `implausible_values.csv` |
25 +| 14 | Methodology §4.2 | Interprétation des dummies 100(e^β − 1) sans référence. | Équation Halvorsen–Palmquist (1980) + correction de Kennedy (1981) ; vérification que la correction < 0,1 pp ici. | — | — |
26 +| 15 | Results §5.1.4 | « the gap between ZIP3 OLS (0.725) and XGBoost (0.833) suggests non-linear attribute effects contribute 10.8 pp » | Retiré : XGBoost n'observe pas les ZIP ; la comparaison ne décompose pas forme fonctionnelle vs information. | — | — |
27 +| 16 | Discussion §7.3 | « squarely within the 15–25 % error-reduction range (bourassa2010, park2015, **chen2016xgboost**) » | Chen & Guestrin (2016) n'est pas une étude de valorisation immobilière ; remplacé par Mayer et al. 2019, Pérez-Rave et al. 2019, Ho et al. 2021. | — | — |
28 +| 17 | Intro, Results §5.1.4 | Mélange R² in-sample (0,634) et out-of-sample (0,725) dans la progression des EF ; « +4.7 and +4.7 pp ». | Progression hors échantillon cohérente 0,630 → 0,678 → 0,725 (+4,8, +4,7). | — | — |
29 +| 18 | Data (ZIP3) | « 886 unique ZIP3 » | 885 ZIP3 observés + 1 code pour ZIP manquant (= 886 niveaux d'EF). | `address_zipcode.str[:3].nunique()` = 885 | — |
30 +| 19 | Results §5.7 | « Structural features alone explain 35 % of geographic variation » | Reformulé : R² = 0,348 dans les États exclus (ce n'est pas une « variance géographique »). | — | — |
31 +| 20 | Limitations | Liste à puces de 14 items. | Prose en 4 groupes (variable dépendante, régresseurs, inférence, validation) intégrant les nouvelles limites (51 grappes, bootstrap 200 tirages, comtés manquants à 97 %, QR/SHAP avec l'ancien codage du lot). | Protocole : pas de listes à puces dans le corps. | — |
32 +
33 +Aucun chiffre existant n'a été modifié sans recalcul ; toutes les valeurs v1.1 conservées (OLS, QR, ML aléatoire, ablation, SHAP,
34 +Moran OLS, imputation, winsorisation, stabilité QR) ont été revérifiées contre les pickles (`results/*.pkl`) et sont inchangées.
35 +
36 +## 2. Références
37 +
38 +**Avant : 70 entrées (toutes citées). Après : 93 entrées** (toutes citées, toutes vérifiées ; 28 DOI ajoutés aux entrées
39 +existantes ; 23 nouvelles). Vérification : API Crossref (`api.crossref.org/works?query.title=…&query.author=…`, pool poli)
40 +le 2026-10-17 ; Halvorsen–Palmquist 1980 et Kennedy 1981 (AER, absents de Crossref) vérifiés via RePEc / listes de références
41 +(WebSearch) ; Koenker 2005 et Diebold–Mariano 1995 vérifiés par résolution directe du DOI.
42 +
43 +Nouvelles (clé — source — DOI — rôle) :
44 +- `halvorsen1980interpretation` — AER 70(3) 474–475 — interprétation des dummies (§4.2).
45 +- `kennedy1981estimation` — AER 71(4) 801 — correction de biais (§4.2).
46 +- `mayer2019estimation` — J. Eur. Real Estate Res. 12(1) — 10.1108/JERER-08-2018-0035 — comparaison GBM/hédonique dans le temps.
47 +- `hu2019monitoring` — Land Use Policy 82 — 10.1016/j.landusepol.2018.12.030 — ML + hédonique (loyers).
48 +- `bogin2020appraisal` — JREFE 60(1–2) — 10.1007/s11146-019-09712-0 — précision AVM en zones rurales.
49 +- `lorenz2023interpretable` — Real Estate Economics 51(5) — 10.1111/1540-6229.12397 — ML interprétable (SHAP) en immobilier (en ligne 2022, imprimé 2023 : cité 2023 comme Waltl).
50 +- `antipov2012mass` — ESWA 39(2) — 10.1016/j.eswa.2011.08.077 — random forest en évaluation de masse.
51 +- `meyer2022machine` — Nature Communications 13:2208 — 10.1038/s41467-022-29838-9 — évaluation des cartes ML globales.
52 +- `bourassa2007spatial` — JREFE 35(2) — 10.1007/s11146-007-9036-8 — sous-marchés et prédiction.
53 +- `bourassa2003submarkets` — J. Housing Econ. 12(1) — 10.1016/S1051-1377(03)00003-2 — sous-marchés.
54 +- `goodman2003segmentation` — J. Housing Econ. 12(3) — 10.1016/S1051-1377(03)00031-7 — segmentation et précision hédonique.
55 +- `koenker2005quantile` — Cambridge UP — 10.1017/CBO9780511754098 — covariance jointe des quantiles.
56 +- `koenker1999goodness` — JASA 94(448) — 10.1080/01621459.1999.10473882 — pseudo-R².
57 +- `cameron2015practitioner` — J. Human Resources 50(2) — 10.3368/jhr.50.2.317 — inférence groupée.
58 +- `moulton1990illustration` — REStat 72(2) — 10.2307/2109724 — problème de Moulton.
59 +- `conley1999gmm` — J. Econometrics 92(1) — 10.1016/S0304-4076(98)00084-0 — HAC spatial.
60 +- `epple1987hedonic` — JPE 95(1) — 10.1086/261441 — identification hédonique.
61 +- `jones1996indicator` — JASA 91(433) — 10.1080/01621459.1996.10476680 — méthode de l'indicateur de manquant.
62 +- `schratz2019hyperparameter` — Ecological Modelling 406 — 10.1016/j.ecolmodel.2019.06.002 — réglage d'hyperparamètres spatial.
63 +- `ho2021predicting` — J. Property Research 38(1) — 10.1080/09599916.2020.1832558 — ML vs hédonique.
64 +- `perezrave2019machine` — J. Property Research 36(1) — 10.1080/09599916.2019.1587489 — ML pour inférence et prédiction.
65 +- `diebold1995comparing` — JBES 13(3) — 10.1080/07350015.1995.10524599 — comparaison de précision prédictive.
66 +- `palmquist2005property` — Handbook of Environmental Economics 2 — 10.1016/S1574-0099(05)02016-4 — revue des modèles hédoniques.
67 +
68 +Corrections d'entrées existantes : `sirmans2005composition` pages 3–43 → **1–44** (Crossref). DOI ajoutés à 28 entrées
69 +(anglin1996, anselin2010, baldauf2020, campbell2011, can1992, chen2016, cropper1988, ekeland2004, goodman1998, halvorsen1981,
70 +hill2013, knight2002, koenker1978, kok2017, lancaster1966, lesage2009, liao2012, lundberg2020, mackinnon1985, malpezzi2003,
71 +mullainathan2017, oates1969, roberts2013, roberts2017, rosen1974, sirmans2005, white1980, zietz2008). Références demandées mais
72 +non ajoutées : « Meyer & Roberts » (référence introuvable sous ce nom ; la littérature visée est couverte par Roberts et al. 2017
73 +et Meyer & Pebesma 2021/2022) ; Hastie et al. (manuel, non nécessaire).
74 +
75 +## 3. Réanalyses exécutées (script · durée · sortie)
76 +
77 +Toutes depuis les artefacts stockés (`data/processed/*.pkl`, `results/*.pkl`, `data/raw/us_housing.duckdb`), sur ce Mac
78 +(18 cœurs, 48 Go) ; XGBoost 1 000 arbres ≈ 7 s par ajustement.
79 +
80 +| Script | Contenu | Durée | Sorties (`results/revision/`) |
81 +|---|---|---|---|
82 +| `scripts/05_revision_geo_validation.py` | courbe R² vs arbres (random / early-stopping / 10 États) ; split aléatoire de taille appariée ; 5 variantes de features × 2 designs (+ R² within-state, R² à 100 arbres) ; OLS holdout géo (brut, sans aberrants, sans région) ; GroupKFold 5 plis × 2 variantes ; **leave-one-state-out 51 × 2 variantes** | ≈ 25 min (en concurrence avec 07) | `geo_trees_curve.csv`, `size_matched_split.csv`, `variants_two_designs.csv`, `ols_geo_holdout.csv`, `grouped_cv_by_state.csv`, `loso_by_state.csv` |
83 +| `scripts/06_revision_inference.py` | manquants réels par régresseur + valeurs aberrantes + ratio list/Zestimate ; SE groupées ZIP3/État ; 5 codages du lot ; 51 OLS par État + pooled vs EF vs interagi ; XGB sur jeu test géo élagué ; bootstrap R² (1 000 × 2 schémas) ; Moran OLS vs LGB vs XGB | ≈ 6 min | `missingness_full.csv`, `implausible_values.csv`, `list_to_zestimate.csv`, `cluster_se.csv`, `lot_recoding.csv`, `state_heterogeneity*.csv`, `pooled_vs_interacted.csv`, `xgb_geo_trimmed.csv`, `r2_bootstrap.csv`, `moran_xgb_vs_ols.csv` |
84 +| `scripts/07_revision_qr_bootstrap.py` | QR τ = 0,10 et 0,90 sur le sous-échantillon seed 42 ; 200 tirages bootstrap appariés obs. + 200 grappes ZIP3 (8 workers) | ≈ 25 min | `iqr_wald_bootstrap.csv` |
85 +| `scripts/08_revision_tables_figures.py` | fragments LaTeX `paper/tables/*.tex` (19) + `figures/fig12–fig14` | < 1 min | — |
86 +
87 +Vérification de reproductibilité : la valeur publiée R² géo = 0,4250 (ablation, modèle complet) est reproduite exactement
88 +(0,42501500587502516) par `src/wp3/models.py`, et R² aléatoire 0,8327 également.
89 +
90 +## 4. Non modifié faute de données / hors périmètre (< 30 min)
91 +
92 +- Les résultats QR (5 quantiles), l'ablation, les SHAP et la comparaison ML aléatoire conservent le codage publié de ln(lot) = 0
93 + (ré-estimation complète du pipeline perdu : pas disponible ; XGBoost insensible au codage, QR du lot sous-estimée — signalé).
94 +- Pas de modèle spatial (SAR/SEM/GWR), pas de HAC spatial (Conley), pas de wild cluster bootstrap.
95 +- Pas de blocage comté/MSA (county_fips manquant à 97 %).
96 +- Pas de réglage d'hyperparamètres (nested CV spatial) ; pas de CatBoost ; pas de réplication sur prix de transaction ; pas de
97 + données climatiques.
98 +- `main_anon.tex` n'existe pas (pas de soumission anonyme en cours) : rien à recompiler.
99 +
100 +## 5. Forme
101 +
102 +- `\WPversion` 1.1 → 1.2 ; `\WPdate` May 2026 → October 2026 ; abstract et mots-clés réécrits (vocabulaire commun du programme :
103 + « hedonic price function », « out-of-sample », « MdAPE », « automated valuation model »).
104 +- Listes à puces du corps converties en prose (introduction, méthodologie, limitations, résultats) ; énumérations conservées
105 + uniquement dans l'annexe « Robustness Agenda ».
106 +- Nouvelles figures : `fig12_geo_trees_curve.png`, `fig13_loso_by_state.png`, `fig14_state_heterogeneity.png` (palette du papier :
107 + bleu/brique/gris avec marqueurs et styles de ligne comme encodage secondaire ; fig9 déplacée en annexe).
108 +- Fragments de tables générés (`paper/tables/`, `\input` dans les sections ; dernière ligne sans `\\` — gotcha « Misplaced \noalign »
109 + avec `\input` en fin de ligne de tabular).
110 +- Compilation : `cd paper && make` → 0 erreur, 0 citation/référence indéfinie, pas d'Overfull > 10 pt ; PDF 82 pages
111 + (60 avant révision).
added docs/REVIEW-REPORT.md +160 −0
@@ -0,0 +1,160 @@
1 +# REVIEW REPORT — Editorial board, révision scientifique complète (2026-10-17)
2 +
3 +**Papier** : UQO Working Paper No. 3 — *Hedonic Housing Price Models for the United States: A Multi-Method Comparison of
4 +Parametric, Quantile, and Machine Learning Approaches* (Simon-Pierre Boucher). Version révisée : **1.2, October 2026**
5 +(avant : 1.1, May 2026, 60 pages, 70 références ; après : 82 pages, 93 références, toutes vérifiées).
6 +Journal d'audit détaillé : `docs/CHANGELOG-REVISION.md`.
7 +
8 +Board : économie immobilière et marchés du logement ; économétrie appliquée et inférence ; économétrie spatiale ; prix hédoniques
9 +et évaluation ; apprentissage automatique et économie computationnelle ; méthodologie scientifique. Lecture intégrale du
10 +manuscrit, du code (`src/`, `scripts/01–04`), des artefacts (`data/`, `results/`), des documents d'audit antérieurs et de la
11 +bibliographie ; réanalyses sur les artefacts stockés (données locales présentes, 2,8 Go ; chaque réanalyse < 30 min).
12 +
13 +---
14 +
15 +## 1. Verdict d'ensemble
16 +
17 +Le papier pose une question importante et bien formulée — la précision des modèles ML hédoniques mesurée par validation
18 +aléatoire survit-elle à l'extrapolation vers des marchés non observés ? — sur un jeu de données d'une ampleur rare (788 842
19 +annonces, 51 juridictions), avec une discipline d'interprétation (gradients de prix affichés, non WTP) exemplaire. La version 1.1
20 +était toutefois fragilisée par **quatre défauts que la révision a identifiés et corrigés**, dont trois sont des défauts de
21 +documentation des données qui changeaient des conclusions substantielles :
22 +
23 +1. **Les trois variables scolaires sont imputées (médiane d'État) pour 93 % des annonces** et n'apparaissaient pas dans la table
24 + des manquants. Le « school rating », 3e variable SHAP, pilier du bloc « neighbourhood » (+17,6 pp), est un identifiant d'État.
25 +2. **Le régresseur ln(lot) valait 0 pour 16,5 % des annonces** (codage avant imputation). L'élasticité publiée (0,018, « triplée »
26 + en retirant les imputés) est un artefact ; la valeur correcte est **0,095**.
27 +3. **L'« effondrement catastrophique » de l'OLS en holdout géographique (R² = −2 × 10⁶)** venait de 204 annonces test aux
28 + valeurs corrompues (places de stationnement jusqu'à 1,1 × 10¹¹). Sans ces 0,6 % d'enregistrements, **OLS atteint 0,539 hors
29 + État — autant que le meilleur XGBoost (0,544 à 100 arbres) et plus que le modèle complet (0,426)**.
30 +4. **L'inférence HC3 surestimait la précision d'un ordre de grandeur** (ratios médians des SE groupées : 7,6 par ZIP3, 11,6 par
31 + État ; 57 → 33 coefficients significatifs). Le test inter-quantile « à covariance jointe » décrit dans le texte n'était pas
32 + celui du code (covariance mise à zéro).
33 +
34 +Ces corrections **renforcent** la contribution méthodologique plutôt qu'elles ne l'affaiblissent : la révision montre *par quels
35 +canaux* la fuite spatiale opère (niveaux de prix d'État mémorisés via les dummies régionales, les imputations d'État et la capacité
36 +de boosting), sépare l'erreur de niveau de la structure intra-marché (R² within-state 0,62 stable), et établit que la régression
37 +semi-log est compétitive hors marché. Le message « random splits overstate ML » devient « random splits overstate ML, *and here
38 +is the anatomy* », avec des résultats nouveaux (courbe d'arbres, LOSO 51 États, hétérogénéité par État) qui n'existaient pas.
39 +
40 +---
41 +
42 +## 2. Diagnostic par section
43 +
44 +### Introduction
45 +- Forces : enjeux (AVM, évaluation foncière), trois tensions, contribution « spatial leakage » bien mise en avant, discipline
46 + d'interprétation. — Faiblesses (v1.1) : contributions énumérées en liste ; mélange R² in-sample/out-of-sample (0,634 → 0,725) ;
47 + chiffres géo 0,425–0,547 non expliqués. — Révisé : prose, 5 contributions + 1 « data finding », nombres cohérents, OLS hors État
48 + corrigé, mécanismes annoncés.
49 +
50 +### Revue de littérature
51 +- Forces : 10 thèmes, verdict Wadoux et al. bien intégré, identification (Bartik, Ekeland et al., Kuminoff et al., Bishop et al.).
52 +- Faiblesses : rien sur le marché unique de Rosen / sous-marchés ; rien sur l'inférence groupée ni l'interprétation des dummies ;
53 + littérature AVM/ML mince (Mayer et al., Bogin–Shui, Lorenz et al., Antipov–Pokryshevskaya, Pérez-Rave, Ho et al. absents) ;
54 + Meyer–Pebesma 2022 et Schratz et al. 2019 absents côté validation spatiale ; `chen2016xgboost` cité comme étude de valorisation.
55 +- Révisé : 23 références ajoutées (toutes vérifiées, DOI), paragraphe sous-marchés, paragraphe inférence/dummies, thème AVM étoffé,
56 + « gap » reformulé.
57 +
58 +### Données
59 +- Forces : filtres documentés, caveat prix affichés bien ancré.
60 +- Faiblesses graves : table des manquants incomplète (variables scolaires 93 %, parking 24 %, étages 26 %, HOA fee 63 %, matériaux
61 + 31 % absents) ; règle du lot décrite ≠ codage réel ; valeurs aberrantes non dénombrées ; part des manquants exprimée sur les
62 + données brutes et non sur l'échantillon analytique.
63 +- Révisé : table complète générée depuis la base brute (`tables/missingness.tex`), table des aberrants, sous-section « Data
64 + Quality », ratio prix affiché / Zestimate (médiane 1,020 ; 91 % > 1) comme borne descriptive de l'écart liste/valeur.
65 +
66 +### Méthodologie
67 +- Forces : équations OLS/QR/XGB/SHAP/Moran présentes.
68 +- Faiblesses : interprétation des dummies sans Halvorsen–Palmquist/Kennedy ; SE HC3 seules malgré Moran 0,27 et régresseurs
69 + agrégés ; équation inter-quantile avec −2Cov non appliquée ; définitions de validation vagues (un seul pli ; 56 % des données
70 + retirées ; confusion taille/extrapolation) ; pas de métrique within-market ; hyperparamètres fixes sans discussion.
71 +- Révisé : Eq. Halvorsen–Palmquist/Kennedy, Eq. cluster-robust (ZIP3/État) + Moulton/Conley, bootstrap apparié (obs. et grappes)
72 + pour la covariance inter-quantile, pseudo-R² de Koenker–Machado, MdAPE (Steurer et al.), 4 designs de validation définis
73 + (aléatoire, 10 États, GroupKFold 5, LOSO), Eq. R² within-state, variantes de features, discussion de la capacité.
74 +
75 +### Résultats
76 +- Incohérences trouvées : 0,547 vs 0,425 (« training-set composition ») — en réalité **nombre d'arbres** (pic 0,550 à 75, 0,425
77 + à 1 000) ; « OLS fails catastrophically because held-out states span all four regions » — faux (valeurs corrompues) ; « ZIP3 →
78 + XGB gap = non-linéarité 10,8 pp » — non fondé (XGB n'observe pas les ZIP) ; « structural features explain 35 % of geographic
79 + variation » — formulation erronée ; « 886 ZIP3 » — 885 + code manquant ; gains EF « +4,7/+4,7 » — +4,8/+4,7 hors échantillon ;
80 + instabilité de l'âge attribuée à l'hétérogénéité géographique de sous-échantillons **aléatoires** — impossible.
81 +- Nouveaux résultats : Table SE groupées ; Moran OLS 0,263 vs XGB 0,079 (test set) ; hétérogénéité par État (élasticité surface
82 + 0,06–1,15 ; pooled 0,619 → EF 0,690 → interagi 0,751) ; bootstrap R² (XGB − OLS = 0,203, IC ZIP3 [0,193 ; 0,213]) ; designs
83 + (taille appariée 0,829 ; within-state 0,618) ; OLS hors État 0,539 ; courbe d'arbres ; GroupKFold (0,620) ; LOSO (médiane
84 + 0.653) ; variantes (sans région 0,519 ; sans école 0,377 ; indicateurs de manquants 0,446).
85 +
86 +### Robustesse
87 +- Imputation/winsorisation : réinterprétées (artefact de codage) ; nouvelle sous-section « Lot-size coding » ; stabilité QR
88 + réinterprétée ; matrice de robustesse réécrite (ancien/nouveau).
89 +
90 +### Discussion / Conclusion / Limites
91 +- Réécrites autour de 5 messages (le 5e, « la documentation des données fait partie de la méthode », est nouveau) ; comparaisons
92 + à la littérature conservées et étendues (Campbell et al. 27 % ; Sirmans et al. ; Bogin–Shui ; Schratz et al.) ; limites en prose,
93 + 4 groupes, incluant les nouvelles (51 grappes, 200 tirages, comtés manquants, QR/SHAP avec l'ancien codage du lot).
94 +
95 +---
96 +
97 +## 3. Méthodologie — verdict motivé sur chaque point du §3 du master prompt
98 +
99 +| Point | Verdict | Motif / action |
100 +|---|---|---|
101 +| Spécification justifiée | Oui, avec réserve | Semi-log justifié (Cropper et al.) ; mais une équation nationale unique agrège 51 marchés — désormais mesuré (§5.3). |
102 +| Hypothèses d'estimation explicites | Partiellement avant → oui | Indépendance implicite derrière HC3 explicitée et levée (SE groupées) ; hypothèse d'un seul marché discutée. |
103 +| Variables correctement définies | **Non** avant → oui | 93 % de scolaire imputé, ln(lot) = 0, parking/étages corrompus : désormais documentés (Tables missing / implausible). |
104 +| Effets fixes appropriés | Oui | Région → État → ZIP3 ; comté/MSA impossibles (county_fips manquant 97 %). |
105 +| Dépendance spatiale/temporelle défendable | Diagnostiquée, non modélisée | Moran 0,27 (OLS), 0,08 (XGB) ; pas de SAR/SEM — limite assumée. Pas de dimension temporelle. |
106 +| Erreurs-types correctement spécifiées | **Non** avant → oui | HC3 → groupées ZIP3/État ; bootstrap apparié pour QR ; IC bootstrap pour R². |
107 +| Construction de l'échantillon transparente | Oui pour les filtres ; **non** pour le codage | Scripts amont perdus ; la révision documente le codage **effectif** trouvé dans les artefacts. |
108 +| Robustesse face aux vraies menaces | Partiellement avant → oui | Ajout : taille appariée, arbres, GroupKFold, LOSO, variantes école/région/indicateurs, recodage lot, OLS hors État élagué. |
109 +| Interprétation des coefficients | Correcte (100(e^β−1)), désormais référencée | Halvorsen–Palmquist/Kennedy ; coefficient scolaire relu comme effet d'État. |
110 +| Significativité statistique vs économique | Améliorée | Les étoiles HC3 relativisées ; discussion des grandeurs. |
111 +| Allégations causales | Aucune | Discipline maintenue partout. |
112 +
113 +---
114 +
115 +## 4. Littérature
116 +
117 +- **Vérifiées** : les 70 entrées existantes (OpenAlex en août 2026 ; recontrôle Crossref le 2026-10-17 pour les 35 sans DOI →
118 + 28 DOI ajoutés ; pages Sirmans et al. corrigées 1–44). Aucune entrée douteuse restante ; `chen2016xgboost` conservée mais plus
119 + citée comme étude de valorisation.
120 +- **Ajoutées (23, toutes vérifiées, DOI dans le .bib)** : Halvorsen & Palmquist 1980 ; Kennedy 1981 ; Mayer, Bourassa, Hoesli &
121 + Scognamiglio 2019 ; Hu et al. 2019 ; Bogin & Shui 2020 ; Lorenz, Willwersch, Cajias & Fuerst 2023 ; Antipov & Pokryshevskaya
122 + 2012 ; Meyer & Pebesma 2022 ; Bourassa, Cantoni & Hoesli 2007 ; Bourassa, Hoesli & Peng 2003 ; Goodman & Thibodeau 2003 ;
123 + Koenker 2005 ; Koenker & Machado 1999 ; Cameron & Miller 2015 ; Moulton 1990 ; Conley 1999 ; Epple 1987 ; Jones 1996 ;
124 + Schratz et al. 2019 ; Ho, Tang & Wong 2021 ; Pérez-Rave et al. 2019 ; Diebold & Mariano 1995 ; Palmquist 2005.
125 +- **Retirées** : aucune. **Non trouvée** : « Meyer & Roberts » (demande de l'orchestrateur) — pas de référence identifiable ;
126 + couverte par Roberts et al. 2017 et Meyer & Pebesma 2021/2022.
127 +
128 +---
129 +
130 +## 5. Limites restantes (après révision)
131 +
132 +1. Prix affichés, pas de transactions ; écart borné par le Zestimate mais covariance avec les attributs inconnue.
133 +2. Scripts amont perdus : échantillon analytique reproductible seulement depuis les pickles ; les QR, l'ablation et les SHAP
134 + gardent ln(lot) = 0 (inoffensif pour les arbres, sous-estime le gradient de lot dans les trajectoires quantiles).
135 +3. 51 grappes d'État très inégales ; pas de HAC spatial ni de wild cluster bootstrap ; pas de modèle spatial.
136 +4. Validation : LOSO et 10 États = extrapolation ; pas de blocage comté/MSA (identifiants manquants) ; hyperparamètres non réglés
137 + (le réglage aléatoire n'aiderait pas, cf. courbe d'arbres).
138 +5. Échantillon non représentatif (Sud 56,6 %), un seul instantané.
139 +
140 +## 6. Analyses recommandées non exécutées
141 +
142 +- Reconstruction complète du pipeline brut → échantillon avec codage correct du lot, puis ré-estimation QR/ablation/SHAP.
143 +- HAC spatial (Conley) et wild cluster bootstrap par État ; SAR/SEM/GWR.
144 +- Nested CV avec plis internes bloqués par État pour le nombre d'arbres et la profondeur (Schratz et al. 2019) ; CatBoost.
145 +- Blocage comté/MSA (si identifiants obtenus) pour tracer le continuum interpolation–extrapolation.
146 +- Réplication sur prix de vente ; intégration de risques climatiques ; mesure scolaire observée ; comparaison ACS/Census.
147 +- GAM/splines pour décomposer non-linéarité vs partition spatiale ; calibration par décile de prix.
148 +
149 +## 7. Maturité pour publication
150 +
151 +- **Revues cibles** : *Journal of Housing Economics* ou *Journal of Real Estate Research* (contribution méthodologique + données
152 + nationales) ; *Real Estate Economics* envisageable si la reconstruction du pipeline et une réplication sur transactions sont
153 + ajoutées ; *Journal of Property Research* / *Journal of European Real Estate Research* comme cibles AVM.
154 +- **Risques de rejet** : (i) prix affichés (objection standard — bien défendue mais rédhibitoire pour certains referees) ;
155 + (ii) pipeline amont perdu et codage du lot découvert a posteriori (transparence totale désormais, mais un referee peut exiger la
156 + reconstruction) ; (iii) 93 % de variables scolaires imputées — le papier les traite honnêtement comme identifiants d'État, mais
157 + un referee pourrait demander de les retirer de la spécification principale ; (iv) absence de modèles spatiaux.
158 +- **Évaluation** : passage de « working paper solide mais fragile sur les données » à « manuscrit soumissible après
159 + reconstruction du pipeline » ; la contribution méthodologique (anatomie de la fuite spatiale, within-state R², courbe d'arbres,
160 + LOSO, SE groupées) est désormais défendable devant un referee exigeant.
added figures/fig12_geo_trees_curve.png +0 −0

Binary file not shown.

added figures/fig13_loso_by_state.png +0 −0

Binary file not shown.

added figures/fig14_state_heterogeneity.png +0 −0

Binary file not shown.

modified paper/appendix/appendix.tex +104 −45
@@ -11,27 +11,42 @@
11 11 \begin{figure}[H]
12 12 \centering
13 13 \includegraphics[width=0.85\textwidth]{figures/fig6_shap_importance.png}
14 − \caption{Feature Importance Bar Chart: Mean Absolute SHAP Values (XGBoost). These values reflect predictive contributions, not causal importance.}
14 + \caption{Mean absolute SHAP values, XGBoost, top 20 features. These values are
15 + predictive contributions, not causal effects; the school-rating variable is a state
16 + median for 93\% of listings (Section~\ref{sec:missing}).}
15 17 \label{fig:shap_bar}
16 18 \end{figure}
17 19
18 20 \begin{figure}[H]
19 21 \centering
20 22 \includegraphics[width=\textwidth]{figures/fig11_shap_interactions.png}
21 − \caption{SHAP Values for Interaction Terms: (a) Waterfront $\times$ Log(Living Area); (b) Pool $\times$ South Region}
23 + \caption{SHAP values for interaction terms: (a) waterfront $\times$ $\ln$(living
24 + area); (b) pool $\times$ South region.}
22 25 \label{fig:shap_interactions}
23 26 \end{figure}
24 27
28 +\begin{figure}[H]
29 + \centering
30 + \includegraphics[width=\textwidth]{figures/fig9_marginal_effects.png}
31 + \caption{Unconditional bivariate relationships between key attributes and log
32 + listing price (raw scatter plots and binned means). They do not control for other
33 + attributes and should not be read as conditional effects.}
34 + \label{fig:marginal}
35 +\end{figure}
25 36
26 37 \section{Full OLS Coefficient Table}
27 38 \label{app:ols_full}
28 39
29 −Table~\ref{tab:ols_full} reports the complete set of standardized OLS coefficients, including all categorical controls.
40 +Table~\ref{tab:ols_full} reports the complete set of standardised OLS coefficients,
41 +including all categorical controls, with HC3 standard errors. Cluster-robust standard
42 +errors for the main coefficients are in Table~\ref{tab:cluster_se}; across all 63
43 +coefficients, ZIP3-clustered standard errors are on median 7.6 times the HC3 values and
44 +state-clustered standard errors 11.6 times.
30 45
31 46 \begin{landscape}
32 47 \begin{table}[H]
33 48 \centering
34 −\caption{Full OLS Regression Results Including All Categorical Controls (Standardized)}
49 +\caption{Full OLS Regression Results Including All Categorical Controls (Standardised)}
35 50 \label{tab:ols_full}
36 51 \begin{threeparttable}
37 52 \scriptsize
@@ -49,7 +64,7 @@ Age$^{2\dagger}$ & 0.051 & 0.002 & *** & & Roof: Unknown & 0.004 & 0.008 & \\
49 64 Stories$^\dagger$ & 0.000 & 0.000 & & & Constr: Concrete/Block & 0.269 & 0.003 & *** \\
50 65 Bath/Bed Ratio$^\dagger$ & $-$0.021 & 0.002 & *** & & Constr: Stucco & 0.149 & 0.002 & *** \\
51 66 Sqft/Bed$^\dagger$ & $-$0.002 & 0.002 & & & Constr: Stone & 0.145 & 0.005 & *** \\
52 −$\ln$(Lot Size)$^\dagger$ & 0.070 & 0.001 & *** & & Constr: Wood/Frame & 0.103 & 0.002 & *** \\
67 +$\ln$(Lot Size)$^{\dagger\ddagger}$ & 0.070 & 0.001 & *** & & Constr: Wood/Frame & 0.103 & 0.002 & *** \\
53 68 Pool & 0.029 & 0.003 & *** & & Constr: Vinyl & 0.012 & 0.002 & *** \\
54 69 Spa & 0.033 & 0.003 & *** & & Constr: Steel & 0.027 & 0.014 & * \\
55 70 Basement & $-$0.042 & 0.002 & *** & & Constr: Other & 0.075 & 0.002 & *** \\
@@ -59,14 +74,14 @@ Waterfront & $-$0.135 & 0.032 & *** & & Found: Crawlspace & 0.181 & 0.006 & ***
59 74 Central Air & 0.069 & 0.001 & *** & & Found: Slab & 0.122 & 0.005 & *** \\
60 75 Forced Air & $-$0.023 & 0.002 & *** & & Found: Pier/Raised & 0.161 & 0.006 & *** \\
61 76 Hardwood & 0.125 & 0.001 & *** & & Found: Stone & 0.032 & 0.010 & ** \\
62 −Parking$^\dagger$ & 0.000 & 0.099 & & & Found: Other & 0.144 & 0.006 & *** \\
77 +Parking$^{\dagger\S}$ & 0.000 & 0.099 & & & Found: Other & 0.144 & 0.006 & *** \\
63 78 Luxury$^\dagger$ & 0.044 & 0.002 & *** & & Found: Unknown & 0.174 & 0.005 & *** \\
64 79 Walk$^\dagger$ & $-$0.011 & 0.001 & *** & & Northeast & 0.487 & 0.003 & *** \\
65 80 Bike$^\dagger$ & 0.072 & 0.001 & *** & & South & 0.022 & 0.003 & *** \\
66 81 Transit$^\dagger$ & 0.052 & 0.001 & *** & & West & 0.401 & 0.003 & *** \\
67 −School Rating$^\dagger$ & $-$0.049 & 0.001 & *** & & sqft$\times$Age$^\dagger$ & $-$0.110 & 0.014 & *** \\
68 −School Count$^\dagger$ & $-$0.002 & 0.001 & *** & & Pool$\times$South & 0.008 & 0.001 & *** \\
69 −School Dist.$^\dagger$ & $-$0.016 & 0.001 & *** & & WF$\times$sqft$^\dagger$ & 0.137 & 0.009 & *** \\
82 +School Rating$^{\dagger\P}$ & $-$0.049 & 0.001 & *** & & sqft$\times$Age$^\dagger$ & $-$0.110 & 0.014 & *** \\
83 +School Count$^{\dagger\P}$ & $-$0.002 & 0.001 & *** & & Pool$\times$South & 0.008 & 0.001 & *** \\
84 +School Dist.$^{\dagger\P}$ & $-$0.016 & 0.001 & *** & & WF$\times$sqft$^\dagger$ & 0.137 & 0.009 & *** \\
70 85 Tax Rate$^\dagger$ & $-$0.029 & 0.001 & *** & & Base$\times$North & $-$0.025 & 0.001 & *** \\
71 86 Condo & $-$0.037 & 0.004 & *** & & Condo$\times$Walk$^\dagger$ & 0.082 & 0.001 & *** \\
72 87 HOA & $-$0.108 & 0.002 & *** & & Age$\times$Lux$^\dagger$ & 0.044 & 0.001 & *** \\
@@ -79,42 +94,83 @@ Foreclosure & $-$0.406 & 0.010 & *** & & & & & \\
79 94 \end{tabular}
80 95 \begin{tablenotes}
81 96 \footnotesize
82 −\item \textit{Notes:} HC3 robust standard errors. $^\dagger$Standardized continuous variables. Reference categories: Roof = Flat; Construction = Brick; Foundation = Basement; Region = Midwest. *** $p<0.001$, ** $p<0.01$, * $p<0.05$.
97 +\item \textit{Notes:} HC3 robust standard errors; significance stars refer to HC3 and
98 +overstate precision (Section~\ref{sec:cluster_results}). $^\dagger$Standardised
99 +continuous variables. $^\ddagger$Published coding, $\ln(\text{lot}) = 0$ for 16.5\% of
100 +listings; see Table~\ref{tab:lot_recoding}. $^\S$Variance dominated by corrupt entries
101 +(Table~\ref{tab:implausible}). $^\P$State median for 93\% of listings. Reference
102 +categories: Roof = Flat; Construction = Brick; Foundation = Basement; Region = Midwest.
103 +*** $p<0.001$, ** $p<0.01$, * $p<0.05$.
83 104 \end{tablenotes}
84 105 \end{threeparttable}
85 106 \end{table}
86 107 \end{landscape}
87 108
109 +\section{Leave-One-State-Out Results by State}
110 +\label{app:loso}
111 +
112 +Table~\ref{tab:loso_states} reports, for each of the 51 jurisdictions, the accuracy of
113 +the full XGBoost model trained on the other fifty (Section~\ref{sec:loso}). The mean
114 +error is the average of predicted minus actual log price in the held-out state, i.e.\ the
115 +level bias of the out-of-state prediction; a value of $+0.10$ means that the model
116 +over-prices the state by about 10\%.
117 +
118 +\begin{table}[H]
119 +\centering
120 +\caption{Leave-One-State-Out Accuracy of the Full XGBoost Model, by Held-Out State}
121 +\label{tab:loso_states}
122 +\begin{threeparttable}
123 +\scriptsize
124 +\renewcommand{\arraystretch}{0.88}
125 +\begin{tabular}{lrrrrr}
126 +\toprule
127 +State & $N$ & $R^2$ (1,000 rounds) & $R^2$ (100 rounds) & Mean error & MdAPE (\%) \\
128 +\midrule
129 +\input{tables/loso_states} \\
130 +\bottomrule
131 +\end{tabular}
132 +\begin{tablenotes}
133 +\footnotesize
134 +\item \textit{Notes:} Each row is a separate model trained on all listings outside the
135 +state. Sorted by $R^2$ at 1,000 rounds. Mean error in log points. Generated by
136 +\texttt{scripts/05\_revision\_geo\_validation.py}.
137 +\end{tablenotes}
138 +\end{threeparttable}
139 +\end{table}
88 140
89 141 \section{Robustness Agenda}
90 142 \label{app:robustness_agenda}
91 143
92 −The following robustness checks and extensions are planned or completed. Items marked with $\checkmark$ have been completed in this version; unmarked items are left for future work.
144 +The following checks and extensions have been completed ($\checkmark$) or remain open.
93 145
94 146 \begin{enumerate}[nosep]
95 147 \item[$\checkmark$] ZIP3-level fixed effects (Section~\ref{sec:progressive_fe}).
96 − \item County-level and MSA-level fixed effects.
97 − \item Spatial lag and spatial error model estimation.
98 − \item Spatial cross-validation (train on some regions, test on others) at finer geographic levels.
99 − \item[$\checkmark$] Inter-quantile Wald tests for coefficient equality across quantiles (Section~\ref{sec:qr_results}).
100 − \item[$\checkmark$] Re-estimation excluding imputed observations (Section~\ref{sec:imputation_sensitivity}).
148 + \item[$\checkmark$] Cluster-robust inference by ZIP3 and by state (Section~\ref{sec:cluster_results}).
149 + \item[$\checkmark$] State-by-state estimation and fully interacted prediction (Section~\ref{sec:state_heterogeneity}).
150 + \item County-level and MSA-level fixed effects (county identifiers are missing for 97\% of listings in the extract).
151 + \item Spatial lag, spatial error and spatial HAC estimation.
152 + \item[$\checkmark$] Inter-quantile Wald tests with a paired cluster-bootstrap covariance (Section~\ref{sec:qr_results}).
153 + \item[$\checkmark$] Re-estimation excluding imputed observations and with corrected lot-size coding (Sections~\ref{sec:imputation_sensitivity}--\ref{sec:lot_recoding}).
154 + \item[$\checkmark$] Missingness indicators in the machine-learning model (Section~\ref{sec:variants}).
101 155 \item CatBoost benchmark with native categorical handling.
102 − \item Nested cross-validation for hyperparameter tuning.
103 − \item[$\checkmark$] SHAP stability comparison across XGBoost, LightGBM, and Random Forest (Section~\ref{sec:shap_results}).
104 − \item Integration of climate risk data from First Street Foundation or FEMA flood maps.
105 − \item Replication using transaction prices from recently sold listings.
106 − \item GAM/spline models to decompose the ML gain into non-linearity versus spatial partitioning.
107 − \item Comparison of sample distribution to ACS and Census benchmarks by state and price tier.
156 + \item Nested cross-validation for hyperparameter tuning, with spatially blocked inner folds \citep{schratz2019hyperparameter}.
157 + \item[$\checkmark$] SHAP stability across XGBoost, LightGBM and random forest (Section~\ref{sec:shap_results}).
158 + \item Integration of climate-risk data (First Street Foundation or FEMA flood maps).
159 + \item Replication on transaction prices.
160 + \item GAM or spline models to decompose the machine-learning gain into non-linearity versus spatial partitioning.
161 + \item Comparison of the sample distribution with ACS and Census benchmarks by state and price tier.
108 162 \item Calibration plots by price decile for all models.
109 − \item[$\checkmark$] Winsorization sensitivity (Section~\ref{sec:winsorization}).
110 − \item[$\checkmark$] Feature ablation analysis for XGBoost (Section~\ref{sec:ablation}).
111 − \item[$\checkmark$] XGBoost with latitude/longitude coordinates (Section~\ref{sec:geo_features}).
112 − \item[$\checkmark$] XGBoost without geographic features (Section~\ref{sec:geo_features}).
113 − \item[$\checkmark$] Moran's $I$ subsample stability (Section~\ref{sec:spatial_autocorrelation}).
114 − \item[$\checkmark$] Quantile regression stability across 10 subsamples (Section~\ref{sec:qr_stability}).
163 + \item[$\checkmark$] Winsorisation sensitivity (Section~\ref{sec:winsorization}).
164 + \item[$\checkmark$] Feature ablation for XGBoost (Section~\ref{sec:ablation}).
165 + \item[$\checkmark$] XGBoost with and without geographic features and school variables (Section~\ref{sec:variants}).
166 + \item[$\checkmark$] Boosting-round sensitivity under geographic holdout (Section~\ref{sec:trees}).
167 + \item[$\checkmark$] Size-matched random split (Section~\ref{sec:ml_geo}).
168 + \item[$\checkmark$] Grouped five-fold and leave-one-state-out cross-validation (Section~\ref{sec:loso}).
169 + \item[$\checkmark$] Moran's $I$ subsample stability and comparison across estimators (Section~\ref{sec:spatial_autocorrelation}).
170 + \item[$\checkmark$] Quantile-regression stability across ten subsamples (Section~\ref{sec:qr_stability}).
171 + \item[$\checkmark$] Bootstrap confidence intervals for test-set $R^2$ differences (Section~\ref{sec:ml_random}).
115 172 \end{enumerate}
116 173
117 −
118 174 \section{Reproducibility Checklist}
119 175 \label{app:reproducibility}
120 176
@@ -129,38 +185,41 @@ The following robustness checks and extensions are planned or completed. Items m
129 185 Item & Status & Notes \\
130 186 \midrule
131 187 \multicolumn{3}{l}{\textit{Data}} \\
132 −Data source identified & Yes & Zillow active listings \\
188 +Data source identified & Yes & Zillow active listings, 2025--2026 \\
133 189 Sample construction documented & Yes & Table~\ref{tab:attrition} \\
134 −Missing data rates reported & Yes & Table~\ref{tab:missing} \\
135 −Imputation method documented & Yes & State-level medians \\
136 −Imputation sensitivity tested & Yes & Table~\ref{tab:imputation} \\
190 +Missing data rates reported & Yes & Table~\ref{tab:missing}, all regressor inputs \\
191 +Imputation rules documented & Yes & Table~\ref{tab:missing} \\
192 +Imputation sensitivity tested & Yes & Tables~\ref{tab:imputation}, \ref{tab:lot_recoding}, \ref{tab:variants} \\
193 +Implausible values documented & Yes & Table~\ref{tab:implausible} \\
137 194 \midrule
138 195 \multicolumn{3}{l}{\textit{Methodology}} \\
139 −Model specifications documented & Yes & Eq.~\ref{eq:ols}--\ref{eq:moran} \\
140 −Hyperparameters reported & Yes & Section~\ref{sec:methodology} \\
141 −Random seeds reported & Yes & Seed = 42 \\
142 −Validation design documented & Yes & Section~\ref{sec:validation_designs} \\
196 +Model specifications documented & Yes & Eq.~\eqref{eq:ols}--\eqref{eq:moran} \\
197 +Hyperparameters reported & Yes & Section~\ref{sec:ml_method} \\
198 +Random seeds reported & Yes & Seed 42; QR stability seeds in \texttt{src/wp3/config.py} \\
199 +Validation designs documented & Yes & Section~\ref{sec:validation_designs} \\
143 200 \midrule
144 201 \multicolumn{3}{l}{\textit{Results}} \\
145 202 Point estimates reported & Yes & Tables~\ref{tab:ols_results}--\ref{tab:shap_stability} \\
146 −Standard errors / CIs reported & Yes (OLS, QR) & HC3 standard errors \\
147 −Multiple comparisons addressed & Partially & Inter-quantile tests \\
203 +Standard errors & Yes & HC3 and cluster-robust (Table~\ref{tab:cluster_se}) \\
204 +Bootstrap inference & Yes & Tables~\ref{tab:iqr_tests}, \ref{tab:r2_bootstrap} \\
148 205 Effect sizes in natural units & Yes & Table~\ref{tab:ols_unstd} \\
149 206 \midrule
150 207 \multicolumn{3}{l}{\textit{Robustness}} \\
151 −Sensitivity to data quality & Yes & Sections~\ref{sec:imputation_sensitivity}--\ref{sec:winsorization} \\
208 +Sensitivity to data quality & Yes & Sections~\ref{sec:imputation_sensitivity}--\ref{sec:lot_recoding} \\
152 209 Sensitivity to model choice & Yes & Table~\ref{tab:ml_comparison} \\
153 −Sensitivity to validation design & Yes & Tables~\ref{tab:geo_holdout}--\ref{tab:geo_role} \\
210 +Sensitivity to validation design & Yes & Tables~\ref{tab:designs}--\ref{tab:grouped_cv} \\
154 211 Cross-model stability & Yes & Table~\ref{tab:shap_stability} \\
155 212 \midrule
156 −\multicolumn{3}{l}{\textit{Code and Data Availability}} \\
157 −Code available & Yes & Replication package (\texttt{src/}, \texttt{scripts/}, pinned \texttt{requirements.txt}) \\
158 −Data available & On request & Subject to Zillow ToS \\
213 +\multicolumn{3}{l}{\textit{Code and data availability}} \\
214 +Code available & Yes & \texttt{src/}, \texttt{scripts/01}--\texttt{08}, pinned \texttt{requirements.txt} \\
215 +Upstream sample-construction code & No & Lost before the 2026-08-05 restructuring; stored artefacts are canonical \\
216 +Data available & On request & Subject to Zillow terms of service \\
159 217 \bottomrule
160 218 \end{tabular}
161 219 \begin{tablenotes}
162 220 \small
163 −\item \textit{Notes:} This checklist follows recommended practices for empirical reproducibility in applied economics.
221 +\item \textit{Notes:} Scripts 05--08 were added in the October 2026 revision; every
222 +table they feed is generated from a stored CSV in \texttt{results/revision/}.
164 223 \end{tablenotes}
165 224 \end{threeparttable}
166 225 \end{table}
modified paper/main.pdf +0 −0

Binary file not shown.

modified paper/main.tex +4 −4
@@ -148,12 +148,12 @@
148 148 \newcommand{\WPnumber}{3}
149 149 \newcommand{\WPtitle}{Hedonic Housing Price Models for the United States: A Multi-Method Comparison of Parametric, Quantile, and Machine Learning Approaches}
150 150 \newcommand{\WPsubtitle}{}
151 −\newcommand{\WPdate}{May 2026}
152 −\newcommand{\WPversion}{1.1}
151 +\newcommand{\WPdate}{October 2026}
152 +\newcommand{\WPversion}{1.2}
153 153 \newcommand{\WPabstract}{%
154 −This paper compares econometric and machine-learning approaches to hedonic housing valuation using 788,842 active Zillow listings across all 50 U.S.\ states and the District of Columbia. A semi-log OLS model with 62 regressors ($R^2 = 0.634$) provides interpretable listing-price gradients; adding ZIP3 fixed effects raises $R^2$ to 0.725, and Moran's $I = 0.27$ confirms strong residual spatial autocorrelation. Quantile regression reveals distributional heterogeneity, with inter-quantile Wald tests rejecting coefficient equality between $\tau = 0.10$ and $\tau = 0.90$ for 11 of 13 key variables. XGBoost achieves $R^2 = 0.833$ under random validation but only 0.425 under state-level geographic holdout; ablation analysis traces the predictive gain primarily to neighborhood-quality features ($+17.6$ pp) and shows that removing geographic features \emph{improves} geographic holdout $R^2$ to 0.519, revealing spatial overfitting. SHAP importance rankings are stable across models (Spearman $\rho > 0.89$). Robustness checks confirm that the lot-size gradient triples when imputed observations are dropped, while other coefficients remain stable under winsorization and subsampling. Throughout, estimates are interpreted as conditional associations in listing prices, not causal willingness-to-pay parameters.%
154 +This paper compares econometric and machine-learning approaches to hedonic housing valuation on 788,842 active Zillow listings covering all 50 U.S.\ states and the District of Columbia, and asks how much of the machine-learning advantage survives when models must price homes in markets they have not seen. A semi-log OLS model with 62 regressors ($R^2 = 0.634$) yields listing-price gradients consistent with the hedonic literature; ZIP3 fixed effects raise out-of-sample $R^2$ to 0.725 and residual Moran's $I = 0.27$ shows strong spatial dependence. Allowing for that dependence matters: cluster-robust standard errors are, on median, 8 (ZIP3) to 12 (state) times the HC3 errors, and only 33 of 63 coefficients remain significant under state clustering. State-by-state estimation shows that the pooled coefficients average markedly different local price functions (living-area elasticities from 0.06 to 1.15) and that a fully interacted model gains 6.1 points of out-of-sample $R^2$ over state fixed effects. Quantile regression reveals distributional heterogeneity, with paired cluster-bootstrap Wald tests rejecting equality of the 10th- and 90th-percentile coefficients for 10 of 13 key attributes. XGBoost reaches $R^2 = 0.833$ under random validation but 0.425 under a ten-state holdout and a median of 0.653 across 51 leave-one-state-out models; once 0.6\% of corrupt records are removed, OLS is as accurate out of state (0.539) as the best tree ensemble. The gap is traced to the prediction of market price levels rather than within-market structure (within-state $R^2 = 0.62$), to region dummies and to ``neighbourhood'' variables that are state-median imputations for 93\% of listings, and to boosting capacity: held-out-state accuracy peaks after 75 rounds and declines thereafter while within-training accuracy keeps rising. SHAP rankings are stable across ensembles ($\rho > 0.89$), and the third-ranked feature is a state identifier. A coding error that set $\ln(\text{lot})$ to zero for 16.5\% of listings is corrected (lot elasticity 0.095, not 0.018). Estimates are interpreted throughout as conditional associations in asking prices, not willingness-to-pay parameters.%
155 155 }
156 −\newcommand{\WPkeywords}{hedonic pricing, housing markets, quantile regression, XGBoost, SHAP, spatial autocorrelation, geographic validation}
156 +\newcommand{\WPkeywords}{hedonic price function, listing prices, quantile regression, gradient boosting, SHAP, spatial cross-validation, cluster-robust inference, automated valuation model}
157 157 \newcommand{\WPjel}{R31, C21, C45, C52}
158 158
159 159 % --- Author ---
modified paper/references.bib +278 −1
@@ -12,6 +12,7 @@ at-sign cannot appear here.
12 12 volume = {11},
13 13 number = {6},
14 14 pages = {633--648},
15 + doi = {10.1002/(SICI)1099-1255(199611)11:6<633::AID-JAE414>3.0.CO;2-T},
15 16 }
16 17
17 18 @article{anselin2010thirty,
@@ -22,6 +23,7 @@ at-sign cannot appear here.
22 23 volume = {89},
23 24 number = {1},
24 25 pages = {3--25},
26 + doi = {10.1111/j.1435-5957.2010.00279.x},
25 27 }
26 28
27 29 @article{baldauf2020does,
@@ -32,6 +34,7 @@ at-sign cannot appear here.
32 34 volume = {33},
33 35 number = {3},
34 36 pages = {1256--1295},
37 + doi = {10.1093/rfs/hhz073},
35 38 }
36 39
37 40 @article{bourassa2010predicting,
@@ -53,6 +56,7 @@ at-sign cannot appear here.
53 56 volume = {101},
54 57 number = {5},
55 58 pages = {2108--2131},
59 + doi = {10.1257/aer.101.5.2108},
56 60 }
57 61
58 62 @article{can1992specification,
@@ -63,6 +67,7 @@ at-sign cannot appear here.
63 67 volume = {22},
64 68 number = {3},
65 69 pages = {453--474},
70 + doi = {10.1016/0166-0462(92)90039-4},
66 71 }
67 72
68 73 @inproceedings{chen2016xgboost,
@@ -71,6 +76,7 @@ at-sign cannot appear here.
71 76 booktitle = {Proceedings of the 22nd {ACM} {SIGKDD}},
72 77 year = {2016},
73 78 pages = {785--794},
79 + doi = {10.1145/2939672.2939785},
74 80 }
75 81
76 82 @article{park2015using,
@@ -101,6 +107,7 @@ at-sign cannot appear here.
101 107 volume = {70},
102 108 number = {4},
103 109 pages = {668--675},
110 + doi = {10.2307/1935831},
104 111 }
105 112
106 113 @article{ekeland2004identification,
@@ -111,6 +118,7 @@ at-sign cannot appear here.
111 118 volume = {112},
112 119 number = {S1},
113 120 pages = {S60--S109},
121 + doi = {10.1086/379947},
114 122 }
115 123
116 124 @article{goodman1998andrew,
@@ -121,6 +129,7 @@ at-sign cannot appear here.
121 129 volume = {7},
122 130 number = {2},
123 131 pages = {121--143},
132 + doi = {10.1006/jhec.1998.0229},
124 133 }
125 134
126 135 @incollection{griliches1961hedonic,
@@ -140,6 +149,7 @@ at-sign cannot appear here.
140 149 volume = {10},
141 150 number = {1},
142 151 pages = {37--49},
152 + doi = {10.1016/0094-1190(81)90021-8},
143 153 }
144 154
145 155 @article{hill2013hedonic,
@@ -150,6 +160,7 @@ at-sign cannot appear here.
150 160 volume = {27},
151 161 number = {5},
152 162 pages = {879--914},
163 + doi = {10.1111/j.1467-6419.2012.00731.x},
153 164 }
154 165
155 166 @inproceedings{ke2017lightgbm,
@@ -168,6 +179,7 @@ at-sign cannot appear here.
168 179 volume = {30},
169 180 number = {2},
170 181 pages = {213--237},
182 + doi = {10.1111/1540-6229.00038},
171 183 }
172 184
173 185 @article{koenker1978regression,
@@ -178,6 +190,7 @@ at-sign cannot appear here.
178 190 volume = {46},
179 191 number = {1},
180 192 pages = {33--50},
193 + doi = {10.2307/1913643},
181 194 }
182 195
183 196 @article{kok2017big,
@@ -188,6 +201,7 @@ at-sign cannot appear here.
188 201 volume = {43},
189 202 number = {6},
190 203 pages = {202--211},
204 + doi = {10.3905/jpm.2017.43.6.202},
191 205 }
192 206
193 207 @article{lancaster1966new,
@@ -198,6 +212,7 @@ at-sign cannot appear here.
198 212 volume = {74},
199 213 number = {2},
200 214 pages = {132--157},
215 + doi = {10.1086/259131},
201 216 }
202 217
203 218 @book{lesage2009introduction,
@@ -205,6 +220,7 @@ at-sign cannot appear here.
205 220 title = {Introduction to Spatial Econometrics},
206 221 publisher = {Chapman and Hall/CRC},
207 222 year = {2009},
223 + doi = {10.1201/9781420064254},
208 224 }
209 225
210 226 @article{liao2012hedonic,
@@ -215,6 +231,7 @@ at-sign cannot appear here.
215 231 volume = {21},
216 232 number = {1},
217 233 pages = {16--27},
234 + doi = {10.1016/j.jhe.2011.11.001},
218 235 }
219 236
220 237 @inproceedings{lundberg2017unified,
@@ -233,6 +250,7 @@ at-sign cannot appear here.
233 250 volume = {2},
234 251 number = {1},
235 252 pages = {56--67},
253 + doi = {10.1038/s42256-019-0138-9},
236 254 }
237 255
238 256 @article{mackinnon1985some,
@@ -243,6 +261,7 @@ at-sign cannot appear here.
243 261 volume = {29},
244 262 number = {3},
245 263 pages = {305--325},
264 + doi = {10.1016/0304-4076(85)90158-7},
246 265 }
247 266
248 267 @article{mak2010quantile,
@@ -415,6 +434,7 @@ at-sign cannot appear here.
415 434 publisher = {Blackwell},
416 435 year = {2003},
417 436 pages = {67--89},
437 + doi = {10.1002/9780470690680.ch5},
418 438 }
419 439
420 440 @article{meyer2021predicting,
@@ -436,6 +456,7 @@ at-sign cannot appear here.
436 456 volume = {31},
437 457 number = {2},
438 458 pages = {87--106},
459 + doi = {10.1257/jep.31.2.87},
439 460 }
440 461
441 462 @article{oates1969effects,
@@ -446,6 +467,7 @@ at-sign cannot appear here.
446 467 volume = {77},
447 468 number = {6},
448 469 pages = {957--971},
470 + doi = {10.1086/259584},
449 471 }
450 472
451 473 @incollection{roberts2013endogeneity,
@@ -457,6 +479,7 @@ at-sign cannot appear here.
457 479 year = {2013},
458 480 volume = {2A},
459 481 pages = {493--572},
482 + doi = {10.1016/B978-0-44-453594-8.00007-0},
460 483 }
461 484
462 485 @article{roberts2017cross,
@@ -467,6 +490,7 @@ at-sign cannot appear here.
467 490 volume = {40},
468 491 number = {8},
469 492 pages = {913--929},
493 + doi = {10.1111/ecog.02881},
470 494 }
471 495
472 496 @article{rosen1974hedonic,
@@ -477,6 +501,7 @@ at-sign cannot appear here.
477 501 volume = {82},
478 502 number = {1},
479 503 pages = {34--55},
504 + doi = {10.1086/260169},
480 505 }
481 506
482 507 @incollection{shapley1953value,
@@ -496,7 +521,8 @@ at-sign cannot appear here.
496 521 year = {2005},
497 522 volume = {13},
498 523 number = {1},
499 − pages = {3--43},
524 + pages = {1--44},
525 + doi = {10.1080/10835547.2005.12090154},
500 526 }
501 527
502 528 @article{white1980heteroskedasticity,
@@ -507,6 +533,7 @@ at-sign cannot appear here.
507 533 volume = {48},
508 534 number = {4},
509 535 pages = {817--838},
536 + doi = {10.2307/1912934},
510 537 }
511 538
512 539 @article{zietz2008determinants,
@@ -517,6 +544,7 @@ at-sign cannot appear here.
517 544 volume = {37},
518 545 number = {4},
519 546 pages = {317--333},
547 + doi = {10.1007/s11146-007-9053-7},
520 548 }
521 549
522 550 @article{waugh1928quality,
@@ -722,3 +750,252 @@ at-sign cannot appear here.
722 750 pages = {1135--1144},
723 751 doi = {10.1145/2939672.2939778},
724 752 }
753 +
754 +@article{halvorsen1980interpretation,
755 + author = {Halvorsen, Robert and Palmquist, Raymond},
756 + title = {The interpretation of dummy variables in semilogarithmic equations},
757 + journal = {American Economic Review},
758 + year = {1980},
759 + volume = {70},
760 + number = {3},
761 + pages = {474--475},
762 +}
763 +
764 +@article{kennedy1981estimation,
765 + author = {Kennedy, Peter E.},
766 + title = {Estimation with correctly interpreted dummy variables in semilogarithmic equations},
767 + journal = {American Economic Review},
768 + year = {1981},
769 + volume = {71},
770 + number = {4},
771 + pages = {801},
772 +}
773 +
774 +@article{mayer2019estimation,
775 + author = {Mayer, Michael and Bourassa, Steven C. and Hoesli, Martin and Scognamiglio, Donato},
776 + title = {Estimation and updating methods for hedonic valuation},
777 + journal = {Journal of European Real Estate Research},
778 + year = {2019},
779 + volume = {12},
780 + number = {1},
781 + pages = {134--150},
782 + doi = {10.1108/JERER-08-2018-0035},
783 +}
784 +
785 +@article{hu2019monitoring,
786 + author = {Hu, Lirong and He, Shenjing and Han, Zixuan and Xiao, He and Su, Shiliang and Weng, Min and Cai, Zhongliang},
787 + title = {Monitoring housing rental prices based on social media: {A}n integrated approach of machine-learning algorithms and hedonic modeling to inform equitable housing policies},
788 + journal = {Land Use Policy},
789 + year = {2019},
790 + volume = {82},
791 + pages = {657--673},
792 + doi = {10.1016/j.landusepol.2018.12.030},
793 +}
794 +
795 +@article{bogin2020appraisal,
796 + author = {Bogin, Alexander N. and Shui, Jessica},
797 + title = {Appraisal accuracy and automated valuation models in rural areas},
798 + journal = {Journal of Real Estate Finance and Economics},
799 + year = {2020},
800 + volume = {60},
801 + number = {1--2},
802 + pages = {40--52},
803 + doi = {10.1007/s11146-019-09712-0},
804 +}
805 +
806 +@article{lorenz2023interpretable,
807 + author = {Lorenz, Felix and Willwersch, Jonas and Cajias, Marcelo and Fuerst, Franz},
808 + title = {Interpretable machine learning for real estate market analysis},
809 + journal = {Real Estate Economics},
810 + year = {2023},
811 + volume = {51},
812 + number = {5},
813 + pages = {1178--1208},
814 + doi = {10.1111/1540-6229.12397},
815 +}
816 +
817 +@article{antipov2012mass,
818 + author = {Antipov, Evgeny A. and Pokryshevskaya, Elena B.},
819 + title = {Mass appraisal of residential apartments: {A}n application of {R}andom forest for valuation and a {CART}-based approach for model diagnostics},
820 + journal = {Expert Systems with Applications},
821 + year = {2012},
822 + volume = {39},
823 + number = {2},
824 + pages = {1772--1778},
825 + doi = {10.1016/j.eswa.2011.08.077},
826 +}
827 +
828 +@article{meyer2022machine,
829 + author = {Meyer, Hanna and Pebesma, Edzer},
830 + title = {Machine learning-based global maps of ecological variables and the challenge of assessing them},
831 + journal = {Nature Communications},
832 + year = {2022},
833 + volume = {13},
834 + pages = {2208},
835 + doi = {10.1038/s41467-022-29838-9},
836 +}
837 +
838 +@article{bourassa2007spatial,
839 + author = {Bourassa, Steven C. and Cantoni, Eva and Hoesli, Martin},
840 + title = {Spatial dependence, housing submarkets, and house price prediction},
841 + journal = {Journal of Real Estate Finance and Economics},
842 + year = {2007},
843 + volume = {35},
844 + number = {2},
845 + pages = {143--160},
846 + doi = {10.1007/s11146-007-9036-8},
847 +}
848 +
849 +@article{bourassa2003submarkets,
850 + author = {Bourassa, Steven C. and Hoesli, Martin and Peng, Vincent S.},
851 + title = {Do housing submarkets really matter?},
852 + journal = {Journal of Housing Economics},
853 + year = {2003},
854 + volume = {12},
855 + number = {1},
856 + pages = {12--28},
857 + doi = {10.1016/S1051-1377(03)00003-2},
858 +}
859 +
860 +@article{goodman2003segmentation,
861 + author = {Goodman, Allen C. and Thibodeau, Thomas G.},
862 + title = {Housing market segmentation and hedonic prediction accuracy},
863 + journal = {Journal of Housing Economics},
864 + year = {2003},
865 + volume = {12},
866 + number = {3},
867 + pages = {181--201},
868 + doi = {10.1016/S1051-1377(03)00031-7},
869 +}
870 +
871 +@book{koenker2005quantile,
872 + author = {Koenker, Roger},
873 + title = {Quantile Regression},
874 + publisher = {Cambridge University Press},
875 + address = {Cambridge},
876 + year = {2005},
877 + series = {Econometric Society Monographs},
878 + doi = {10.1017/CBO9780511754098},
879 +}
880 +
881 +@article{koenker1999goodness,
882 + author = {Koenker, Roger and Machado, Jos{\'e} A. F.},
883 + title = {Goodness of fit and related inference processes for quantile regression},
884 + journal = {Journal of the American Statistical Association},
885 + year = {1999},
886 + volume = {94},
887 + number = {448},
888 + pages = {1296--1310},
889 + doi = {10.1080/01621459.1999.10473882},
890 +}
891 +
892 +@article{cameron2015practitioner,
893 + author = {Cameron, A. Colin and Miller, Douglas L.},
894 + title = {A practitioner's guide to cluster-robust inference},
895 + journal = {Journal of Human Resources},
896 + year = {2015},
897 + volume = {50},
898 + number = {2},
899 + pages = {317--372},
900 + doi = {10.3368/jhr.50.2.317},
901 +}
902 +
903 +@article{moulton1990illustration,
904 + author = {Moulton, Brent R.},
905 + title = {An illustration of a pitfall in estimating the effects of aggregate variables on micro units},
906 + journal = {Review of Economics and Statistics},
907 + year = {1990},
908 + volume = {72},
909 + number = {2},
910 + pages = {334--338},
911 + doi = {10.2307/2109724},
912 +}
913 +
914 +@article{conley1999gmm,
915 + author = {Conley, Timothy G.},
916 + title = {{GMM} estimation with cross sectional dependence},
917 + journal = {Journal of Econometrics},
918 + year = {1999},
919 + volume = {92},
920 + number = {1},
921 + pages = {1--45},
922 + doi = {10.1016/S0304-4076(98)00084-0},
923 +}
924 +
925 +@article{epple1987hedonic,
926 + author = {Epple, Dennis},
927 + title = {Hedonic prices and implicit markets: {E}stimating demand and supply functions for differentiated products},
928 + journal = {Journal of Political Economy},
929 + year = {1987},
930 + volume = {95},
931 + number = {1},
932 + pages = {59--80},
933 + doi = {10.1086/261441},
934 +}
935 +
936 +@article{jones1996indicator,
937 + author = {Jones, Michael P.},
938 + title = {Indicator and stratification methods for missing explanatory variables in multiple linear regression},
939 + journal = {Journal of the American Statistical Association},
940 + year = {1996},
941 + volume = {91},
942 + number = {433},
943 + pages = {222--230},
944 + doi = {10.1080/01621459.1996.10476680},
945 +}
946 +
947 +@article{schratz2019hyperparameter,
948 + author = {Schratz, Patrick and Muenchow, Jannes and Iturritxa, Eugenia and Richter, Jakob and Brenning, Alexander},
949 + title = {Hyperparameter tuning and performance assessment of statistical and machine-learning algorithms using spatial data},
950 + journal = {Ecological Modelling},
951 + year = {2019},
952 + volume = {406},
953 + pages = {109--120},
954 + doi = {10.1016/j.ecolmodel.2019.06.002},
955 +}
956 +
957 +@article{ho2021predicting,
958 + author = {Ho, Winky K. O. and Tang, Bo-Sin and Wong, Siu Wai},
959 + title = {Predicting property prices with machine learning algorithms},
960 + journal = {Journal of Property Research},
961 + year = {2021},
962 + volume = {38},
963 + number = {1},
964 + pages = {48--70},
965 + doi = {10.1080/09599916.2020.1832558},
966 +}
967 +
968 +@article{perezrave2019machine,
969 + author = {P{\'e}rez-Rave, Jorge Iv{\'a}n and Correa-Morales, Juan Carlos and Gonz{\'a}lez-Echavarr{\'i}a, Favi{\'a}n},
970 + title = {A machine learning approach to big data regression analysis of real estate prices for inferential and predictive purposes},
971 + journal = {Journal of Property Research},
972 + year = {2019},
973 + volume = {36},
974 + number = {1},
975 + pages = {59--96},
976 + doi = {10.1080/09599916.2019.1587489},
977 +}
978 +
979 +@article{diebold1995comparing,
980 + author = {Diebold, Francis X. and Mariano, Roberto S.},
981 + title = {Comparing predictive accuracy},
982 + journal = {Journal of Business \& Economic Statistics},
983 + year = {1995},
984 + volume = {13},
985 + number = {3},
986 + pages = {253--263},
987 + doi = {10.1080/07350015.1995.10524599},
988 +}
989 +
990 +@incollection{palmquist2005property,
991 + author = {Palmquist, Raymond B.},
992 + title = {Property value models},
993 + booktitle = {Handbook of Environmental Economics},
994 + editor = {M{\"a}ler, Karl-G{\"o}ran and Vincent, Jeffrey R.},
995 + publisher = {Elsevier},
996 + address = {Amsterdam},
997 + year = {2005},
998 + volume = {2},
999 + pages = {763--819},
1000 + doi = {10.1016/S1574-0099(05)02016-4},
1001 +}
modified paper/sections/conclusion.tex +62 −67
@@ -6,76 +6,71 @@
6 6 \section{Conclusion}
7 7 \label{sec:conclusion}
8 8
9 −This paper has compared three approaches to hedonic housing price analysis---OLS,
10 −quantile regression, and gradient-boosted machine learning with SHAP
11 −interpretation---using a national sample of 788,842 U.S.\ Zillow listings. Each
12 −framework answers a different question, and the robustness program documents the
13 −boundaries of each framework's conclusions.
9 +This paper has compared three approaches to hedonic housing-price analysis---semi-log OLS
10 +with progressively finer spatial controls, quantile regression, and gradient-boosted
11 +ensembles with SHAP interpretation---on a national sample of 788,842 U.S.\ Zillow listings,
12 +and has subjected the comparison to the validation and inference standards that spatial
13 +data require. Each framework answers a different question, and the revision documents the
14 +boundaries of each answer more precisely than the previous version could.
14 15
15 −OLS provides interpretable conditional mean associations whose signs and
16 −magnitudes align with the meta-analytic record of hedonic housing studies
17 −\citep{sirmans2005composition}: a price-to-area elasticity of 0.63, a 22.6\%
18 −bathroom listing-price gradient, a 33.4\% foreclosure discount, and regional
19 −listing-price differentials of 49\%--63\% between coastal and interior markets.
20 −The progression from region fixed effects ($R^2 = 0.634$) to ZIP3 fixed effects
21 −($R^2 = 0.725$) demonstrates---in line with the specification advice of
22 −\citet{kuminoff2010which}---that fine-grained geographic controls capture
23 −substantial variation, while the imputation sensitivity analysis shows the
24 −lot-size gradient is attenuated threefold by state-median imputation.
16 +The semi-log regression yields average listing-price gradients that align with the
17 +meta-analytic record---a living-area elasticity of 0.63, a lot-size elasticity of 0.095
18 +once a coding error is corrected, a 22.6\% bathroom premium and a 33.4\% foreclosure
19 +discount---and the progression from region to ZIP3 fixed effects raises out-of-sample
20 +$R^2$ from 0.630 to 0.725. Two qualifications are new. Cluster-robust standard errors
21 +are an order of magnitude larger than the HC3 errors previously reported, and only 33 of
22 +63 coefficients remain significant under state clustering; the casualties are the
23 +spatially aggregated proxies and the rare, concentrated amenities. And the pooled
24 +coefficients are averages of state price functions whose slopes differ enough that a
25 +fully interacted model gains 6.1 points of out-of-sample $R^2$ over state fixed effects
26 +and that four attributes change sign in about twenty states.
25 27
26 −Quantile regression reveals that mean effects mask substantial distributional
27 −heterogeneity, formally confirmed by inter-quantile Wald tests that reject
28 −coefficient equality for 11 of 13 variables. The garage listing-price gradient is
29 −ten times larger at the 10th percentile than the 90th ($z = 28.92$); the pool
30 −gradient is insignificant below the median but reaches 9.9\% at $\tau = 0.90$.
31 −Subsample stability analysis identifies age as the one coefficient that is
32 −genuinely unstable across geographic subsamples.
28 +Quantile regression shows that the mean masks distributional heterogeneity: the garage
29 +gradient is ten times larger at the 10th than at the 90th conditional percentile, the
30 +pool gradient emerges only above the median, and the living-area gradient declines
31 +across the distribution. Paired cluster-bootstrap Wald tests confirm these differences for 10 of 13 key attributes, with standard errors several times larger than the independence-based ones reported previously.
33 32
34 −XGBoost captures non-linearities and interactions that improve prediction from
35 −$R^2 = 0.630$ (OLS) to $R^2 = 0.833$ under random validation. That figure,
36 −however, substantially overstates generalization to new markets. The ablation
37 −analysis attributes the largest predictive gain to neighborhood features
38 −($+17.6$ pp) and shows that the full model with region dummies actively harms
39 −geographic holdout performance ($-7.6$ pp); removing all geographic features
40 −\emph{improves} geographic holdout $R^2$ from 0.425 to 0.519, while adding
41 −latitude and longitude does the opposite ($+3.7$ pp random, $-5.5$ pp
42 −geographic). Geographic features help the model memorize location-specific price
43 −levels but do not improve---and can degrade---its ability to transfer
44 −attribute-price relationships to unseen markets.
33 +Gradient boosting improves prediction from $R^2 = 0.630$ to 0.833 under random
34 +validation, a gain whose cluster-bootstrap interval excludes anything below 0.19. That
35 +gain does not transfer to markets the model has not seen. Under the ten-state holdout the
36 +fully grown model reaches 0.425, the median of 51 leave-one-state-out models is
37 +0.653, and the semi-log regression, once 0.6\% of corrupt records are removed,
38 +is as accurate out of state (0.539) as the best tree ensemble. The revision traces the
39 +collapse to three mechanisms: memorisation of state price levels through region dummies,
40 +through tax rates and, above all, through ``neighbourhood'' variables that are in fact
41 +state-median imputations for 93\% of listings; a within-state accuracy of 0.62 that is
42 +stable across specifications, so that the error is in levels rather than within-market
43 +structure; and a capacity effect by which held-out-state accuracy peaks after 75 boosting
44 +rounds and declines thereafter while within-training accuracy keeps rising, so that
45 +standard early stopping selects an over-fitted model. SHAP rankings are stable across
46 +three ensembles, and the third-ranked feature is a state identifier.
45 47
46 −SHAP values identify the features contributing most to predictions---living
47 −area, bathrooms, school quality, lot size, region---and this ranking is stable
48 −across three tree-based models (Spearman $\rho = 0.89$--$0.99$). These remain
49 −predictive decompositions rather than implicit prices, a distinction the
50 −explainability literature itself insists upon \citep{rudin2019stop}. Moran's
51 −$I = 0.27$ on OLS residuals---stable across subsamples---confirms that regional
52 −controls leave substantial spatial dependence unaddressed.
48 +The central contribution is methodological. Model evaluation in spatially dependent
49 +housing data hinges on validation design, and the random-versus-blocked distinction
50 +developed in ecology \citep{roberts2017cross, ploton2020spatial, meyer2021predicting,
51 +wadoux2021spatial} transfers to hedonic economics with three additions that this paper
52 +makes concrete: out-of-market error should be decomposed into level and within-market
53 +components; imputed and aggregated features should be audited for the geography they
54 +encode; and model capacity should be tuned on spatially blocked, not random, evaluation
55 +sets. Studies comparing machine learning to hedonic regression on random splits alone will
56 +overstate the practical machine-learning advantage for any application involving new
57 +markets, and studies reporting conventional robust standard errors on national scraped
58 +data will overstate the precision of their gradients.
53 59
54 −The central contribution is methodological: model evaluation in spatially
55 −dependent housing data hinges on validation design, and the random-versus-blocked
56 −distinction developed in ecology \citep{roberts2017cross, ploton2020spatial,
57 −meyer2021predicting, wadoux2021spatial} transfers directly---and consequentially
58 −---to hedonic economics. Random splits answer the interpolation question; held-out
59 −regions answer the extrapolation question; and the two rank both models and
60 −feature sets differently. Studies comparing machine learning to hedonic
61 −regression on random splits alone will systematically overstate the practical ML
62 −advantage for any application involving new markets.
60 +Several extensions follow. Spatial econometric estimation and spatial HAC or wild-cluster
61 +inference would model the dependence we only diagnose; replication on transaction prices
62 +would quantify the listing-price wedge; climate-risk variables are a first-order omission;
63 +county or metropolitan blocking would map the continuum between interpolation and
64 +extrapolation if location identifiers were complete; spatially blocked hyperparameter
65 +tuning would establish how much of the extrapolation gap is recoverable; and an
66 +observed, rather than imputed, school-quality measure would allow the capitalization
67 +question to be asked at all. We regard leave-region-out validation, reported alongside
68 +random validation and decomposed into level and within-region accuracy, as a reasonable
69 +default for future comparisons of machine-learning and hedonic models.
63 70
64 −Several extensions follow naturally. Spatial econometric estimation
65 −\citep{lesage2009introduction} would model the dependence we only diagnose;
66 −replication on transaction prices would quantify the listing-price wedge that the
67 −seller-behavior literature predicts \citep{genesove2001loss, han2016role};
68 −climate-risk variables \citep{bernstein2019disaster, murfin2020risk} are a
69 −first-order omission our residual diagnostics likely reflect; generalized
70 −additive models would decompose the ML gain into non-linearity versus spatial
71 −partitioning; and finer geographic blocking would map the continuum between our
72 −two validation extremes. We would regard geographic holdout validation, reported
73 −alongside random validation, as a reasonable default for future ML-hedonic
74 −comparisons.
75 −
76 −The broader lesson is not that machine learning replaces hedonic econometrics,
77 −nor the reverse. Prediction, distributional heterogeneity, and economic
78 −interpretation are different questions; each of the tools examined here is strong
79 −on exactly one of them, and honest housing-market analysis will continue to
80 −require all three---each validated against the question it is actually meant to
81 −answer.
71 +The broader lesson is not that machine learning replaces hedonic econometrics, nor the
72 +reverse. Prediction within observed markets, prediction in new markets, distributional
73 +heterogeneity and economic interpretation are different questions; each of the tools
74 +examined here is strong on at most one of them, and housing-market analysis will continue
75 +to require all of them---each validated against the question it is meant to answer, and
76 +each read with the data's imputation rules in hand.
modified paper/sections/data.tex +233 −93
@@ -6,19 +6,86 @@
6 6 \section{Data and Variable Construction}
7 7 \label{sec:data}
8 8
9 −\subsection{Data Source}
10 −
11 −The dataset is sourced from Zillow, the largest online real estate marketplace in the United States. The raw data contain 839,313 residential properties with 116 variables, representing active for-sale listings as of 2025--2026. The data include listing prices, structural characteristics, geocoordinates, neighborhood quality scores, and tax/transaction histories.
12 −
13 −\textbf{Important limitations of the data source.} The sample comprises active Zillow listings, not the universe of U.S.\ residential properties. Several sources of non-representativeness should be noted: (i) Zillow coverage varies by region, with some MLS-linked markets better represented than others; (ii) active listings capture supply at a point in time, not the full housing stock; (iii) the sample excludes off-market properties, FSBOs not listed on Zillow, and recently transacted properties that are no longer listed; (iv) Southern states are overrepresented (56.6\% of the sample vs.\ approximately 38\% of U.S.\ housing units), likely reflecting higher listing volumes in fast-growing Sun Belt markets. We do not claim national representativeness and caution against interpreting our estimates as population parameters for the entire U.S.\ housing market.
9 +\subsection{Data Source and Coverage}
10 +
11 +The data are an extract of active for-sale listings on Zillow, the largest online real
12 +estate marketplace in the United States, collected in 2025--2026. The raw extract
13 +contains 839,313 residential properties described by 116 variables: the asking price,
14 +structural characteristics, geocoordinates, neighbourhood accessibility scores, school
15 +information, tax records, and listing-status tags. Every observation carries the status
16 +\texttt{FOR\_SALE}; 85.4\% are single-family homes and 14.6\% condominiums; 89.2\% are
17 +listed by an agent, 6.5\% are new-construction listings or plans, and 1.7\% are
18 +for-sale-by-owner listings. The median listing had been on Zillow for 72 days at the time
19 +of extraction (interquartile range 35--134 days).
20 +
21 +The sample is a snapshot of the supply side of the market, not of the housing stock.
22 +Four sources of non-representativeness deserve emphasis. First, Zillow coverage varies
23 +across regions and depends on the completeness of local multiple-listing-service feeds.
24 +Second, active listings over-represent segments with long marketing times and
25 +under-represent segments that clear quickly. Third, off-market properties, unlisted
26 +for-sale-by-owner homes and recently transacted properties are absent. Fourth, Southern
27 +states account for 56.6\% of the sample against roughly 38\% of U.S.\ housing units,
28 +reflecting the high listing volumes of Sun Belt markets. We therefore do not claim national
29 +representativeness and interpret the estimates as parameters of the population of active
30 +listings in the extraction window.
14 31
15 32 \subsection{Listing Prices versus Transaction Prices}
33 +\label{sec:listing_prices}
34 +
35 +The dependent variable is the asking price, not a transaction price. Asking prices are
36 +strategic objects: they serve as commitment devices in seller search
37 +\citep{horowitz1992role}, direct buyer attention \citep{han2016role}, respond to
38 +loss aversion among sellers facing nominal losses \citep{genesove2001loss}, and
39 +systematic overpricing lengthens time on market and lowers the eventual sale price
40 +\citep{knight2002listing}. The wedge between asking and transaction prices therefore
41 +varies with market conditions, property type and price tier, and it may be correlated
42 +with the attributes whose gradients we estimate. Throughout the paper the estimated
43 +coefficients are read as \emph{listing-price capitalization gradients}: conditional
44 +associations between attributes and asking prices, not transaction-price implicit prices
45 +in the sense of \citet{rosen1974hedonic}.
46 +
47 +The extract does not contain the eventual sale price of the listed homes, so the wedge
48 +cannot be measured directly. It does contain Zillow's own automated valuation, the
49 +Zestimate, for 55.0\% of the sample. Table~\ref{tab:zestimate} reports the distribution
50 +of the ratio of the asking price to the Zestimate. The median listing is priced 2.0\%
51 +above Zillow's valuation, 91.4\% of listings are priced above it, and the interquartile
52 +range of the ratio is narrow (1.008--1.037). The premium is largest in the South
53 +(median 1.023) and smallest in the West and Northeast (1.015--1.016). Because the
54 +Zestimate is itself a model fitted partly to listing information, the ratio is a lower
55 +bound on the information content of the wedge rather than a measure of it; it does,
56 +however, indicate that asking prices in this sample sit systematically but modestly above
57 +an independent valuation benchmark, and that the dispersion of the premium is small
58 +relative to the dispersion of prices.
16 59
17 −A critical limitation is that our dependent variable is the \textit{listing} (asking) price, not the realized transaction price. Listing prices are strategic objects: theory models them as commitment devices in seller search \citep{horowitz1992role} and as instruments that direct buyer attention \citep{han2016role}, and empirically they embed seller behavior---overpricing lengthens time-on-market and lowers eventual sale prices \citep{knight2002listing}, while loss-averse sellers systematically set higher asking prices \citep{genesove2001loss}. List-to-sale price ratios therefore vary by market condition, property type, and price tier: luxury properties are more frequently overpriced, distressed properties may be strategically underpriced, and regional norms for overbidding versus negotiation differ substantially. Throughout this paper, we interpret the estimated coefficients as \textbf{listing-price capitalization gradients}---conditional associations between attributes and asking prices---rather than transaction-price implicit prices. If listing premiums correlate systematically with property attributes (e.g., if waterfront properties are more frequently overpriced), the estimated gradients will reflect this pricing behavior in addition to underlying valuation differences.
60 +\begin{table}[H]
61 +\centering
62 +\caption{Ratio of Asking Price to Zestimate, by Census Region}
63 +\label{tab:zestimate}
64 +\begin{threeparttable}
65 +\small
66 +\begin{tabular}{lrrrrr}
67 +\toprule
68 +Quantile & All & Northeast & Midwest & South & West \\
69 +\midrule
70 +\input{tables/zestimate} \\
71 +\bottomrule
72 +\end{tabular}
73 +\begin{tablenotes}
74 +\small
75 +\item \textit{Notes:} Listings with a non-missing Zestimate (55.0\% of the analytical
76 +sample; ratios outside $[0.2, 5]$ excluded). The Zestimate is Zillow's automated valuation
77 +at the time of extraction. Generated by \texttt{scripts/06\_revision\_inference.py}.
78 +\end{tablenotes}
79 +\end{threeparttable}
80 +\end{table}
18 81
19 82 \subsection{Sample Construction}
20 83
21 −Table~\ref{tab:attrition} documents the sample construction.
84 +Table~\ref{tab:attrition} documents the sample construction. Five sequential filters
85 +remove 6.0\% of the raw records, leaving 788,842 listings in 50 states and the District
86 +of Columbia, 26,477 five-digit ZIP codes and 885 three-digit ZIP prefixes (ZIP3). The
87 +price window of \$10,000--\$10,000,000 excludes land-only and placeholder listings at the
88 +bottom and a small number of trophy properties at the top.
22 89
23 90 \begin{table}[H]
24 91 \centering
@@ -33,104 +100,176 @@ Raw Zillow records & 839,313 & --- & --- \\
33 100 Valid price & 817,473 & 21,840 & $\$10{,}000 < P < \$10{,}000{,}000$ \\
34 101 Valid living area & 797,380 & 20,093 & $200 < \text{sqft} < 20{,}000$ \\
35 102 Valid bedrooms/bathrooms & 790,799 & 6,581 & $1 \leq \text{bed} \leq 10$, $1 \leq \text{bath} \leq 10$ \\
36 −Valid geocoordinates & 789,199 & 1,600 & Non-missing lat/lon \\
37 −U.S.\ states + DC only & 788,842 & 357 & Exclude PR, VI \\
103 +Valid geocoordinates & 789,199 & 1,600 & Non-missing latitude/longitude \\
104 +U.S.\ states and DC only & 788,842 & 357 & Exclude PR, VI \\
38 105 \midrule
39 106 \textbf{Final analytical sample} & \textbf{788,842} & \textbf{50,471} & \textbf{(6.0\% removed)} \\
40 107 \bottomrule
41 108 \end{tabular}
42 109 \begin{tablenotes}
43 110 \small
44 −\item \textit{Notes:} Filters applied sequentially. The 6.0\% removal rate suggests the raw data are reasonably clean, though the retained sample may still contain measurement error in secondary variables.
111 +\item \textit{Notes:} Filters applied sequentially. The filters act on price, living
112 +area, room counts and location only; secondary attributes are not screened at this
113 +stage (see Section~\ref{sec:data_quality}).
45 114 \end{tablenotes}
46 115 \end{threeparttable}
47 116 \end{table}
48 117
49 118 \subsection{Variable Description}
50 −
51 −Our specification includes 62 regressors organized into six categories.
52 −
53 −\subsubsection{Structural Attributes (8 Variables)}
54 −
55 −The natural logarithm of living area ($\ln\text{sqft}$), number of bedrooms, number of bathrooms, property age ($2026 - \text{year\_built}$) and its square, number of stories, the bathroom-to-bedroom ratio, and square feet per bedroom. Living area enters in log form to accommodate the well-documented concavity of the size-price relationship.
56 −
57 −\subsubsection{Lot Characteristics (1 Variable)}
58 −
59 −The natural logarithm of lot size ($\ln\text{lot}$). Missing lot sizes (16.3\% of raw data) are imputed using state-level medians.
60 −
61 −\subsubsection{Amenity and Quality Indicators (11 Variables)}
62 −
63 −Binary indicators for swimming pool (39.8\% prevalence), spa (6.1\%), basement (24.3\%), fireplace (39.6\%), garage (67.2\%), waterfront location (8.9\%), central air conditioning (68.1\%), forced air heating (25.8\%), and hardwood flooring (26.7\%). The number of parking spaces and a composite luxury score (0--7) supplement these indicators.
64 −
65 −\subsubsection{Neighborhood and Location Variables (7 Variables)}
66 −
67 −Walk Score (0--100), Bike Score, Transit Score, average GreatSchools rating (1--10), school count, distance to nearest school, and local property tax rate. Walk Score is the accessibility measure for which a capitalization premium has been documented in the literature \citep{pivo2011walkability}; school ratings and tax rates proxy the local public goods whose capitalization into house prices is the subject of a large identification literature \citep{oates1969effects, black1999better, bayer2007unified}.
68 −
69 −\textbf{Data quality note.} Bike Score has a maximum value of 248 in our data, exceeding the expected 0--100 range. Only 38 observations (0.005\%) exceed 100, and these are retained without truncation. Results are robust to capping Bike Score at 100.
70 −
71 −\subsubsection{Market Status Variables (5 Variables)}
72 −
73 −Condominium indicator (14.6\%), HOA membership (37.1\%), log annualized HOA fees ($\ln(1 + \text{HOA}_\text{annual})$), new construction (5.9\%), and foreclosure status (0.5\%).
74 −
75 −\subsubsection{Interaction Terms (6 Variables)}
76 −
77 −\begin{itemize}[nosep]
78 − \item $\ln(\text{sqft}) \times \text{age}$: depreciation-size interaction;
79 − \item $\text{pool} \times \text{South}$: climate-dependent pool gradient;
80 − \item $\text{waterfront} \times \ln(\text{sqft})$: size-dependent waterfront gradient;
81 − \item $\text{basement} \times \text{North}$: region-dependent basement gradient;
82 − \item $\text{condo} \times \text{walk\_score}$: walkability gradient for condominiums;
83 − \item $\text{age} \times \text{luxury\_score}$: luxury mitigation of depreciation.
84 −\end{itemize}
85 −
86 −\subsubsection{Categorical Controls (24 Dummy Variables)}
87 −
88 −Simplified indicators for roof type (6 dummies), construction material (8 dummies), foundation type (7 dummies), and Census region (3 dummies; Midwest reference).
89 −
90 −\subsection{Missing Data and Imputation}
91 −
92 −Table~\ref{tab:missing} reports missingness rates for key variables.
119 +\label{sec:variables}
120 +
121 +The specification includes 62 regressors organised in six blocks.
122 +
123 +\textit{Structural attributes (8).} The natural logarithm of living area
124 +($\ln\text{sqft}$), bedrooms, bathrooms, property age ($2026 - \text{year built}$) and its
125 +square, stories, the bathroom-to-bedroom ratio and living area per bedroom. Living area
126 +enters in logarithms to accommodate the concavity of the size--price relationship.
127 +
128 +\textit{Lot characteristics (1).} The natural logarithm of lot size ($\ln\text{lot}$); its
129 +coding is discussed in Section~\ref{sec:missing}.
130 +
131 +\textit{Amenity and quality indicators (11).} Binary indicators for swimming pool (39.8\%
132 +prevalence), spa (6.1\%), basement (24.3\%), fireplace (39.6\%), garage (67.2\%), waterfront
133 +location (8.9\%), central air conditioning (68.1\%), forced-air heating (25.8\%) and
134 +hardwood flooring (26.7\%); the number of parking spaces; and a composite luxury score
135 +(0--7) counting premium features mentioned in the listing.
136 +
137 +\textit{Neighbourhood and location (7).} Walk Score (0--100), Bike Score, Transit Score,
138 +the average GreatSchools rating of nearby schools (1--10), the number of nearby schools,
139 +the distance to the nearest school, and the local effective property-tax rate. Walk Score
140 +is the accessibility measure for which a capitalization premium has been documented
141 +\citep{pivo2011walkability}; school ratings and tax rates proxy the local public goods
142 +whose capitalization is the subject of a large identification literature
143 +\citep{oates1969effects, black1999better, bayer2007unified}. As
144 +Section~\ref{sec:missing} shows, the three school variables are observed for only 7\% of
145 +listings, which fundamentally changes how they must be read.
146 +
147 +\textit{Market status (5).} Condominium indicator (14.6\%), homeowners'-association
148 +membership (37.1\%), log annualised HOA fees ($\ln(1 + \text{HOA}_\text{annual})$), new
149 +construction (5.9\%) and foreclosure status (0.5\%).
150 +
151 +\textit{Interaction terms (6) and categorical controls (24).} Six interactions
152 +($\ln\text{sqft} \times \text{age}$, pool $\times$ South, waterfront $\times
153 +\ln\text{sqft}$, basement $\times$ North, condominium $\times$ Walk Score, age $\times$
154 +luxury score) and dummy sets for roof type (6), construction material (8), foundation
155 +type (7) and Census region (3, Midwest reference). Each categorical set includes an
156 +``Unknown'' category that absorbs listings for which the attribute is not reported.
157 +
158 +\subsection{Missing Data, Imputation and Coding}
159 +\label{sec:missing}
160 +
161 +Scraped listing data are incomplete in ways that are rarely random. Table~\ref{tab:missing}
162 +reports, for every regressor input, the share of the analytical sample for which the raw
163 +field is missing and the rule that the sample-construction stage applied. Three facts
164 +emerge that earlier versions of this paper did not report and that condition the
165 +interpretation of several results.
93 166
94 167 \begin{table}[H]
95 168 \centering
96 −\caption{Missing Data Rates and Imputation Methods}
169 +\caption{Missing Raw Inputs and Imputation Rules (Analytical Sample, $N = 788{,}842$)}
97 170 \label{tab:missing}
98 171 \begin{threeparttable}
99 −\small
100 −\begin{tabular}{lrrl}
172 +\footnotesize
173 +\begin{tabular}{p{6.2cm}rp{5.6cm}}
101 174 \toprule
102 −Variable & Missing (\%) & Method & Notes \\
175 +Regressor input (raw field) & Missing (\%) & Rule applied \\
103 176 \midrule
104 −Year built & 19.4 & State median & Affects age, age$^2$, interactions \\
105 −Lot size & 16.3 & State median & Large variation \\
106 −Walk Score & 3.1 & State median & \\
107 −Bike Score & 6.1 & State median & Max = 248 (38 obs.) \\
108 −Transit Score & 70.1 & Set to 0 & Suburban/rural properties \\
109 −Garage & 35.1 & Set to False & Conservative \\
110 −Climate risk factors & 100.0 & Excluded & Not available \\
177 +\input{tables/missingness} \\
111 178 \bottomrule
112 179 \end{tabular}
113 180 \begin{tablenotes}
114 181 \small
115 −\item \textit{Notes:} State-level median imputation is used to preserve geographic variation. The high Transit Score missingness (70.1\%) likely reflects properties in areas without public transit infrastructure, for which zero is a reasonable value. Climate risk factors (flood, fire, heat, wind, air) are entirely missing and excluded from the analysis.
182 +\item \textit{Notes:} Missingness measured in the raw extract for the 788,842 retained
183 +listings. ``State median'' denotes imputation by the median of observed values within the
184 +listing's state. Climate-risk factors (flood, fire, heat, wind, air) are missing for every
185 +record and excluded. Generated by \texttt{scripts/06\_revision\_inference.py}.
116 186 \end{tablenotes}
117 187 \end{threeparttable}
118 188 \end{table}
119 189
120 −\subsection{Data Quality Audit}
121 −\label{sec:data_audit}
122 −
123 −We conduct three data quality checks to assess the sensitivity of key results to imputation and outliers.
124 −
125 −\textbf{Imputation prevalence.} Two variables---year built (19.4\% missing) and lot size (16.3\% missing)---account for the bulk of imputed values. To assess the consequences, we re-estimate the baseline OLS model on subsamples that exclude imputed observations (Section~\ref{sec:imputation_sensitivity}). The lot-size coefficient is the most sensitive: $\ln(\text{lot})$ triples from 0.018 to 0.059 when imputed lot sizes are dropped, suggesting that state-median imputation attenuates the lot-size gradient substantially.
190 +First, the three school variables are missing for 93.0\% of listings and were imputed
191 +with state medians. For 93\% of the sample, ``average school rating'' therefore takes one
192 +of 51 values and identifies the state rather than the quality of nearby schools; the
193 +imputed school count is three in every state. Any coefficient or importance measure
194 +attached to these variables must be read as a state-level location effect, a point we
195 +return to when interpreting the negative school-rating coefficient
196 +(Section~\ref{sec:signs}) and the prominence of school rating in the SHAP rankings
197 +(Section~\ref{sec:shap_results}). Second, year built is missing for 18.9\% of listings and
198 +replaced by the state median, so that the age distribution contains a spike of imputed
199 +values at the state-specific median age. Third, lot size is missing for 15.7\% of listings
200 +and recorded as zero for a further 0.8\%; although the lot-size field itself was imputed
201 +with state medians, the regressor actually entering the models, $\ln(\text{lot})$, was
202 +computed before imputation and takes the value 0 for all 130,271 such listings (16.5\% of
203 +the sample). The published lot-size results therefore reflect a de facto missing-value
204 +code located eight log units below the mass of the data; Section~\ref{sec:lot_recoding}
205 +re-estimates the model with a correct coding and shows that the baseline lot-size
206 +gradient was understated by a factor of five.
207 +
208 +The remaining rules are conventional but not innocuous. Transit Score is set to zero when
209 +missing (70.2\%), on the assumption that properties without a score lie outside
210 +transit-served areas; the garage indicator is set to \emph{false} when the field is
211 +missing (32.8\%), so that it partly measures the completeness of the listing; and the
212 +central-air, forced-air and hardwood indicators are derived from free-text
213 +cooling, heating and flooring fields that are missing for 8--30\% of listings. Setting
214 +missing indicators to zero is a special case of the missing-indicator method whose bias
215 +properties are analysed by \citet{jones1996indicator}: the coefficient on such a variable
216 +mixes the attribute effect with the effect of reporting the attribute. We treat these
217 +coefficients as descriptive and use missingness indicators as a robustness device in the
218 +machine-learning section (Section~\ref{sec:variants}).
219 +
220 +\subsection{Data Quality}
221 +\label{sec:data_quality}
222 +
223 +The sample filters screen price, size, room counts and location, but not secondary
224 +attributes. Table~\ref{tab:implausible} counts the records whose secondary attributes are
225 +implausible. The number of parking spaces exceeds 20 for 1,133 listings and 1,000 for 67
226 +(the maximum is $1.1\times 10^{11}$); stories exceed 10 for 1,607 listings; 422 lots exceed one
227 +square mile; 121 listings report a year built after 2026 (age set to zero) and 1,838 a year
228 +built before 1826 (age capped at 200). These records are few---4,970 listings, 0.6\% of
229 +the sample, fail at least one of the four screens used below---but they matter for the
230 +linear models: in the unstandardised OLS the parking-space coefficient is
231 +$1.9 \times 10^{-12}$ with a standardised standard error of 0.099, i.e.\ the variable is
232 +uninformative because its variance is dominated by a handful of corrupt entries. For the
233 +geographic-holdout comparison of Section~\ref{sec:ml_geo} these records are decisive: the
234 +catastrophic out-of-state failure of OLS reported in the previous version of this paper
235 +($R^2 \approx -2\times 10^{6}$) is entirely attributable to linear extrapolation on
236 +corrupt parking and story counts in the held-out states, not to the regional dummies.
237 +Tree ensembles are unaffected because they split on ranks. Bike Score exceeds its nominal
238 +maximum of 100 for 38 listings (maximum 248) and is retained; results are robust to capping
239 +it at 100 (Section~\ref{sec:winsorization}).
126 240
127 −\textbf{Outlier prevalence.} We winsorize lot size at its 99.5th percentile and cap Bike Score at 100, then re-estimate OLS (Section~\ref{sec:winsorization}). The overall $R^2$ increases modestly from 0.634 to 0.640, and most coefficients are stable, with the exception of $\ln(\text{lot})$, which again increases substantially.
128 −
129 −\textbf{Geographic coverage.} The sample spans 886 unique three-digit ZIP code prefixes (ZIP3 codes) across 51 jurisdictions (50 states plus DC). Southern states account for 56.6\% of observations. We document the marginal explanatory power of progressively finer geographic controls in Section~\ref{sec:ols_fe}.
241 +\begin{table}[H]
242 +\centering
243 +\caption{Implausible Attribute Values and Coding Artefacts in the Analytical Sample}
244 +\label{tab:implausible}
245 +\begin{threeparttable}
246 +\small
247 +\begin{tabular}{lrr}
248 +\toprule
249 +Check & Listings & Share (\%) \\
250 +\midrule
251 +\input{tables/implausible} \\
252 +\bottomrule
253 +\end{tabular}
254 +\begin{tablenotes}
255 +\small
256 +\item \textit{Notes:} Counts in the analytical sample ($N = 788{,}842$). The four screens
257 +used to define the trimmed samples of Sections~\ref{sec:ml_geo} and
258 +\ref{sec:state_heterogeneity} are parking spaces $> 20$, stories $> 10$, lot size $> 640$
259 +acres and age $= 200$ (4,970 listings in total). Generated by
260 +\texttt{scripts/06\_revision\_inference.py}.
261 +\end{tablenotes}
262 +\end{threeparttable}
263 +\end{table}
130 264
131 265 \subsection{Descriptive Statistics}
132 266
133 −Table~\ref{tab:descriptive} presents summary statistics.
267 +Table~\ref{tab:descriptive} presents summary statistics. The median listing price is
268 +\$399,900 and the mean \$621,737, a right skew that the logarithmic transformation largely
269 +removes (Figure~\ref{fig:price_dist}). The median home has 1,820 square feet, three
270 +bedrooms and two bathrooms, and is 36 years old. Walk and Transit Scores are low on
271 +average (medians of 16 and 0), consistent with a listing stock dominated by suburban and
272 +exurban single-family homes.
134 273
135 274 \begin{table}[H]
136 275 \centering
@@ -138,37 +277,37 @@ Table~\ref{tab:descriptive} presents summary statistics.
138 277 \label{tab:descriptive}
139 278 \begin{threeparttable}
140 279 \small
141 −\begin{tabular}{lrrrrrr}
280 +\begin{tabular}{lrrrrr}
142 281 \toprule
143 282 Variable & Mean & Std.\ Dev. & Min & Median & Max \\
144 283 \midrule
145 −\multicolumn{6}{l}{\textit{Continuous Variables}} \\
146 −Listing Price (\$) & 621,737 & 817,965 & 10,300 & 399,900 & 9,999,999 \\
147 −Living Area (sqft) & 2,093 & 1,181 & 208 & 1,820 & 19,600 \\
284 +\multicolumn{6}{l}{\textit{Continuous variables}} \\
285 +Listing price (\$) & 621,737 & 817,965 & 10,300 & 399,900 & 9,999,999 \\
286 +Living area (sqft) & 2,093 & 1,181 & 208 & 1,820 & 19,600 \\
148 287 Bedrooms & 3.25 & 1.09 & 1 & 3 & 10 \\
149 288 Bathrooms & 2.52 & 1.16 & 1 & 2 & 10 \\
150 −Property Age (years) & 42.2 & 31.5 & 0 & 36 & 200 \\
289 +Property age (years) & 42.2 & 31.5 & 0 & 36 & 200 \\
151 290 Walk Score (0--100) & 25.6 & 26.5 & 0 & 16 & 100 \\
152 291 Bike Score & 34.9 & 18.1 & 1 & 31 & 248 \\
153 292 Transit Score (0--100) & 8.9 & 18.3 & 0 & 0 & 100 \\
154 −Avg.\ School Rating (1--10) & 6.02 & 0.90 & 1 & 6 & 10 \\
155 −Property Tax Rate (\%) & 1.10 & 0.53 & 0 & 1.0 & 4.0 \\
156 −Luxury Score (0--7) & 1.36 & 1.29 & 0 & 1 & 7 \\
293 +Avg.\ school rating (1--10) & 6.02 & 0.90 & 1 & 6 & 10 \\
294 +Property tax rate (\%) & 1.10 & 0.53 & 0 & 1.0 & 4.0 \\
295 +Luxury score (0--7) & 1.36 & 1.29 & 0 & 1 & 7 \\
157 296 \midrule
158 −\multicolumn{6}{l}{\textit{Binary Variables (prevalence)}} \\
159 −Swimming Pool & 39.8\% & & & & \\
297 +\multicolumn{6}{l}{\textit{Binary variables (prevalence)}} \\
298 +Swimming pool & 39.8\% & & & & \\
160 299 Garage & 67.2\% & & & & \\
161 300 Fireplace & 39.6\% & & & & \\
162 301 Basement & 24.3\% & & & & \\
163 302 Waterfront & 8.9\% & & & & \\
164 303 HOA & 37.1\% & & & & \\
165 −Central Air & 68.1\% & & & & \\
166 −Hardwood Floors & 26.7\% & & & & \\
304 +Central air & 68.1\% & & & & \\
305 +Hardwood floors & 26.7\% & & & & \\
167 306 Condominium & 14.6\% & & & & \\
168 −New Construction & 5.9\% & & & & \\
307 +New construction & 5.9\% & & & & \\
169 308 Foreclosure & 0.5\% & & & & \\
170 309 \midrule
171 −\multicolumn{6}{l}{\textit{Regional Distribution}} \\
310 +\multicolumn{6}{l}{\textit{Regional distribution}} \\
172 311 South & 56.6\% & & & & \\
173 312 West & 18.9\% & & & & \\
174 313 Midwest & 16.1\% & & & & \\
@@ -177,16 +316,17 @@ Northeast & 8.4\% & & & & \\
177 316 \end{tabular}
178 317 \begin{tablenotes}
179 318 \small
180 −\item \textit{Notes:} Listing prices, not transaction prices. Property age computed as $2026 - \text{year\_built}$, after imputation. Imputed values included in summary statistics.
319 +\item \textit{Notes:} Listing prices, not transaction prices. Property age computed as
320 +$2026 - \text{year built}$ after imputation; imputed values included. The school rating is
321 +a state median for 93\% of listings (Table~\ref{tab:missing}).
181 322 \end{tablenotes}
182 323 \end{threeparttable}
183 324 \end{table}
184 325
185 −The median listing price is \$399,900, with substantial right-skewness (mean \$621,737). The log transformation substantially improves distributional symmetry (Figure~\ref{fig:price_dist}), supporting the semi-log specification.
186 −
187 326 \begin{figure}[H]
188 327 \centering
189 328 \includegraphics[width=\textwidth]{figures/fig1_price_distribution.png}
190 − \caption{Distribution of Listing Prices: (a) Levels; (b) Natural Logarithm. The log transformation reduces right skewness and approximates normality.}
329 + \caption{Distribution of listing prices: (a) levels; (b) natural logarithm. The
330 + logarithmic transformation reduces right skewness and approximates normality.}
191 331 \label{fig:price_dist}
192 332 \end{figure}
modified paper/sections/discussion.tex +161 −171
Large diff (342 lines) is not loaded by default to keep the page fast.Load diff
modified paper/sections/introduction.tex +108 −110
Large diff (229 lines) is not loaded by default to keep the page fast.Load diff
modified paper/sections/limitations.tex +53 −27
Large diff (87 lines) is not loaded by default to keep the page fast.Load diff
modified paper/sections/literature.tex +206 −190
Large diff (429 lines) is not loaded by default to keep the page fast.Load diff
modified paper/sections/methodology.tex +223 −85
Large diff (358 lines) is not loaded by default to keep the page fast.Load diff
modified paper/sections/results.tex +718 −193
Large diff (1,250 lines) is not loaded by default to keep the page fast.Load diff
modified paper/sections/robustness.tex +148 −55
Large diff (293 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/cluster_se.tex +27 −0
Large diff (27 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/designs.tex +3 −0
Large diff (3 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/grouped_cv_full.tex +6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/grouped_cv_noschool.tex +6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/implausible.tex +12 −0
Large diff (12 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/iqr_bootstrap.tex +13 −0
Large diff (13 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/loso_states.tex +51 −0
Large diff (51 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/loso_summary.tex +2 −0
Large diff (2 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/lot_recoding.tex +5 −0
Large diff (5 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/missingness.tex +16 −0
Large diff (16 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/moran_models.tex +3 −0
Large diff (3 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/ols_geo.tex +5 −0
Large diff (5 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/pooled_vs_interacted.tex +3 −0
Large diff (3 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/r2_bootstrap_obs.tex +6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/r2_bootstrap_zip3.tex +6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/state_heterogeneity.tex +13 −0
Large diff (13 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/trees_curve.tex +9 −0
Large diff (9 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/variants.tex +5 −0
Large diff (5 lines) is not loaded by default to keep the page fast.Load diff
added paper/tables/zestimate.tex +7 −0
Large diff (7 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/cluster_se.csv +64 −0
Large diff (64 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/geo_trees_curve.csv +15 −0
Large diff (15 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/grouped_cv_by_state.csv +13 −0
Large diff (13 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/implausible_values.csv +13 −0
Large diff (13 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/iqr_wald_bootstrap.csv +14 −0
Large diff (14 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/list_to_zestimate.csv +10 −0
Large diff (10 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/loso_by_state.csv +103 −0
Large diff (103 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/lot_recoding.csv +6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/missingness_full.csv +19 −0
Large diff (19 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/moran_xgb_vs_ols.csv +10 −0
Large diff (10 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/ols_geo_holdout.csv +4 −0
Large diff (4 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/pooled_vs_interacted.csv +4 −0
Large diff (4 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/r2_bootstrap.csv +15 −0
Large diff (15 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/size_matched_split.csv +4 −0
Large diff (4 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/state_heterogeneity.csv +52 −0
Large diff (52 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/state_heterogeneity_summary.csv +14 −0
Large diff (14 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/variants_two_designs.csv +6 −0
Large diff (6 lines) is not loaded by default to keep the page fast.Load diff
added results/revision/xgb_geo_trimmed.csv +3 −0
Large diff (3 lines) is not loaded by default to keep the page fast.Load diff
added scripts/05_revision_geo_validation.py +251 −0
Large diff (251 lines) is not loaded by default to keep the page fast.Load diff
added scripts/06_revision_inference.py +395 −0
Large diff (395 lines) is not loaded by default to keep the page fast.Load diff
added scripts/07_revision_qr_bootstrap.py +125 −0
Large diff (125 lines) is not loaded by default to keep the page fast.Load diff
added scripts/08_revision_tables_figures.py +387 −0
Large diff (388 lines) is not loaded by default to keep the page fast.Load diff
Menu

Theme