콘텐츠로 이동

분류 성능 지표

분류 성능 지표는 정답 라벨과 모델의 예측을 비교해 이진 분류기가 얼마나 잘 작동하는지 재는 통계 지표입니다. 각 관측치의 실제 클래스와 예측 클래스 또는 예측 점수를 입력받아, 정확도, 정밀도, 재현율 같은 숫자나 ROC·PR 곡선을 출력합니다.

같은 모델도 어떤 오류를 더 중요하게 보는지에 따라 평가가 달라집니다. 놓친 양성이 치명적이면 재현율을, 잘못 내린 양성 판정이 비싸면 정밀도를 먼저 봅니다. 따라서 지표를 고르는 일은 계산 문제가 아니라 거짓 양성과 거짓 음성의 비용을 정하는 문제입니다.

점수 10개를 양성과 음성으로 나누기

섹션 제목: “점수 10개를 양성과 음성으로 나누기”

API 요청 10개에 장애 가능성 점수를 매기고, 점수가 55 이상이면 장애라고 예측한다고 해봅시다. 아래 값은 개념 설명을 위한 가상 데이터입니다.

data = [
{"score": 42, "actual": "normal"},
{"score": 48, "actual": "incident"},
{"score": 50, "actual": "normal"},
{"score": 53, "actual": "normal"},
{"score": 57, "actual": "normal"},
{"score": 58, "actual": "incident"},
{"score": 62, "actual": "normal"},
{"score": 65, "actual": "incident"},
{"score": 72, "actual": "incident"},
{"score": 80, "actual": "incident"},
]

장애가 양성(positive), 정상 요청이 음성(negative)입니다. 양성과 음성은 좋고 나쁨을 뜻하지 않습니다. 탐지하려는 대상을 양성이라고 부르는 표기입니다.

임계값을 55로 두면 네 가지 결과가 나옵니다.

실제예측이름이 데이터의 개수
장애장애TP, true positive4
정상장애FP, false positive2
장애정상FN, false negative1
정상정상TN, true negative3

이 네 수를 2×2 표로 묶은 것이 혼동행렬(confusion matrix)입니다. 행과 열의 방향은 라이브러리마다 다를 수 있으므로 표를 볼 때 축 라벨을 먼저 확인합니다.

같은 네 숫자가 서로 다른 질문에 답한다

섹션 제목: “같은 네 숫자가 서로 다른 질문에 답한다”

정확도: 전체에서 얼마나 맞혔나

섹션 제목: “정확도: 전체에서 얼마나 맞혔나”
Accuracy=TP+TNTP+FP+FN+TN=4+310=0.70\text{Accuracy} = \frac{TP+TN}{TP+FP+FN+TN} = \frac{4+3}{10} = 0.70

정확도(accuracy)는 전체 예측 가운데 맞힌 비율입니다. 양성과 음성의 수가 비슷하고 두 오류의 비용도 비슷할 때 빠른 요약으로 쓸 수 있습니다.

하지만 양성이 드물면 정확도가 성능을 과장합니다. 거래 10,000건 가운데 사기가 100건일 때 모든 거래를 정상이라고 예측하면 사기를 하나도 잡지 못해도 정확도는 99%입니다. 클래스 비율이 크게 기울어진 데이터에서는 정확도 하나만 보고 모델을 고르지 않습니다.

정밀도: 양성이라고 한 것 중 얼마나 맞았나

섹션 제목: “정밀도: 양성이라고 한 것 중 얼마나 맞았나”
Precision=TPTP+FP=44+2=0.667\text{Precision} = \frac{TP}{TP+FP} = \frac{4}{4+2} = 0.667

정밀도(precision)는 양성으로 예측한 항목 가운데 실제 양성의 비율입니다. 양성 예측을 얼마나 믿을 수 있는지 묻습니다. 의학에서는 양성 예측도(positive predictive value, PPV)라고도 부릅니다.

FP가 비싼 문제에서 중요합니다. 정상 메일을 스팸함으로 보내거나 정상 계좌를 동결하는 시스템은 양성 판정 자체가 큰 조치로 이어지므로 높은 정밀도가 필요합니다.

재현율: 실제 양성을 얼마나 놓치지 않았나

섹션 제목: “재현율: 실제 양성을 얼마나 놓치지 않았나”
Recall=TPTP+FN=44+1=0.800\text{Recall} = \frac{TP}{TP+FN} = \frac{4}{4+1} = 0.800

재현율(recall)은 실제 양성 가운데 양성으로 찾아낸 비율입니다. 민감도(sensitivity)와 참양성률(true positive rate, TPR)은 같은 계산을 가리키는 이름입니다.

FN이 비싼 문제에서 중요합니다. 질환 스크리닝이나 보안 침입 탐지의 1차 단계는 의심 대상을 넓게 찾아 다음 검사로 넘겨야 하므로 재현율을 우선하는 경우가 많습니다.

F1: 정밀도와 재현율을 한 숫자로 묶기

섹션 제목: “F1: 정밀도와 재현율을 한 숫자로 묶기”
F1=2PrecisionRecallPrecision+Recall=2TP2TP+FP+FN=811=0.727\text{F1} = \frac{2 \cdot \text{Precision} \cdot \text{Recall}} {\text{Precision}+\text{Recall}} = \frac{2TP}{2TP+FP+FN} = \frac{8}{11} = 0.727

F1은 정밀도와 재현율의 조화평균입니다. 둘 중 낮은 값에 크게 끌려 내려가므로 한쪽만 높인 모델을 좋은 모델로 평가하지 않습니다.

F1은 TN을 식에 넣지 않고 FP와 FN을 같은 무게로 다룹니다. 음성을 맞히는 능력도 중요하거나 두 오류의 비용이 다르면 F1 하나로 결론 내리지 않습니다. 재현율에 더 큰 무게를 주는 FβF_\beta 같은 변형도 있지만, 실제 비용을 직접 반영한 평가가 가능하면 그쪽이 더 분명합니다.

특이도와 위양성률: 실제 음성을 얼마나 잘 지켰나

섹션 제목: “특이도와 위양성률: 실제 음성을 얼마나 잘 지켰나”
Specificity=TNTN+FP=33+2=0.600\text{Specificity} = \frac{TN}{TN+FP} = \frac{3}{3+2} = 0.600

특이도(specificity)는 실제 음성 가운데 음성으로 맞힌 비율입니다. 실제 양성을 보는 민감도와 짝을 이룹니다.

FPR=FPFP+TN=1Specificity=0.400\text{FPR} = \frac{FP}{FP+TN} = 1-\text{Specificity} = 0.400

위양성률(false positive rate, FPR)은 실제 음성 가운데 양성으로 잘못 예측한 비율입니다. 정상 사례가 매우 많으면 작은 FPR도 큰 절대 오류 수가 됩니다. 정상 요청이 하루 100만 건인 서비스에서 FPR 1%는 하루 1만 건의 오경보를 뜻합니다.

임계값을 움직이면 지표도 움직인다

섹션 제목: “임계값을 움직이면 지표도 움직인다”

분류 모델은 흔히 각 관측치에 연속적인 점수나 확률을 출력합니다. 이 값을 임계값과 비교해야 최종 양성·음성 예측이 생깁니다.

임계값을 낮추면 더 많은 항목을 양성으로 보냅니다. 대체로 FN이 줄어 재현율은 오르지만 FP가 늘어 정밀도가 낮아집니다. 임계값을 높이면 반대 방향으로 움직입니다. 실제 데이터에서는 정밀도가 매 단계 단조롭게 변하지 않을 수 있지만, 두 오류 사이의 선택은 남습니다.

아래 탐색기의 첫 탭에서 임계값을 바꿔 보세요. 55와 59는 정확도가 모두 0.70이지만, 55에서는 정밀도 0.667·재현율 0.800이고 59에서는 정밀도 0.750·재현율 0.600입니다. 정확도 하나는 이 차이를 숨깁니다.

임계값은 테스트 데이터에서 가장 좋아 보이는 값을 골라 같은 테스트 데이터의 최종 성능으로 보고하면 안 됩니다. 임계값 선택에는 별도의 검증 데이터나 교차검증을 사용하고, 마지막 평가는 학습과 선택에 사용하지 않은 데이터에서 수행합니다.

모든 임계값을 훑는 ROC와 PR 곡선

섹션 제목: “모든 임계값을 훑는 ROC와 PR 곡선”

ROC와 PR 곡선은 하나의 임계값만 고정하지 않고 가능한 임계값을 차례로 바꾸며 성능의 궤적을 그립니다. 둘 다 각 관측치의 정답 라벨과 연속적인 예측 점수가 필요합니다. 정답이 없는 데이터에서는 곡선을 계산할 수 없습니다.

ROC(receiver operating characteristic) 곡선은 x축에 FPR, y축에 TPR인 재현율을 둡니다. 왼쪽 위인 (0, 1)이 이상적이고, 무작위 순위의 기대값은 대각선에 가깝습니다.

ROC AUC는 곡선 아래 면적입니다. 임의로 고른 양성 하나가 임의로 고른 음성 하나보다 높은 점수를 받을 확률로도 해석할 수 있습니다. 이 값은 특정 임계값의 정밀도나 실제 운영 오류 수를 알려 주지 않습니다.

PR(precision-recall) 곡선은 x축에 재현율, y축에 정밀도를 둡니다. 양성이 드문 문제에서는 FP가 정밀도를 바로 낮추므로 ROC보다 운영 성능의 약점을 눈에 띄게 보여 줄 수 있습니다. PR 그래프의 무작위 기준선은 고정된 0.5가 아니라 평가 데이터의 양성 비율입니다.

Average precision(AP)은 재현율이 증가한 구간마다 정밀도를 가중해 합산한 요약값입니다. 구현에 따라 PR 곡선을 사다리꼴로 적분한 면적과 AP가 다를 수 있으므로 보고서에는 함수 이름과 라이브러리 버전을 기록합니다.

탐색기의 ROC와 PR 탭에서는 임계값과 클래스 분리도를 따로 움직일 수 있습니다. 임계값은 곡선 위 동작점을 옮기고, 분리도는 양성과 음성의 점수 순서를 바꿔 곡선 자체와 AUC·AP를 바꿉니다.

사례: 변이 후보 필터를 평가한다면

섹션 제목: “사례: 변이 후보 필터를 평가한다면”

종양 변이 탐지 파이프라인이 후보 변이마다 점수를 출력한다고 해봅시다. 검증된 정답 세트가 있다면 실제 변이를 양성, 오류 신호를 음성으로 두고 분류 지표를 계산할 수 있습니다.

혼동행렬 칸변이 탐지에서의 뜻
TP실제 변이를 후보로 남김
FPsequencing 또는 alignment 오류를 후보로 남김
FN실제 변이를 필터에서 놓침
TN오류 신호를 제외함

필터를 완화하면 더 많은 실제 변이를 살릴 가능성이 있지만 오류 후보도 함께 늘 수 있습니다. 다만 정답 세트가 없다면 후보 수가 늘었다는 사실만으로 재현율이 높아졌다고 계산할 수 없습니다. 이 경우에는 임계값에 대한 결과의 민감도, 즉 parameter sensitivity를 조사한 것이며, 분류 지표인 sensitivity와 구분해서 씁니다.

의료 검사에서는 유병률이 달라지면 민감도와 특이도가 같아도 정밀도인 PPV가 달라질 수 있습니다. 연구 데이터에서 양성과 음성을 인위적으로 같은 수로 맞춘 뒤 얻은 정밀도를 실제 환자 집단에 그대로 적용하지 않습니다.

통계 검정의 거짓 양성과는 무엇이 다른가

섹션 제목: “통계 검정의 거짓 양성과는 무엇이 다른가”

분류의 FP는 실제 음성인 관측치를 양성으로 예측한 한 건입니다. 통계 검정에서 거짓 양성 또는 거짓 발견은 실제 효과가 없는 가설을 유의하다고 선택한 결과입니다.

둘 다 잘못된 양성 판단이지만 분모와 제어 대상이 다릅니다. 분류기의 FPR은 FP/(FP+TN)이고, 다중검정의 FDR은 선택한 발견 집합에서 거짓 발견이 차지하는 비율을 장기적으로 제어합니다. p-value와 FDR은 통계적 검정과 다중검정에서 설명합니다.

  • 양성 클래스가 무엇인지, 양성과 음성의 개수
  • 학습·검증·테스트 데이터의 분리 방법
  • 모델이 출력한 값이 확률인지 순위 점수인지
  • 최종 임계값과 그 값을 선택한 데이터
  • 혼동행렬과 정밀도·재현율처럼 의사결정에 직접 연결되는 지표
  • ROC AUC 또는 AP를 계산한 라이브러리, 버전과 평균 방식
  • FP와 FN이 실제로 만드는 비용, 후속 확인 절차