Python에서 로지스틱 회귀를 수행하는 방법(단계별)


로지스틱 회귀는 응답 변수가 이진일 때 회귀 모델을 맞추는 데 사용할 수 있는 방법입니다.

로지스틱 회귀 분석에서는 최대 우도 추정 이라는 방법을 사용하여 다음 형식의 방정식을 찾습니다.

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

금:

  • X j : j 번째 예측변수
  • β j : j 번째 예측변수에 대한 계수 추정

방정식 오른쪽의 공식은 응답 변수가 값 1을 취할 로그 확률을 예측합니다.

따라서 로지스틱 회귀 모델을 적용할 때 다음 방정식을 사용하여 주어진 관측값이 값 1을 가질 확률을 계산할 수 있습니다.

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

그런 다음 특정 확률 임계값을 사용하여 관측치를 1 또는 0으로 분류합니다.

예를 들어, 확률이 0.5보다 크거나 같은 관측치는 “1”로 분류되고 다른 모든 관측치는 “0”으로 분류될 것이라고 말할 수 있습니다.

이 튜토리얼에서는 R에서 로지스틱 회귀를 수행하는 방법에 대한 단계별 예를 제공합니다.

1단계: 필요한 패키지 가져오기

먼저 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

2단계: 데이터 로드

이 예에서는 Introduction to Statistical Learning 책기본 데이터세트를 사용합니다. 다음 코드를 사용하여 데이터세트 요약을 로드하고 표시할 수 있습니다.

 #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

이 데이터 세트에는 10,000명의 개인에 대한 다음 정보가 포함되어 있습니다.

  • 기본값: 개인이 채무 불이행을 했는지 여부를 나타냅니다.
  • 학생: 개인이 학생인지 여부를 나타냅니다.
  • 잔액: 개인이 보유하고 있는 평균 잔액입니다.
  • 소득: 개인의 소득.

우리는 학생 상태, 은행 잔고, 소득을 사용하여 특정 개인의 채무 불이행 가능성을 예측하는 로지스틱 회귀 모델을 구축할 것입니다.

3단계: 학습 및 테스트 샘플 만들기

다음으로, 데이터 세트를 모델을 훈련하기 위한 훈련 세트와 모델을 테스트하기 위한 테스트 세트로 분할합니다.

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

4단계: 로지스틱 회귀 모델 적합

다음으로 LogisticRegression() 함수를 사용하여 로지스틱 회귀 모델을 데이터 세트에 맞춥니다.

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

5단계: 모델 진단

회귀 모델을 적용한 후에는 테스트 데이터세트에서 모델의 성능을 분석할 수 있습니다.

먼저 모델에 대한 혼동 행렬을 만듭니다 .

 cnf_matrix = metrics. confusion_matrix (y_test, y_pred)
cnf_matrix

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

혼동 행렬을 통해 다음을 확인할 수 있습니다.

  • #진정성 예측: 2886
  • #진음성 예측: 0
  • #오탐지 예측: 113
  • #거짓음성 예측: 1

또한 모델에 의해 수행된 수정 예측의 백분율을 알려주는 정확도 모델을 얻을 수도 있습니다.

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

Accuracy: 0.962

이는 모델이 개인의 채무 불이행 여부에 대해 96.2% 의 확률로 올바른 예측을 했다는 것을 말해줍니다.

마지막으로 예측 확률 임계값이 1에서 0으로 낮아질 때 모델에서 예측한 참 긍정의 비율을 표시하는 ROC(수신기 작동 특성) 곡선을 그릴 수 있습니다.

AUC(곡선 아래 영역)가 높을수록 모델이 결과를 더 정확하게 예측할 수 있습니다.

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

Python의 ROC 곡선

이 튜토리얼에 사용된 전체 Python 코드는 여기에서 찾을 수 있습니다.

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다