SPB Git

spb/wp3_uqo Public

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

TeX 77.8% Python 22.1%
7.0 KB · 106 lines markdown
Rendered Raw Blame History
1# CHANGES — Restructuration du projet WP3 (2026-08-05)23Original intact : `~/Desktop/UQO/UQO_WP/immo-wp3-spb-20260519/`.4Nouvelle structure : `~/Desktop/wp3_uqo/` (ce dossier). Voir `AUDIT.md` pour l'état des lieux initial.56---78## 1. Déplacements / réorganisation910| Origine (immo-wp3-spb-20260519/) | Destination (wp3_uqo/) |11|---|---|12| `us_housing.duckdb` | `data/raw/` |13| `analytical_sample.pkl`, `model_data.pkl`, `shap_data.pkl` | `data/processed/` |14| `qr_results.pkl`, `ml_results.pkl`, `extended_results.pkl`, `v3_*.pkl` | `results/` |15| `figures/fig*.png` (6 survivantes) | remplacées par les 11 régénérées dans `figures/` (originales conservées dans l'archive source) |16| `wp3/main.tex`, `wp3/sections/`, `wp3/appendix/`, `uq_logo.jpg`, `Makefile` | `paper/` |17| `run_v3_spatial.py` | refactoré → `scripts/01_spatial_robustness.py` |18| `v3_qr_imputation_analysis.py` | refactoré → `scripts/02_qr_imputation.py` |1920Non repris (restent dans l'archive source uniquement) : `paper_hedonic_pricing{,_v2,_v3}.tex`21(anciennes versions), `wp3/main_web.tex` (contournement « Figure indisponible », devenu inutile),22fichiers auxiliaires LaTeX, `.DS_Store`.2324## 2. Code refactoré2526- **Nouveaux modules** `src/wp3/` : `config.py` (chemins relatifs, constantes, listes de variables),27  `data.py` (loaders + construction de la matrice de 62 régresseurs), `models.py` (entraînement28  XGBoost commun), `plotting.py` (style de figures + libellés lisibles).29- Les 2 scripts survivants sont réécrits en scripts numérotés avec docstrings, `argparse`,30  chemins relatifs (les chemins codés en dur `/Users/.../Desktop/immo-wp3-spb-20260519` ne31  fonctionnaient plus) et déduplication (le helper XGBoost et les listes de variables sont partagés).32- **Nouveaux scripts** : `03_make_figures.py` (11 figures depuis les pickles, avec statistiques de33  vérification), `04_export_tables.py` (tables du papier → `results/tables/*.csv`).34- `requirements.txt` épinglé sur l'environnement validé.35- En-tête `Author: Simon-Pierre Boucher — contact@spboucher.ai` ajouté à tous les fichiers de code36  et LaTeX (dans `references.bib`, l'e-mail est écrit sans `@` : BibTeX interprète `@` comme début d'entrée).3738## 3. Figures3940- **5 figures manquantes recréées** depuis les pickles (fig2 diagnostics OLS, fig4 prédit vs observé,41  fig7 carte, fig8 régions, fig9 relations bivariées) — les PNG originaux avaient été supprimés42  (~9 juin 2026) et le PDF existant contenait des boîtes « Figure indisponible ».43- **Les 11 figures régénérées dans un style homogène « journal »** (demande utilisateur) :44  typographie serif cohérente avec le papier, axes épurés (spines haut/droite retirés), grille45  discrète, palette sobre, libellés lisibles (« Log(Living Area) » au lieu de `ln_sqft`),46  titres de panneaux (a)/(b) alignés à gauche, 300 dpi.47- **Vérifications contenu = papier** (imprimées par `03_make_figures.py`) :48  skewness 0,18 / kurtosis 5,55 / JB 217 078 (fig2) ; R² OLS 0,6301 / XGB 0,8330 / LGB 0,8088 (fig4) ;49  OLS de référence ln_sqft 0,312 (fig3) — tous identiques aux valeurs du papier.50- Les 6 PNG originaux restent disponibles dans l'archive source pour comparaison.5152## 4. Papier LaTeX (`paper/`)5354Structure : `main.tex` + une section par fichier (déjà le cas), figures lues depuis `../figures/`55(`\graphicspath`), **bibliographie convertie du `thebibliography` manuel vers `references.bib`**56(37 entrées, clés identiques) + BibTeX/apalike. `sections/references.tex` supprimé.57Compilation : `latexmk`**main.pdf, 52 pages, 0 erreur, 0 référence/citation indéfinie**58(l'archive originale n'avait pas de `main.pdf` compilable — figures manquantes).5960### Complétions (placeholders `[TODO]` remplis avec les valeurs stockées dans les pickles)6162- **Tableau des tests inter-quantiles** (results) : 8 lignes `[TODO: diff]/[TODO: z]` remplies depuis63  `v3_qr_imputation_results.pkl` (ln_lot −0,041/z=−9,49 ; luxury −0,054/−6,82 ; foreclosure −0,155/−4,18 ;64  Northeast −0,264/−21,43 ; West −0,086/−6,26 ; bedrooms −0,051/−5,95 ; age² +0,010/1,40 ;65  waterfront +0,222/1,86), lignes triées par |z|.66- **Tableau winsorisation** (robustness) : β ln_sqft 0,610 ; bathrooms 0,211 ; garage 0,111.67- **Tableau stabilité QR** : CV exacts (au lieu de « <7 ») et stabilité de signe 100 % pour68  waterfront/pool.69- **Annexe** : marqueurs `[TODO]` retirés de la liste « Robustness Agenda » (items non cochés =70  travaux futurs) ; checklist reproductibilité : « Code available: Yes (replication package) »,71  « Data available: On request ».7273### Corrections d'incohérences (chiffres alignés sur les pickles — À VALIDER par l'auteur)74751. **En-tête du tableau inter-quantile** : disait β(0.90)−β(0.10) alors que les valeurs déjà76   présentes (garage +0,185, z=28,92…) correspondent à β(0.10)−β(0.90). En-tête corrigé.772. **Moran's I** : le tableau affichait 0,268/0,278/0,277 avec z=42,4/44,0/43,8 et « k=10 » ;78   le pickle (`v3_spatial_results.pkl`) contient 0,2742/0,2839/0,2652 (moyenne 0,2745 et79   écart-type 0,0076 du papier ✓) calculés avec **k=8**. Valeurs et k corrigés ; z recalculés80   en ré-exécutant le pipeline refactoré (41,8/43,5/40,5) — la ré-exécution reproduit81   exactement les I du pickle (validation bout-en-bout du script 01). Méthodologie : k=10 → k=8.823. **Description de la winsorisation** (data + robustness) : le texte disait « 1er/99e centile,83   toutes les variables continues » ; le code réel (script survivant + pickle) = lot au 99,5e84   centile (3 944 obs.) + Bike Score plafonné à 100 (38 obs.). Les chiffres du tableau85   (R² 0,640, β lot 0,058) proviennent bien de ce calcul. Description corrigée.864. **« CV < 7 % »** → « CV < 8 % » (methodology, robustness, discussion, limitations) :87   bedrooms 7,3 % et foreclosure 7,1 % dépassent 7 %.885. **Matrice de robustesse** : lignes FE mélangeaient R² in-sample (0,634) et out-of-sample89   (0,678/0,725) ; uniformisées en out-of-sample (0,630 → 0,678 (+4,8 pp) → 0,725 (+9,5 pp)),90   cohérent avec le tableau FE des résultats.916. Le tableau QR-stabilité listait « Pool » à la fois comme stable (<7) et instable (33,4) ;92   doublon supprimé (CV réel 33,4 %).9394**Aucun résultat, coefficient ou conclusion scientifique n'a été modifié** : toutes les95corrections ci-dessus alignent le texte sur les résultats effectivement stockés dans les pickles.9697## 5. À vérifier par l'auteur9899- Les 6 corrections numérotées ci-dessus (§4), en particulier Moran (k=8, nouvelles valeurs I/z).100- Le style des 11 figures régénérées (les 6 originales sont dans l'archive source si vous préférez101  l'ancien rendu pour certaines).102- Les scripts amont perdus (construction de l'échantillon depuis DuckDB, estimation OLS/QR/ML/SHAP)103  ne sont **pas** reconstruits — les artefacts stockés en tiennent lieu. Si une reconstruction104  complète raw→results est souhaitée, elle est possible mais devra être validée contre les pickles.105- `paper/main.tex` affiche « This version: \today » — figer la date avant soumission si besoin.106