Precision-Recall Curve
정밀도-재현율 곡선은 임계값에 따른 정밀도와 재현율을 그래프로 나타내며, 모델 성능과 오탐 및 미탐 간의 상충 관계를 보여줍니다.
정밀도-재현율 곡선은 결정 임계값에 따라 모델의 정밀도와 재현율이 어떻게 변하는지 보여주는 그래프입니다. 재현율은 가로축에, 정밀도는 세로축에 표시됩니다. 각 측정 작동점은 하나의 임계값에 해당하며, 모델이 얼마나 많은 양성 사례를 찾아내고 양성 예측을 얼마나 신뢰할 수 있는지를 나타냅니다. 이 곡선은 오탐과 미탐의 비용이 서로 다른 경우 분류기와 검출기를 평가하는 데 유용합니다.
정밀도-재현율 곡선의 작동 방식#
정밀도는 양성 예측 중 정답인 비율입니다: TP / (TP + FP). 재현율은 민감도라고도 하며, 실제 양성 중 찾아낸 비율입니다: TP / (TP + FN). TP는 참양성, FP는 거짓양성, FN은 거짓음성을 의미하며, 이는 혼동 행렬에 집계되는 결과입니다.
신뢰도 임계값을 예측 점수 전반에 걸쳐 조정하면 정밀도-재현율 쌍을 얻을 수 있습니다. 임계값을 낮추면 더 많은 예측이 포함되므로 재현율은 증가하거나 유지됩니다. 정답 예측과 오답 예측이 집합에 추가되는 방식에 따라 정밀도는 어느 쪽으로든 변할 수 있으며, 그 결과 계단 형태의 곡선이 만들어집니다.
Cyril Cleverdon은 1962년 Cranfield 보고서에서 재현율 대 관련성 그래프를 소개해 정밀도-재현율 평가의 정보 검색 분야 기원을 확립했습니다. 문서 검색에서는 검색된 관련 문서가 참양성이고, 검색된 비관련 문서가 거짓양성입니다.
곡선과 기준선 해석#
재현율이 1에 가까워질 때도 정밀도를 높게 유지하는 곡선은 성능이 우수함을 나타냅니다. 곡선이 교차하면 모델마다 성능이 더 나은 작동 영역이 서로 다릅니다. 정밀도가 급격히 하락하면 추가 예측으로 인해 오탐이 많이 발생하는 지점을 알 수 있습니다.
정보가 없는 무작위 순위의 기준선은 양성 클래스의 유병률, 즉 양성으로 레이블된 예시의 비율입니다. 양성 예시가 1%인 경우 기준선 정밀도는 0.01입니다. 유병률이 달라지면 정밀도도 달라지므로 평가 대상 모집단이 결과의 일부가 됩니다.
수신자 조작 특성(ROC) 곡선은 대신 재현율을 거짓양성률 FP / (FP + TN)에 대해 표시하며, 여기서 TN은 참음성을 의미합니다. 정밀도-재현율 평가는 올바른 경보의 비율을 직접 나타내므로 양성 사례가 드문 경우에 유용합니다. 정확도는 다수 클래스에 좌우될 수 있습니다.
작동 임계값 선택#
오류 비용에 따라 검증 데이터에서 작동점을 선택합니다. 최소 재현율이 요구되는 경우 조건을 충족하는 점 중 정밀도가 가장 높은 점을 선택하고, 최소 정밀도가 요구되는 경우에는 조건을 충족하는 점 중 재현율이 가장 높은 점을 선택합니다. 정밀도와 재현율의 조화 평균인 F1 점수를 최대화하면 두 지표에 동일한 가중치를 부여할 수 있습니다. 임계값은 기반 점수 또는 정밀도-신뢰도 및 재현율-신뢰도 그래프에서 가져옵니다.
Ultralytics YOLO 예측은 점수가 부여된 검출 결과를 필터링하는 conf을 통해 이 선택 기능을 제공합니다. 아카데미 평가에서 YOLO26n을 네 개의 COCO8 검증 이미지에 대해 IoU 0.50 기준으로 평가했을 때, conf 값을 0.10에서 0.25로 높이자 사람 클래스의 보간 정밀도/재현율은 0.63/0.80에서 1.00/0.54로 바뀌었으며, 오탐은 줄었지만 사람을 놓치는 경우는 늘었습니다.
별도의 테스트 데이터를 평가할 때는 선택한 임계값을 고정합니다.
Python에서 정밀도-재현율 곡선 그리기#
이 예제에서는 번들 이미지와 로지스틱 회귀를 사용해 손으로 쓴 숫자 9를 다른 숫자와 구분합니다. pip install scikit-learn matplotlib로 종속 항목을 설치한 다음 scikit-learn의 정밀도-재현율 그래프 API를 사용합니다.
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import PrecisionRecallDisplay
from sklearn.model_selection import train_test_split
X, digits = load_digits(return_X_y=True)
y = digits == 9
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=42)
model = LogisticRegression(max_iter=2000)
model.fit(X_train, y_train)
PrecisionRecallDisplay.from_estimator(model, X_test, y_test)
plt.savefig("precision_recall_curve.png", bbox_inches="tight")저장된 그래프는 홀드아웃 숫자 이미지에 대해 달성 가능한 각 재현율 수준에서의 정밀도를 보여줍니다.
객체 검출과 평균 정밀도#
객체 검출에서 예측된 바운딩 박스는 동일 클래스의 주석 객체 중 아직 매칭되지 않은 객체와 교집합 대비 합집합(IoU) 임계값 이상으로 매칭되면 참양성으로 간주됩니다. 중복을 포함해 매칭되지 않은 예측은 거짓양성으로 간주됩니다. 각 클래스에는 IoU 조건을 고정한 별도의 곡선이 있습니다.
평균 정밀도(AP)는 재현율 수준 전반에 걸쳐 곡선을 요약합니다. 사다리꼴 방식의 PR-AUC와 비보간 AP는 서로 다른 적분 규칙을 사용합니다. 평균 정밀도(mAP)는 클래스별 AP 값을 평균합니다. 검출 성능 지표에서 mAP50은 IoU 0.50을 사용하며, mAP50–95는 0.50부터 0.95까지 0.05 간격으로 설정된 10개 IoU 임계값에 대한 평균입니다.










