2026-01-17
A. Guilmain • C. Maffre • K. Akchi
Y. Liu • N. Boimond • R. Al Afia
Janvier 2026
Question de recherche
Dans quelle mesure les modèles ML peuvent-ils prédire les prix — ET expliquer pourquoi ?
Ce projet ne cherche pas juste le meilleur MAE
→ Il cherche le meilleur compromis entre :
Contexte : California 1990
Boussole 1 : Justesse technique (Compromis biais-variance)
Question : « Ce modèle mesure-t-il correctement la réalité — et le fera-t-il demain ? »
\text{Erreur Totale} = \underbrace{\text{Biais}^2}_{\text{Sous-apprentissage}} + \underbrace{\text{Variance}}_{\text{Sur-apprentissage}} + \underbrace{\text{Bruit}}_{\text{Irréductible}}
Boussole 2 : Valeur métier (Compromis performance-interprétabilité)
Question : « Ce modèle produit-il de la connaissance exploitable ? »
| Besoin | Question | Outil |
|---|---|---|
| Comprendre | Pourquoi ce prix ? | Ridge (coefficients \beta) |
| Prédire | Quel prix exact ? | LightGBM (boosting) |
| Concilier | Les deux ! | LightGBM + SHAP |
1. Données : scikit-learn version
ocean_proximity absente (vs version Kaggle)2. Partitionnement stratifié
3. Validation croisée
4. Métriques
fetch_california_housing() standardocean_proximity (impact estimé +2-3% R^2)AveRooms = total_rooms / households)Décision méthodologique
Ces limites sont documentées et quantifiées — pas ignorées.
L’objectif est de montrer comment extraire de la valeur malgré les contraintes structurelles.
Partie I : Comprendre les données
Partie II : Construire et évaluer
Partie III : Interpréter et valoriser
Annexes
→ Commençons par comprendre les données
Statistiques clés
| Métrique | Valeur |
|---|---|
| Moyenne | 207k$ |
| Médiane | 180k$ |
| Écart-type | 116k$ |
| Skewness | +1.0 |
Censure administrative
1 044 districts (5.1%) plafonnés à exactement 500 001$
→ Sous-estimation systématique des biens de luxe
r = 0.69 \quad \Rightarrow \quad R^2 \approx 48\%
Interprétation
Le revenu médian explique à lui seul 48% de la variance
→ Baseline Ridge sur MedInc seul = déjà solide
Top 5 corrélations
| Feature | r | Signe |
|---|---|---|
| MedInc | 0.69 | + |
| AveRooms | 0.15 | + |
| Latitude | -0.14 | - |
| HouseAge | 0.11 | + |
| Longitude | -0.05 | - |
Patterns spatiaux
Latitude (-0.14) et Longitude (-0.05) ?
Corrélations individuelles faibles, mais leur combinaison révèle des clusters puissants
→ Justifie modèles non-linéaires (LightGBM)
Voici comment deux méthodes de réduction de dimension révèlent des structures différentes dans les données.
Tip
ACP (gauche)
→ Projection linéaire — capture 62.8% de la variance
→ Montre un gradient continu — masque les ruptures géographiques
UMAP (droite)
→ Projection non-linéaire — préserve les structures locales
→ Révèle 4 clusters nets — Bay Area, LA, Central Valley, Nord isolé
Implication modélisation :
Un modèle linéaire (Ridge) verra seulement le gradient.
Un modèle non-linéaire (LightGBM) exploitera les clusters — comme UMAP.
Implication pour la modélisation
Un modèle linéaire (Ridge) aura les mêmes limitations que l’ACP — gradient moyen mais ruptures manquées.
Un modèle non-linéaire (LightGBM) exploite ces clusters comme UMAP les révèle.
Trois raisons techniques rédhibitoires
1. Instabilité stochastique
random_state)2. Coût computationnel
3. Perte d’interprétabilité métier
Verdict méthodologique
UMAP = diagnostic visuel justifiant besoin d’algorithmes non-linéaires
≠ Feature engineering de production
1. Enrichissement contextuel (combiner)
BedrmsToRooms = \frac{\text{AveBedrms}}{\text{AveRooms}} → standingDistanceToSF = \sqrt{(\text{lat} - 37.77)^2 + (\text{lon} + 122.42)^2} → attractivitéIsBayArea = 1 si distance < 1° → cluster premiumMedInc_x_BayArea → interaction revenu × localisationMedInc_x_HouseAge → charme ancien si revenu élevé2. Rectification distributions (déballer)
log_MedInc, log_Population → stabiliser variancesqrt_HouseAge → dépréciation non-linéaire3. Compatibilité algorithmique (standardiser)

Protocole
Résultats
| Config | MAE | RMSE |
|---|---|---|
| Baseline | 0.3145 | 0.4712 |
| Engineered | 0.3098 | 0.4625 |
| Gain | -1.5% | -1.8% |
Verdict
p = 0.011 < 0.05 → Gain significatif
→ Feature Engineering VALIDÉ
✅ Cible identifiée : Prix médian, asymétrie +1.0, censure 5.1% à 500k$
✅ Prédicteur dominant : MedInc (r = 0.69) explique 48% variance seul
✅ Structure non-linéaire : UMAP révèle clusters géo → besoin LightGBM
✅ Feature Engineering validé : +9 features → -1.5% MAE (p = 0.011)
✅ Pipeline optimisé : Scaling conditionnel (Ridge oui, LightGBM non)
→ Passons à la modélisation : quel algorithme capte cette complexité ?
Protocole de sélection
Top 5 résultats
| Rang | Algorithme | Famille | RMSE | MAE | R^2 | Temps |
|---|---|---|---|---|---|---|
| 1 | LightGBM | Boosting | 0.467 | 0.311 | 0.836 | 32.2s |
| 2 | XGBoost | Boosting | 0.468 | 0.310 | 0.836 | 0.5s |
| 3 | Extra Trees | Bagging | 0.502 | 0.329 | 0.811 | 3.0s |
| 4 | Random Forest | Bagging | 0.506 | 0.331 | 0.808 | 6.3s |
| … | … | … | … | … | … | … |
| 9 | Ridge | Linéaire | 0.721 | 0.529 | 0.611 | 0.03s |

Rupture de performance
-35.2% RMSE entre LightGBM (0.467) et Ridge (0.721)
\frac{0.721 - 0.467}{0.721} = 35.2\%
Interprétation
Cette rupture suggère fortement :
→ Modèles à base d’arbres indispensables
Ridge
Random Forest
LightGBM
GridSearchCV : Le cartographe
Analogie : Tester tous les restaurants d’un quartier, dans l’ordre
Optuna : L’explorateur
Analogie : Après chaque repas, orienter choix suivants selon résultats
GridSearchCV (LightGBM)
| Hyperparamètre | Valeurs | Combinaisons |
|---|---|---|
n_estimators |
{100, 200, 300} | 3 |
learning_rate |
{0.05, 0.1} | 2 |
num_leaves |
{31, 50} | 2 |
| Total | 12 |
Optuna (LightGBM)
| Hyperparamètre | Espace | Type |
|---|---|---|
n_estimators |
[100, 1000] step=50 | Discret |
learning_rate |
[0.01, 0.3] | Log-uniforme |
num_leaves |
[20, 300] | Discret |
reg_alpha |
[1e-8, 10] | Log-uniforme |
reg_lambda |
[1e-8, 10] | Log-uniforme |


| Méthode | RMSE | MAE | R^2 |
|---|---|---|---|
| GridSearchCV | 0.4415 | 0.2864 | 0.8493 |
| Optuna | 0.4493 | 0.2893 | 0.8439 |
Gagnant : GridSearchCV (+1.7% RMSE)
Exploration exhaustive bien calibrée
Mais Optuna reste supérieur pour espaces larges (>5 hyperparams)
Dégradation Q5 (biens >290k$)
| Quintile | Prix | MAE | RMSE |
|---|---|---|---|
| Q1 | <107k$ | 17.2k$ | 27.2k$ |
| Q3 | 157-209k$ | 24.4k$ | 35.1k$ |
| Q5 | >290k$ | 49.7k$ | 71.5k$ |
La “falaise” du luxe
+188% MAE entre Q1 et Q5
Cause probable : Censure 500k$ (5% dataset) crée plafond artificiel
Résidus moyens par zone
| Zone | Résidu | \sigma |
|---|---|---|
| Bay Area | +4.2k$ | 47.3k$ |
| Los Angeles | +1.1k$ | 46.6k$ |
| Central Valley | +0.8k$ | 23.0k$ |
| Reste | -1.0k$ | 44.2k$ |
Variables omises
Sous-estimation Bay Area suggère facteurs non capturés :
✅ Champion identifié : LightGBM (RMSE 0.467, R^2 0.836)
✅ Écart structurel : -35% vs Ridge → non-linéarité confirmée
✅ Optimisation : GridSearchCV gagne (+1.7% vs Optuna sur cet espace)
⚠️ Limites détectées :
❓ Question restante : Comment expliquer ces prédictions ?
→ SHAP transforme la boîte noire en outil de décision
Le problème
LightGBM performe bien (RMSE 0.467) — mais cette performance ne suffit pas.
Un modèle qui prédit sans expliquer = Oracle inutilisable pour convaincre un client.
Trois questions métier
La réponse : SHAP (SHapley Additive exPlanations)
L’intuition : Partage équitable
3 commerciaux signent contrat 100k€. Comment répartir ?
Transposition ML
| Jeux coopératifs | Machine Learning |
|---|---|
| Joueurs | Features |
| Gain v(S) | Prédiction f(S) |
| Valeur Shapley | Contribution SHAP \phi_i |
Formule de décomposition
f(x) = \phi_0 + \sum_{i=1}^n \phi_i
Propriétés garanties
SHAP Summary Plot
Comment lire
Top 3 features
| Feature | Importance |
|---|---|
| MedInc | 🌟🌟🌟🌟🌟 |
| DistanceToSF | 🌟🌟🌟 |
| IsBayArea | 🌟🌟 |
Insights clés
1. MedInc domine
2. DistanceToSF
3. IsBayArea
SHAP Dependence Plots
3 zones identifiées
Implication stratégique
Investir dans quartier passant de 30k$ → 60k$/an de revenu médian rapporte PLUS (+45k$ valeur)
que même quartier 60k$ → 90k$/an (+30k$ seulement)
→ ROI décroissant avec le revenu
Limite méthodologique
Affirmation d’interactions nécessiterait SHAP Interaction Values (coût O(n^2))
Dispersion = indice fort, pas preuve formelle

Lecture intuitive
Pitch commercial
“Ce bien vaut 450k$ grâce à :
Âge bâtiment pénalise (-18k$) — une rénovation comblerait cet écart.”
Comparaison 3 méthodes
3 approches indépendantes
| Méthode | Type | Principe |
|---|---|---|
| SHAP | Non-linéaire | Contributions marginales |
| Permutation | Agnostique | Dégradation si mélange |
| Ridge | Linéaire | Coefficients \beta |
Critère de solidité
Si les 3 méthodes s’accordent sur classement top features :
→ Insights structurels (réalité des données)
≠ Artefacts algorithmiques
Corrélation Spearman - SHAP ↔︎ Permutation : 0.89 - SHAP ↔︎ Ridge : 0.76
✅ Convergence forte confirmée
Ce que SHAP révèle
| Question | Analyse | Réponse |
|---|---|---|
| Quels leviers ? | Summary Plot | Top features ordonnées |
| Quelle forme ? | Dependence | Non-linéarités, seuils |
| Pourquoi ce prix ? | Waterfall | Décomposition explicite |
| C’est fiable ? | Multi-méthodes | Validation croisée ✅ |
Transformation accomplie
LightGBM — initialement boîte noire
↓ SHAP
Outil de décision transparent
→ Performance (RMSE 0.467)
ET
→ Compréhension (contributions \phi_i)
Limites actuelles
Perspectives d’amélioration
→ Conclusion : Quel modèle pour quel usage ?
Boussole 1 : Justesse technique ✅
Question : Le modèle mesure-t-il correctement la réalité ?
| Étape | Décision | Impact erreur |
|---|---|---|
| Feature Engineering | Log-transform, interactions | ↓ Biais (linéarisation) |
| Criblage PyCaret | LightGBM > Ridge | -35% RMSE (non-linéarité) |
| Optimisation | GridSearchCV (5 hyperparams) | ↓ Variance (régularisation) |
| Évaluation Q5 | Dégradation +188% >295k$ | Limite identifiée (censure) |
Verdict : MAE 31.2k$, R^2 0.844 — Objectif atteint
Boussole 2 : Valeur métier ✅
Question : Le modèle produit-il de la connaissance exploitable ?
| Modèle | Performance | Interprétabilité native | Avec SHAP | Verdict |
|---|---|---|---|---|
| LightGBM | 📊 31.2k$ | ❌ Boîte noire | ✅ Explicable | Champion complet |
| Random Forest | 📊 32.8k$ | ❌ Boîte noire | ✅ Explicable | Équilibre |
| Ridge | 📊 51.2k$ | ✅ Coefficients \beta | — | Audit natif |
Verdict : SHAP a transformé LightGBM — compromis résolu
| Profil | Modèle | Justification | Positionnement |
|---|---|---|---|
| Décideur Stratégique (Promoteur, Urbaniste) | Random Forest + SHAP | Équilibre parfait. Arbres capturent non-linéarités, SHAP fournit waterfalls pour justifier investissements | 📊 85% / 🔍 75% |
| Système Automatisé (Zestimate, API temps réel) | LightGBM + SHAP | Champion incontesté (MAE 31k$). Rapidité inférence (1.2s) + précision tabulaire = moteur idéal plateforme web | 📊 100% / 🔍 95% |
| Auditeur/Régulateur (Conformité, Éthique) | Ridge | Structure mathématique simple (y = ax + b). Moins précis (-20k$ MAE) mais seul à garantir auditabilité totale sans post-processing | 📊 70% / 🔍 95% |
Positionnement = Performance / Interprétabilité
Ces recommandations s’appuient sur performances mesurées dans notre cadre expérimental.
| # | Limite | Cause | Impact | Solution proposée |
|---|---|---|---|---|
| 1 | Obsolescence temporelle (1990 → 2026) | 36 ans d’écart | Biais temporel (dynamiques pré-Tech) | Réentraînement Zillow/Redfin (données 2024+) |
| 2 | Censure 500k$ | Plafond administratif appris | Sous-estimation +24% (Q5) | Modèle Tobit OU exclusion pour “modèle luxe” |
| 3 | Cécité locale | Agrégation districts | Invisible rénovations individuelles | Dataset granulaire (Ames Housing) |
| 4 | Pas d’incertitude | Prédiction ponctuelle \hat{y} | Confiance non mesurée (450k$ ± ?) | Conformal Prediction (IC à 95%) |
Impact sur les boussoles
→ Ces limites ne sont pas des échecs — pistes d’amélioration documentées
1. Performance brute ≠ Valeur
Un MAE de 31.2k$ n’a de sens que si on peut expliquer pourquoi ce prix.
2. Interprétabilité ≠ Luxe
SHAP transforme prédiction opaque en argument commercial tangible.
3. Choix modèle = Contextuel
→ Chaque usage appelle son outil
Entre précision et clarté, ce projet n’a pas choisi.
SHAP permet de concilier les deux.
Contacts
Ressources
Questions anticipées
Q1. Pourquoi pas SVM ou réseaux neurones ? → SVM : temps prohibitif pour performance médiocre. NN : overkill pour données tabulaires
Q2. Pourquoi garder censure 500k$ ? → Fidélité dataset standard scikit-learn. Extension : modèle Tobit ou exclusion
Q3. SHAP est-il causal ? → Non ! Il explique le modèle, pas la réalité. Attention biais données
Q4. Généraliser à autres marchés ? → Pipeline reproductible — changer données + adapter feature engineering géo
« Un bon modèle prédit.
Un excellent modèle prédit ET explique. »
| Métrique | Valeur | Interprétation |
|---|---|---|
| MAE | 28.6k$ | Erreur absolue moyenne |
| RMSE | 44.2k$ | Pénalise grosses erreurs (quadratique) |
| R^2 | 0.849 | 84.9% variance expliquée |
| MAPE | 16.8% | Erreur relative moyenne |
| Temps train | 1.2s | Inférence rapide (production) |
MAE (Mean Absolute Error)
\text{MAE} = \frac{1}{n}\sum_{i=1}^n |y_i - \hat{y}_i|
RMSE (Root Mean Squared Error)
\text{RMSE} = \sqrt{\frac{1}{n}\sum_{i=1}^n (y_i - \hat{y}_i)^2}
R^2 (Coefficient de Détermination)
R^2 = 1 - \frac{\sum(y_i - \hat{y}_i)^2}{\sum(y_i - \bar{y})^2}
Décomposition additive
f(x) = \phi_0 + \sum_{i=1}^p \phi_i
Valeur de Shapley
\phi_i = \sum_{S \subseteq N \setminus \{i\}} \frac{|S|!(|N|-|S|-1)!}{|N|!} [v(S \cup \{i\}) - v(S)]
TreeExplainer (LightGBM)
Complexité : O(T \times L \times D^2) au lieu de O(2^p)
Biais-Variance
\text{Erreur} = \text{Biais}^2 + \text{Variance} + \text{Bruit}
Performance-Interprétabilité
Pas de formule — arbitrage contextuel
| Rang | Modèle | Famille | MAE | RMSE | R^2 | MAPE | Temps |
|---|---|---|---|---|---|---|---|
| 1 | LightGBM | Boosting | 0.311 | 0.467 | 0.836 | 17.5% | 32.2s |
| 2 | XGBoost | Boosting | 0.310 | 0.468 | 0.836 | 17.2% | 0.5s |
| 3 | CatBoost | Boosting | 0.315 | 0.472 | 0.832 | 17.8% | 45.1s |
| 4 | Extra Trees | Bagging | 0.329 | 0.502 | 0.811 | 18.1% | 3.0s |
| 5 | Random Forest | Bagging | 0.331 | 0.506 | 0.808 | 18.2% | 6.3s |
| 6 | Gradient Boosting | Boosting | 0.368 | 0.531 | 0.789 | 19.8% | 3.1s |
| 7 | Decision Tree | Arbre | 0.452 | 0.682 | 0.651 | 25.8% | 0.1s |
| 8 | KNN | Instance | 0.443 | 0.652 | 0.681 | 24.5% | 0.8s |
| 9 | Ridge | Linéaire | 0.529 | 0.721 | 0.611 | 29.0% | 0.03s |
| 10 | Linear Regression | Linéaire | 0.529 | 0.721 | 0.611 | 29.0% | 0.02s |
| … | … | … | … | … | … | … | … |
| 18 | Dummy | Baseline | 0.912 | 1.152 | 0.000 | 52.3% | 0.01s |
Algorithme TPE (Tree-structured Parzen Estimator)
Modélise deux distributions : - \ell(x) = P(x | \text{score dans top 15\%}) → zones prometteuses - g(x) = P(x | \text{score hors top 15\%}) → zones à éviter
Prochain point : x^* = \arg\max \frac{\ell(x)}{g(x)}
Hyperparamètres explorés
| Paramètre | Espace | Type | Justification |
|---|---|---|---|
n_estimators |
[100, 1000] step=50 | Discret | Nombre d’arbres |
learning_rate |
[0.01, 0.3] | Log-uniforme | Ordres grandeur non-linéaires |
num_leaves |
[20, 300] | Discret | Complexité arbres |
reg_alpha |
[1e-8, 10] | Log-uniforme | Régularisation L1 |
reg_lambda |
[1e-8, 10] | Log-uniforme | Régularisation L2 |
Schéma partitionnement
Vérification équilibre
| Quintile | Plage prix | Train | Test | Écart |
|---|---|---|---|---|
| Q1 | <119k$ | 20.0% | 20.0% | 0.0% |
| Q2 | 119-160k$ | 20.0% | 20.0% | 0.0% |
| Q3 | 160-212k$ | 20.0% | 20.0% | 0.0% |
| Q4 | 212-295k$ | 20.0% | 20.0% | 0.0% |
| Q5 | >295k$ | 20.0% | 20.0% | 0.0% |
Fondations théoriques - Shapley, L. S. (1953). A value for n-person games. Contributions to the Theory of Games. - Lundberg, S. M., & Lee, S.-I. (2017). A Unified Approach to Interpreting Model Predictions. NeurIPS.
Implémentations - Pedregosa, F. et al. (2011). Scikit-learn: Machine Learning in Python. JMLR. - Ke, G. et al. (2017). LightGBM: A Highly Efficient Gradient Boosting Decision Tree. NeurIPS.
Datasets - Pace, R. K., & Barry, R. (1997). Sparse Spatial Autoregressions. Statistics & Probability Letters. - Géron, A. (2022). Hands-On Machine Learning (3rd ed.). O’Reilly.
Méthodologie - Breiman, L. (2001). Statistical Modeling: The Two Cultures. Statistical Science. - Kohavi, R. (1995). A Study of Cross-Validation and Bootstrap. IJCAI.
Questions techniques
Q1. Pourquoi log-scale pour learning_rate ? → Effet non-linéaire : [0.01, 0.1] aussi important que [0.1, 1.0]. Échelle log échantillonne uniformément ordres grandeur.
Q2. GridSearch vs Optuna : lequel choisir ? → GridSearch si espace bien connu (<5 params). Optuna si exploration large ou budget temps limité.
Q3. Validation croisée : 5-Fold ou 10-Fold ? → 10-Fold pour criblage (estimation très stable). 5-Fold pour optimisation (compromis stabilité/coût).
Questions métier
Q1. Ce modèle est-il déployable en production ? → OUI pour API batch (prédictions quotidiennes). Nécessite Conformal Prediction pour IC en temps réel.
Q2. Comment gérer les biens >500k$ ? → Deux options : (1) Modèle Tobit (censure explicite), (2) Modèle “luxe” séparé sur données non censurées.
Q3. Généralisation à Paris/Londres ? → Pipeline reproductible — réentraîner sur données locales + adapter feature engineering (distance Champs-Élysées, stations métro, etc.).