Come eseguire la regressione logistica in python (passo dopo passo)


La regressione logistica è un metodo che possiamo utilizzare per adattare un modello di regressione quando la variabile di risposta è binaria.

La regressione logistica utilizza un metodo noto come stima di massima verosimiglianza per trovare un’equazione della seguente forma:

log[p(X) / ( 1 -p(X))] = β 0 + β 1 X 1 + β 2 X 2 + … + β p

Oro:

  • X j : la j- esima variabile predittiva
  • β j : stima del coefficiente per la j -esima variabile predittiva

La formula sul lato destro dell’equazione prevede le probabilità logaritmiche che la variabile di risposta assuma il valore 1.

Pertanto, quando adattiamo un modello di regressione logistica, possiamo utilizzare la seguente equazione per calcolare la probabilità che una data osservazione assuma il valore 1:

p(X) = 0 + β 1 X 1 + β 2 X 2 + + β p

Utilizziamo quindi una certa soglia di probabilità per classificare l’osservazione come 1 o 0.

Ad esempio, potremmo dire che le osservazioni con probabilità maggiore o uguale a 0,5 saranno classificate come “1” e tutte le altre osservazioni saranno classificate come “0”.

Questo tutorial fornisce un esempio passo passo di come eseguire la regressione logistica in R.

Passaggio 1: importa i pacchetti necessari

Per prima cosa importeremo i pacchetti necessari per eseguire la regressione logistica in Python:

 import pandas as pd
import numpy as np
from sklearn. model_selection import train_test_split
from sklearn. linear_model import LogisticRegression
from sklearn import metrics
import matplotlib. pyplot as plt

Passaggio 2: caricare i dati

Per questo esempio, utilizzeremo il set di dati predefinito dal libro Introduction to Statistical Learning . Possiamo utilizzare il seguente codice per caricare e visualizzare un riepilogo del set di dati:

 #import dataset from CSV file on Github
url = "https://raw.githubusercontent.com/Statorials/Python-Guides/main/default.csv"
data = pd. read_csv (url)

#view first six rows of dataset
data[0:6]

        default student balance income
0 0 0 729.526495 44361.625074
1 0 1 817.180407 12106.134700
2 0 0 1073.549164 31767.138947
3 0 0 529.250605 35704.493935
4 0 0 785.655883 38463.495879
5 0 1 919.588530 7491.558572  

#find total observations in dataset
len( data.index )

10000

Questo set di dati contiene le seguenti informazioni su 10.000 individui:

  • default: indica se un individuo è inadempiente o meno.
  • studente: indica se un individuo è studente o meno.
  • saldo: saldo medio portato da un individuo.
  • reddito: reddito dell’individuo.

Utilizzeremo lo status di studente, il saldo bancario e il reddito per costruire un modello di regressione logistica che predice la probabilità che un dato individuo vada in default.

Passaggio 3: creare campioni di formazione e test

Successivamente, divideremo il set di dati in un set di training su cui addestrare il modello e un set di test su cui testare il modello.

 #define the predictor variables and the response variable
X = data[[' student ',' balance ',' income ']]
y = data[' default ']

#split the dataset into training (70%) and testing (30%) sets
X_train,X_test,y_train,y_test = train_test_split (X,y,test_size=0.3,random_state=0)

Passaggio 4: adattare il modello di regressione logistica

Successivamente, utilizzeremo la funzione LogisticRegression() per adattare un modello di regressione logistica al set di dati:

 #instantiate the model
log_regression = LogisticRegression()

#fit the model using the training data
log_regression. fit (X_train,y_train)

#use model to make predictions on test data
y_pred = log_regression. predict (X_test)

Passaggio 5: diagnostica del modello

Una volta adattato il modello di regressione, possiamo analizzare le prestazioni del nostro modello sul set di dati di test.

Per prima cosa creeremo la matrice di confusione per il modello:

 cnf_matrix = metrics. confusion_matrix (y_test, y_pred)
cnf_matrix

array([[2886, 1],
       [113,0]])

Dalla matrice di confusione possiamo vedere che:

  • #Pronostici veri positivi: 2886
  • #Pronostici veri negativi: 0
  • #Pronostici falsi positivi: 113
  • #Predizioni false negative: 1

Possiamo anche ottenere il modello di accuratezza, che ci dice la percentuale di previsioni di correzione effettuate dal modello:

 print(" Accuracy: ", metrics.accuracy_score (y_test, y_pred))l

Accuracy: 0.962

Questo ci dice che il modello ha fatto la previsione corretta riguardo al fatto se un individuo sarebbe andato in default o meno nel 96,2% dei casi.

Infine, possiamo tracciare la curva ROC (Receiver Operating Characteristic) che mostra la percentuale di veri positivi previsti dal modello quando la soglia di probabilità di previsione viene abbassata da 1 a 0.

Maggiore è l’AUC (area sotto la curva), più accuratamente il nostro modello è in grado di prevedere i risultati:

 #define metrics
y_pred_proba = log_regression. predict_proba (X_test)[::,1]
fpr, tpr, _ = metrics. roc_curve (y_test, y_pred_proba)
auc = metrics. roc_auc_score (y_test, y_pred_proba)

#create ROC curve
plt. plot (fpr,tpr,label=" AUC= "+str(auc))
plt. legend (loc=4)
plt. show ()

Curva ROC in Python

Il codice Python completo utilizzato in questo tutorial può essere trovato qui .

Aggiungi un commento

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