분류기를 만들면 “얼마나 잘 맞히나"를 재야 한다. 그런데 그 ‘잘’을 재는 자가 하나가 아니다. 정확도, 정밀도, 재현율, F1, ROC-AUC, PR-AP… 이름만 봐도 헷갈린다. 이 글은 딱 10개짜리 데이터로 이 모든 걸 한 번에 꿰어 본다. 그리고 결정경계를 직접 움직이며 숫자가 어떻게 반응하는지 손으로 만져 본다.
아주 작은 데이터: 몸무게로 비만 맞히기
몸무게 하나로 비만 여부를 맞히는 분류기를 상상하자. 데이터는 10명이다.
data = [
{"weight": 42, "is_fat": False},
{"weight": 48, "is_fat": True}, # 가벼운데 비만 (키가 작은 경우)
{"weight": 50, "is_fat": False},
{"weight": 53, "is_fat": False},
{"weight": 57, "is_fat": False}, # 무거운데 정상 (키가 큰 경우)
{"weight": 58, "is_fat": True},
{"weight": 62, "is_fat": False}, # 무거운데 정상
{"weight": 65, "is_fat": True},
{"weight": 72, "is_fat": True},
{"weight": 80, "is_fat": True},
]
비만이 5명(양성, positive), 정상이 5명(음성, negative). 분류기는 단순하다. “몸무게가 임계값 $\theta$ 이상이면 비만이라고 예측한다.”
$$\hat y = \begin{cases} \text{비만(양성)} & \text{if } w \ge \theta \\ \text{정상(음성)} & \text{if } w < \theta \end{cases}$$여기엔 함정이 하나 심겨 있다. 몸무게는 키라는 숨은 변수에 오염돼 있다. 48kg인데 비만인 사람(키가 작음)이 있고, 57·62kg인데 정상인 사람(키가 큼)이 있다. 그래서 몸무게만으로는 어떤 임계값을 골라도 완벽하게 가를 수 없다. 바로 이 겹침이 모든 메트릭 이야기의 출발점이다.
혼동행렬: 맞고 틀림을 네 칸으로
임계값을 $\theta = 55$로 잡아 보자. 55kg 이상이면 비만이라고 예측한다. 각 사람의 예측을 실제와 대조하면 네 가지 경우가 나온다.
- TP (True Positive): 비만인데 비만이라 예측 → 58, 65, 72, 80 (4명)
- FP (False Positive): 정상인데 비만이라 예측 → 57, 62 (2명), 무거운데 키 큰 사람
- FN (False Negative): 비만인데 정상이라 예측 → 48 (1명), 가벼운데 키 작은 사람
- TN (True Negative): 정상인데 정상이라 예측 → 42, 50, 53 (3명)
이 넷을 2×2 표로 그린 게 혼동행렬(confusion matrix)이다.
초록·파랑 계열(TP·TN)이 맞힌 것, 노랑·빨강 계열(FN·FP)이 틀린 것이다. 모든 메트릭은 이 네 숫자의 조합일 뿐이다. 색은 이 글 전체에서 같은 의미로 쓴다.
메트릭: 같은 네 숫자, 다른 질문
혼동행렬의 네 숫자로 서로 다른 질문에 답한다. 각 수식 오른쪽의 작은 사각형은 위 혼동행렬을 축소한 것으로, 분자·분모에 들어가는 칸에만 불이 켜져 있다, 어떤 메트릭이 행렬의 어느 부분을 보는지 한눈에 드러난다.
정확도(Accuracy)
전체 중 몇 개나 맞혔나.
언제 유용한가, 클래스 비율이 비슷하고 FP·FN의 비용도 비슷할 때의 빠른 요약. 균형 잡힌 벤치마크(MNIST 등)의 리더보드 숫자가 대표적이다.
반대로 불균형 데이터에선 무의미해진다. 사기 거래 탐지를 생각해 보자. 거래 10,000건 중 사기는 100건(1%)이다. 여기에 아무 일도 안 하는 모델, 뭐가 들어오든 “정상"이라고 찍는 모델, 을 넣으면 어떻게 될까. 사기 100건을 전부 놓치지만(FN=100), 나머지 9,900건은 전부 맞힌다(TN=9,900). 정확도는 $\frac{0+9900}{10000} = 99\%$. 단 한 건의 사기도 못 잡는 모델이 99점을 받는다. 모델이 잘해서가 아니라 음성이 압도적으로 많아서 생기는 착시다. 이때 재현율을 보면 $\frac{0}{0+100} = 0$으로 정체가 바로 드러난다, 불균형 데이터에서 정확도 대신 정밀도·재현율을 봐야 하는 이유다.
정밀도(Precision)
비만이라 예측한 것 중 진짜 비만은 몇 %인가. (예측의 신뢰도) 분모가 행렬의 왼쪽 열(비만 예측)이다.
언제 유용한가, 잘못 울린 경보(FP)가 비쌀 때. 스팸 필터를 생각해 보자. 스팸이라 판정된 메일은 스팸함으로 사라진다. 필터가 하루 20통을 스팸이라 판정했고 그중 18통이 진짜 스팸이면 정밀도 90%, 문제는 나머지 2통이다. 거래처 계약서나 면접 안내가 스팸함에 묻히면 그건 성가심이 아니라 사고다. 스팸 몇 통이 받은편지함에 남는 것(재현율 손해)은 지우면 그만이니, 스팸 필터는 재현율을 조금 포기하고 정밀도를 끌어올리는 쪽을 택한다. 자동 제재·차단, 계좌 동결, 콘텐츠 자동 삭제처럼 “양성 판정이 곧 조치"인 시스템은 전부 같은 구조다, 조치가 무거울수록 정밀도가 앞선다.
재현율(Recall)
진짜 비만 중 몇 %를 잡아냈나. (놓치지 않는 능력) 분모가 행렬의 윗행(실제 비만)이다.
언제 유용한가, 놓친 것(FN)이 비쌀 때. 암 스크리닝을 생각해 보자. 검진자 1,000명 중 실제 환자가 10명이다. 여기서 FP의 비용은 “재검사 한 번”, 며칠 불안하고 비용이 좀 들지만 회복된다. FN의 비용은 “암을 놓쳐 발견이 1년 늦어짐”, 회복이 안 될 수 있다. 두 실수의 무게가 이렇게 다르면, 애매한 케이스는 일단 양성으로 보내서 재현율을 끌어올리는 게 맞다. 정밀도가 떨어져 재검사가 늘어나는 건 감수한다. 그래서 실무에선 2단계 패턴을 자주 쓴다: 1차 스크리닝은 재현율을 최대로 잡아 넓게 건지고, 걸린 것만 2차(정밀 검사·사람 검토)에서 거른다. 보안 침입 탐지, 유해 콘텐츠 모더레이션도 똑같은 구조다.
F1
정밀도와 재현율의 조화평균. 둘의 균형. 네 칸으로 풀면 $2TP/(2TP+FP+FN)$과 같다.
언제 유용한가, 정밀도·재현율을 하나의 숫자로 비교해야 할 때. 두 모델을 놓고 골라야 한다고 하자. 모델 A는 확실한 것만 찍는 겁쟁이라 정밀도 1.0에 재현율 0.1, 모델 B는 정밀도 0.6에 재현율 0.7이다. 산술평균으로는 A가 0.55, B가 0.65로 그럭저럭 비교되는 듯하지만, 조화평균인 F1로 재면 A는 $\frac{2 \cdot 1.0 \cdot 0.1}{1.1} = 0.18$, B는 $0.65$다. 조화평균은 낮은 쪽에 끌려 내려간다, 한쪽 지표를 포기한 꼼수 모델이 좋은 점수를 못 받게 만드는 장치다. 그래서 모델 선택, 하이퍼파라미터 튜닝, 불균형 데이터 리더보드의 단일 지표로 쓰인다. FP·FN의 비용이 다르면 가중 버전 $F_\beta$를 쓴다, $F_2$는 재현율을 4배 무겁게 쳐준다.
특이도(Specificity)
진짜 정상 중 몇 %를 정상이라 맞혔나. 분모가 아랫행(실제 정상)이다.
언제 유용한가, 의료·검사 분야에서 민감도(=재현율)와 쌍으로 쓰는 표준 지표다. 코로나 검사를 떠올려 보자. 1차인 신속항원검사는 민감도를 우선한다, 감염자를 놓치면 퍼지니까, 애매하면 양성으로 넓게 잡는다. 양성이 나오면 2차로 PCR을 돌리는데, 이번엔 특이도가 높은 검사다, 확진 판정은 격리·치료라는 큰 처치로 이어지므로, 멀쩡한 사람을 양성으로 잘못 몰면 안 된다. 민감도가 “환자를 놓치지 않는 능력"이라면 **특이도는 “건강한 사람을 건드리지 않는 능력”**이다. 의료 논문이 검사 성능을 늘 민감도·특이도 쌍으로 표기하는 이유가 이것이다.
위양성률(FPR)
진짜 정상 중 몇 %를 비만이라 잘못 불렀나. $1 - \text{특이도}$.
언제 유용한가, 뒤에 나올 ROC 커브의 x축이자, 운영 관점의 “오경보율"이다. 하루 로그인 100만 건을 처리하는 서비스의 이상 로그인 탐지를 생각해 보자. FPR이 겨우 1%라 해도, 정상 로그인이 대부분이니 매일 1만 명의 멀쩡한 유저가 차단당하거나 추가 인증에 시달린다. 고객센터가 마비된다. 비율로는 작아 보여도 음성의 절대량이 크면 오경보의 절대 수가 어마어마해지는 것이다. 그래서 대규모 운영 시스템은 임계값을 거꾸로 정한다, 먼저 “FPR ≤ 0.1%“처럼 감당 가능한 오경보 예산을 정하고, 그 예산 안에서 재현율을 최대화하는 지점을 고른다. 다음 섹션의 ROC 커브가 정확히 이 트레이드오프의 지도다.
공통 원리는 하나다. 무엇을 볼지는 틀렸을 때의 비용이 정한다. FP가 비싸면 정밀도, FN이 비싸면 재현율, 둘 다 포기 못 하면 F1, 그리고 그 비용 구조는 데이터가 아니라 제품과 도메인이 정한다.
직접 옮겨 보기: 경계가 움직이면 모든 게 바뀐다
여기가 핵심이다. 임계값 $\theta$는 우리가 고르는 것이고, 그 값 하나가 혼동행렬 전체를, 그리고 모든 메트릭을 동시에 흔든다. 아래에서 경계선을 직접 드래그하거나 슬라이더로 옮겨 보자.
경계를 왼쪽으로 밀면 더 많은 사람을 비만이라 예측한다. 놓치는 비만(FN)이 줄어 재현율은 오르지만, 정상을 비만이라 부르는 실수(FP)가 늘어 정밀도는 떨어진다. 오른쪽으로 밀면 정반대다. 재현율과 정밀도는 이렇게 시소를 탄다.
주목할 두 지점이 있다.
- $\theta = 55$와 $\theta = 59$는 정확도가 똑같이 0.70이다. 하지만 55에서는 (정밀도 0.67, 재현율 0.80), 59에서는 (정밀도 0.75, 재현율 0.60)이다. 정확도라는 숫자 하나는 이 완전히 다른 두 동작을 구분하지 못한다.
- $\theta = 63$이면 정확도가 0.80으로 가장 높고 정밀도는 1.0(오예측 0)이지만, 재현율은 0.60이다. 48·58kg 비만 두 명을 놓친다. “가장 정확한” 경계가 “가장 안 놓치는” 경계는 아니다.
정확도만 보면 속는 이유가 이것이다. 특히 양성이 드문(불균형) 데이터에선 전부 음성이라 찍어도 정확도가 높게 나온다. 정밀도와 재현율을 함께 봐야 실체가 보인다.
실전에선 임계값이 확률이 된다: 시그모이드와 0.5
지금까지 임계값은 “55kg” 같은 몸무게였다. 그런데 실전 분류기, 로지스틱 회귀든 신경망이든, 는 보통 원시 특징을 그대로 자르지 않는다. 학습된 점수 $z$를 계산한 뒤, 마지막에 시그모이드로 $(0,1)$ 사이 확률로 눌러 담는다.
$$p = \sigma(z) = \frac{1}{1+e^{-z}}, \qquad \hat y = \begin{cases} \text{양성} & p \ge 0.5 \\ \text{음성} & p < 0.5 \end{cases}$$익숙한 “확률 0.5 이상이면 양성” 규칙이다. 왜 하필 0.5일까. $\sigma(z) \ge 0.5 \Leftrightarrow z \ge 0$, 즉 모델이 양성과 음성을 정확히 반반으로 보는 지점이다. 여기엔 FP와 FN의 비용이 같다는 가정이 조용히 숨어 있다.
우리 장난감도 똑같이 만들 수 있다. 10명 데이터에 로지스틱 회귀를 피팅하면 몸무게가 비만 확률로 바뀐다.
$$p(w) = \sigma\big(0.137\,(w - 58.2)\big)$$58.2kg에서 확률이 정확히 0.5가 되고, 몸무게가 커질수록 확률이 단조롭게 오른다 (42kg → 0.10, 58kg → 0.49, 80kg → 0.95). 그리고 여기서 핵심이 나온다. 시그모이드는 단조증가 함수라서 “55kg 이상이면 양성"과 “$p(w) \ge 0.39$면 양성"은 정확히 같은 결정이다. kg 슬라이더와 확률 슬라이더는 같은 손잡이의 다른 눈금일 뿐이다. 단조변환은 데이터의 순서를 바꾸지 않으니, 어느 눈금으로 훑든 동작점의 궤적, 뒤에 나올 ROC·PR 곡선, 도 완전히 동일하다. 위 위젯의 슬라이더 옆에 이 확률 환산값 (≈ p ≥ ...)을 함께 표시해 뒀다.
그래서 실무에서 “임계값을 튜닝하라"는 말은 곧 “0.5를 의심하라"는 말이다. 암 스크리닝은 0.5 대신 0.2로 내려 재현율을 채우고, 자동 차단 시스템은 0.9로 올려 정밀도를 지킨다. 0.5는 신성한 숫자가 아니라, 비용이 대칭일 때의 기본값일 뿐이다. 그렇다면 임계값을 어디에 두든 좋은 분류기란 무엇인가, 모든 임계값을 훑어보면 된다.
임계값을 하나로 안 정하면: ROC와 PR 커브
그렇다면 임계값을 어디로 정할지 고민하기 전에, 분류기 자체가 얼마나 좋은지를 임계값과 무관하게 평가할 순 없을까. 방법은 간단하다. 가능한 모든 임계값을 쓸어 보며 동작점이 그리는 궤적을 본다.
여기서 전제 하나를 짚고 가자. 이 궤적을 그리려면 정답 라벨이 붙은 평가용 데이터셋이 필요하다. 임계값마다 TP·FP를 세어 점 하나를 찍는 것이므로, 각 샘플에 대해 모델의 점수(확률)와 실제 정답을 둘 다 알고 있어야 한다. 이 글에선 10명 전원이 그 역할을 했지만, 실전에선 학습에 쓰지 않은 테스트셋으로 그려야 한다, 학습 데이터로 그리면 모델이 이미 외운 데이터라 곡선이 낙관적으로 부풀고, 반대로 라벨이 없는 운영 데이터로는 애초에 TP인지 FP인지 판정할 수 없으니 곡선 자체를 그릴 수 없다.
- ROC 커브: 임계값을 훑으며 (위양성률 FPR, 재현율 TPR)을 찍는다. 왼쪽 위 구석(FPR 0, TPR 1)이 완벽. 대각선은 동전 던지기 수준. 곡선 아래 면적이 AUC다.
- PR 커브: (재현율, 정밀도)를 찍는다. 오른쪽 위가 좋다. 아래 면적이 AP(average precision)다.
우리 데이터를 임계값 높은 쪽(무거운 사람만 비만이라 부르는 엄격한 경계)부터 낮은 쪽으로 훑으면 이렇게 움직인다.
| 포함되는 사람 | TP | FP | FPR | TPR(재현율) | 정밀도 |
|---|---|---|---|---|---|
| ~80 | 1 | 0 | 0.0 | 0.2 | 1.00 |
| ~65 | 3 | 0 | 0.0 | 0.6 | 1.00 |
| 62(정상!) | 3 | 1 | 0.2 | 0.6 | 0.75 |
| ~58 | 4 | 1 | 0.2 | 0.8 | 0.80 |
| 57·53·50(정상) | 4 | 4 | 0.8 | 0.8 | 0.50 |
| 48(비만) | 5 | 4 | 0.8 | 1.0 | 0.556 |
| 42(정상) | 5 | 5 | 1.0 | 1.0 | 0.50 |
무거운 사람만 비만이라 부를 땐 정밀도 1.0을 유지하다가, 62kg 정상을 만나는 순간 정밀도가 꺾인다. 반대로 모두를 비만이라 부르면 재현율은 1.0이 되지만 정밀도는 0.5로 주저앉는다. 이 궤적 전체가 곡선이고, 그 아래 면적이 분류기의 종합 점수다.
먼저 ROC부터 보자. 경계선을 옮기면 동작점이 곡선 위를 미끄러지고, 그 위치의 FPR·TPR이 함께 표시된다.
같은 경계를 이번엔 PR 평면에서 보자. 정밀도·재현율의 시소가 곡선 모양 그대로 드러난다.
우리 분류기의 AUC는 0.80, AP는 0.87이다. 완벽(1.0)은 아니다. 몸무게에 섞인 키 때문에 어쩔 수 없이 겹치는 구간이 있고, 곡선이 그 한계를 그대로 보여준다.
이 한계는 임계값을 아무리 잘 골라도 사라지지 않는다, 곡선 아래 면적을 정하는 건 임계값이 아니라 특징의 분리력이다. 두 위젯의 클래스 분리도 슬라이더로 직접 실험해 보자. 분포를 벌리면(키의 영향을 지운 더 좋은 특징을 찾은 셈) 곡선이 구석으로 부풀며 AUC·AP가 1.0에 다가가고, 뒤섞으면 ROC는 대각선(0.5)으로, PR은 양성 비율 근처로 주저앉는다. 모델링에서 “더 좋은 특징을 찾는 일"과 “임계값을 고르는 일"이 서로 다른 층위의 문제라는 게 이 두 슬라이더의 차이로 드러난다.
ROC와 PR은 강조점이 다르다. ROC는 위양성률을 축으로 써서 양성·음성 비율이 바뀌어도 모양이 크게 안 변한다(클래스 비율에 둔감). PR은 정밀도를 직접 보기 때문에, 양성이 아주 드문 문제(사기 탐지, 희귀질환)에서 성능이 무너지는 걸 훨씬 정직하게 드러낸다. 불균형 데이터일수록 ROC보다 PR을 봐야 한다는 말이 여기서 나온다.
정리
- 혼동행렬의 네 숫자(TP·FP·FN·TN)가 모든 메트릭의 재료다.
- 정확도는 편하지만 위험하다. 트레이드오프를 숨기고, 불균형 데이터에서 과장된다. 정확도가 같아도(0.70) 정밀도·재현율은 정반대일 수 있다.
- 정밀도(예측의 신뢰)와 재현율(안 놓치기)은 임계값을 사이에 두고 시소를 탄다. 무엇을 우선할지는 틀렸을 때의 비용이 정한다.
- ROC-AUC와 PR-AP는 임계값 하나에 매이지 않고 분류기 전체를 평가한다. 불균형이 심하면 PR을 본다.
- 무엇보다, 몸무게에 섞인 키처럼 특징이 클래스를 완벽히 가르지 못하면 어떤 메트릭으로도 완벽은 없다. 메트릭은 그 한계를 정직하게 비추는 거울이다.
위 두 위젯의 경계선을 다시 한 번 끝에서 끝까지 훑어 보자. 하나의 손잡이(임계값)가 혼동행렬, 여섯 개의 메트릭, 그리고 두 커브 위의 점을 동시에 움직인다. 분류 평가는 결국 이 하나의 손잡이를 어디에 둘지, 그리고 그 선택을 무엇으로 잴지의 문제다.