Python에서 auc(곡선 아래 영역)를 계산하는 방법


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

로지스틱 회귀 모델이 데이터 세트에 얼마나 잘 맞는지 평가하기 위해 다음 두 가지 측정항목을 살펴볼 수 있습니다.

  • 민감도: 결과가 실제로 긍정적일 때 모델이 관찰에 대한 긍정적인 결과를 예측할 확률입니다. 이를 ‘진양성률’이라고도 합니다.
  • 특이성: 결과가 실제로 부정적일 때 모델이 관찰에 대해 부정적인 결과를 예측할 확률입니다. 이를 ‘진음성률’이라고도 합니다.

이 두 가지 측정값을 시각화하는 한 가지 방법은 “수신기 작동 특성” 곡선을 나타내는 ROC 곡선을 만드는 것입니다.

y축을 따라 민감도를, x축을 따라 (1 – 특이도)를 표시하는 그래프입니다.

데이터 분류에서 로지스틱 회귀 모델의 효율성을 정량화하는 한 가지 방법은 “곡선 아래 영역”을 의미하는 AUC를 계산하는 것입니다.

AUC가 1에 가까울수록 모델이 더 좋습니다.

다음 단계별 예제에서는 Python에서 로지스틱 회귀 모델에 대한 AUC를 계산하는 방법을 보여줍니다.

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

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

다음으로 데이터세트를 가져와서 여기에 로지스틱 회귀 모델을 적용하겠습니다.

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

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

#instantiate the model
log_regression = LogisticRegression()

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

3단계: AUC 계산

metrics.roc_auc_score() 함수를 사용하여 모델의 AUC를 계산할 수 있습니다.

 #use model to predict probability that given y value is 1
y_pred_proba = log_regression. predict_proba (X_test)[::, 1 ]

#calculate AUC of model
auc = metrics. roc_auc_score (y_test, y_pred_proba)

#print AUC score
print (auc)

0.5602104030579559

이 특정 모델의 AUC(곡선 아래 면적)는 0.5602 입니다.

AUC 점수가 0.5 인 모델은 무작위 추측을 하는 모델보다 나을 것이 없다는 점을 기억하세요.

따라서 대부분의 경우 AUC 점수가 0.5602 인 모델은 관측치를 올바른 클래스로 분류하는 데 열악한 것으로 간주됩니다.

추가 리소스

다음 자습서에서는 ROC 곡선 및 AUC 점수에 대한 추가 정보를 제공합니다.

ROC 곡선을 해석하는 방법(예제 포함)
좋은 AUC 점수는 무엇입니까?

의견을 추가하다

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