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