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

Nous commençons ce cours par quelques rappels sur le calcul matriciel qui nous seront très utiles pour comprendre les notions présentées dans la suite du cours.
Transposée de matrice

Soit X une matrice (2×2) :

alors la transposée de X est égale à :

Lorsque l’on transpose une matrice, on permute le rôle des lignes et des colonnes.

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 :

à condition que : ad − bc ≠ 0. C’est-à-dire ad ≠ bc
💡 À retenir : Dans le cas contraire (si ad−bc=0), la matrice n’est pas inversible.

2 – Le modèle

Définition

La régression linéaire correspond à une problématique d’apprentissage supervisé qui permet de modéliser une variable expliquée de type quantitatif, y, comme une combinaison linéaire de k variables explicatives, X. La variable expliquée est appelée output et les variables explicatives du modèle les inputs.

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 :

On note ici SCR la Somme des carrés des résidus, en anglais Sum of Squared Error (SSE). Après avoir estimé le vecteur de paramètres, usuellement à partir de la méthode des Moindres Carrés Ordinaires (OLS : Ordinary Least Squared) ou du Maximum de Vraisemblance (MLE : Maximum Likelihood Estimation), on obtient le vecteur des résidus 𝜀. La performance du modèle dépend de la qualité de l’estimation. En effet, moins les erreurs de prédiction d’un modèle seront importantes plus le modèle sera précis et plus il prédira les valeurs de la variable cible au plus juste.

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 :

Suite à l’obtention de ce vecteur de paramètres, qui n’est autre qu’un vecteur de poids, on le multiplie à la matrice des inputs pour obtenir le vecteur de la variable explicative, l’output.

L’écart entre les valeurs réelles du vecteur de la variable explicative et l’estimation obtenue correspond au vecteur des résidus les erreurs estimées du modèle.

Sujet d’application

Considérons un sujet d’application assez simple, nous souhaitons prédire le salaire de plusieurs individus à partir des informations que l’on détient à leur sujet. Au total, nous avons leur nombre d’années d’études et leur nombre d’années d’expérience.

La régression linéaire simple

Nous parlons de régression linéaire simple lorsqu’il n’y a qu’une seule variable explicative au sein du modèle. Par exemple, si l’on cherche à prédire le salaire en fonction du nombre d’années d’expérience uniquement on aura :

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

On parle de régression linéaire multiple lorsqu’il y a plusieurs variables explicatives au sein du modèle. Si désormais on cherche à prédire le salaire en fonction du nombre d’années d’expérience et du nombre d’année d’études, on aura alors :

Supposons toujours que nous avons à notre disposition seulement 3 observations, si l’on écrit cette équation sous forme matricielle, on obtiendra :

Si l’on généralise la formule à k variables explicatives, on obtient :

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(
  X,
  y,
  test_size=0.30,
  random_state=42
)

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é.

Lorsque l’on réalise une somme d’écarts si les écarts sont de signes différents (écart positif ou négatif), ces écarts peuvent s’annuler entre eux. Chaque écart est donc mis au carré pour ne pas être confronté à ce problème.
La racine carré de l’erreur quadratique moyenne (Root Mean Squared Error) est simplement la racine de la MSE.

Prendre la racine de l’erreur quadratique moyenne permet donc d’avoir une vision plus concrète du montant de l’erreur compte tenu de la distribution de valeurs de la variable expliquée.

Mean Absolute Error

Une autre mesure est l’erreur absolue moyenne. Plûtot que de mettre les écarts au carré, on somme les valeurs absolues des écarts ce qui permet également de ne pas annuler les écarts entre eux.

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.

Il est à noter que le coefficient de détermination croît avec le nombre de variables explicatives du modèle. Ainsi, pour contrer ce problème, il est utile d’utiliser le coefficient de détermination ajusté qui rend compte du réel ajustement du modèle vis-à-vis des données.

n est le nombre d’observations et k le nombre de variables explicatives du modèle.

👉 À l’aide du module metrics de la libraire scikit learn calculer la MSE, la RMSE, la MAE et le coefficient de détermination du modèle, à la fois pour la partie train et la partie test. Expliquez ce que nous permet d’observer la comparaison entre les performances de la partie train et de la partie test. Interprétez les valeurs obtenues pour la RMSE et la MAE de la partie test.
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))
En moyenne, le modèle réalise une erreur de 46387$ sur le prix des maisons.
En moyenne, le modèle réalise une erreur de 3163$ sur le prix des maisons.

6 – Autres modèles de régression

Au sein de ce notebook nous avons uniquement évoqué le modèle de régression linéaire néanmoins d’autres modèles de régression existent telles que les modèles linéaires pénalisés ou encore des techniques d’ensemble learning qui donnent souvent d’excellents résultats mais qui ont le désavantage d’être moins facilement interprétables que la régression linéaire.

Modèles linéaires pénalisés

  • Lasso (L1 Regularisation)
  • Ridge (L2 Regularisation)
  • ElasticNet (L1 et L2 Regularisation)
Les modèles de régression pénalisée par l’ajout d’un terme de pénalité ont été pensés pour pallier à la problématique d’overfitting évoquée dans le premier notebook du module.