Repository Public Research preview
1# CHANGELOG — Révision scientifique complète (editorial board, 2026-10-17)23Papier : **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).5Rapport de l'editorial board : `docs/REVIEW-REPORT.md`. Aucun fichier original n'a été supprimé ; les anciens6documents d'audit (`AUDIT.md`, `CHANGES.md`, `PAPER_REVIEW.md`, `UPGRADE_REPORT.md`) sont conservés tels quels.78## 1. Corrections majeures (où · avant · après · pourquoi · preuve)910| # | 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. | — |3233Aucun chiffre existant n'a été modifié sans recalcul ; toutes les valeurs v1.1 conservées (OLS, QR, ML aléatoire, ablation, SHAP,34Moran OLS, imputation, winsorisation, stabilité QR) ont été revérifiées contre les pickles (`results/*.pkl`) et sont inchangées.3536## 2. Références3738**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ées39existantes ; 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)40le 2026-10-17 ; Halvorsen–Palmquist 1980 et Kennedy 1981 (AER, absents de Crossref) vérifiés via RePEc / listes de références41(WebSearch) ; Koenker 2005 et Diebold–Mariano 1995 vérifiés par résolution directe du DOI.4243Nouvelles (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.6768Corrections d'entrées existantes : `sirmans2005composition` pages 3–43 → **1–44** (Crossref). DOI ajoutés à 28 entrées69(anglin1996, anselin2010, baldauf2020, campbell2011, can1992, chen2016, cropper1988, ekeland2004, goodman1998, halvorsen1981,70hill2013, knight2002, koenker1978, kok2017, lancaster1966, lesage2009, liao2012, lundberg2020, mackinnon1985, malpezzi2003,71mullainathan2017, oates1969, roberts2017, rosen1974, sirmans2005, white1980, zietz2008). Références demandées mais72non ajoutées : « Meyer & Roberts » (référence introuvable sous ce nom ; la littérature visée est couverte par Roberts et al. 201773et Meyer & Pebesma 2021/2022) ; Hastie et al. (manuel, non nécessaire).7475## 3. Réanalyses exécutées (script · durée · sortie)7677Toutes depuis les artefacts stockés (`data/processed/*.pkl`, `results/*.pkl`, `data/raw/us_housing.duckdb`), sur ce Mac78(18 cœurs, 48 Go) ; XGBoost 1 000 arbres ≈ 7 s par ajustement.7980| 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 | — |8687Vérification de reproductibilité : la valeur publiée R² géo = 0,4250 (ablation, modèle complet) est reproduite exactement88(0,42501500587502516) par `src/wp3/models.py`, et R² aléatoire 0,8327 également.8990## 4. Non modifié faute de données / hors périmètre (< 30 min)9192- Les résultats QR (5 quantiles), l'ablation, les SHAP et la comparaison ML aléatoire conservent le codage publié de ln(lot) = 093 (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 de97 données climatiques.98- `main_anon.tex` n'existe pas (pas de soumission anonyme en cours) : rien à recompiler.99100## 5. Forme101102- `\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ées105 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 pages111 (60 avant révision).112