Hoe u voorspellingen kunt doen met behulp van een regressiemodel in statsmodels


U kunt de volgende basissyntaxis gebruiken om regressiemodelaanpassing te gebruiken met behulp van de statsmodels- module in Python om voorspellingen te doen over nieuwe waarnemingen:

 model. predict (df_new)

Deze specifieke syntaxis berekent voorspelde responswaarden voor elke rij van een nieuw DataFrame genaamd df_new , met behulp van een regressiemodel dat geschikt is voor statistische modellen genaamd model .

Het volgende voorbeeld laat zien hoe u deze syntaxis in de praktijk kunt gebruiken.

Voorbeeld: Voorspellingen doen met behulp van een regressiemodel in Statsmodels

Stel dat we het volgende panda’s DataFrame hebben dat informatie bevat over de gestudeerde uren, de afgelegde voorbereidende examens en het eindcijfer dat studenten in een bepaalde klas hebben ontvangen:

 import pandas as pd

#createDataFrame
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 exam score
0 1 1 76
1 2 3 78
2 2 3 85
3 4 5 88
4 2 2 72

We kunnen de OLS() -functie van de statsmodels-module gebruiken om een meervoudig lineair regressiemodel te passen, met behulp van „uren“ en „examens“ als voorspellende variabelen en „score“ als de responsvariabele:

 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                            
==================================================== ============================
Dept. Variable: R-squared score: 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: non-robust                                         
==================================================== ============================
                 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
==================================================== ============================

Uit de coef- kolom in de uitvoer kunnen we het gepaste regressiemodel schrijven:

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

Stel nu dat we het gepaste regressiemodel willen gebruiken om de ‘score’ van vijf nieuwe studenten te voorspellen.

Laten we eerst een DataFrame maken waarin de vijf nieuwe waarnemingen kunnen worden opgeslagen:

 #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

Vervolgens kunnen we de functie voorspellen() gebruiken om de „score“ voor elk van deze studenten te voorspellen, met behulp van „uren“ en „examens“ als de waarden voor de voorspellende variabelen in ons gepaste regressiemodel:

 #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

Zo interpreteert u het resultaat:

  • De eerste leerling in het nieuwe DataFrame zal naar verwachting een 75,32 scoren.
  • De tweede leerling in het nieuwe DataFrame zal naar verwachting een 80,45 scoren.

Enzovoort.

Om te begrijpen hoe deze voorspellingen werden berekend, moeten we verwijzen naar het eerder aangepaste regressiemodel:

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

Door de waarden van ‘uren’ en ‘examens’ voor nieuwe studenten in te pluggen, kunnen we hun voorspelde score berekenen.

De eerste leerling in het nieuwe DataFrame had bijvoorbeeld een waarde van 1 voor uren en een waarde van 1 voor examens.

Hun voorspelde score werd dus als volgt berekend:

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

De score van elke leerling in het nieuwe DataFrame werd op dezelfde manier berekend.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende taken in Python kunt uitvoeren:

Hoe logistieke regressie uit te voeren in Python
Hoe AIC van regressiemodellen in Python te berekenen
Hoe aangepaste R-kwadraat in Python te berekenen

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert