Precision
정밀도는 양성 예측 중 정답의 비율입니다: TP / (TP + FP). 유병률이 정밀도에 미치는 영향, 검출기의 정밀도 계산 방식 및 정밀도를 높이는 방법을 살펴봅니다.
정밀도는 모델의 양성 예측 중 정확한 예측의 비율입니다. "모델이 긍정이라고 판단할 때 실제로 맞는 경우는 얼마나 되는가?"라는 질문에 답하며, 참 양성을 전체 양성 예측으로 나누어 계산합니다. 정밀도 = TP / (TP + FP)이며, 여기서 거짓 양성(FP)은 모델이 잘못 양성으로 표시한 음성 사례입니다. 정밀도는 0~1의 값을 가지므로 정밀도 0.95는 경보 20건 중 1건이 오경보임을 뜻합니다. 양성 예측도(PPV)는 의학에서 사용하는 동의어이며, 거짓 발견률은 1에서 정밀도를 뺀 값입니다. 스팸 필터가 실제 이메일을 숨기거나, 검사 시스템이 양품을 폐기하거나, 보안 카메라가 그림자를 보고 경비원을 호출하는 것처럼 오경보의 비용이 큰 경우 정밀도가 특히 중요합니다.
정밀도 계산 방법#
정밀도는 혼동 행렬의 두 셀, 즉 전체 양성 예측을 구성하는 참 양성과 거짓 양성을 사용합니다. 누락된 양성은 공식에 포함되지 않으므로, 가장 확신이 높은 사례 하나만 표시하는 모델은 거의 아무것도 찾지 못하면서도 정밀도 1.0을 기록할 수 있습니다. 따라서 정밀도는 이러한 누락에 정확히 페널티를 부과하는 재현율(TP / (TP + FN))과 함께 보고하며, F1 점수는 두 지표를 하나의 값으로 결합합니다. 모델이 양성 예측을 전혀 하지 않으면 정밀도는 0 / 0으로 정의되지 않으며, scikit-learn 같은 라이브러리는 경고와 함께 이를 0으로 보고합니다.
클래스가 두 개보다 많으면 해당 클래스를 양성, 나머지 모든 클래스를 음성으로 간주하여 클래스별 정밀도를 계산한 뒤 평균을 구합니다. 매크로 정밀도는 모든 클래스에 동일한 가중치를 부여하며, 단일 레이블 다중 클래스 작업에서는 마이크로 평균 정밀도가 정확도와 같습니다.
정밀도와 유병률의 관계#
재현율과 특이도는 모델이 양성과 음성을 각각 어떻게 처리하는지 나타내므로 양성 사례가 드물어져도 그대로 유지됩니다. 정밀도는 두 그룹을 결합하므로 유병률이 낮아질수록 감소합니다. 같은 거짓 양성률을 더 많은 음성 사례에 적용하면 참 검출 하나당 오경보가 늘어나기 때문입니다. 아래 scikit-learn 스크립트는 두 가지 유병률에서 하나의 선별 모델을 평가합니다:
import numpy as np
from sklearn.metrics import accuracy_score, precision_score, recall_score
# One screening model at two prevalences: it finds 90% of positives and flags 1% of negatives
for positives in (1000, 100):
negatives = 10_000 - positives
tp, fp = int(0.9 * positives), int(0.01 * negatives)
counts = [tp, positives - tp, fp, negatives - fp] # TP, FN, FP, TN
# Rebuild labels and predictions for 10,000 cases from the confusion-matrix counts
y_true = np.repeat([1, 1, 0, 0], counts)
y_pred = np.repeat([1, 0, 1, 0], counts)
accuracy = accuracy_score(y_true, y_pred)
recall = recall_score(y_true, y_pred)
precision = precision_score(y_true, y_pred)
print(f"{positives} positives: accuracy {accuracy:.3f}, recall {recall:.2f}, precision {precision:.2f}")사례 10,000건 중 양성이 1,000건일 때 모델의 정밀도는 0.91입니다. 양성이 100건이면 재현율은 여전히 0.90이고 정확도는 오히려 0.989로 상승하지만, 참 검출 90건과 함께 오경보 99건이 발생하여 정밀도는 0.48로 떨어집니다. 따라서 균형 잡힌 테스트 세트에서 측정한 정밀도는 배포 후 희귀 질환 선별 검사처럼 양성 사례가 더 드문 환경에서 모델이 보일 정밀도를 과대평가합니다.
객체 검출에서의 정밀도#
객체 검출에서는 신뢰도 임계값보다 높은 모든 예측 박스가 양성 예측입니다. 예측은 신뢰도가 높은 순서대로 매칭하며, 박스는 동일 클래스의 레이블이 지정된 객체와 교집합 대비 합집합(IoU)이 임계값 이상으로 겹치고 해당 객체를 더 높은 점수의 박스가 이미 차지하지 않은 경우에만 참 양성입니다. 배경을 가리키는 박스, 클래스가 잘못된 박스, 위치가 부정확한 박스, 이미 매칭된 객체를 중복으로 가리키는 박스는 모두 거짓 양성으로 계산됩니다.
신뢰도 임계값을 높이면 점수가 낮은 박스가 제거되며, 이 박스는 잘못된 경우가 더 많으므로 정밀도는 보통 재현율이 낮아지는 대신 높아집니다. 모든 임계값에서 정밀도를 재현율에 대해 그리면 정밀도-재현율 곡선이 만들어지며, 곡선 아래 면적은 평균 정밀도(AP)입니다. 평균 정밀도(mAP)는 클래스별 AP를 평균하고, mAP50-95는 10개의 IoU 임계값에 대해서도 평균합니다. YOLO26 검증은 모든 신뢰도 임계값에서 클래스별 정밀도를 BoxP_curve.png로 저장하고, 평균 F1이 최고점에 도달하는 신뢰도에서의 정밀도(P)를 재현율 및 mAP와 함께 보고합니다.
정밀도 개선 방법#
- 신뢰도 임계값 높이기: 가장 빠른 해결책이지만 재현율이 낮아지는 대가가 따릅니다.
- 어려운 음성 예시 추가: 오경보를 유발하는 유사 객체와 빈 장면을 학습 데이터에 추가하여 모델이 무엇을 표시하지 않아야 하는지 학습하게 합니다. 가장 혼동을 일으키는 음성 예시를 선택하는 방법을 어려운 음성 마이닝이라고 합니다.
- 누락된 레이블 수정: 주석 작업자가 놓친 객체를 올바르게 탐지해도 거짓 양성으로 계산되므로, 불완전한 정답 레이블은 실제보다 정밀도가 낮아 보이게 합니다.
- 혼동되는 클래스를 분리합니다: 혼동 행렬은 모델이 어떤 클래스를 혼동하는지 보여주며, 해당 클래스 쌍의 예시를 추가하거나 클래스 정의를 더 명확히 하면 잘못된 클래스의 거짓 양성을 제거할 수 있습니다.
정밀도와 관련 용어의 비교#
- 재현율: 모델이 찾아낸 실제 양성의 비율로, TP / (TP + FN)입니다. 재현율은 놓친 항목을 계산하고, 정밀도는 오탐을 계산합니다.
- 특이도: 올바르게 음성으로 판정된 실제 음성의 비율로, TN / (TN + FP)입니다. 스크리닝 스크립트에서 보듯이 양성이 드문 경우 특이도가 0.99여도 정밀도는 0.5 미만일 수 있습니다.
- 정확도: 전체 예측 중 올바른 예측의 비율이며, 클래스 불균형 데이터에서는 다수 클래스의 영향을 크게 받습니다.
- 수치 정밀도: 각 값을 저장하는 데 사용하는 비트 수(예: 32비트 또는 16비트 부동소수점)를 뜻하며, 같은 단어의 다른 의미와는 무관합니다.
- 측정에서의 정밀도: 반복 측정값이 서로 얼마나 일치하는지를 나타내며, 정확도는 측정값이 실제 값에 얼마나 가까운지를 나타냅니다. 항상 2 kg 무겁게 표시하는 저울은 정밀하지만 정확하지 않습니다.










