Un guide complet de la régression linéaire en Python



La régression linéaire est une méthode que nous pouvons utiliser pour comprendre la relation entre une ou plusieurs variables prédictives et une variable de réponse.

Ce tutoriel explique comment effectuer une régression linéaire en Python.

Exemple : régression linéaire en Python

Supposons que nous voulions savoir si le nombre d’heures passées à étudier et le nombre d’examens préparatoires passés affectent la note qu’un étudiant obtient à un examen donné.

Pour explorer cette relation, nous pouvons effectuer les étapes suivantes en Python pour effectuer une régression linéaire multiple.

Étape 1 : Saisissez les données.

Tout d’abord, nous allons créer un DataFrame pandas pour contenir notre ensemble de données :

import pandas as pd

#create data
df = pd.DataFrame({'hours': [1, 2, 2, 4, 2, 1, 5, 4, 2, 4, 4, 3, 6, 5, 3, 4, 6, 2, 1, 2],
                   'exams': [1, 3, 3, 5, 2, 2, 1, 1, 0, 3, 4, 3, 2, 4, 4, 4, 5, 1, 0, 1],
                   'score': [76, 78, 85, 88, 72, 69, 94, 94, 88, 92, 90, 75, 96, 90, 82, 85, 99, 83, 62, 76]})

#view data 
df

        hours	exams   score
0	1	1	76
1	2	3	78
2	2	3	85
3	4	5	88
4	2	2	72
5	1	2	69
6	5	1	94
7	4	1	94
8	2	0	88
9	4	3	92
10	4	4	90
11	3	3	75
12	6	2	96
13	5	4	90
14	3	4	82
15	4	4	85
16	6	5	99
17	2	1	83
18	1	0	62
19	2	1	76

Étape 2 : Effectuez une régression linéaire.

Ensuite, nous utiliserons la fonction OLS() de la bibliothèque statsmodels pour effectuer une régression des moindres carrés ordinaires, en utilisant « heures » et « examens » comme variables prédictives et « score » comme variable de réponse :

import statsmodels.api as sm

#define response variable
y = df['score']

#define predictor variables
x = df[['hours', 'exams']]

#add constant to predictor variables
x = sm.add_constant(x)

#fit linear regression model
model = sm.OLS(y, x).fit()

#view model summary
print(model.summary())

                            OLS Regression Results                            
==============================================================================
Dep. Variable:                  score   R-squared:                       0.734
Model:                            OLS   Adj. R-squared:                  0.703
Method:                 Least Squares   F-statistic:                     23.46
Date:                Fri, 24 Jul 2020   Prob (F-statistic):           1.29e-05
Time:                        13:20:31   Log-Likelihood:                -60.354
No. Observations:                  20   AIC:                             126.7
Df Residuals:                      17   BIC:                             129.7
Df Model:                           2                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const         67.6735      2.816     24.033      0.000      61.733      73.614
hours          5.5557      0.899      6.179      0.000       3.659       7.453
exams         -0.6017      0.914     -0.658      0.519      -2.531       1.327
==============================================================================
Omnibus:                        0.341   Durbin-Watson:                   1.506
Prob(Omnibus):                  0.843   Jarque-Bera (JB):                0.196
Skew:                          -0.216   Prob(JB):                        0.907
Kurtosis:                       2.782   Cond. No.                         10.8
==============================================================================

Étape 3 : Interprétez les résultats.

Voici comment interpréter les nombres les plus pertinents dans le résultat :

R au carré : 0,734 . C’est ce qu’on appelle le coefficient de détermination. Il s’agit de la proportion de la variance de la variable de réponse qui peut être expliquée par les variables prédictives. Dans cet exemple, 73,4 % de la variation des résultats aux examens s’explique par le nombre d’heures étudiées et le nombre d’examens préparatoires passés.

Statistique F : 23,46 . Il s’agit de la statistique F globale du modèle de régression.

Prob (statistique F) : 1,29e-05. Il s’agit de la valeur p associée à la statistique F globale. Cela nous indique si le modèle de régression dans son ensemble est statistiquement significatif ou non. En d’autres termes, cela nous indique si les deux variables prédictives combinées ont une association statistiquement significative avec la variable de réponse. Dans ce cas, la valeur p est inférieure à 0,05, ce qui indique que les variables prédictives « heures d’études » et « examens préparatoires passés » combinées ont une association statistiquement significative avec le score à l’examen.

coef : les coefficients de chaque variable prédictive nous indiquent le changement moyen attendu de la variable de réponse, en supposant que l’autre variable prédictive reste constante. Par exemple, pour chaque heure supplémentaire consacrée à étudier, la note moyenne à l’examen devrait augmenter de 5,56 , en supposant que les examens préparatoires passés restent constants.

Voici une autre façon de voir les choses : si l’étudiant A et l’étudiant B passent tous deux le même nombre d’examens préparatoires mais que l’étudiant A étudie une heure de plus, alors l’étudiant A devrait obtenir un score supérieur de 5,56 points à celui de l’étudiant B.

Nous interprétons le coefficient de l’interception comme signifiant que la note attendue à l’examen pour un étudiant qui n’étudie aucune heure et ne passe aucun examen préparatoire est de 67,67 .

P>|t|. Les valeurs p individuelles nous indiquent si chaque variable prédictive est statistiquement significative ou non. Nous pouvons voir que les « heures » sont statistiquement significatives (p = 0,00) alors que les « examens »   (p = 0,52) n’est pas statistiquement significatif à α = 0,05. Étant donné que le terme « examens » n’est pas statistiquement significatif, nous pourrions finir par décider de le supprimer du modèle.

Équation de régression estimée : nous pouvons utiliser les coefficients de la sortie du modèle pour créer l’équation de régression estimée suivante :

score à l’examen = 67,67 + 5,56*(heures) – 0,60*(examens préparatoires)

Nous pouvons utiliser cette équation de régression estimée pour calculer la note attendue à l’examen pour un étudiant, en fonction du nombre d’heures d’études et du nombre d’examens préparatoires qu’il passe. Par exemple, un étudiant qui étudie pendant trois heures et passe un examen préparatoire devrait obtenir une note de 83,75 :

Gardez à l’esprit que, comme les examens préparatoires passés n’étaient pas statistiquement significatifs (p = 0,52), nous pouvons décider de les supprimer car ils n’apportent aucune amélioration au modèle global. Dans ce cas, nous pourrions effectuer une régression linéaire simple en utilisant uniquement les heures étudiées comme variable prédictive.

Étape 4 : Vérifiez les hypothèses du modèle.

Une fois que vous avez effectué une régression linéaire, vous souhaiterez peut-être vérifier plusieurs hypothèses pour vous assurer que les résultats du modèle de régression sont fiables. Ces hypothèses comprennent :

Hypothèse n°1 : Il existe une relation linéaire entre les variables prédictives et la variable de réponse.

  • Vérifiez cette hypothèse en générant un tracé résiduel qui affiche les valeurs ajustées par rapport aux valeurs résiduelles pour un modèle de régression.

Hypothèse n°2 : Indépendance des résidus.

Hypothèse n°3 : Homoscédasticité des résidus.

Hypothèse n°4 : Normalité des résidus.

Hypothèse n°5 : Vérifiez qu’il n’existe pas de multicolinéarité parmi les variables prédictives.

  • Vérifiez cette hypothèse en calculant la valeur VIF de chaque variable prédictive.

Si ces hypothèses sont remplies, vous pouvez être sûr que les résultats de votre modèle de régression linéaire multiple sont fiables.

Vous pouvez trouver le code Python complet utilisé dans ce tutoriel ici .

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *