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