Come fare previsioni utilizzando un modello di regressione in statsmodels


Puoi utilizzare la seguente sintassi di base per utilizzare l’adattamento del modello di regressione utilizzando il modulo statsmodels in Python per fare previsioni su nuove osservazioni:

 model. predict (df_new)

Questa particolare sintassi calcolerà i valori di risposta previsti per ogni riga di un nuovo DataFrame chiamato df_new , utilizzando un modello di regressione adatto a modelli statistici chiamato model .

L’esempio seguente mostra come utilizzare questa sintassi nella pratica.

Esempio: fare previsioni utilizzando un modello di regressione in Statsmodels

Supponiamo di avere il seguente DataFrame panda che contiene informazioni sulle ore studiate, sugli esami preparatori sostenuti e sul voto finale ricevuto dagli studenti di una determinata classe:

 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

Possiamo utilizzare la funzione OLS() del modulo statsmodels per adattare un modello di regressione lineare multipla , utilizzando “ore” ed “esami” come variabili predittive e “punteggio” come variabile di risposta:

 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
==================================================== ============================

Dalla colonna coef nell’output, possiamo scrivere il modello di regressione adattato:

Punteggio = 71.4048 + 5.1275 (ore) – 1.2121 (esami)

Supponiamo ora di voler utilizzare il modello di regressione adattata per prevedere il “punteggio” di cinque nuovi studenti.

Innanzitutto, creiamo un DataFrame per contenere le cinque nuove osservazioni:

 #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

Successivamente, possiamo utilizzare la funzione predit() per prevedere il “punteggio” di ciascuno di questi studenti, utilizzando “ore” ed “esami” come valori per le variabili predittive nel nostro modello di regressione adattata:

 #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

Ecco come interpretare il risultato:

  • Si prevede che il primo studente nel nuovo DataFrame otterrà un punteggio di 75,32 .
  • Si prevede che il secondo studente nel nuovo DataFrame otterrà un punteggio di 80,45 .

E così via.

Per comprendere come sono state calcolate queste previsioni, dobbiamo fare riferimento al precedente modello di regressione adattata:

Punteggio = 71.4048 + 5.1275 (ore) – 1.2121 (esami)

Inserendo i valori di “ore” ed “esami” per i nuovi studenti, possiamo calcolare il loro punteggio previsto.

Ad esempio, il primo studente nel nuovo DataFrame aveva un valore 1 per le ore e un valore 1 per gli esami.

Pertanto, il loro punteggio previsto è stato calcolato come segue:

Punteggio = 71.4048 + 5.1275(1) – 1.2121(1) = 75.32 .

Il punteggio di ogni studente nel nuovo DataFrame è stato calcolato allo stesso modo.

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni in Python:

Come eseguire la regressione logistica in Python
Come calcolare l’AIC dei modelli di regressione in Python
Come calcolare l’R quadrato corretto in Python

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *