정확도와 희소 양성 탐지 성능의 불일치
메일 10,000개 중 스팸이 100개라고 합시다. 모든 메일을 정상으로 통과시키면 9,900개를 맞혀 정확도는 99%입니다. 하지만 찾으려던 스팸은 한 개도 잡지 못합니다. 높은 정확도가 목적 달성을 뜻하지 않는 작은 반례입니다.
이 노트에서는 스팸을 양성, 정상 메일을 음성으로 정합니다. 어떤 지표를 고를지보다 먼저 무엇을 놓치는 것이 비싸고 무엇을 잘못 차단하는 것이 비싼지 정해야 합니다. 아래 숫자는 실제 서비스 결과가 아니라 계산용 예제입니다.
분류 모델은 점수를 내놓고, 운영 정책은 그 점수를 임계값과 검토 용량에 따라 행동으로 바꿉니다. 따라서 지표를 읽을 때는 혼동 행렬의 분모를 확인한 뒤 양성 비율, 오류 비용, 사람 검토량이 실제 선택을 어떻게 바꾸는지 함께 계산해야 합니다.
임계값을 비교할 때는 먼저 점수별 사례를 정렬하고 각 경계에서 TP·FP·FN·TN을 다시 셉니다. 예를 들어 검토 구간에 1,000건이 들어오는데 하루 처리 용량이 200건이면 재현율 개선만으로 정책을 승인할 수 없습니다. 해당 경계에서 자동 차단의 정밀도 하한, 검토 대기시간, 초과 800건의 처리 규칙을 함께 적어야 합니다. 연습에서는 양성 비율을 1%에서 10%로 바꾸되 recall과 false-positive rate를 고정해 정밀도를 계산하고, 실제 배포에서는 그 두 조건부 비율도 변할 수 있다는 한계를 결과 옆에 표시합니다.
혼동 행렬의 TP·FP·FN·TN 집계
모델이 170개를 스팸으로 분류했는데 실제 스팸은 80개이고 정상 메일이 90개 섞였다고 하겠습니다.
| 실제 상태 | 스팸으로 예측 | 정상으로 예측 | 전체 |
|---|---|---|---|
| 실제 스팸 | TP=80 | FN=20 | 100 |
| 실제 정상 | FP=90 | TN=9810 | 9900 |
| 예측 전체 | 170 | 9830 | 10000 |
TP는 찾은 양성, FN은 놓친 양성, FP는 잘못 잡은 음성, TN은 정상 통과시킨 음성입니다. 정밀도는 “잡았다고 한 것 중 얼마나 진짜인가”, 재현율은 “실제로 있는 것 중 얼마나 찾았는가”를 묻습니다.
accuracy = (TP + TN) / N = 9890 / 10000 = 98.9%
precision = TP / (TP + FP) = 80 / 170 ≈ 47.1%
recall = TP / (TP + FN) = 80 / 100 = 80%
F1 = 2*TP / (2*TP + FP + FN) = 160 / 270 ≈ 59.3%
모두 정상으로 통과시키는 기준 모델보다 정확도는 0.1%p 낮지만 스팸의 80%를 찾습니다. 반면 차단한 것의 절반 이상이 정상이라면 실제 사용자 피해가 클 수 있습니다. 어느 모델이 더 좋은지는 정확도나 F1 하나로 결정되지 않습니다. 분모가 0인 경우 지표를 0 또는 미정의로 처리할지 평가 도구의 규칙도 확인해야 합니다.
모델 점수와 실행 행동의 분리
그림을 글로 읽기
- 분류 모델: 메일별 점수 반환
- 판정 정책: 낮은 점수: 통과 · 중간 점수: 사람 검토 · 높은 점수: 차단 후보
- 실제 결과 평가: 오탐 · 미탐 · 검토량 · 지연과 사용자 피해
- 분류 모델 → 판정 정책: 점수
- 판정 정책 → 실제 결과 평가: 선택한 행동
같은 데이터와 점수에서 임계값 비교 규칙을 고정하고 양성 임계값을 낮추면, 양성으로 분류되는 사례 집합이 기존 집합을 포함하며 커집니다. 새로 포함된 사례가 실제 양성이면 TP와 재현율 분자가 늘고, 정상이면 FP가 늘어 정밀도가 낮아질 수 있으므로 재현율은 내려가지 않아도 정밀도가 어느 방향으로 움직일지는 미리 보장할 수 없습니다. 낮은 점수 구간에 실제 양성이 얼마나 들어 있는지 계산해 임계값을 비교해야 합니다.
임계값 후보 하나를 정하면 모든 사례의 점수를 그 경계와 비교해 TP·FP·FN·TN을 다시 세고, 그중 사람 검토 구간으로 보낸 건수도 별도로 셉니다. 하루에 200건만 검토할 수 있는데 1,000건이 검토 구간에 들어오면 관련 지표가 좋아 보여도 대기열이 넘치므로 그 후보를 운영 정책으로 채택할 수 없습니다. 그래서 자동 차단은 정밀도 하한, 양성 누락 범위, 검토 대기시간, 200건을 넘겼을 때의 초과 처리 규칙까지 한 표에서 비교해 정합니다.
양성 비율 변화와 정밀도
위 모델의 재현율은 80/100=80%, 거짓 양성률은 실제 정상 9,900개 중 90개를 잘못 잡은 90/9900≈0.909%입니다. 이 두 조건부 비율이 그대로 유지된다는 가정에서 스팸 비율만 10%인 가상 데이터 10,000개를 만들면 실제 스팸 1,000개, 정상 9,000개이므로 예상 TP는 0.8×1,000=800, FP는 0.00909×9,000≈81.8입니다. 따라서 예상 정밀도는 800/(800+81.8)≈90.7%이며, 모델의 조건부 오류율을 고정한 채 양성 비율만 바꾼 계산 결과입니다.
precision = recall * prevalence /
(recall * prevalence + falsePositiveRate * (1-prevalence))
이 계산은 조건부 오류율이 유지된다는 가정 아래의 기대값입니다. 실제 배포에서는 입력과 라벨 정의까지 달라져 재현율·거짓 양성률도 변할 수 있습니다. “모델을 바꾸지 않았는데 정밀도가 변했다”면 모델 코드만 아니라 양성 비율·사용자 집단·시간대·라벨 지연을 함께 살펴야 합니다.
PR·ROC 곡선과 확률 보정의 평가 차이
PR 곡선은 여러 임계값의 정밀도와 재현율을 보여 줍니다. ROC 곡선은 참양성률과 거짓 양성률을 비교합니다. 음성이 매우 많으면 작은 거짓 양성률도 큰 검토량을 만들므로 실제 판정점의 FP 개수를 함께 봐야 합니다. 곡선 아래 면적이 높다고 특정 검토 예산에서 가장 좋다고 단정하지 않습니다.
점수 0.9인 사례 중 실제 양성이 약 90%인지 묻는 것은 확률 보정(calibration)입니다. 순위가 좋다는 사실과 점수를 확률로 읽어도 된다는 사실은 다릅니다. 점수를 사람이 읽는 위험도로 쓰거나 비용 계산에 넣으려면 보정도 평가해야 합니다.
훈련·검증·테스트 데이터의 역할 분리
훈련 데이터로 모델을 학습하고, 검증 데이터로 임계값과 보정 방법을 고른 뒤, 테스트에서는 고정한 정책을 평가합니다. 테스트 점수를 보며 임계값을 계속 바꾸면 테스트가 다시 검증 세트 역할을 하므로 최종 일반화 추정이 낙관적으로 됩니다.
| 확인 | 필요한 분리 | 놓치기 쉬운 오류 |
|---|---|---|
| 사용자 일반화 | 같은 사용자의 중복 자료 분리 | 같은 메일 변형이 양쪽에 존재 |
| 미래 성능 | 시간 순서와 미래 holdout | 미래 정보가 특징에 포함 |
| 희소 양성의 불확실성 | 양성 표본 수와 구간 추정 | 양성 몇 개의 변동을 큰 개선으로 해석 |
| 운영 검토량 | 실제 도착량과 정책 구간 | 비율만 보고 인력 초과 누락 |
임계값별 지표 계산과 라이브러리 대조
작은 정답·점수 배열에서 임계값별로 네 칸을 직접 세고 라이브러리 결과와 비교합니다. 모든 음성 예측, 모든 양성 예측, 양성이 없는 세트, 동점 점수와 임계값 경계를 포함합니다. score >= threshold인지 >인지도 명시합니다.
운영에서는 양성 비율과 라벨 확정 지연을 기록하고 자동 차단·검토·통과 각각의 결과를 따로 봅니다. 사람이 검토한 사례에만 라벨이 생기면 평가 표본이 선택 편향을 가질 수 있습니다. 필요한 표본 수집을 설계하지 않은 채 검토된 사례의 정확도를 전체 성능으로 보고하지 않아야 합니다.