Projet de Synthèse : Le Grand Duel des Régresseurs
Conclusion de la série ‘Maîtriser la Régression’
Machine Learning
Apprentissage Supervisé
Régression
Python
Projet
Author
Affiliation
Wilson Toussile
ENSPY & ESSFAR
1 Introduction : Le Choix du Meilleur Prédicteur
Au fil de cette série, nous avons construit une impressionnante boîte à outils de modèles de régression. De la simple ligne droite de la régression linéaire à la sagesse collective des forêts aléatoires, chaque algorithme offre une approche unique pour prédire des valeurs numériques.
Mais face à un nouveau problème, la question ultime demeure : quel modèle choisir ?
Cet atelier est le point d’orgue de notre parcours. Nous allons organiser un “grand duel” pour comparer de manière rigoureuse la performance de tous les régresseurs que nous avons étudiés. L’objectif n’est pas seulement de couronner un vainqueur, mais de comprendre les forces, les faiblesses et les compromis de chaque approche, afin de vous armer pour faire des choix éclairés dans vos propres projets.
2 Le Champ de Bataille : Le Marché Immobilier Californien
Pour notre projet, nous utiliserons le jeu de données California Housing de Scikit-learn. C’est un problème de régression classique et robuste.
Objectif : Prédire la valeur médiane des maisons (MedHouseVal) dans les districts de Californie, en centaines de milliers de dollars.
Variables Explicatives : 8 caractéristiques numériques décrivant chaque district (revenu médian, âge médian des maisons, nombre moyen de chambres, localisation géographique, etc.).
Pourquoi ce jeu de données ? Il est propre, entièrement numérique, et suffisamment complexe pour que les différents modèles puissent montrer leurs forces respectives.
3 Les Combattants
Voici la liste des modèles qui vont s’affronter :
Régression Linéaire (notre modèle de base)
Régression Ridge (régularisation L2)
Régression Lasso (régularisation L1 et sélection de variables)
k-Plus Proches Voisins (k-NN)
Arbre de Décision (élagué)
Forêt Aléatoire
Gradient Boosting
4 La Méthodologie : Des Règles du Jeu Équitables
Pour une comparaison juste, nous suivrons une méthodologie stricte :
Pré-traitement Standardisé : Les modèles sensibles à l’échelle des données (Linéaire, Ridge, Lasso, k-NN) seront intégrés dans un Pipeline avec un StandardScaler.
Recherche d’Hyperparamètres : Nous utiliserons GridSearchCV pour trouver la meilleure configuration pour les modèles qui en bénéficient le plus (Ridge, Lasso, k-NN, Arbre de Décision).
Évaluation Cohérente : Tous les modèles finaux seront évalués sur le même jeu de test en utilisant trois métriques clés :
R-carré (\(R^2\)) : La proportion de variance expliquée.
Erreur Quadratique Moyenne (MSE) : Utile pour l’optimisation.
Racine de l’Erreur Quadratique Moyenne (RMSE) : La plus interprétable, car elle est dans la même unité que la cible (centaines de milliers de dollars).
5 Préparation de l’Environnement et des Données
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns# Données et pré-traitementfrom sklearn.datasets import fetch_california_housingfrom sklearn.model_selection import train_test_split, GridSearchCVfrom sklearn.preprocessing import StandardScalerfrom sklearn.pipeline import Pipeline# Les modèlesfrom sklearn.linear_model import LinearRegression, Ridge, Lassofrom sklearn.neighbors import KNeighborsRegressorfrom sklearn.tree import DecisionTreeRegressorfrom sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor# Métriquesfrom sklearn.metrics import r2_score, mean_squared_error# Configurationsns.set_theme(style="whitegrid")plt.rcParams['figure.figsize'] = (12, 7)# 1. Charger et préparer les donnéeshousing = fetch_california_housing()X, y = housing.data, housing.target# 2. Diviser les donnéesX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)print(f"Données prêtes. Entraînement: {X_train.shape[0]} échantillons, Test: {X_test.shape[0]} échantillons.")
Comparons les performances finales de tous nos modèles sur le jeu de test.
# Créer un DataFrame à partir des résultatsresults_df = pd.DataFrame.from_dict(results, orient='index')results_df = results_df.sort_values(by='R2', ascending=False)print("--- Classement Final des Modèles par R² sur le Jeu de Test ---")print(results_df)# Visualisation des résultatsfig, axes = plt.subplots(1, 2, figsize=(20, 8))fig.suptitle("Comparaison des Performances des Modèles de Régression", fontsize=18)# Graphique R²sns.barplot(x=results_df['R2'], y=results_df.index, ax=axes[0], palette='summer')axes[0].set_title("Coefficient de Détermination (R²)")axes[0].set_xlim(0.5, 0.85)# Graphique RMSEsns.barplot(x=results_df['RMSE'], y=results_df.index, ax=axes[1], palette='autumn')axes[1].set_title("Racine de l'Erreur Quadratique Moyenne (RMSE)")plt.tight_layout(rect=[0, 0.03, 1, 0.95])plt.show()
--- Classement Final des Modèles par R² sur le Jeu de Test ---
R2 MSE RMSE
Random Forest 0.805123 0.255368 0.505340
Gradient Boosting 0.775645 0.293997 0.542215
Decision Tree 0.727229 0.357441 0.597864
k-NN 0.675961 0.424623 0.651631
Lasso 0.575900 0.555745 0.745483
Ridge 0.575788 0.555892 0.745581
Linear Regression 0.575788 0.555892 0.745581
/tmp/ipykernel_61468/3981110210.py:13: FutureWarning:
Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `y` variable to `hue` and set `legend=False` for the same effect.
/tmp/ipykernel_61468/3981110210.py:18: FutureWarning:
Passing `palette` without assigning `hue` is deprecated and will be removed in v0.14.0. Assign the `y` variable to `hue` and set `legend=False` for the same effect.
8 Discussion et Conclusion
Les résultats sont clairs :
Les Champions : Les méthodes ensemblistes, Forêt Aléatoire et Gradient Boosting, dominent largement la compétition. Elles obtiennent le R² le plus élevé (plus de 80% de la variance expliquée) et l’erreur de prédiction (RMSE) la plus faible.
Les Challengers : Le k-NN et l’Arbre de Décision, une fois leurs hyperparamètres bien réglés, offrent des performances respectables, bien meilleures que notre modèle de base.
La Référence : La Régression Linéaire (et ses variantes régularisées, qui performent de manière très similaire ici) sert de bonne ligne de base, mais elle est clairement surpassée par les modèles non-linéaires et ensemblistes, ce qui suggère que les relations dans les données sont plus complexes qu’une simple combinaison linéaire.
Conclusion finale : Pour ce problème, si la performance prédictive est le seul critère, la Forêt Aléatoire serait le choix de prédilection. Elle est extrêmement performante, robuste, et facile à mettre en œuvre. Si l’interprétabilité était cruciale, on pourrait se tourner vers l’Arbre de Décision (en sacrifiant de la performance) ou analyser l’importance des variables de la Forêt Aléatoire.
Cet atelier conclut notre exploration de la régression. Vous avez maintenant une méthodologie complète pour aborder un problème de régression, depuis la construction de modèles simples jusqu’à l’entraînement d’ensembles complexes, et surtout, pour les évaluer rigoureusement afin de choisir le meilleur outil pour votre tâche.