1 ROC 곡선 — 모든 cut-point 시각화
각 cut-point \(c\) 의 (1-Specificity, Sensitivity) 쌍을 plot:
- \(\text{Sn}(c) = P(\text{score} \ge c \mid Y = 1)\)
- \(\text{Sp}(c) = P(\text{score} < c \mid Y = 0)\)
좌하 (0, 0) → 우상 (1, 1) 의 곡선.
1.1 직관 — ROC 의 시각
Sn
1.0 │ ↗ Perfect (AUC=1)
│ ╱
0.8 │ ╱
│ ╱ Good (AUC=0.85)
0.6 │ ╱
│ ╱ ╱ ╱ Random (AUC=0.5)
0.4 │ ╱
│ ╱
0.2 │ ╱
│╱
0.0 └────────────────────→ 1-Sp
0.0 0.5 1.0
- 추상 정의: 각 cut-point 의 trade-off 시각. Cut-point 무관 모형 능력 평가.
- 일상어 비유: 시험 합격선 변화 — 모든 가능한 합격선에서 합격자/부적격 분류 정확도.
- 반사실 시나리오: 단일 cut-point (예: 5%) 만 보고 모형 평가 → cut-point 의 영향 모름. ROC 가 종합 평가.
2 AUC — Area Under Curve
\[\text{AUC} = \int_0^1 \text{Sn}(c)\, d(1 - \text{Sp}(c))\]
ROC 곡선 아래 면적.
2.1 Mann-Whitney 와의 관계
핵심 정리: AUC 는 무작위 case + 무작위 control 쌍의 score 비교에서 case 의 score 가 더 높을 확률.
\[\text{AUC} = P(\text{score}_{\text{case}} > \text{score}_{\text{control}})\]
또는 동등하게: \[\text{AUC} = \frac{U}{n_1 n_0}\]
여기서 \(U\) = Mann-Whitney U 통계.
- 추상 정의: 두 분포 (case, control) 의 separation 정도.
- 일상어 비유: 키 비교 — 무작위 남성과 여성에서 남성이 큰 키일 확률.
- 반사실 시나리오: AUC 0.5 = 분포 완전 겹침. 1.0 = 완전 분리. 임상 0.7~0.8 acceptable.
2.2 AUC 의 임상 임계값
| AUC | 해석 |
|---|---|
| 0.5~0.6 | Poor |
| 0.6~0.7 | Acceptable |
| 0.7~0.8 | Acceptable to Good |
| 0.8~0.9 | Excellent |
| 0.9~1.0 | Outstanding |
(Hosmer & Lemeshow, 2000).
AUC 만으로 모형의 임상 가치 평가 부족.
필요한 추가 도구: - Calibration: 예측 확률 = 진성 위험. - Net benefit: 임상 의사 결정 가치. - NRI / IDI: 새 변수 추가의 가치.
3 단계 직관:
- 추상 정의: AUC 가 discrimination 만. Calibration 별도.
- 일상어 비유: 시험 분류 정확도 (AUC) + 점수의 정직성 (calibration) 모두 필요.
- 반사실 시나리오: AUC 0.85 + calibration 부정확 → 임상 활용 부족. 두 도구 모두 평가.
3 AUC 의 신뢰구간
DeLong et al. (1988): \[\text{Var}(\hat{\text{AUC}}) = \frac{V_{10} + V_{01}}{n_1 n_0}\]
(자세한 수식은 DeLong 의 논문).
95% CI (대표본): \[\hat{\text{AUC}} \pm 1.96 \sqrt{\text{Var}(\hat{\text{AUC}})}\]
3.1 두 모형의 AUC 비교
두 모형의 AUC 차이의 통계 유의성:
\[z = \frac{\hat{\text{AUC}}_1 - \hat{\text{AUC}}_2}{\text{SE}(\hat{\text{AUC}}_1 - \hat{\text{AUC}}_2)}\]
같은 자료에서 비교 시 두 AUC 의 covariance 고려.
- 추상 정의: 같은 자료의 두 모형 AUC 차이 — 한 모형이 다른 모형보다 우월?
- 일상어 비유: 두 시험관의 채점 비교 — 한 채점이 더 정확한가.
- 반사실 시나리오: 단순 AUC 비교 (covariance 무시) → 잘못된 SE. DeLong 이 정확.
4 ROC 의 활용
| 활용 | 도구 |
|---|---|
| Cut-point 선택 | Youden index (\(J = \text{Sn} + \text{Sp} - 1\) 최대) |
| 모형 평가 | AUC + CI |
| 모형 비교 | DeLong test |
| 임상 의사 결정 | Net benefit (decision curve) |
5 A/B 테스트의 AUC
A/B 테스트의 결과 = 사용자 segment 별 lift 예측 모형의 AUC.
from sklearn.metrics import roc_auc_score, roc_curve
# Risk score 예측
risk_scores = model.predict_proba(X_test)[:, 1]
# AUC
auc = roc_auc_score(y_test, risk_scores)
print(f"AUC: {auc:.3f}")
# ROC curve
fpr, tpr, thresholds = roc_curve(y_test, risk_scores)
# Optimal cut-point (Youden)
J = tpr - fpr
opt_idx = J.argmax()
opt_threshold = thresholds[opt_idx]
print(f"Optimal threshold: {opt_threshold:.3f}")
print(f" Sn: {tpr[opt_idx]:.3f}, Sp: {1-fpr[opt_idx]:.3f}")3 단계 직관:
- 추상 정의: A/B 의 personalization 모형의 평가 — segment 식별 정확도.
- 일상어 비유: 잠재 구매자 식별 — 100 명 중 진짜 구매자 식별 정확도.
- 반사실 시나리오: AUC 만으로 부족 — calibration 도 평가 (다음 글).
6 ROC 의 4 가지 활용
| 활용 | 도구 |
|---|---|
| Cut-point 선택 | Youden index 또는 cost-based |
| Model comparison | DeLong test (paired ROC) |
| Sample size 계산 | AUC 의 검정력 분석 |
| Decision support | Net benefit + decision curve |
6.1 Youden Index 의 cut-point
\[J(c) = \text{Sn}(c) + \text{Sp}(c) - 1\]
- 추상 정의: J = ROC 곡선 상의 점에서 대각선 (random) 까지의 수직 거리.
- 일상어 비유: ROC 의 좌상단으로부터 가장 떨어진 점 — 가장 정보량 많은 cut-point.
- 반사실 시나리오: J 가 false positive·false negative 비용을 동등 가정. 비대칭이면 cost-weighted cut-point.
6.2 Cost-Based Cut-point
\[c^* = \arg\min_c \left[ C_{\text{FP}} \cdot (1-\text{Sp}(c)) \cdot (1-\pi) + C_{\text{FN}} \cdot (1-\text{Sn}(c)) \cdot \pi \right]\]
- \(\pi\): 결과의 prevalence.
- \(C_{\text{FP}}, C_{\text{FN}}\): 각 오류의 비용.
- 추상 정의: \(C_{\text{FN}} > C_{\text{FP}}\) → cut-point 낮춤 (Sn 우선).
- 일상어 비유: 화재 감지 — false alarm 비용 < 화재 놓치는 비용 → 민감도 높임.
- 반사실 시나리오: 비용 분석 없이 Youden 만 사용 시 임상 의사 결정 부족.
7 Partial AUC — 임상 영역만
특정 specificity 영역의 AUC. 예: \(\text{Sp} \in [0.8, 1.0]\) 만.
\[\text{pAUC} = \int_{\text{Sp}=0.8}^{1.0} \text{Sn}(\text{Sp})\, d\text{Sp}\]
또는 정규화: \[\text{pAUC}^{\text{norm}} = \frac{\text{pAUC}}{0.2} = \text{pAUC} / (\text{Sp 범위})\]
- 추상 정의: 임상에서 의의 있는 specificity 영역 (예: Sp > 0.8) 의 정밀도만 평가.
- 일상어 비유: 시험의 “상위권 학생 분류 정확도” 만 평가 — 하위권 분류는 무관.
- 반사실 시나리오: Full AUC 만 보면 의의 없는 영역의 정확도 포함. pAUC 가 임상 정밀.
활용: - 선별 검사 — high specificity (false positive ↓) 영역만. - 진단 검사 — 중간 영역.
8 C-Statistic — Cox 의 AUC
Cox 모형의 risk score 의 AUC 일반화:
\[C = P(\text{score}_i > \text{score}_j \mid T_i < T_j, \delta_i = 1)\]
즉 짧게 산 자가 더 높은 score 일 확률.
Censoring 처리: - Uno’s C, Harrell’s C 등. - \(C = 0.5\) random, \(1.0\) perfect.
- 추상 정의: AUC 의 시간-사건 자료 일반화. Censoring 의 정직 처리.
- 일상어 비유: 마라톤 결승 시간 예측 — 빨리 도착할 사람 식별 정확도.
- 반사실 시나리오: AUC 직접 적용 시 censored 자료 부정확. C-statistic 이 표준.
9 DeLong Test — 두 ROC 비교
같은 자료의 두 모형 ROC 비교.
\[z = \frac{\hat{\text{AUC}}_1 - \hat{\text{AUC}}_2}{\text{SE}(\hat{\text{AUC}}_1 - \hat{\text{AUC}}_2)}\]
핵심: 같은 자료의 paired ROC 의 covariance 고려.
(DeLong et al., 1988).
- 추상 정의: 두 모형이 같은 자료에 적합 → 그들의 AUC 가 양의 상관. 단순 비교 SE = 부정확.
- 일상어 비유: 두 학생의 같은 시험 점수 비교 — 시험 난이도가 둘 다 영향. Paired t-test 가 정확.
- 반사실 시나리오: 단순 (unpaired) AUC 비교 시 SE 과대 → 검정력 ↓. DeLong 이 정확.
9.1 R / Python 의 DeLong
# Python: scikit-learn 또는 scipy 직접 구현
import numpy as np
from scipy import stats
def delong_test(y_true, y_pred1, y_pred2):
"""DeLong 의 paired AUC 비교 — 단순 구현"""
# 자세한 구현 생략 (lifelines, statsmodels 사용 권장)
pass
# R 의 pROC 패키지
# library(pROC)
# roc1 <- roc(y_true, y_pred1)
# roc2 <- roc(y_true, y_pred2)
# roc.test(roc1, roc2, method="delong")10 Q&A — ROC 의 흔한 오해
A: 아니다. Calibration + cost-benefit 도 평가 필요.
3 단계 직관:
- 추상 정의: AUC 가 rank 측도. 절대 정밀도 (calibration) + 임상 가치 (decision curve) 별도.
- 일상어 비유: 시험의 분류 정확도 ↑ but 점수 자체는 부정확 가능.
- 반사실 시나리오: AUC 0.85 + calibration 부정확 → high-risk 환자에 잘못된 처치 위험.
A: 거의 그렇다. 단, 특정 cut-point 에서 임상 의의 가능 (드뭄).
3 단계 직관:
- 추상 정의: AUC 0.5 = 두 분포 (case, control) 완전 겹침. 어떤 cut-point 도 분류 무의미.
- 일상어 비유: 동전 던지기 수준의 분류.
- 반사실 시나리오: AUC 0.55 만으로도 충분 검정력 + 임상 활용 (대규모 자료) 가능.
A: AUC 는 cut-point 무관, Accuracy 는 특정 cut-point 의 정분류율.
3 단계 직관:
- 추상 정의: AUC = ranking 능력. Accuracy = 단일 cut-point 정확도.
- 일상어 비유: AUC = “시험 점수의 분류력”. Accuracy = “70 점 합격선의 합격률 정확도”.
- 반사실 시나리오: Accuracy 가 prevalence 의존 (희귀 결과 시 높음 misleading). AUC 가 prevalence 무관.
11 A/B 테스트의 ROC 활용 — 사용자 churn 예측
import numpy as np
from sklearn.metrics import roc_auc_score, roc_curve
import matplotlib.pyplot as plt
# Churn 모형 적합
risk_scores = churn_model.predict_proba(X_test)[:, 1]
auc = roc_auc_score(y_test, risk_scores)
print(f"AUC: {auc:.3f}")
# ROC curve
fpr, tpr, thresholds = roc_curve(y_test, risk_scores)
# Youden cut-point
J = tpr - fpr
opt_idx = J.argmax()
opt_threshold = thresholds[opt_idx]
print(f"Optimal threshold (Youden): {opt_threshold:.3f}")
print(f" Sn: {tpr[opt_idx]:.3f}, Sp: {1-fpr[opt_idx]:.3f}")
# Cost-based cut-point
# 비용 가정: false negative (놓친 churn) = 100, false positive (불필요 캠페인) = 5
def cost(threshold):
pred = risk_scores >= threshold
fp = np.sum((pred == 1) & (y_test == 0))
fn = np.sum((pred == 0) & (y_test == 1))
return 100 * fn + 5 * fp
opt_cost_threshold = thresholds[np.argmin([cost(t) for t in thresholds])]
print(f"Optimal threshold (cost-based): {opt_cost_threshold:.3f}")3 단계 직관:
- 추상 정의: AUC 가 모형 능력 평가, threshold 가 캠페인 의사 결정.
- 일상어 비유: 시험 분류력 + 합격선 결정.
- 반사실 시나리오: Youden 만 사용 시 비용 비대칭 무시. Cost-based 가 임상·IT 의사 결정.
12 결론
AUC 가 discrimination 의 표준 측도 — Mann-Whitney 와 동치. DeLong test 로 모형 비교. Partial AUC 와 C-statistic 이 특수 영역·시간 자료 도구. Youden vs cost-based cut-point 가 임상·IT 의사 결정 도구. 단 AUC 만으로 임상 가치 평가 부족 — calibration 별도.
다음 글 (H-WOO13-5) 에서 calibration 의 정의와 평가를 본다.
13 관련 주제
- Risk Score 산출
- 1111-11-11, Calibration
- Diagnostic Measures (B35)