Régression Linéaire – Fondements Mathématiques
Objectif pédagogique : Maîtriser les concepts mathématiques et l’estimation des paramètres en régression linéaire multiple.
À la fin de ce chapitre, tu seras capable de…
- Appliquer les opérations matricielles fondamentales pour la régression
- Formaliser mathématiquement un modèle de régression linéaire multiple
- Calculer les paramètres optimaux par la méthode des moindres carrés
- Évaluer la qualité d’ajustement d’un modèle à partir des résidus
- Interpréter les coefficients estimés dans un contexte économique
💡 Prérequis : Algèbre linéaire de base, notions de statistiques descriptives et de probabilités
Mise en contexte
Vous avez déjà utilisé des équations simples pour prédire des résultats, mais comment faire quand plusieurs facteurs influencent simultanément votre variable d’intérêt ? La régression linéaire multiple vous permet de modéliser mathématiquement ces relations complexes. Dans ce chapitre, vous découvrirez comment prédire le salaire d’un individu en combinant ses années d’études et son expérience professionnelle grâce aux outils du calcul matriciel.
1 – Introduction
Rappel : Calcul matriciel
Transposée de matrice
Soit X une matrice (2×2) :


Produit matriciel
Le produit de deux matrices dépend du sens de disposition des matrices. Pour pouvoir effectuer le produit de deux matrices, celle de droite doit avoir le même nombre de lignes que le nombre de colonnes de la matrice de gauche.
Soit D une matrice et E un vecteur :

« `html
Le produit DE est réalisable car D est de dimension (2 x 2) et E de dimension (2 x 1). Notons F le produit de ces deux matrices :
« `

Inverse de matrice
Toute matrice n’est pas inversible. Pour savoir si une matrice est inversible il faut calculer son déterminant. Ici nous prendrons l’exemple d’une matrice (2 x 2). Voici la formule du déterminant pour une matrice (2×2) quelconque X :

le déterminant est égal à : det(X) = ad – cb. Si le déterminant est non nul, alors la matrice est inversible. La matrice inverse de X est notée :

2 – Le modèle
Définition
En d’autres termes, on essaie de formaliser au travers d’une relation linéaire, le lien entre une variable que l’on cherche à expliquer et des variables que l’on a identifiées comme étant potentiellement explicatives. Puisque les variables explicatives diffèrent entre elles, le poids attribué à chacune varie, et c’est au travers d’un vecteur de poids également appelé vecteur de paramètres que cela s’illustre. On prédira donc à partir des inputs et d’un vecteur de paramètres estimé, l’output du modèle. Le vecteur de paramètres estimé est obtenu en estimant le modèle.
Le modèle s’écrit matriciellement comme suit :
![]()
- y est le vecteur (N,1) représentant les valeurs de la variable expliquée ;
- X est la la matrice (NxK) contenant les vecteurs des différents inputs en colonnes et où chaque ligne correspond à une observation ;
- β est le vecteur de paramètres (Kx1) qui contient le coefficient de corrélation estimé pour chaque input ;
- ε est le vecteur des résidus (Nx1) qui correspond aux erreurs de prédiction.
Estimation
Le vecteur de paramètres est obtenu en minimisant la fonction objectif (fonction de perte ou loss function en anglais) qui s’écrit telle que :

Méthode des moindres carrés ordinaires
La notation ci-dessous correspond à l’écriture matricielle de la formule du vecteur de paramètres estimé. Grâce à ce calcul on estime donc le vecteur de paramètres 𝛽 chapeau :
![]()
![]()
![]()
Sujet d’application

La régression linéaire simple
![]()
Supposons que nous avons à notre disposition seulement 3 observations, autrement dit des informations concernant 3 individus dans notre cas, si l’on écrit cette équation sous forme matricielle, on obtient :

- salaireᵢ est le salaire de l’individu i (variable à expliquer / variable dépendante),
- expérienceᵢ est le nombre d’années d’expérience de l’individu i (variable explicative),
- β₀ est l’ordonnée à l’origine (constante),
- β₁ est le coefficient associé à l’expérience. C’est la pente de la fonction. Comme vous pouvez l’observer la première colonne de la matrice est composée de 1 uniquement, à l’aide de cette colonne on peut écrire le modèle sous forme matricielle en incluant le paramètre constant β₀. Ajouter une constante est essentiel à quasiment tous les modèles (sauf cas particulier) puisqu’elle permet d’ajuster un modèle qui n’est jamais parfaitement défini : toutes les variables explicatives du phénomène ne sont pas incluses dans le modèle, on ne peut pas être exhaustif.

La régression linéaire multiple
![]()


Interprétation des coefficients
Les coefficients estimés par le modèle s’interprètent à la fois par leur signe et leur valeur. Poursuivons sur notre exemple précédent, imaginons que le coefficient estimé pour β₁ soit de 10, alors cela signifie qu’en moyenne et toutes choses égales par ailleurs pour 1 an supplémentaire d’expérience, le salaire augmente de 10 euros. Au contraire, si le coefficient est de -10, alors une année d’expérience supplémentaire diminue en moyenne et toutes choses égales par ailleurs de 10 euros le salaire.
Même si nous ne développerons pas ces notions dans cours, il est important de noter que l’interprétation des coefficients dépend également de la significativité statistique des paramètres (p-value).
4 – Implémentation avec Scikit-Learn
Le jeu de données utilisé a pour but de modéliser le prix des habitations en Californie (aux USA). Les prix sont donnés en millier de dollars.
Importer le dataset (variables explicatives et target)
On importe la librairie pandas
import pandas as pd
A partir du module sklearn.datasets de la librarie scikit learn, on importe la fonction fetch_california_housing
Cela qui renvoie une base de données sous forme de dictionnaire où les variables explicatives et la target sont déjà séparés
from sklearn.datasets import fetch_california_housing
Description des variables présentes dans la base de données
print(fetch_california_housing().DESCR)
Instanciation du dataframe contenant les variables explicatives
X = pd.DataFrame(
fetch_california_housing().data,
columns=fetch_california_housing().feature_names
)
Instanciation de la series contenant la variable cible
y = pd.Series(fetch_california_housing().target)

De la même façon que nous l’avions implémenté plus haut, nous allons séparer la base de données en une partie train et une partie test.
Importation et application de train_test_split
|
1
|
À partir du module model_selection de la librairie scikit-learn, importez la fonction train_test_split : from sklearn.model_selection import train_test_split |
|
2
|
Appliquez la fonction train_test_split : X_train, X_test, y_train, y_test = train_test_split( |
|
3
|
Affichez les dimensions des datasets après avoir appliqué la fonction : print(X_train.shape, X_test.shape, y_train.shape, y_test.shape) |
![]()
- Entraîner le modèle sur la partie train du dataset. Obtenir les prédictions de y à partir de X_test puis de X_train. Affichez les coefficients obtenus ainsi que l’intercept. Interpréter en deux manière de notre choix.
À partir du module linear_model de la librairie scikit learn on importe la fonction LinearRegression
from sklearn.linear_model import LinearRegression
On instancie le modèle et on l’entraîne
model_lin=LinearRegression().fit(X_train, y_train)
On prédit les y à partir de X_test
y_pred=model_lin.predict(X_test)
On prédit les y à partir de X_train
y_pred_train=model_lin.predict(X_train)
On affiche les coefficients obtenus
coeff=model_lin.coef_
On affiche la constante
intercept=model_lin.intercept_
On crée un dataframe qui combine à la fois variables et coefficients
resultats=pd.DataFrame(
fetch_california_housing().feature_names,
columns=[« Variables »]
)
resultats[‘Coefficients’]=model_lin.coef_.tolist()
On choisit d’afficher les variables avec le coefficient le plus élevé et le plus faible
resultats.loc[(resultats[‘Coefficients’]==max(resultats[‘Coefficients’]))|(resultats[‘Coefficients’]==min(resultats[‘Coefficients’]))]

Nous venons donc de :
- importer notre jeu de données: variables explicatives (X) et la variable cible (y);
- Séparer la base de données en une partie train et une partie test ;
- Entraîner le modèle de régression linéaire sur nos données d’entraînement;
- Prédire la variable cible y à partir du modèle;
- Observer la valeur et le signe des coeficients estimés par le modèle, pour interpréter leur impact sur la variable cible.
Il reste ainsi à calculer les performances de notre modèle, pour cela nous allons utiliser la prédiction de y ainsi que des métriques adaptées au problème de régression, c’est ce que nous allons voir dans la partie suivante.
5 – Mesure de performance : Les métriques
Mean Squared Error (MSE) et Root Mean Squared Error (RMSE)
L’erreur quadratique moyenne (Mean Squared Error en anglais) permet de calculer la moyenne des distances entre les valeurs vraies de la variable expliquée et les valeurs prédites. Ce n’est autre que la moyenne de ces distances élevées au carré.


Mean Absolute Error

Ces métriques sont très utiles lorsque nous sommes en mesure d’interpréter les ordres de grandeurs des valeurs de la variable expliquée. En revanche, lorsque ce n’est pas le cas, il est compliqué de savoir à partir de quelle valeur l’erreur est considérée comme élevée. Le coefficient de détermination peut s’avérer intéressant pour pallier à ce problème.
Coefficient de détermination
Le coefficient de détermination relate de l’adéquation entre le modèle et les données. Autrement dit, le coefficient correspond au carré de la corrélation existante entre les valeurs vraies et les valeurs prédites du modèle. Ses valeurs varient généralement entre 0 et 1, plus le coefficient est élevée meilleure sera l’adéquation.
Lorsque le modèle ne comporte pas de constante, il est possible d’obtenir un coefficient de détermination négatif, cela caractérise une mauvaise adéquation du modèle aux données. On ne peut dans ce cas plus l’interpréter comme le carré de la corrélation entre les prédictions et les vraies valeurs de la variables cible.


n est le nombre d’observations et k le nombre de variables explicatives du modèle.
from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
# MSE
print("\nMSE_train:", mean_squared_error(y_train, y_pred_train))
print("\nMSE_test:", mean_squared_error(y_test, y_pred))
# RMSE
print("\nRMSE_train:", mean_squared_error(y_train, y_train))
print("\nRMSE_test:", mean_squared_error(y_test, y_pred))
# MAE
print("\nMAE_train:", mean_absolute_error(y_train, y_pred_train))
print("\nMAE_test:", mean_absolute_error(y_test, y_pred))
# R2
print("\nR2_train:", r2_score(y_train, y_pred_train))
print("\nR2_test:", r2_score(y_test, y_pred))

6 – Autres modèles de régression
Modèles linéaires pénalisés
- Lasso (L1 Regularisation)
- Ridge (L2 Regularisation)
- ElasticNet (L1 et L2 Regularisation)