본문 바로가기
AI/Machine-Learning

ROC curve

by Wikinist 2023. 8. 30.

Receiver Operating Characteristic curve, 줄여서 ROC curve는 이진 분류 모델의 성능을 시각화하고 평가하기 위해 사용되는 도구입니다. ROC curve는 모델의 분류 임계값을 변화시킬 때, 진짜 양성률(True Positive Rate, TPR)에 대한 거짓 양성률(False Positive Rate, FPR)의 변화를 그래프로 나타냅니다.

이해를 돕기 위해, ROC curve를 만들기 위한 몇 가지 중요한 개념을 살펴보겠습니다:

진짜 양성률 (True Positive Rate, TPR): 이것은 실제 양성 샘플 중에서 올바르게 양성으로 분류된 샘플의 비율을 나타냅니다. TPR은 다음과 같이 계산됩니다: TPR = TP / (TP + FN) (여기서 TP는 진짜 양성, FN은 거짓 음성입니다.)

거짓 양성률 (False Positive Rate, FPR): 이것은 실제 음성 샘플 중에서 잘못된 양성으로 분류된 샘플의 비율을 나타냅니다. FPR은 다음과 같이 계산됩니다: FPR = FP / (FP + TN) (여기서 FP는 거짓 양성, TN은 진짜 음성입니다.)

임계값 (Threshold): 모델의 출력을 기반으로 양성 및 음성 클래스를 결정하는 임계값입니다. 임계값을 조정하면 모델의 분류 결과가 변하게 됩니다.

임계값은 모델의 출력인 확률을 기반으로 양성 및 음성 클래스를 구분하는 기준값을 의미합니다. 이진 분류 모델에서 출력은 일반적으로 0과 1 사이의 확률값으로 나타나며, 이 확률값을 임계값과 비교하여 양성 또는 음성으로 분류합니다.

임계값을 조정하면 모델의 분류 결과가 변화합니다. 예를 들어, 임계값을 낮추면 모델은 더 많은 샘플을 양성으로 분류하게 되므로 TPR이 증가하게 됩니다. 하지만 동시에 FPR도 증가할 수 있습니다. 임계값을 높이면 모델은 보다 확실한 양성 샘플만을 양성으로 분류하게 되므로 TPR은 낮아지지만 FPR도 감소합니다.

ROC curve는 TPR을 x축에, FPR을 y축에 놓고, 다양한 임계값에서의 모델의 성능을 시각화합니다. 이 곡선은 모델이 다양한 임계값에서 어떻게 작동하는지를 보여줍니다. 이 곡선의 아래쪽 면적을 AUC (Area Under the Curve)라고 하며, AUC 값은 모델의 성능을 요약하는 데 사용됩니다. AUC가 1에 가까울수록 모델이 좋은 성능을 가지고 있음을 나타냅니다.

일반적으로, ROC curve는 양성과 음성 클래스 간의 불균형이 심한 경우 또는 모델의 성능을 비교하는 경우에 유용하게 사용됩니다.

예제

먼저, 이진 분류 모델을 훈련하고 테스트 데이터에 대한 예측 확률을 얻어야 합니다. 아래 코드 예시는 scikit-learn 라이브러리를 사용하여 이를 수행하는 방법을 보여줍니다. 이 예시에서는 분류 모델로서 로지스틱 회귀를 사용하겠습니다.

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, roc_auc_score
import matplotlib.pyplot as plt

# 데이터 로드 및 분할
# X와 y는 각각 특성과 레이블 데이터를 나타냅니다.
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 모델 훈련
model = LogisticRegression()
model.fit(X_train, y_train)

# 테스트 데이터에 대한 확률 예측
y_pred_proba = model.predict_proba(X_test)[:, 1]

이제 y_test는 테스트 데이터의 실제 레이블이고, y_pred_proba는 모델의 양성 클래스에 대한 예측 확률입니다.

다음으로, roc_curve 함수를 사용하여 TPR과 FPR을 계산하고 ROC curve를 그릴 수 있습니다. 그리고 AUC를 계산하여 모델의 성능을 나타낼 수 있습니다.

# TPR, FPR, 임계값 계산
fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)

# ROC curve 그리기
plt.figure(figsize=(8, 6))
plt.plot(fpr, tpr, label='ROC Curve (AUC = {:.2f})'.format(roc_auc_score(y_test, y_pred_proba)))
plt.plot([0, 1], [0, 1], 'k--')  # 랜덤 분류 기준선
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate (FPR)')
plt.ylabel('True Positive Rate (TPR)')
plt.title('Receiver Operating Characteristic (ROC) Curve')
plt.legend(loc='lower right')
plt.show()

위의 코드에서 roc_curve 함수는 실제 레이블(y_test)과 예측 확률(y_pred_proba)을 사용하여 FPR 및 TPR을 계산하고, roc_auc_score 함수는 AUC를 계산합니다. plt.plot 함수를 사용하여 ROC curve를 그리고, 랜덤 분류 기준선을 점선으로 나타냅니다.

이렇게하면 모델의 ROC curve와 AUC 값을 시각화하여 분류 모델의 성능을 평가할 수 있습니다.


참조

 

ROC curve - 공돌이의 수학정리노트 (Angelo's Math Notes)

 

angeloyeo.github.io

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'AI > Machine-Learning' 카테고리의 다른 글

[sklearn] 결정트리  (0) 2023.08.30
[sklearn] K-Nearest Neighbors  (0) 2023.08.30
[sklearn] 모델 성능 평가(정확도, f1)  (0) 2023.08.30
[sklearn] GridSearchCV - 파라미터 튜닝  (0) 2023.08.30
L1 규제와 L2 규제  (0) 2023.08.30