Receiver Operating Characteristic (ROC) Curve
수신자 조작 특성(ROC) 곡선은 모든 임계값에서 참 양성률을 거짓 양성률에 대해 표시합니다. 곡선 읽는 법, AUC 및 코드를 살펴봅니다.
수신자 조작 특성(ROC) 곡선은 이진 분류기가 모든 가능한 결정 임계값에서 두 클래스를 얼마나 잘 구분하는지 보여주는 그래프입니다. 모델 점수에 적용한 각 임계값마다 점 하나를 표시하고, y축에는 참양성률, x축에는 거짓양성률을 그려 양성을 찾아내는 것과 오경보를 발생시키는 것 사이의 모든 상충 관계를 한 그림에 담습니다. 곡선 아래 면적인 곡선 아래 면적(AUC)은 이 내용을 임계값에 구애받지 않는 하나의 수치로 요약합니다. 이 명칭은 제2차 세계대전 당시의 레이더 공학에서 유래했습니다. 당시에는 레이더 수신기 운용자가 적 항공기를 잡음과 얼마나 잘 구별하는지를 측정했으며, 이후 의학, 심리학, 머신러닝(ML) 분야로 확산되었습니다.
ROC 곡선을 만드는 방법#
곡선 위의 각 점은 하나의 임계값에서 계산한 혼동 행렬에서 나옵니다.
- 참양성률(TPR), 재현율 또는 민감도라고도 합니다: TP / (TP + FN)으로, 실제 양성 중 모델이 양성으로 표시한 비율입니다.
- 거짓양성률(FPR): FP / (FP + TN)으로, 실제 음성 중 잘못 양성으로 표시한 비율입니다. FPR은 1에서 특이도를 뺀 값입니다.
임계값을 높은 값에서 낮은 값으로 바꾸면 곡선은 아무것도 표시되지 않는 (0, 0)에서 모든 항목이 표시되는 (1, 1)까지 이어집니다. 모든 양성에 더 높은 순위를 부여하는 분류기는 왼쪽 위 모서리를 통과하고, 무작위로 예측하는 모델은 대각선을 따릅니다. 대각선 아래에 있는 곡선은 점수의 방향이 반전되었음을 의미합니다. AUC는 무작위로 고른 양성이 무작위로 고른 음성보다 높은 점수를 받을 확률과 같으므로, 0.5는 무작위 수준이고 1.0은 완벽한 분리입니다. 곡선을 만들려면 예측 확률이나 신뢰도 값과 같은 연속 점수가 필요합니다. 0/1의 확정 레이블만 있으면 점 하나만 얻을 수 있기 때문입니다. 다음 예제에서는 불균형 데이터셋으로 로지스틱 회귀 분류기를 학습하고 scikit-learn의 roc_curve으로 곡선을 계산합니다.
import numpy as np
from sklearn.datasets import make_classification
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_auc_score, roc_curve
from sklearn.model_selection import train_test_split
# Binary task where 10% of samples are positive
X, y = make_classification(n_samples=5000, weights=[0.9], class_sep=0.8, random_state=0)
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0)
# ROC analysis needs continuous scores, not hard 0/1 predictions
scores = LogisticRegression().fit(X_train, y_train).predict_proba(X_test)[:, 1]
fpr, tpr, thresholds = roc_curve(y_test, scores)
print(f"AUC: {roc_auc_score(y_test, scores):.3f}")
# Each threshold is one point on the curve: higher recall costs more false alarms
for target in (0.80, 0.95):
i = np.argmax(tpr >= target) # first point that reaches the target TPR
print(f"Threshold {thresholds[i]:.2f}: TPR {tpr[i]:.2f}, FPR {fpr[i]:.2f}")모델의 AUC는 0.963입니다. 임계값이 0.44일 때 양성의 82%를 찾고 FPR은 0.01입니다. 재현율을 95%로 높이려면 임계값을 0.02로 낮춰야 하며, 이때 FPR은 0.26으로 급증합니다. 양성 130개와 음성 1,120개로 구성된 이 테스트 분할에서는 양성을 18개 더 찾아내는 대가로 오경보가 279건 더 발생합니다.
운영 지점 선택#
곡선은 각 임계값에 따른 비용을 보여주며, 애플리케이션에서 어느 정도의 비용을 감수할 수 있는지 결정합니다.
- 의료 선별 검사: 종양을 놓치는 비용은 후속 검사보다 훨씬 크므로, 선별 검사 도구는 참양성률이 높은 지점에서 작동하며 영상의학 전문의가 검토할 거짓양성을 더 많이 허용합니다.
- 사기 탐지: 합법적인 결제를 차단하면 고객이 불편을 겪으므로, 은행은 대부분의 사기를 찾아내면서 검토팀과 고객이 감당할 수 있는 수준으로 FPR을 억제하는 지점을 선택합니다.
- 비용이 동일한 경우: 두 오류의 비용이 같으면 TPR에서 FPR을 뺀 Youden의 J 통계량으로 대각선에서 가장 멀리 떨어진 지점을 선택합니다.
Ultralytics YOLO26 분류 모델은 results[0].probs.data에서 각 클래스의 확률을 반환합니다. 이는 ROC 분석에 필요한 연속 점수이므로, 레이블이 지정된 검증 세트에서 한 클래스의 확률을 수집하면 해당 클래스의 일대다 ROC 곡선을 얻고 배포 비용에 맞는 임계값을 선택할 수 있습니다.
ROC 곡선과 관련 도구 비교#
정밀도-재현율 곡선은 TPR과 FPR 대신 정밀도와 재현율을 표시합니다. TPR과 FPR은 각각 클래스 하나를 기준으로 계산되므로 양성의 비율이 낮아져도 ROC 곡선은 그대로지만 정밀도는 낮아집니다. 사기 선별 검사나 이상 탐지처럼 양성이 드문 경우 FPR이 낮아도 참 탐지보다 오경보가 더 많을 수 있습니다. 불균형 데이터셋을 다룬 PLOS ONE 연구에서는 이런 상황에서 정밀도-재현율 그래프가 더 많은 정보를 제공한다고 밝혔습니다. 객체 탐지를 정밀도-재현율 곡선과 평균 정밀도(mAP)로 평가하는 이유도 이와 관련이 있습니다. 참음성으로 간주될 수 있는 배경 영역은 범위가 한정되지 않아 FPR의 분모가 고정되어 있지 않습니다.










