이 튜토리얼에 사용된 전체 Python 코드는 여기에서 찾을 수 있습니다.
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 ()