Comment faire des prédictions à l’aide d’un modèle de régression dans Statsmodels



Vous pouvez utiliser la syntaxe de base suivante pour utiliser un ajustement de modèle de régression à l’aide du module statsmodels en Python afin de faire des prédictions sur de nouvelles observations :

model.predict(df_new)

Cette syntaxe particulière calculera les valeurs de réponse prédites pour chaque ligne d’un nouveau DataFrame appelé df_new , en utilisant un modèle de régression adapté aux modèles de statistiques appelé model .

L’exemple suivant montre comment utiliser cette syntaxe dans la pratique.

Exemple : faire des prédictions à l’aide d’un modèle de régression dans Statsmodels

Supposons que nous ayons le DataFrame pandas suivant qui contient des informations sur les heures étudiées, les examens préparatoires passés et la note finale reçue par les étudiants d’une certaine classe :

import pandas as pd

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

#view head of DataFrame
df.head()

	hours	exams	score
0	1	1	76
1	2	3	78
2	2	3	85
3	4	5	88
4	2	2	72

Nous pouvons utiliser la fonction OLS() du module statsmodels pour ajuster un modèle de régression linéaire multiple , en utilisant « heures » et « examens » comme variables prédictives et « score » comme variable de réponse :

import statsmodels.api as sm

#define predictor and response variables
y = df['score']
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.718
Model:                            OLS   Adj. R-squared:                  0.661
Method:                 Least Squares   F-statistic:                     12.70
Date:                Fri, 05 Aug 2022   Prob (F-statistic):            0.00180
Time:                        09:24:38   Log-Likelihood:                -38.618
No. Observations:                  13   AIC:                             83.24
Df Residuals:                      10   BIC:                             84.93
Df Model:                           2                                         
Covariance Type:            nonrobust                                         
==============================================================================
                 coef    std err          t      P>|t|      [0.025      0.975]
------------------------------------------------------------------------------
const         71.4048      4.001     17.847      0.000      62.490      80.319
hours          5.1275      1.018      5.038      0.001       2.860       7.395
exams         -1.2121      1.147     -1.057      0.315      -3.768       1.344
==============================================================================
Omnibus:                        1.103   Durbin-Watson:                   1.248
Prob(Omnibus):                  0.576   Jarque-Bera (JB):                0.803
Skew:                          -0.289   Prob(JB):                        0.669
Kurtosis:                       1.928   Cond. No.                         11.7
==============================================================================

À partir de la colonne coef dans la sortie, nous pouvons écrire le modèle de régression ajusté :

Score = 71,4048 + 5,1275 (heures) – 1,2121 (examens)

Supposons maintenant que nous souhaitions utiliser le modèle de régression ajusté pour prédire le « score » de cinq nouveaux étudiants.

Tout d’abord, créons un DataFrame pour contenir les cinq nouvelles observations :

#create new DataFrame
df_new = pd.DataFrame({'hours': [1, 2, 2, 4, 5],
                       'exams': [1, 1, 4, 3, 3]})

#add column for constant
df_new = sm.add_constant(df_new)

#view new DataFrame
print(df_new)

   const  hours  exams
0    1.0      1      1
1    1.0      2      1
2    1.0      2      4
3    1.0      4      3
4    1.0      5      3

Ensuite, nous pouvons utiliser la fonction prédire() pour prédire le « score » de chacun de ces étudiants, en utilisant « heures » et « examens » comme valeurs pour les variables prédictives dans notre modèle de régression ajusté :

#predict scores for the five new students
model.predict(df_new)

0    75.320242
1    80.447734
2    76.811480
3    88.278550
4    93.406042
dtype: float64

Voici comment interpréter le résultat :

  • Le premier étudiant du nouveau DataFrame devrait obtenir un score de 75,32 .
  • Le deuxième étudiant du nouveau DataFrame devrait obtenir un score de 80,45 .

Et ainsi de suite.

Pour comprendre comment ces prédictions ont été calculées, nous devons nous référer au modèle de régression ajusté précédent :

Score = 71,4048 + 5,1275 (heures) – 1,2121 (examens)

En insérant les valeurs des « heures » et des « examens » pour les nouveaux étudiants, nous pouvons calculer leur score prévu.

Par exemple, le premier étudiant du nouveau DataFrame avait une valeur de 1 pour les heures et une valeur de 1 pour les examens.

Ainsi, leur score prédit a été calculé comme suit :

Score = 71,4048 + 5,1275(1) – 1,2121(1) = 75,32 .

Le score de chaque étudiant dans le nouveau DataFrame a été calculé de la même manière.

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes en Python :

Comment effectuer une régression logistique en Python
Comment calculer l’AIC des modèles de régression en Python
Comment calculer le R-carré ajusté en Python

Ajouter un commentaire

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