move84

머신러닝 기초 – ROC 곡선과 AUC 지표 본문

머신러닝

머신러닝 기초 – ROC 곡선과 AUC 지표

move84 2025. 2. 25. 13:16
반응형

머신러닝 모델의 성능을 평가할 때 ROC 곡선(Receiver Operating Characteristic Curve)과 AUC(Area Under Curve)는 특히 중요한 지표다. 특히, 이진 분류(Binary Classification) 문제에서 모델의 임계값(Threshold)에 따른 성능 변화를 시각적으로 분석하는 데 유용하다. 이 글에서는 ROC 곡선과 AUC의 개념을 쉽게 설명하고, 파이썬 코드로 이를 직접 계산하는 방법을 소개한다.


📊 ROC 곡선이란?

ROC 곡선(Receiver Operating Characteristic Curve)임계값(Threshold)을 조정했을 때, 분류 모델이 얼마나 잘 작동하는지를 나타내는 그래프다.

ROC 곡선은 참양성 비율(True Positive Rate, TPR)거짓양성 비율(False Positive Rate, FPR)의 관계를 나타낸다.

  • 참양성 비율 (TPR, Sensitivity, Recall)
    [
    TPR = \frac{TP}{TP + FN}
    ]
    모델이 실제 양성을 얼마나 잘 감지했는지를 나타냄.

  • 거짓양성 비율 (FPR)
    [
    FPR = \frac{FP}{FP + TN}
    ]
    실제 음성 데이터를 잘못 양성으로 예측한 비율.


🚀 ROC 곡선의 의미

ROC 곡선은 모델의 모든 임계값을 고려하여 성능을 평가하는 데 유용하다.

  • 왼쪽 상단(0,1)에 가까울수록 좋은 모델
  • 대각선(랜덤 모델)과 가까울수록 나쁜 모델
  • 완전한 분류 모델: (0,1)에서 (1,1)까지 수직으로 상승 후 (1,0)으로 이동

🔹 ROC 곡선 예제 (파이썬 코드)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import roc_curve

# 실제값과 예측 점수 생성
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])

# ROC 곡선 계산
fpr, tpr, _ = roc_curve(y_true, y_scores)

# ROC 곡선 시각화
plt.plot(fpr, tpr, marker='o')
plt.xlabel("False Positive Rate (FPR)")
plt.ylabel("True Positive Rate (TPR)")
plt.title("ROC Curve")
plt.show()

📌 AUC(Area Under Curve)란?

AUC(Area Under the Curve)ROC 곡선 아래의 면적을 의미하며, 모델의 분류 성능을 한 숫자로 요약한 값이다.

  • AUC = 1 → 완벽한 모델 (완전히 분류 가능)
  • AUC = 0.5 → 랜덤 모델 (동전 던지기 수준)
  • AUC < 0.5 → 성능이 엉망인 모델 (음성/양성을 바꿔야 함)

AUC 값이 높을수록 모델이 양성과 음성을 더 잘 구분하는 능력이 뛰어나다는 의미다.

🔹 AUC 계산 예제 (파이썬 코드)

from sklearn.metrics import roc_auc_score

# AUC 계산
auc_score = roc_auc_score(y_true, y_scores)
print("AUC Score:", auc_score)

🎯 ROC-AUC가 중요한 이유

1️⃣ 불균형 데이터에서 유용
정확도(Accuracy)는 불균형한 데이터에서 잘못된 결과를 줄 수 있다. 예를 들어, 사기 거래 탐지에서 99%가 정상 거래일 경우, 정확도만 보면 모델이 99% 정확하다고 착각할 수 있다. 하지만 ROC-AUC를 보면 실제 분류 성능을 평가할 수 있다.

2️⃣ 다양한 임계값(Threshold) 고려 가능
정확도(Accuracy)는 특정 임계값에 의존하지만, ROC-AUC는 모든 임계값을 고려하여 모델 성능을 평가한다.


📊 ROC 곡선과 PR 곡선 비교

ROC 곡선과 함께 정밀도-재현율(Precision-Recall) 곡선도 종종 사용된다.

  • ROC 곡선: 전체 데이터에서 음성/양성을 구분하는 능력
  • PR 곡선: 양성 클래스에 대한 정밀도(Precision)와 재현율(Recall) 분석

📌 불균형 데이터에서는 PR 곡선이 더 유용
ROC 곡선은 음성 클래스가 많을 경우 거짓양성(FP)의 변화가 작아질 수 있다. 반면 PR 곡선은 양성 클래스에 대한 정보를 더 강조한다.

🔹 ROC vs PR 곡선 비교 코드

from sklearn.metrics import precision_recall_curve

# Precision-Recall Curve 계산
precision, recall, _ = precision_recall_curve(y_true, y_scores)

# PR 곡선 시각화
plt.plot(recall, precision, marker='o')
plt.xlabel("Recall")
plt.ylabel("Precision")
plt.title("Precision-Recall Curve")
plt.show()

📌 ROC-AUC 활용 예제

🏥 의료 진단

암 진단 모델에서 재현율(Recall)을 중요하게 생각할 수 있지만, 오진(False Positive)을 최소화하는 것도 중요하다. ROC-AUC를 활용하면 모델이 전체적으로 얼마나 잘 분류하는지 평가 가능하다.

🏦 금융 사기 탐지

사기 탐지 모델에서 거짓양성(False Positive)을 줄이는 것이 중요하다. AUC가 높은 모델을 선택하면 정상 거래와 사기 거래를 더 잘 구분할 수 있다.

📡 스팸 필터링

이메일 필터에서 스팸 메일을 정상 메일로 분류(False Negative)하는 것을 줄이기 위해 AUC를 고려하여 최적의 모델을 선택할 수 있다.


🚀 정리

개념 의미 공식 역할
TPR (Recall) 실제 양성을 맞게 예측한 비율 ( \frac{TP}{TP + FN} ) 민감도(Sensitivity)
FPR 실제 음성을 잘못 양성으로 예측한 비율 ( \frac{FP}{FP + TN} ) 모델의 거짓 양성률
ROC 곡선 임계값에 따른 분류 성능 그래프 - 모델의 성능 시각화
AUC ROC 곡선 아래 면적 - 모델의 분류 능력 요약

🔑 주요 용어 정리

  • ROC Curve (Receiver Operating Characteristic Curve): 모델의 TPR과 FPR 관계를 시각화하는 그래프
  • AUC (Area Under Curve): ROC 곡선 아래 면적, 모델의 전반적인 분류 성능 평가
  • TPR (True Positive Rate, Recall): 실제 양성을 맞게 예측한 비율
  • FPR (False Positive Rate): 실제 음성을 잘못 양성으로 예측한 비율

🔥 키워드

  • ROC 곡선
  • AUC
  • 머신러닝 성능 평가
  • 불균형 데이터
반응형