SPB Git

spb/wp3_uqo

Public

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

17.7 KB

# CHANGELOG — Révision scientifique complète (editorial board, 2026-10-17)

Papier : UQO WP 3 — Hedonic Housing Price Models for the United States (v1.1, mai 2026 → v1.2, octobre 2026). État avant révision figé par le tag pre-revision-20261017 et docs/main_pre-revision-20261017.pdf (60 pages). Rapport de l'editorial board : docs/REVIEW-REPORT.md. Aucun fichier original n'a été supprimé ; les anciens documents d'audit (AUDIT.md, CHANGES.md, PAPER_REVIEW.md, UPGRADE_REPORT.md) sont conservés tels quels.

# 1. Corrections majeures (où · avant · après · pourquoi · preuve)

# Où Avant (v1.1) Après (v1.2) Pourquoi Preuve
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)
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
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
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
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
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
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
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
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. —
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
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
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
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
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. — —
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. — —
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. — —
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). — —
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 —
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 »). — —
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. —

Aucun chiffre existant n'a été modifié sans recalcul ; toutes les valeurs v1.1 conservées (OLS, QR, ML aléatoire, ablation, SHAP, Moran OLS, imputation, winsorisation, stabilité QR) ont été revérifiées contre les pickles (results/*.pkl) et sont inchangées.

# 2. Références

Avant : 70 entrées (toutes citées). Après : 92 entrées (toutes citées, toutes vérifiées ; 27 DOI ajoutés aux entrées existantes ; 23 nouvelles ; 1 retirée : roberts2013endogeneity, chapitre de finance d'entreprise non pertinent, cité une fois dans les limites v1.1). Vérification : API Crossref (api.crossref.org/works?query.title=…&query.author=…, pool poli) le 2026-10-17 ; Halvorsen–Palmquist 1980 et Kennedy 1981 (AER, absents de Crossref) vérifiés via RePEc / listes de références (WebSearch) ; Koenker 2005 et Diebold–Mariano 1995 vérifiés par résolution directe du DOI.

Nouvelles (clé — source — DOI — rôle) :

  • halvorsen1980interpretation — AER 70(3) 474–475 — interprétation des dummies (§4.2).
  • kennedy1981estimation — AER 71(4) 801 — correction de biais (§4.2).
  • mayer2019estimation — J. Eur. Real Estate Res. 12(1) — 10.1108/JERER-08-2018-0035 — comparaison GBM/hédonique dans le temps.
  • hu2019monitoring — Land Use Policy 82 — 10.1016/j.landusepol.2018.12.030 — ML + hédonique (loyers).
  • bogin2020appraisal — JREFE 60(1–2) — 10.1007/s11146-019-09712-0 — précision AVM en zones rurales.
  • 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).
  • antipov2012mass — ESWA 39(2) — 10.1016/j.eswa.2011.08.077 — random forest en évaluation de masse.
  • meyer2022machine — Nature Communications 13:2208 — 10.1038/s41467-022-29838-9 — évaluation des cartes ML globales.
  • bourassa2007spatial — JREFE 35(2) — 10.1007/s11146-007-9036-8 — sous-marchés et prédiction.
  • bourassa2003submarkets — J. Housing Econ. 12(1) — 10.1016/S1051-1377(03)00003-2 — sous-marchés.
  • goodman2003segmentation — J. Housing Econ. 12(3) — 10.1016/S1051-1377(03)00031-7 — segmentation et précision hédonique.
  • koenker2005quantile — Cambridge UP — 10.1017/CBO9780511754098 — covariance jointe des quantiles.
  • koenker1999goodness — JASA 94(448) — 10.1080/01621459.1999.10473882 — pseudo-R².
  • cameron2015practitioner — J. Human Resources 50(2) — 10.3368/jhr.50.2.317 — inférence groupée.
  • moulton1990illustration — REStat 72(2) — 10.2307/2109724 — problème de Moulton.
  • conley1999gmm — J. Econometrics 92(1) — 10.1016/S0304-4076(98)00084-0 — HAC spatial.
  • epple1987hedonic — JPE 95(1) — 10.1086/261441 — identification hédonique.
  • jones1996indicator — JASA 91(433) — 10.1080/01621459.1996.10476680 — méthode de l'indicateur de manquant.
  • schratz2019hyperparameter — Ecological Modelling 406 — 10.1016/j.ecolmodel.2019.06.002 — réglage d'hyperparamètres spatial.
  • ho2021predicting — J. Property Research 38(1) — 10.1080/09599916.2020.1832558 — ML vs hédonique.
  • perezrave2019machine — J. Property Research 36(1) — 10.1080/09599916.2019.1587489 — ML pour inférence et prédiction.
  • diebold1995comparing — JBES 13(3) — 10.1080/07350015.1995.10524599 — comparaison de précision prédictive.
  • palmquist2005property — Handbook of Environmental Economics 2 — 10.1016/S1574-0099(05)02016-4 — revue des modèles hédoniques.

Corrections d'entrées existantes : sirmans2005composition pages 3–43 → 1–44 (Crossref). DOI ajoutés à 28 entrées (anglin1996, anselin2010, baldauf2020, campbell2011, can1992, chen2016, cropper1988, ekeland2004, goodman1998, halvorsen1981, hill2013, knight2002, koenker1978, kok2017, lancaster1966, lesage2009, liao2012, lundberg2020, mackinnon1985, malpezzi2003, mullainathan2017, oates1969, roberts2017, rosen1974, sirmans2005, white1980, zietz2008). Références demandées mais non ajoutées : « Meyer & Roberts » (référence introuvable sous ce nom ; la littérature visée est couverte par Roberts et al. 2017 et Meyer & Pebesma 2021/2022) ; Hastie et al. (manuel, non nécessaire).

# 3. Réanalyses exécutées (script · durée · sortie)

Toutes depuis les artefacts stockés (data/processed/*.pkl, results/*.pkl, data/raw/us_housing.duckdb), sur ce Mac (18 cœurs, 48 Go) ; XGBoost 1 000 arbres ≈ 7 s par ajustement.

Script Contenu Durée Sorties (results/revision/)
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
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
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
scripts/08_revision_tables_figures.py fragments LaTeX paper/tables/*.tex (19) + figures/fig12–fig14 < 1 min —

Vérification de reproductibilité : la valeur publiée R² géo = 0,4250 (ablation, modèle complet) est reproduite exactement (0,42501500587502516) par src/wp3/models.py, et R² aléatoire 0,8327 également.

# 4. Non modifié faute de données / hors périmètre (< 30 min)

  • Les résultats QR (5 quantiles), l'ablation, les SHAP et la comparaison ML aléatoire conservent le codage publié de ln(lot) = 0 (ré-estimation complète du pipeline perdu : pas disponible ; XGBoost insensible au codage, QR du lot sous-estimée — signalé).
  • Pas de modèle spatial (SAR/SEM/GWR), pas de HAC spatial (Conley), pas de wild cluster bootstrap.
  • Pas de blocage comté/MSA (county_fips manquant à 97 %).
  • Pas de réglage d'hyperparamètres (nested CV spatial) ; pas de CatBoost ; pas de réplication sur prix de transaction ; pas de données climatiques.
  • main_anon.tex n'existe pas (pas de soumission anonyme en cours) : rien à recompiler.

# 5. Forme

  • \WPversion 1.1 → 1.2 ; \WPdate May 2026 → October 2026 ; abstract et mots-clés réécrits (vocabulaire commun du programme : « hedonic price function », « out-of-sample », « MdAPE », « automated valuation model »).
  • Listes à puces du corps converties en prose (introduction, méthodologie, limitations, résultats) ; énumérations conservées uniquement dans l'annexe « Robustness Agenda ».
  • Nouvelles figures : fig12_geo_trees_curve.png, fig13_loso_by_state.png, fig14_state_heterogeneity.png (palette du papier : bleu/brique/gris avec marqueurs et styles de ligne comme encodage secondaire ; fig9 déplacée en annexe).
  • Fragments de tables générés (paper/tables/, \input dans les sections ; dernière ligne sans \\ — gotcha « Misplaced \noalign » avec \input en fin de ligne de tabular).
  • Compilation : cd paper && make → 0 erreur, 0 citation/référence indéfinie, pas d'Overfull > 10 pt ; PDF 82 pages (60 avant révision).
Files · main
Menu

Theme