move84

머신러닝:: ROC 곡선과 AUC 본문

머신러닝

머신러닝:: ROC 곡선과 AUC

move84 2025. 4. 12. 15:15
반응형

머신러닝 모델의 성능을 평가하는 데 중요한 도구 중 하나인 ROC(Receiver Operating Characteristic) 곡선과 AUC(Area Under the Curve)에 대해 알아본다. ROC 곡선은 이진 분류 모델의 성능을 시각적으로 나타내며, AUC는 ROC 곡선 아래 면적으로 모델의 성능을 수치적으로 평가하는 데 사용된다. 이 글에서는 ROC 곡선과 AUC의 개념, 중요성, 그리고 실제 사용 예시를 살펴본다.


📈 ROC 곡선 (Receiver Operating Characteristic Curve)

ROC 곡선은 이진 분류 모델의 성능을 시각적으로 표현하는 그래프이다. ROC 곡선은 거짓 양성률(False Positive Rate, FPR)을 x축으로, 참 양성률(True Positive Rate, TPR)을 y축으로 하여 그려진다. FPR은 실제 음성 데이터 중에서 모델이 양성으로 잘못 예측한 비율을 의미하고, TPR은 실제 양성 데이터 중에서 모델이 양성으로 정확하게 예측한 비율을 의미한다.


📊 TPR과 FPR (True Positive Rate and False Positive Rate)

TPR과 FPR은 다음과 같이 계산된다.

  • TPR (True Positive Rate, 민감도, Sensitivity, 재현율, Recall): 실제 양성 데이터를 양성으로 정확히 예측한 비율. TPR = TP / (TP + FN)
  • FPR (False Positive Rate, 1-특이도, 1-Specificity): 실제 음성 데이터를 양성으로 잘못 예측한 비율. FPR = FP / (FP + TN)

여기서 TP(True Positive)는 양성으로 정확히 예측한 경우, FN(False Negative)은 양성 데이터를 음성으로 잘못 예측한 경우, FP(False Positive)는 음성 데이터를 양성으로 잘못 예측한 경우, TN(True Negative)은 음성 데이터를 음성으로 정확히 예측한 경우를 의미한다.

예를 들어, 암 진단 모델에서 TPR은 실제로 암 환자인 사람을 암 환자로 정확하게 진단한 비율이고, FPR은 실제로 암 환자가 아닌 사람을 암 환자로 잘못 진단한 비율이다.


✨ AUC (Area Under the Curve)

AUC는 ROC 곡선 아래 면적을 의미하며, 0과 1 사이의 값을 가진다. AUC는 모델의 성능을 하나의 숫자로 요약하여 나타내므로, 여러 모델의 성능을 비교하는 데 유용하다. AUC 값이 1에 가까울수록 모델의 성능이 좋다고 판단한다.

  • AUC = 1: 완벽한 분류 모델 (perfect classifier)
  • AUC = 0.5: 무작위 분류 모델 (random classifier)
  • 0.5 < AUC < 1: 일반적으로 사용 가능한 모델

예를 들어, AUC 값이 0.8인 모델은 무작위로 예측하는 모델보다 성능이 좋으며, 0.9인 모델은 0.8인 모델보다 성능이 더 좋다고 할 수 있다.


🤔 ROC 곡선과 AUC의 중요성

ROC 곡선과 AUC는 모델의 성능을 평가하고 비교하는 데 중요한 역할을 한다. 특히, 클래스 불균형(class imbalance) 문제가 있는 경우, 정확도(accuracy)와 같은 지표만으로는 모델의 성능을 제대로 평가하기 어렵다. 클래스 불균형이란 특정 클래스의 데이터가 다른 클래스에 비해 현저히 적은 경우를 의미한다.

예를 들어, 사기 탐지 모델에서 정상 거래 데이터는 매우 많지만, 사기 거래 데이터는 매우 적을 수 있다. 이 경우, 모델이 모든 거래를 정상 거래로 예측하더라도 높은 정확도를 얻을 수 있지만, 실제로 사기 거래를 탐지하는 능력은 매우 낮을 수 있다. ROC 곡선과 AUC는 이러한 상황에서도 모델의 실제 성능을 정확하게 평가할 수 있도록 돕는다.


💻 Python 예제

다음은 Python을 사용하여 ROC 곡선을 그리고 AUC를 계산하는 간단한 예제이다.

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

# 가상 데이터 생성
X, y = make_classification(n_samples=1000, n_classes=2, random_state=42)

# 데이터를 훈련 세트와 테스트 세트로 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 로지스틱 회귀 모델 훈련
model = LogisticRegression()
model.fit(X_train, y_train)

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

# ROC 곡선 계산
fpr, tpr, thresholds = roc_curve(y_test, y_pred_proba)

# AUC 계산
auc = roc_auc_score(y_test, y_pred_proba)

# ROC 곡선 그리기
plt.plot(fpr, tpr, label=f'AUC = {auc:.2f}')
plt.plot([0, 1], [0, 1], 'k--')
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC Curve')
plt.legend()
plt.show()

이 코드는 sklearn 라이브러리를 사용하여 가상 데이터를 생성하고, 로지스틱 회귀 모델을 훈련시킨 후, ROC 곡선을 그리고 AUC를 계산하는 과정을 보여준다.


🎯 결론

ROC 곡선과 AUC는 머신러닝 모델의 성능을 평가하고 비교하는 데 필수적인 도구이다. 특히, 클래스 불균형 문제가 있는 경우, ROC 곡선과 AUC는 모델의 실제 성능을 정확하게 평가할 수 있도록 돕는다. ROC 곡선은 모델의 성능을 시각적으로 표현하고, AUC는 모델의 성능을 하나의 숫자로 요약하여 나타내므로, 모델 선택 및 개선에 유용하게 활용될 수 있다.


✅ 주요 용어 정리

  • ROC 곡선 (Receiver Operating Characteristic Curve): 수신자 조작 특성 곡선
  • AUC (Area Under the Curve): 곡선 아래 면적
  • TPR (True Positive Rate): 참 양성률, 민감도 (Sensitivity), 재현율 (Recall)
  • FPR (False Positive Rate): 거짓 양성률, 1-특이도 (1-Specificity)
  • 클래스 불균형 (Class Imbalance): 클래스 불균형
반응형