Logistieke regressie uitvoeren in python (stap voor stap)


Logistische regressie is een methode die we kunnen gebruiken om een regressiemodel te fitten wanneer de responsvariabele binair is.

Logistische regressie maakt gebruik van een methode die bekend staat als maximale waarschijnlijkheidsschatting om een vergelijking van de volgende vorm te vinden:

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

Goud:

  • Xj : de j -de voorspellende variabele
  • β j : schatting van de coëfficiënt voor de j -de voorspellende variabele

De formule aan de rechterkant van de vergelijking voorspelt de logkans dat de responsvariabele de waarde 1 aanneemt.

Dus als we een logistisch regressiemodel passen, kunnen we de volgende vergelijking gebruiken om de waarschijnlijkheid te berekenen dat een bepaalde waarneming de waarde 1 aanneemt:

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

Vervolgens gebruiken we een bepaalde waarschijnlijkheidsdrempel om de waarneming als 1 of 0 te classificeren.

We zouden bijvoorbeeld kunnen zeggen dat waarnemingen met een waarschijnlijkheid groter dan of gelijk aan 0,5 als „1“ worden geclassificeerd en dat alle andere waarnemingen als „0“ worden geclassificeerd.

Deze zelfstudie biedt een stapsgewijs voorbeeld van het uitvoeren van logistische regressie in R.

Stap 1: Importeer de benodigde pakketten

Eerst zullen we de benodigde pakketten importeren om logistieke regressie in Python uit te voeren:

 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

Stap 2: Gegevens laden

Voor dit voorbeeld gebruiken we de standaarddataset uit het boek Introduction to Statistical Learning . We kunnen de volgende code gebruiken om een samenvatting van de dataset te laden en weer te geven:

 #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

Deze dataset bevat de volgende informatie over 10.000 personen:

  • standaard: geeft aan of een persoon in gebreke is gebleven of niet.
  • student: geeft aan of een persoon student is of niet.
  • saldo: Gemiddeld saldo dat door een individu wordt bijgehouden.
  • inkomen: inkomen van het individu.

We zullen de studentenstatus, banksaldo en inkomen gebruiken om een logistisch regressiemodel te construeren dat de waarschijnlijkheid voorspelt dat een bepaald individu in gebreke blijft.

Stap 3: Maak trainings- en testvoorbeelden

Vervolgens splitsen we de dataset op in een trainingsset om het model op te trainen en een testset om het model op te testen .

 #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)

Stap 4: Pas het logistische regressiemodel aan

Vervolgens zullen we de functie LogisticRegression() gebruiken om een logistisch regressiemodel aan de dataset te koppelen:

 #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)

Stap 5: Modeldiagnostiek

Zodra we het regressiemodel hebben aangepast, kunnen we de prestaties van ons model op de testdataset analyseren.

Eerst zullen we de verwarringsmatrix voor het model maken:

 cnf_matrix = metrics. confusion_matrix (y_test, y_pred)
cnf_matrix

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

Uit de verwarringsmatrix kunnen we zien dat:

  • #Echte positieve voorspellingen: 2886
  • #Echte negatieve voorspellingen: 0
  • #Vals-positieve voorspellingen: 113
  • #Vals-negatieve voorspellingen: 1

We kunnen ook het nauwkeurigheidsmodel verkrijgen, dat ons het percentage correctievoorspellingen vertelt dat door het model wordt gedaan:

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

Accuracy: 0.962

Dit vertelt ons dat het model in 96,2% van de gevallen de juiste voorspelling deed over de vraag of een individu wel of niet in gebreke zou blijven.

Ten slotte kunnen we de Receiver Operating Characteristic (ROC)-curve uitzetten, die het percentage echte positieven weergeeft dat door het model wordt voorspeld wanneer de voorspellingswaarschijnlijkheidsdrempel wordt verlaagd van 1 naar 0.

Hoe hoger de AUC (gebied onder de curve), hoe nauwkeuriger ons model de resultaten kan voorspellen:

 #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 ()

ROC-curve in Python

De volledige Python-code die in deze tutorial wordt gebruikt, kun je hier vinden.

Einen Kommentar hinzufügen

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