Linear Regression Python Example: Step-by-Step Implementation

mars 2, 2026

comment Aucun commentaire

Par Colin Barthet

🚀 Ce que tu vas trouver ici (et pourquoi ça va te gagner du temps) :

  • Le code Python prêt à copier-coller pour faire ta première régression linéaire avec scikit-learn en 5 minutes.
  • La vraie différence entre LinearRegression(), statsmodels et les autres outils. Spoiler : tout dépend de ce que tu veux faire après.
  • Les 3 erreurs qui faussent tes résultats (et comment les éviter, testé en 2025).
  • Les métriques pour savoir si ton modèle est bon, sans prise de tête.
  • Un tableau comparatif des bibliothèques, comme je compare les hôtels : avantages, inconvénients, et pour qui c’est fait.

Je vais te donner les infos pratiques, pas la théorie. On passe direct au code. 👇

Tu veux prédire un prix, une tendance, ou simplement comprendre la relation entre deux trucs dans tes données ? La modélisation linéaire en Python, c’est ton premier outil. C’est comme partir avec un sac à dos : simple, efficace, et ça fait 90% du job.

Je te montre comment faire, étape par étape, avec les bonnes bibliothèques en 2025. Pas de blabla, juste ce qui marche.

📦 Exemple Complet en 5 Minutes avec Scikit-Learn

On commence par le plus simple : une seule variable explicative. Imagine que tu veux voir le lien entre les heures de révision (x) et la note à un exam (y).


# 1. Importer les outils (toujours la même base)
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score, mean_squared_error

# 2. Créer des données d'exemple (ici, je les invente)
# X = heures de révision, y = note sur 20
X = np.array([1, 3, 5, 7, 9, 11]).reshape(-1, 1) # ATTENTION: le .reshape(-1, 1) est OBLIGATOIRE avec sklearn
y = np.array([8, 10, 12, 13, 16, 18])

# 3. Lancer le modèle (c'est magique)
model = LinearRegression()
model.fit(X, y) # C'est ici que l'apprentissage se fait

# 4. Récupérer les résultats clés
coef_directeur = model.coef_[0] # La pente de la droite (β1)
ordonnee_origine = model.intercept_ # Le point de départ sur l'axe (β0)
score_r2 = model.score(X, y) # Le fameux R², entre 0 et 1

print(f"✅ Équation de la droite : Note = {ordonnee_origine:.2f} + {coef_directeur:.2f} * Heures")
print(f"✅ Score R² : {score_r2:.3f} (Plus c'est proche de 1, mieux c'est)")

📊 Résultats typiques que tu devrais voir :
Équation : Note = 7.12 + 0.99 * Heures
Score R² : 0.978
Traduction : Chaque heure de révision supplémentaire rapporte environ 1 point. Le modèle explique 97.8% de la variation des notes. C’est très bon.

🎯 Passer à la Prédiction et à l’Évaluation

Un modèle, c’est fait pour prédire. Et pour vérifier qu’il ne raconte pas n’importe quoi.


# 5. Faire des prédictions
heures_nouvelles = np.array([2, 8]).reshape(-1, 1)
notes_predites = model.predict(heures_nouvelles)
print(f"🎯 Prédictions pour 2h et 8h : {notes_predites}")

# 6. Évaluer la qualité sur les données d'origine
y_pred = model.predict(X)
rmse = np.sqrt(mean_squared_error(y, y_pred))
print(f"📈 RMSE (erreur moyenne) : {rmse:.2f} points")

# 7. Visualiser (optionnel mais tellement utile)
plt.scatter(X, y, color='blue', label='Données réelles')
plt.plot(X, y_pred, color='red', linewidth=2, label='Modèle')
plt.xlabel('Heures de révision')
plt.ylabel('Note sur 20')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

⚠️ Le piège classique : N’oublie jamais le .reshape(-1, 1) si ton X n’a qu’une seule colonne. Sinon, erreur incompréhensible garantie. C’est la première chose que je vérifie.

🆚 Quelle Bibliothèque Choisir en 2025 ? Le Vrai Comparatif

Comme choisir entre un hostel et un hôtel, tout dépend de ton besoin. Voici mon tableau récap, mis à jour.

Bibliothèque Le Pourquoi Le Pour qui ? Code type (lancer le modèle)
Scikit-learn ✅ Super simple, rapide, parfait pour la prédiction. C’est le standard en Machine Learning.
❌ Moins de stats détaillées.
Débutant, ou si tu veux enchaîner sur d’autres modèles de ML (forêts, réseaux…). model = LinearRegression().fit(X, y)
Statsmodels ✅ Rapport hyper détaillé (p-valeurs, intervalles de confiance). Idéal pour l’analyse statistique rigoureuse.
❌ Un peu moins intuitif au début.
Étudiant, data analyst, ou quand tu dois justifier chaque coefficient scientifiquement. import statsmodels.api as sm
model = sm.OLS(y, X).fit()
print(model.summary())
SciPy ✅ Ultra-light, fait le strict minimum (pente, origine, R²).
❌ Pas de prédictions ou de multi-variables.
Quick and dirty : tu veux juste la tendance sur un graphique, vite fait. from scipy import stats
slope, intercept, r_value, p_value, std_err = stats.linregress(x, y)

Mon conseil perso : Commence toujours par scikit-learn. C’est la base la plus polyvalente. Passe à statsmodels seulement si ton boss ou ton prof te demande des p-valeurs.

🚨 Les 3 Pièges à Éviter Absolument

J’ai vu ces erreurs trop souvent sur les forums. Ne les fais pas.

  • Piège 1 : Ne pas séparer tes données. T’entraîner et tester sur les mêmes points, c’est comme te noter toi-même à un exam. Ton modèle semblera génial mais sera nul en vrai. Utilise train_test_split :

    from sklearn.model_selection import train_test_split
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  • Piège 2 : Oublier de vérifier les hypothèses. La modélisation linéaire suppose une relation… linéaire ! Si tes points forment un arc de cercle, ça ne marchera pas. Trace toujours un nuage de points (plt.scatter) avant.
  • Piège 3 : Croire que « corrélation = causalité ». Un bon R² ne veut pas dire que X cause Y. Ça peut être une coïncidence ou un troisième facteur caché. Pense-y.

❓ FAQ : Les Questions Qu’on Me Pose Tout le Temps

Mon R² est très faible (ex: 0.15), mon modèle est inutile ?

Pas forcément ! Un R² faible signifie juste que la relation linéaire n’explique qu’une petite partie de la variation. Dans certains domaines complexes (socio, bio), un R² de 0.15 peut déjà être intéressant. La question est : est-ce que les prédictions sont assez précises pour ton besoin pratique ? Regarde le RMSE. Et explore si d’autres modèles (polynomiaux, arbres) feraient mieux. Pour comprendre R² en profondeur, cette explication (en anglais) est excellente.

Quand dois-je utiliser une régression multiple (plusieurs variables X) ?

Dès que tu penses que plusieurs facteurs influencent ton résultat. Par exemple, prédire un prix immobilier avec seulement la surface (une variable) est limité. Ajoute le nombre de pièces, le quartier, etc. Le code est similaire, il suffit que ton X soit un tableau avec plusieurs colonnes. Fais juste attention à la multicolinéarité (quand tes variables X sont trop corrélées entre elles), ça peut fausser les coefficients. Statsmodels te le signale bien.

Je dois normaliser mes données avant de faire une régression linéaire ?

Pour la régression linéaire classique (LinearRegression), non, ce n’est pas nécessaire. Les coefficients s’adapteront. Par contre, si tu utilises des méthodes avancées comme la régression Ridge ou Lasso (qui pénalisent les grands coefficients), la normalisation devient cruciale pour que la pénalité soit équitable. La doc officielle de scikit-learn explique très bien quand et comment le faire.

💎 Le Mot de la Fin

La modélisation linéaire, c’est la fondation. Maîtrise-la bien avec scikit-learn, comprends ce que signifient le R² et le RMSE, et évite les trois pièges que j’ai cités. Ça te servira pour tout le reste du Machine Learning.

Le code de base est toujours le même : import, .fit(), .predict(). Copie-colle mon premier bloc, adapte-le à tes données, et tu auras un modèle fonctionnel en moins de 5 minutes.

Besoin d’aller plus loin ? Les sujets chauds en 2025 sont la régularisation (Ridge/Lasso) pour éviter l’overfitting, et l’utilisation de pipelines pour automatiser le nettoyage et la modélisation. Mais ça, c’est pour un prochain guide.

Laisser un commentaire