일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 데이터 전처리
- 정규화
- 머신 러닝
- 최적화
- 딥러닝
- AI
- rnn
- GRU
- 손실 함수
- 회귀
- LSTM
- 인공 신경망
- Machine Learning
- 과적합
- Q-Learning
- 교차 검증
- reinforcement learning
- q-러닝
- 인공지능
- python
- Deep learning
- 자연어 처리
- 강화학습
- 차원 축소
- CNN
- 지도 학습
- 머신러닝
- 활성화 함수
- 강화 학습
- 신경망
- Today
- Total
move84
머신러닝 기초 – ROC 곡선과 AUC 지표 본문
머신러닝 모델의 성능을 평가할 때 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
- 머신러닝 성능 평가
- 불균형 데이터
'머신러닝' 카테고리의 다른 글
머신러닝 기초 – 하이퍼파라미터 튜닝과 그리드 서치(Grid Search) (0) | 2025.02.25 |
---|---|
머신러닝 기초 – 혼동 행렬(Confusion Matrix) 분석 (0) | 2025.02.25 |
머신러닝 기초 – 정밀도(Precision), 재현율(Recall), F1-Score (0) | 2025.02.25 |
인공지능과 생명공학의 융합 (1) | 2025.02.23 |
머신러닝 기초 - 평가 지표 (0) | 2025.02.21 |