분류 모델은 입력을 보고 정해진 범주 중 하나를 고른다.
예를 들어 이상거래 탐지 모델을 만든다고 하자.
- 입력: 거래 금액, 거래 시간, 사용자 위치, 결제 수단, 과거 거래 패턴
- 출력: 정상 거래 / 이상 거래
모델이 예측을 끝내면 이 모델은 얼마나 잘 맞혔을까? 라는 질문이 생긴다.
이 때, 가장 먼저 떠오르는 지표는 정확도다.(정확도 = 전체 중 맞힌 비율)
그러나 분류 문제에서는 정확도만 보면 위험한 경우가 많다.
특히 정답 비율이 한쪽으로 치우친 데이터에서는 정확도가 매우 그럴듯하게 속일 수 있다.
이상거래 탐지 예시를 끝까지 사용해보자.
- 전체 거래: 10,000건
- 실제 정상 거래: 9,900건
- 실제 이상 거래: 100건
→ 이상거래는 전체의 1%뿐.
모델이 예측한 결과가 다음과 같다고 하자.
모델이 이상 거래라고 예측한 거래: 80건
그중 실제 이상 거래: 60건
그중 실제 정상 거래: 20건
그러면 나머지도 계산할 수 있다.
- 실제 이상 거래 100건 중 60건을 잡았다.
→ 놓친 이상 거래 = 40건 - 실제 정상 거래 9,900건 중 20건을 이상 거래로 잘못 잡았다.
→ 정상으로 잘 맞힌 거래 = 9,880건
정리하면:
| 구분 | 개수 | 의미 |
| TP | 60 | 이상 거래를 이상 거래라고 맞힘 |
| FP | 20 | 정상 거래를 이상 거래라고 잘못 잡음 |
| FN | 40 | 이상 거래를 정상 거래라고 놓침 |
| TN | 9,880 | 정상 거래를 정상 거래라고 맞힘 |
이 네 개가 분류 평가 지표의 출발점이다.
Confusion Matrix
정의
Confusion Matrix는 분류 모델의 예측 결과를 네 구역으로 나눠 보여주는 표다.
이진 분류에서는 보통 다음처럼 본다.
| 모델 예측: 이상 | 모델 예측: 정상 | |
| 실제 이상 | TP | FN |
| 실제 정상 | FP | TN |
- TP(True Positive): 잡아야 할 것을 잡음
- FP(False Positive): 잡지 말아야 할 것을 잡음
- FN(False Negative): 잡아야 할 것을 놓침
- TN(True Negative): 잡지 말아야 할 것을 안 잡음
여기서 positive는 좋은 결과라는 뜻이 아니라, 모델이 특별히 찾아내야 하는 대상을 양성(positive)이라고 부르는 약속에 가깝다.
이상거래 탐지에서는 이상 거래가 양성이고, 질병 진단에서는 실제 환자가 양성이다.
문제마다 양성이 무엇인지 먼저 정해야 Precision과 Recall을 헷갈리지 않는다.
이상거래 예시의 Confusion Matrix
| 모델 예측: 이상 거래 | 모델 예측: 정상 거래 | |
| 실제 이상 거래 | TP = 60 | FN = 40 |
| 실제 정상 거래 | FP = 20 | TN = 9,880 |
- 이상 거래 100건 중 60건은 잡았다.
- 하지만 40건은 놓쳤다.
- 정상 거래 9,900건 중 20건은 잘못 잡았다.

Accuracy
공식
Accuracy는 전체 중 맞힌 비율이다.
$$
Accuracy = \frac{TP + TN}{TP + FP + FN + TN}
$$
이상거래 예시에 대입하면:
$$
Accuracy = \frac{60 + 9880}{60 + 20 + 40 + 9880} = \frac{9940}{10000} = 0.994
$$
정확도는 99.4%다.
겉으로 보면 매우 좋아 보인다.
Accuracy의 함정
하지만 이상거래는 전체의 1%뿐이다.
아예 아무것도 탐지하지 않는 모델을 생각해보자. 이는 모든 거래를 정상 거래라고 예측한다.
- 정상 거래 9,900건은 전부 맞힘
- 이상 거래 100건은 전부 놓침
Accuracy는:
$$
Accuracy = \frac{9900}{10000} = 0.99
$$
정확도 99%다.
하지만 이 모델은 이상거래를 하나도 잡지 못한다.
즉, 정확도만 보면 쓸모없는 모델도 좋아 보일 수 있다.
Precision
정의
Precision은 모델이 양성(positive)이라고 예측한 것 중 실제 양성이 얼마나 되는지다.
이상거래 탐지에서는 모델이 이상 거래라고 잡은 것 중 진짜 이상 거래의 비율로 해석한다.
$$
Precision = \frac{TP}{TP + FP}
$$
예시에 대입하면:
$$
Precision = \frac{60}{60 + 20} = \frac{60}{80} = 0.75
$$
Precision은 75%다.
모델이 이상 거래라고 잡은 80건 중 60건이 진짜 이상 거래다.
Precision이 중요한 상황
Precision은 잘못 잡으면 비용이 큰 문제에서 중요하다.
정상 거래를 이상 거래로 막으면 고객 불편 발생
정상 이메일을 스팸으로 보내면 중요한 메일을 놓침
정상 사용자를 부정 사용자로 차단하면 서비스 신뢰도 하락
Precision이 낮으면 거짓 양성(false positive), 즉 정상인데 이상이라고 잘못 잡은 경우가 많다는 뜻이다.
모델이 너무 많이 의심한다.
잡은 것 중 가짜가 많다.
Recall
정의
Recall은 실제 양성(positive) 중 모델이 얼마나 많이 찾아냈는지다.
이상거래 탐지에서는 실제 이상 거래 중 모델이 잡아낸 비율로 해석한다.
$$
Recall = \frac{TP}{TP + FN}
$$
예시에 대입하면:
$$
Recall = \frac{60}{60 + 40} = \frac{60}{100} = 0.6
$$
Recall은 60%다.
실제 이상 거래 100건 중 60건을 잡았고, 40건은 놓쳤다.
Recall이 중요한 상황
Recall은 놓치면 비용이 큰 문제에서 중요하다.
암 진단에서 실제 환자를 놓치면 위험
이상거래 탐지에서 사기 거래를 놓치면 손실
보안 탐지에서 공격을 놓치면 침해 발생
Recall이 낮으면 거짓 음성(false negative), 즉 이상인데 정상이라고 놓친 경우가 많다는 뜻이다.
모델이 너무 소극적이다.
잡아야 할 것을 많이 놓친다.
Precision과 Recall의 trade-off
Precision과 Recall은 자주 충돌한다.
이상거래 모델은 보통 각 거래에 대해 점수를 낸다. (e.g. 이 거래가 이상 거래일 확률: 0.82)
그리고 분류 기준값(threshold)을 기준으로 판단한다.
점수 >= 0.5 → 이상 거래
점수 < 0.5 → 정상 거래
- 분류 기준값을 높이면 모델은 더 확실한 것만 잡는다.
- threshold = 0.9
→ 정말 의심스러운 거래만 잡음
→ FP 감소
→ Precision 상승 가능
→ FN 증가
→ Recall 하락 가능
- threshold = 0.9
- 분류 기준값을 낮추면 모델은 더 많이 잡는다.
- threshold = 0.2
→ 조금만 의심스러워도 잡음
→ TP 증가 가능
→ Recall 상승 가능
→ FP 증가
→ Precision 하락 가능
- threshold = 0.2
더 많이 잡으면 Recall은 올라가기 쉽지만 Precision은 떨어질 수 있다.
더 신중하게 잡으면 Precision은 올라가기 쉽지만 Recall은 떨어질 수 있다.

F1 Score
Precision과 Recall을 따로 보면 선택이 어렵다.
예를 들어 두 모델이 있다고 하자.
| 모델 | Precision | Recall |
| A | 0.95 | 0.30 |
| B | 0.70 | 0.70 |
A는 잡은 것 중에는 진짜가 많지만, 실제 이상거래를 많이 놓친다.
B는 둘 다 적당하다.
이 둘을 하나의 숫자로 비교하고 싶을 때 F1을 쓴다.
공식
F1은 Precision과 Recall의 조화평균이다.
$$
F1 = 2 \times \frac{Precision \times Recall}{Precision + Recall}
$$
이상거래 예시에서는:
$$
F1 = 2 \times \frac{0.75 \times 0.6}{0.75 + 0.6}
$$
$$
F1 \approx 0.667
$$
왜 산술평균이 아닌가
산술평균은 한쪽이 매우 낮아도 점수가 꽤 높게 나올 수 있다.
예를 들어 Precision = 1.0 이고, Recall = 0.0 이라고 하자.
이 때 산술평균은 0.5이지만, Recall이 0이면 실제 양성을 하나도 못 잡은 모델이다.
F1은 이런 모델에 0점을 준다.
Precision = 1.0
Recall = 0.0
산술평균 = 0.5
F1 = 0
F1은 Precision과 Recall 중 낮은 쪽에 더 민감하다. → 둘 사이의 균형을 보려는 지표
F-beta Score
F1은 Precision과 Recall을 같은 중요도로 본다.
그러나 실무에서는 둘 중 하나가 나머지 하나보다 더 중요할 수 있다.
이상거래 탐지: Recall을 더 중요하게 볼 수 있음
스팸 차단: Precision을 더 중요하게 볼 수 있음
이럴 때 F-beta를 쓴다.
beta > 1 → Recall을 더 중요하게 봄
beta < 1 → Precision을 더 중요하게 봄
예:
F2: Recall을 더 중요하게 봄
F0.5: Precision을 더 중요하게 봄
ROC-AUC
ROC Curve란?
ROC Curve는 threshold를 바꿔가며 다음 두 값을 그린 곡선이다.
- TPR(True Positive Rate) = Recall
- FPR(False Positive Rate) = 실제 정상 중 잘못 이상으로 잡은 비율
$$
FPR = \frac{FP}{FP + TN}
$$
ROC-AUC는 이 곡선 아래 면적이다.
값이 1에 가까울수록 양성과 음성을 잘 구분한다.
0.5에 가까우면 무작위로 찍는 것과 비슷하다.
ROC-AUC는 특정 기준값 하나에서의 성능이 아니라, 기준값을 전반적으로 바꿔봤을 때 양성을 음성보다 위에 잘 올려놓는지 보는 지표다.
언제 유용한가
ROC-AUC는 모델의 점수 순위가 얼마나 좋은지 보는 데 유용하다.
실제 양성에 더 높은 점수를 주고
실제 음성에 더 낮은 점수를 주는가?
하지만 클래스 불균형이 심하면 ROC-AUC가 좋아 보여도 실제 양성 탐지 성능이 부족할 수 있다.
이상거래처럼 양성이 매우 적은 문제에서는 PR-AUC도 같이 봐야 한다.
PR-AUC
PR Curve란?
PR Curve는 threshold를 바꿔가며 Precision과 Recall의 관계를 그린 곡선이다.
x축: Recall
y축: Precision
PR-AUC는 이 곡선 아래 면적이다.
PR Curve는 “많이 찾는 것”과 “정확히 찾는 것”의 관계를 직접 보여준다.
Recall을 높이려면 더 많은 후보를 양성으로 잡아야 한다.
그러면 관련 없는 것도 같이 들어와 Precision이 떨어질 수 있다.
PR Curve는 이 변화가 얼마나 완만하거나 급격한지 보여준다.
언제 더 중요한가
PR-AUC는 양성 클래스가 희귀한 문제에서 특히 중요하다.
이상거래 탐지
질병 진단
불량품 탐지
악성 사용자 탐지
보안 공격 탐지
이런 문제에서는 음성이 너무 많아서, ROC-AUC만 보면 모델이 괜찮아 보일 수 있다.
PR-AUC는 실제로 양성을 잡을 때 Precision과 Recall이 어느 정도 균형을 이루는지 더 직접적으로 보여준다.
다중 분류에서의 평균 방식
다중 분류에서는 클래스가 여러 개다.
배송 문의
환불 문의
교환 문의
상품 문의
기타 문의
각 클래스마다 Precision, Recall, F1을 계산할 수 있다.
문제는 이것을 하나의 점수로 어떻게 합치느냐다.
- Macro Average
- 각 클래스 점수를 단순 평균한다. → 클래스별 점수를 똑같은 비중으로 평균
- 데이터가 적은 클래스도 큰 클래스와 같은 중요도로 본다.
- 클래스 불균형이 있을 때 소수 클래스를 놓치고 싶지 않다면 macro average가 유용
- Micro Average
- 전체 TP, FP, FN을 합쳐서 한 번에 계산
- 샘플 수가 많은 클래스의 영향이 커짐
- 전체적인 예측 성능을 보고 싶을 때 유용
- Weighted Average
- 클래스별 점수를 샘플 수 비율로 가중평균
- 데이터가 많은 클래스는 더 크게 반영
데이터가 적은 클래스는 덜 반영 - 전체 데이터 분포를 반영한 평균
Calibration
정의
Calibration은 모델이 출력한 확률이 실제 확률과 잘 맞는지 보는 개념이다.
예를 들어 모델이 100건에 대해 각각 0.8 확률로 이상거래라고 예측했다고 하자.
잘 보정된 모델이라면 그 100건 중 약 80건이 실제 이상거래여야 한다.
예측 확률 0.8
→ 실제로도 약 80% 정도 맞아야 함
왜 중요한가
분류 모델을 단순히 맞히는 데만 쓰면 calibration이 덜 중요할 수 있다.
하지만 확률을 의사결정에 쓰면 중요해진다.
이상거래 확률 0.95 이상이면 즉시 차단
0.70~0.95면 사람이 검토
0.70 미만이면 통과
이 경우 확률값 자체가 믿을 만해야 한다.
확률이 과하게 높거나 낮게 나오면 운영 정책이 흔들린다.
지표 선택 기준
| 상황 | 우선 지표 |
| 클래스가 균형적이고 단순 정확도가 중요 | Accuracy |
| 잘못 잡는 비용이 큼 | Precision |
| 놓치는 비용이 큼 | Recall |
| Precision/Recall 균형 필요 | F1 |
| Recall을 더 중요하게 보고 싶음 | F2 |
| Precision을 더 중요하게 보고 싶음 | F0.5 |
| 불균형 데이터에서 양성 탐지 중요 | PR-AUC |
| 전체 기준값 변화에 따른 구분 능력 확인 | ROC-AUC |
| 확률값으로 의사결정 | Calibration |
정리
- 분류 평가는 단순히 몇 개를 맞혔는지가 아니라,
어떤 종류의 실수를 얼마나 했는지 보는 일이다. - Accuracy: 전체 정답률.
- Precision: 잡은 것 중 진짜의 비율.
- Recall: 진짜 중 잡아낸 비율.
- F1: Precision과 Recall의 균형.
- PR-AUC: 희귀한 양성을 탐지할 때 중요.
GitHub 댓글