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.5 KB · 122 lines markdown
Rendered Raw Blame History
1# AUDIT — UQO Working Paper 3 (Hedonic Housing Prices, US)23**Source auditée** : `~/Desktop/UQO/UQO_WP/immo-wp3-spb-20260519/` (3,2 Go, intacte — non modifiée)4**Nouvelle structure** : `~/Desktop/wp3_uqo/` (ce dossier)5**Date de l'audit** : 2026-08-0567---89## 1. Vue d'ensemble1011Projet de recherche terminé : comparaison OLS / régression quantile / ML (XGBoost, LightGBM)12pour la valorisation hédonique de 788 842 annonces Zillow (50 États + DC).13Le papier final est le dossier `wp3/` (main.tex + sections), version « UQO Working Paper No. 3 », mai 2026.1415## 2. Inventaire des fichiers source1617### 2.1 Code Python (2 scripts seulement — voir §5 : scripts perdus)1819| Script | Rôle | Produit |20|---|---|---|21| `run_v3_spatial.py` (19,6 Ko) | ZIP3 fixed-effects OLS ; Moran's I (3 sous-échantillons) ; XGBoost avec/sans géographie ; ablation (6 jeux de variables) | `v3_spatial_results.pkl` |22| `v3_qr_imputation_analysis.py` (14,4 Ko) | Stabilité QR (10 sous-échantillons τ=0.50) ; test inter-quantile τ=0.10 vs 0.90 ; sensibilité imputation (via duckdb) ; sensibilité winsorisation | `v3_qr_imputation_results.pkl` |2324Les deux scripts ont un chemin codé en dur `BASE = '/Users/simon-pierreboucher/Desktop/immo-wp3-spb-20260519'`25qui **n'existe plus** (le projet a été déplacé dans `UQO/UQO_WP/`) — ils ne tournent plus tels quels.2627### 2.2 Données2829| Fichier | Taille | Contenu | Classement |30|---|---|---|---|31| `us_housing.duckdb` | 1,6 Go | Données brutes : `properties` (839 313 × 116), `price_history`, `schools`, `tax_history`, `meta_columns` | **data/raw** |32| `analytical_sample.pkl` | 457 Mo | Échantillon analytique final : DataFrame 788 842 × 68 (variables engineerées : ln_price, ln_sqft, interactions, dummies catégorielles, etc.) | **data/processed** |33| `model_data.pkl` | 867 Mo | Données prêtes pour modèles : `X_const` (788 842 × 63, standardisé + const), `y_clean`, `df_clean`, `feature_names`, `means`/`stds`, résultats OLS (`ols_results`), `residuals` | **data/processed** |34| `shap_data.pkl` | 7,5 Mo | Valeurs SHAP XGBoost (10 000 × 62), `X_shap`, `expected_value` | **data/processed** |3536### 2.3 Résultats (pickles)3738| Fichier | Contenu |39|---|---|40| `qr_results.pkl` | Régression quantile : params / p-values / pseudo-R² aux τ ∈ {0.10, 0.25, 0.50, 0.75, 0.90} |41| `ml_results.pkl` (437 Mo) | Modèles ML entraînés (XGBRegressor, LGBMRegressor), prédictions test (157 769), splits train/test (631 073 / 157 769), métriques r2/rmse/mae, importances |42| `extended_results.pkl` | OLS non standardisé (params/bse/p), holdout géographique (OLS/XGB/RF), Moran's I initial, stabilité QR (v2) |43| `v3_spatial_results.pkl` | Sorties de `run_v3_spatial.py` (ZIP3 FE, Moran robustesse, XGB ±géo, ablation) |44| `v3_qr_imputation_results.pkl` | Sorties de `v3_qr_imputation_analysis.py` |45| `v3_shap_stability.pkl` | Stabilité SHAP inter-modèles (XGB/LGB/RF), rangs, ρ de Spearman |4647### 2.4 Figures4849`figures/` (racine) et `wp3/figures/` sont **identiques octet pour octet** (duplication).50Présentes (6) : `fig1_price_distribution`, `fig3_quantile_coefficients`, `fig5_shap_summary`,51`fig6_shap_importance`, `fig10_shap_dependence`, `fig11_shap_interactions`.5253**⚠ Manquantes (5)** — référencées par le papier mais absentes des deux dossiers54(supprimées vers le 9 juin 2026 d'après les timestamps des dossiers) :5556| Figure | Légende dans le papier | Régénérable depuis |57|---|---|---|58| `fig2_ols_diagnostics.png` | Diagnostics OLS (résidus vs fitted, Q-Q, distribution, scale-location) | `model_data.pkl` (residuals + fitted) |59| `fig4_model_comparison.png` | Prédit vs observé : OLS / XGBoost / LightGBM | `ml_results.pkl` (y_test, y_pred_*) |60| `fig7_geographic_prices.png` | Carte lat/lon des log-prix (sous-échantillon 50 000) | `analytical_sample.pkl` |61| `fig8_regional_prices.png` | Distribution des prix par région Census | `analytical_sample.pkl` |62| `fig9_marginal_effects.png` | Relations bivariées brutes (scatter + moyennes binnées) | `analytical_sample.pkl` |6364### 2.5 LaTeX — 4 versions successives6566| Version | Fichiers | Statut |67|---|---|---|68| v1 | `paper_hedonic_pricing.tex` (71 Ko, monolithique) | Obsolète |69| v2 | `paper_hedonic_pricing_v2.tex` (82 Ko) | Obsolète |70| v3 | `paper_hedonic_pricing_v3.tex` (115 Ko) | Obsolète — contenu repris dans wp3/ |71| **wp3/** | `main.tex` + `sections/` (9 sections + titlepage + references) + `appendix/` + `Makefile` | **Version finale** |7273Particularités de `wp3/` :74- `main_web.tex` = copie de `main.tex` + hack `\includegraphics` qui remplace toute figure75  manquante par une boîte « Figure indisponible ». Le PDF existant (`main_web.pdf`, 50 pages,76  13 juin) contient donc des **placeholders** à la place des 5 figures manquantes.77- Il n'existe **pas** de `main.pdf` compilé (la compilation de `main.tex` échouerait sur les figures manquantes).78- Bibliographie : `thebibliography` manuel dans `sections/references.tex` (43 entrées) — pas de `.bib`.79- `wp3/tables/` est vide (tables codées en dur dans les .tex).80- Fichiers auxiliaires LaTeX (aux/log/out/toc/fls/fdb_latexmk/synctex) présents à la racine et dans wp3/.8182## 3. Chaîne de production (reconstituée)8384```85us_housing.duckdb (raw)86   └─(script PERDU : filtrage + feature engineering)→ analytical_sample.pkl (788 842 × 68)87        ├─(script PERDU : standardisation + OLS)→ model_data.pkl88        ├─(script PERDU : QR aux 5 quantiles)→ qr_results.pkl89        ├─(script PERDU : XGB/LGB + split 80/20)→ ml_results.pkl90        ├─(script PERDU : SHAP sur 10 000 obs)→ shap_data.pkl91        ├─(script PERDU : holdout géo, RF, Moran v2)→ extended_results.pkl92        ├─(script PERDU : stabilité SHAP XGB/LGB/RF)→ v3_shap_stability.pkl93        ├─ run_v3_spatial.py → v3_spatial_results.pkl94        └─ v3_qr_imputation_analysis.py → v3_qr_imputation_results.pkl95   figures fig1–fig11 : script(s) de tracé PERDU(S)96```9798## 4. Fichiers morts / dupliqués / auxiliaires99100- Doublons : `figures/``wp3/figures/`.101- Versions obsolètes : `paper_hedonic_pricing{,_v2,_v3}.{tex,aux,log,out,toc}`.102- Auxiliaires LaTeX régénérables : `*.aux, *.log, *.out, *.toc, *.fls, *.fdb_latexmk, *.synctex.gz`.103- `main_web.tex` : contournement temporaire, à retirer une fois les figures restaurées.104- `.DS_Store` divers.105106## 5. ⚠ Problèmes à signaler (à vérifier par l'auteur)1071081. **Scripts générateurs perdus** : les scripts de construction de l'échantillon, d'estimation109   (OLS, QR, ML, SHAP) et de tracé des figures n'existent plus — seuls 2 scripts « v3 » survivent.110   Les nouveaux scripts dans `scripts/` sont des **reconstructions** documentées, écrites à partir111   des pickles, du papier et des 2 scripts survivants ; ils sont vérifiés contre les résultats112   stockés quand c'est faisable (voir CHANGES.md).1132. **5 figures manquantes** (fig2, fig4, fig7, fig8, fig9) : régénérées depuis les pickles.114   Le **contenu** (données) est identique aux données originales, mais le **style** (couleurs,115   mise en page) peut différer des PNG perdus — à valider visuellement.1163. **Les 11 figures ont finalement toutes été régénérées** dans un style « journal » homogène117   (demande utilisateur en cours de session) ; le contenu de chacune est vérifié contre les118   pickles et les chiffres du papier (voir CHANGES.md §3). Les 6 PNG originaux restent119   disponibles dans l'archive source.1204. Chemins codés en dur dans les 2 scripts survivants (corrigés dans les versions refactorées).1215. Aucun changement aux résultats, chiffres ou affirmations scientifiques n'a été apporté.122