École 42 · ~/projets/linear-regression
Linear regression
Une régression linéaire en Python pour estimer un prix selon le kilométrage : normalisation des données, descente de gradient, prédiction et évaluation avec RMSE et R².
terminéEn bref
Objectif du projet
Estimer un prix à partir du kilométrage avec un modèle linéaire appris sur les données du projet.
Compétences et apprentissages
Normaliser une variable, entraîner les paramètres par descente de gradient et évaluer l’ajustement avec RMSE et R².
Technologies principales
PYTHON / APPRENDRE À PARTIR DES DONNÉES
Une droite pour estimer un prix.
Les 24 observations du projet relient kilométrage et prix. Explorez comment la descente de gradient ajuste le modèle.
Un taux plus faible avance par petits pas : augmentez le budget pour lui laisser le temps de converger. Il ne garantit pas une erreur finale plus basse. Changer de taux conserve l’étape affichée, dans la limite du nouvel arrêt.
Seuil de variation de MSE atteint après 23 982 itérations.
6 267prix estimé · unité du jeu de données
Dans la plage des données d’apprentissage.
θ₀ = 7 877,9
θ₁ = -4 535,8x = (km − min) / (max − min)Modèle affiché après 23982 itérations, au taux 0,01.
Moins vite, mais jusqu’au même ajustement.
À 10 000 itérations, le taux 0,001 n’a pas fini d’apprendre. Avec un budget allant jusqu’à 300 000, les trois taux atteignent le seuil d’arrêt et donnent ici un RMSE presque identique.
| Taux | RMSE à 10 000* | Arrêt par seuil | RMSE à l’arrêt |
|---|---|---|---|
| 0,001 | 1 231,309 | 214 000 itérations | 800,728 |
| 0,01 | 800,907 | 23 982 itérations | 800,728 |
| 0,1 | 800,728 | 2 653 itérations | 800,728 |
* Si l’apprentissage s’arrête avant 10 000 itérations, sa dernière valeur est conservée. Un faible changement de MSE dépend aussi de la taille des pas : ce seuil n’est pas une garantie d’atteindre exactement le minimum. L’erreur restante vient aussi de la dispersion des observations autour d’une droite.
Voir les 24 observations du projet
| Kilométrage | Prix |
|---|---|
| 240 000 km | 3 650 |
| 139 800 km | 3 800 |
| 150 500 km | 4 400 |
| 85 530 km | 4 450 |
| 176 000 km | 5 250 |
| 114 800 km | 5 350 |
| 166 800 km | 5 800 |
| 89 000 km | 5 990 |
| 144 500 km | 5 999 |
| 84 000 km | 6 200 |
| 82 029 km | 6 390 |
| 63 060 km | 6 390 |
| 74 000 km | 6 600 |
| 97 500 km | 6 800 |
| 67 000 km | 6 800 |
| 76 025 km | 6 900 |
| 48 235 km | 6 900 |
| 93 000 km | 6 990 |
| 60 949 km | 7 490 |
| 65 674 km | 7 555 |
| 54 000 km | 7 990 |
| 68 500 km | 7 990 |
| 22 899 km | 7 990 |
| 61 789 km | 8 290 |
Relier des données à une estimation
Le projet utilise un jeu de 24 observations, chacune associant un kilométrage à un prix. L’objectif est d’apprendre une relation linéaire pour estimer un prix à partir d’un nouveau kilométrage.
L’implémentation est écrite en Python, avec NumPy pour les calculs numériques et Matplotlib pour les graphiques. Le dépôt distingue les opérations d’entraînement, de prédiction, d’affichage et d’évaluation dans des scripts séparés.
Préparer les données
Le fichier CSV est chargé en deux séries : kilométrage et prix. Le kilométrage est normalisé par une transformation min-max :
x = (km − km_min) / (km_max − km_min)
Les observations d’entraînement sont ainsi ramenées sur un intervalle de 0 à 1. Le prix conserve son échelle d’origine. Les bornes de normalisation sont gardées avec les paramètres du modèle pour appliquer la même transformation lors d’une prédiction.
Apprendre par descente de gradient
Le modèle calcule prix_estimé = θ₀ + θ₁ × x. Les deux paramètres commencent à zéro.
À chaque itération, le programme calcule les estimations puis leur écart aux prix observés. La moyenne des erreurs donne le gradient de θ₀ ; la moyenne des erreurs multipliées par x donne celui de θ₁. Le taux d’apprentissage détermine l’amplitude de la mise à jour.
Le code permet de choisir le nombre maximal d’itérations, le taux d’apprentissage et un seuil d’arrêt basé sur la variation de l’erreur quadratique moyenne. Les valeurs proposées par défaut sont 10 000 itérations, un taux de 0,01 et un seuil de 10⁻⁶.
Taux d’apprentissage : vitesse et convergence
Un taux plus faible produit des mises à jour plus petites. Avec un budget fixé à 10 000 itérations, le modèle peut donc rester loin de son meilleur ajustement : il faut lui laisser davantage d’itérations.
Un petit taux ne garantit toutefois pas une meilleure précision finale. Pour cette régression linéaire à erreur quadratique, les paramètres minimisent une fonction convexe. Avec des taux stables et assez d’itérations, ils peuvent se rapprocher de la même solution. Un taux trop grand peut, au contraire, provoquer des oscillations ou une divergence ; les trois taux proposés dans l’explorateur sont stables sur ces données normalisées.
La démo propose désormais un budget allant jusqu’à 300 000 itérations, au lieu de reprendre seulement le budget par défaut du script Python. Le tableau compare les erreurs après 10 000 itérations et à l’arrêt : le taux 0,001 progresse plus lentement, mais rejoint ensuite un RMSE presque identique à celui des taux 0,01 et 0,1.
Le message d’état distingue deux situations : le budget est épuisé, ou la variation de MSE est passée sous le seuil d’arrêt. Ce critère dépend lui-même de la taille des pas : une variation faible ne prouve pas que les paramètres sont exactement au minimum. Enfin, prolonger l’apprentissage ne supprime pas la dispersion des observations autour d’une droite.
Sauvegarder et réutiliser le modèle
Après l’entraînement, le programme peut enregistrer θ₀, θ₁ et les bornes du kilométrage dans un fichier CSV. Le script de prédiction recharge ces valeurs et normalise le kilométrage saisi avant de calculer l’estimation.
D’autres scripts permettent d’afficher la droite avec les observations et de recalculer les indicateurs à partir d’un modèle enregistré.
Évaluer l’ajustement
Deux indicateurs sont implémentés :
- RMSE : racine de l’erreur quadratique moyenne, exprimée dans l’unité des prix.
- R² : coefficient de détermination, qui compare les erreurs du modèle à la dispersion des prix autour de leur moyenne.
Ces mesures sont calculées sur le jeu fourni. Elles renseignent sur l’ajustement à ces observations ; elles ne constituent pas une évaluation sur un jeu de test distinct. De même, une estimation en dehors de la plage des kilométrages observés est une extrapolation.
Compétences mises en pratique
- Préparer et normaliser des données numériques.
- Implémenter une descente de gradient et comprendre le rôle de ses paramètres.
- Séparer entraînement, sauvegarde, prédiction et évaluation.
- Interpréter une droite ajustée, ses résidus et ses indicateurs.
- Relier une formule mathématique à des calculs vectorisés et à leur visualisation.
Explorer le modèle dans le portfolio
Le graphique reprend les 24 observations du CSV du projet. Le curseur d’apprentissage permet de revenir au modèle initial puis de suivre les mises à jour ; le taux choisi modifie la vitesse de progression. Les écarts verticaux montrent la différence entre les observations et les estimations de la droite.
Le modèle web est une réimplémentation indépendante de la méthode Python. Il conserve la normalisation du seul kilométrage et la même règle de convergence. Les estimations et les métriques sont recalculées dans le navigateur ; aucun serveur Python n’est nécessaire.