모델 정확도가 98%라는 말을 들으면 꽤 좋아 보입니다. 그런데 막상 뜯어보면 전체 데이터의 98%가 하나의 클래스에 몰려 있어서, 모든 걸 그냥 다수 클래스로 예측해도 나오는 숫자인 경우가 있습니다. Accuracy가 거짓말을 하는 순간입니다. 오늘은 분류 모델을 제대로 평가하려면 어떤 지표를 봐야 하는지, 각 지표가 어떤 상황을 포착하는지 정리해보겠습니다. 📊
1. 혼동 행렬(Confusion Matrix)

분류 모델 평가의 출발점은 혼동 행렬입니다. 모델이 실제 값과 예측 값을 어떻게 조합해서 틀렸는지를 한눈에 보여줍니다. 이진 분류 기준으로 네 가지 경우의 수가 나옵니다.
| 예측: Positive | 예측: Negative | |
|---|---|---|
| 실제: Positive | TP (True Positive) | FN (False Negative) |
| 실제: Negative | FP (False Positive) | TN (True Negative) |
이름이 헷갈리는 경우가 많은데, 앞의 True/False는 예측이 맞았는지 틀렸는지, 뒤의 Positive/Negative는 모델이 무엇으로 예측했는지를 나타냅니다. FP는 Negative인데 Positive로 잘못 예측한 것, FN은 Positive인데 Negative로 잘못 예측한 것입니다.
FP: 아닌데 맞다고 했다 (1종 오류)
FN: 맞는데 아니라고 했다 (2종 오류)
어떤 오류가 더 치명적인지는 문제 도메인이 결정합니다.
2. 핵심 평가 지표
2.1 Accuracy
전체 예측 중 맞은 비율입니다. (TP + TN) / 전체로 계산합니다. 클래스 불균형이 없는 데이터에서는 직관적인 지표지만, 불균형 데이터에서는 의미가 없습니다. 암 진단 모델에서 99%가 정상인 데이터를 모두 정상으로 예측하면 Accuracy는 99%가 나오지만, 암 환자를 하나도 잡지 못한 쓸모없는 모델입니다. 처음 분류 모델을 만들 때 Accuracy만 보고 잘 됐다고 생각했다가 나중에 클래스 분포를 확인하고 당황했던 경험이 한 번씩은 있을 겁니다.
2.2 Precision (정밀도)
모델이 Positive로 예측한 것 중 실제로 Positive인 비율입니다. TP / (TP + FP)로 계산합니다. FP를 줄이는 게 중요한 상황, 즉 "틀리게 양성이라고 하면 안 되는" 경우에 중요합니다. 스팸 필터가 대표적입니다. 정상 메일을 스팸으로 잘못 분류하면 중요한 메일을 못 받게 됩니다.
2.3 Recall (재현율)
실제 Positive 중 모델이 Positive로 잡아낸 비율입니다. TP / (TP + FN)으로 계산합니다. FN을 줄이는 게 중요한 상황, 즉 "실제 양성을 놓치면 안 되는" 경우에 중요합니다. 암 진단, 사기 거래 탐지가 여기 해당합니다. 암 환자를 정상으로 분류하는 게 정상인을 암 환자로 분류하는 것보다 훨씬 치명적입니다.
2.4 F1 Score
Precision과 Recall의 조화 평균입니다. 2 × (Precision × Recall) / (Precision + Recall)로 계산합니다. 두 지표가 모두 높아야 F1도 높아지는 구조라서, 하나를 희생해 다른 하나를 극단적으로 높이는 전략이 통하지 않습니다. 클래스 불균형이 있는 상황에서 단일 지표로 모델을 비교할 때 자주 씁니다.
| 지표 | 수식 | 핵심 질문 | 중요한 상황 |
|---|---|---|---|
| Accuracy | (TP+TN) / 전체 | 전체 중 맞은 비율 | 균형 데이터 |
| Precision | TP / (TP+FP) | 양성 예측의 신뢰도 | FP 비용이 클 때 |
| Recall | TP / (TP+FN) | 실제 양성을 얼마나 잡나 | FN 비용이 클 때 |
| F1 Score | 조화 평균(P, R) | P와 R의 균형 | 불균형 데이터 |
3. Precision-Recall 트레이드오프

Precision과 Recall은 임계값(Threshold)에 따라 반대 방향으로 움직입니다. 분류 모델은 보통 0~1 사이의 확률값을 출력하고, 이 값이 임계값 이상이면 Positive로 분류합니다. 기본값은 0.5지만 이걸 바꾸면 두 지표의 균형이 달라집니다.
임계값을 낮추면 더 많은 케이스를 Positive로 분류해 Recall이 올라가지만 FP가 늘어 Precision이 떨어집니다. 임계값을 높이면 확실한 경우만 Positive로 분류해 Precision이 올라가지만 FN이 늘어 Recall이 떨어집니다. 어떤 오류를 더 줄여야 하는지는 비즈니스 문제가 결정합니다.
3.1 ROC-AUC
ROC 커브는 임계값을 0에서 1까지 변화시키면서 TPR(Recall)과 FPR(FP / (FP+TN))의 관계를 그린 곡선입니다. AUC는 이 곡선 아래 면적으로, 1에 가까울수록 모델이 두 클래스를 잘 구분한다는 의미입니다. AUC가 0.5면 무작위 추측과 다를 바 없습니다.
ROC-AUC는 임계값에 독립적으로 모델의 전반적인 분류 능력을 평가할 수 있어서 모델 비교에 많이 씁니다. 다만 클래스 불균형이 심한 경우 AUC가 높아도 실제 소수 클래스 탐지 성능이 낮을 수 있습니다. 이 경우 Precision-Recall 커브가 더 유용합니다.
4. 프로젝트 도메인별로 지표가 달라진다
여러 도메인 프로젝트를 진행하다 보면 지표 선택이 수학 문제가 아니라는 걸 몸으로 느끼게 됩니다. 처음엔 F1이 높으면 좋은 모델이라고 생각했는데, 도메인마다 허용할 수 있는 오류의 종류가 다르더라고요.
이탈 예측 프로젝트를 할 때가 대표적이었습니다. 이탈할 것 같은 고객에게 쿠폰을 주는 모델이었는데, Precision을 높이는 방향으로 튜닝하니 실제로 이탈하는 고객을 많이 놓쳤습니다. 쿠폰 비용 때문에 Precision을 챙기려다 정작 잡아야 할 고객을 못 잡은 거죠. 결국 FN의 비용이 FP보다 훨씬 크다는 판단 하에 Recall 중심으로 방향을 바꿨습니다.
반대로 이상 거래 탐지 프로젝트에서는 Recall을 무작정 높이는 게 문제였습니다. 정상 거래를 이상으로 잘못 분류하는 FP가 늘어나면 고객 민원이 쏟아지거든요. 이 경우엔 Precision과 Recall 사이의 균형점을 어디에 잡느냐가 핵심이었고, 결국 임계값을 직접 조정하면서 비즈니스 팀과 합의하는 과정이 모델 성능 개선만큼 중요했습니다.
| 도메인 | 더 치명적인 오류 | 우선 지표 | 이유 |
|---|---|---|---|
| 이탈 예측 | FN (이탈자 놓침) | Recall | 놓친 고객은 되돌리기 어려움 |
| 이상 거래 탐지 | FP/FN 균형 필요 | F1 + 임계값 조정 | FP 늘면 고객 민원, FN 늘면 금전 피해 |
| 스팸 필터 | FP (정상 메일 차단) | Precision | 잘못 차단이 더 위험 |
| 의료 진단 | FN (환자 놓침) | Recall | 놓치는 게 훨씬 위험 |
| 추천 시스템 | FP (관심 없는 추천) | Precision | 불필요한 추천이 UX 저하 |
정리
결국 지표 선택은 "어떤 오류를 더 감수할 수 있는가"에 대한 비즈니스 판단입니다. 모델 성능을 숫자로만 보다가 실제 서비스에서 문제가 생기는 경우가 꽤 있었는데, 돌이켜보면 대부분 지표를 잘못 정한 게 원인이었습니다. 임계값 조정은 모델을 새로 만들지 않고도 Precision과 Recall의 균형을 바꿀 수 있어서, 실무에서 생각보다 자주 쓰게 됩니다. 😊
'AI > ML' 카테고리의 다른 글
| [머신러닝] 과적합, 모델이 외울 때 생기는 일 (0) | 2026.05.31 |
|---|---|
| [머신러닝] 회귀 모델 오차 지표 비교 (0) | 2026.05.29 |
| [머신러닝] SVM, 마진을 설계하는 모델 (0) | 2026.05.28 |
| [머신러닝] XGBoost & LightGBM: 부스팅은 왜 순서가 중요한가 (0) | 2026.05.25 |
| [머신러닝] 랜덤 포레스트: 나무가 많아지면 왜 더 강해지는가 (0) | 2026.05.24 |
HELLO WORLD
안녕하세요. 데이터로 말하는 분석가 모모입니다.
데이터를 구조화하고 분석하는 과정과 실무에 활용되는 도구 중심의 내용을 기록합니다.