혼동 행렬과 분류 지표 (Confusion Matrix & Classification Metrics)¶
개요¶
분류 모델의 성능을 평가하려면 "얼마나 맞혔는가"를 넘어, 어떤 종류의 실수를 얼마나 했는가를 이해해야 한다. 혼동 행렬(Confusion Matrix)은 모든 분류 지표의 출발점이며, 이 행렬의 네 칸에서 정확도(Accuracy), 정밀도(Precision), 재현율(Recall), F1-Score, MCC 등 핵심 지표가 파생된다.
이 문서에서는 혼동 행렬의 구조를 먼저 설명한 뒤, 각 분류 지표의 수학적 정의, 직관적 해석, 그리고 실전에서의 사용 지침을 다룬다.
핵심 개념¶
1. 혼동 행렬 (Confusion Matrix)¶
이진 분류에서 모델의 예측 결과는 네 가지 범주로 나뉜다.
graph TD
subgraph "혼동 행렬 (Confusion Matrix)"
direction LR
subgraph "예측: 양성 (Positive)"
TP["✅ True Positive (TP)<br/>실제 양성 → 양성 예측"]
FP["❌ False Positive (FP)<br/>실제 음성 → 양성 예측<br/>(Type I Error)"]
end
subgraph "예측: 음성 (Negative)"
FN["❌ False Negative (FN)<br/>실제 양성 → 음성 예측<br/>(Type II Error)"]
TN["✅ True Negative (TN)<br/>실제 음성 → 음성 예측"]
end
end | 예측: 양성 (Predicted Positive) | 예측: 음성 (Predicted Negative) | |
|---|---|---|
| 실제: 양성 (Actual Positive) | TP (True Positive) | FN (False Negative) |
| 실제: 음성 (Actual Negative) | FP (False Positive) | TN (True Negative) |
- TP: 실제 양성을 양성으로 올바르게 예측
- FP (Type I Error, 제1종 오류): 실제 음성을 양성으로 잘못 예측 — "거짓 경보"
- FN (Type II Error, 제2종 오류): 실제 양성을 음성으로 잘못 예측 — "놓침"
- TN: 실제 음성을 음성으로 올바르게 예측
2. 다중 클래스 확장 (Multi-class Extension)¶
\(K\)개 클래스가 있을 때, 혼동 행렬은 \(K \times K\) 크기가 된다. 행은 실제 클래스, 열은 예측 클래스를 나타낸다.
평균 방식 (Averaging Methods):
| 방식 | 설명 | 특징 |
|---|---|---|
| Micro | 모든 클래스의 TP, FP, FN을 합산 후 지표 계산 | 다수 클래스에 유리 |
| Macro | 클래스별 지표를 각각 계산 후 단순 평균 | 모든 클래스를 동등하게 취급 |
| Weighted | 클래스별 지표를 계산 후 클래스 크기(support)로 가중 평균 | Micro와 Macro의 절충 |
| Samples | 샘플별로 지표를 계산 후 평균 (다중 라벨용) | Multi-label 문제에서 사용 |
상세 내용: 핵심 분류 지표¶
정확도 (Accuracy)¶
전체 샘플 중 올바르게 분류한 비율이다. 가장 직관적이지만, 불균형 데이터에서는 매우 위험한 지표다.
정확도 역설 (Accuracy Paradox): 양성:음성 = 1:99인 데이터에서, "모두 음성"으로 예측하면 99% 정확도를 달성한다. 이 모델은 아무런 분류 능력이 없지만 정확도는 높다.
균형 정확도 (Balanced Accuracy):
각 클래스의 정확도를 평균하여 불균형에 강건하다.
정밀도 (Precision / Positive Predictive Value)¶
"양성이라고 예측한 것 중에서, 실제로 양성인 비율은?"
정밀도가 중요한 경우: 거짓 경보(FP)의 비용이 높을 때 - 스팸 필터: 정상 메일을 스팸으로 분류하면 중요한 메일을 잃음 - 법적 판단: 무고한 사람을 유죄로 판단하는 비용
재현율 / 민감도 (Recall / Sensitivity / True Positive Rate)¶
"실제 양성 중에서, 얼마나 많이 잡아냈는가?"
재현율이 중요한 경우: 놓침(FN)의 비용이 높을 때 - 암 검진: 암 환자를 놓치면 치료 기회를 잃음 - 사기 탐지: 사기 거래를 놓치면 금전적 피해 발생
용어 정리: Sensitivity = Recall = TPR — 모두 같은 개념이지만, 의학에서는 민감도(Sensitivity), ML에서는 재현율(Recall), 통계에서는 TPR이라 부른다.
특이도 (Specificity / True Negative Rate)¶
"실제 음성 중에서, 얼마나 올바르게 음성으로 판단했는가?"
위양성률(FPR)과의 관계:
특이도는 주로 의학/임상 맥락에서 사용되며, ROC 곡선의 x축은 \(1 - \text{Specificity}\), 즉 FPR이다.
음성예측도 (Negative Predictive Value, NPV)¶
"음성이라고 예측한 것 중에서, 실제로 음성인 비율은?"
중요: PPV(= Precision)와 NPV는 유병률(Prevalence)에 크게 의존한다. 반면, Sensitivity와 Specificity는 유병률에 독립적이다. 이는 베이즈 정리(Bayes' Theorem)로 설명된다.
F1-Score¶
정밀도와 재현율의 조화 평균(Harmonic Mean)이다. 산술 평균 대신 조화 평균을 사용하는 이유는 둘 중 하나가 극단적으로 낮을 때 이를 더 강하게 반영하기 위함이다.
일반화 — \(F_\beta\) Score:
- \(\beta < 1\) (예: \(F_{0.5}\)): 정밀도에 더 큰 가중치
- \(\beta > 1\) (예: \(F_2\)): 재현율에 더 큰 가중치
- \(\beta = 1\): 정밀도와 재현율을 동등하게 취급 → \(F_1\)
Matthews Correlation Coefficient (MCC)¶
- 범위: \([-1, 1]\)
- \(+1\): 완벽한 예측
- \(0\): 랜덤 수준
- \(-1\): 완벽하게 반대로 예측
- 장점: 혼동 행렬의 네 칸 모두를 사용하므로, 불균형 데이터에서도 신뢰할 수 있다
- 피어슨 상관계수(Phi coefficient)와 동일하며, 카이제곱 통계량과도 관계가 있다
Cohen's Kappa (\(\kappa\))¶
- \(p_o\): 관측된 일치율 (Observed agreement) = Accuracy
- \(p_e\): 우연에 의한 기대 일치율 (Expected agreement by chance)
해석 기준 (Landis & Koch):
| \(\kappa\) 값 | 해석 |
|---|---|
| < 0 | 우연보다 못함 |
| 0.00 – 0.20 | 약간의 일치 (Slight) |
| 0.21 – 0.40 | 보통의 일치 (Fair) |
| 0.41 – 0.60 | 중간 수준의 일치 (Moderate) |
| 0.61 – 0.80 | 상당한 일치 (Substantial) |
| 0.81 – 1.00 | 거의 완벽한 일치 (Almost perfect) |
랜덤 기준선(chance baseline)과의 비교가 필요할 때, 또는 평가자 간 일치도(inter-rater reliability)를 측정할 때 유용하다.
지표 비교 요약표¶
| 지표 | 수식 핵심 | 초점 | 불균형 데이터 | TN 사용 |
|---|---|---|---|---|
| Accuracy | \(\frac{TP+TN}{전체}\) | 전체 정확성 | 취약 | O |
| Precision | \(\frac{TP}{TP+FP}\) | 양성 예측의 신뢰성 | 보통 | X |
| Recall | \(\frac{TP}{TP+FN}\) | 양성 탐지율 | 보통 | X |
| F1-Score | 조화평균(P, R) | P-R 균형 | 보통 | X |
| MCC | 4칸 모두 활용 | 전체 상관성 | 강건 | O |
| Cohen's \(\kappa\) | 우연 보정 | 우연 대비 성능 | 강건 | O |
언제 사용하는가¶
flowchart TD
A["분류 지표 선택"] --> B{"클래스가 균형인가?"}
B -->|"예"| C["Accuracy 사용 가능"]
B -->|"아니오"| D{"FP와 FN 중<br/>어느 쪽이 더 비용이 큰가?"}
D -->|"FP 비용 큼"| E["Precision 중시<br/>F0.5 사용 고려"]
D -->|"FN 비용 큼"| F["Recall 중시<br/>F2 사용 고려"]
D -->|"둘 다 중요"| G["F1 또는 MCC"]
C --> H{"TN도 중요한가?"}
H -->|"예"| I["MCC 또는 Accuracy"]
H -->|"아니오"| J["F1-Score"] 실전 예시:
| 문제 | 우선 지표 | 이유 |
|---|---|---|
| 스팸 탐지 | Precision 우선 | 정상 메일을 스팸으로 오분류하면 안 됨 |
| 암 검진 | Recall 우선 | 환자를 놓치면 안 됨 |
| 사기 탐지 | F2 또는 Recall | 사기를 놓치는 비용 > 오탐 비용, 하지만 심한 불균형 |
| 제조 불량 | 도메인별 비용함수 | 불량 유형과 비용에 따라 임계값 설정 |
흔한 오해와 함정¶
- "정확도가 높으면 좋은 모델이다" — 불균형 데이터에서는 정확도가 무의미할 수 있다 (정확도 역설)
- "정밀도가 높으면 재현율도 높다" — 정밀도와 재현율은 대체로 트레이드오프 관계다. 자세한 내용은 정밀도-재현율 트레이드오프 참조
- "F1이 항상 최선의 균형 지표다" — F1은 TN을 무시한다. 불균형 데이터에서는 MCC가 더 신뢰할 만하다
- "훈련 데이터에서 계산한 지표로 모델을 평가할 수 있다" — 훈련 데이터 성능은 과적합을 반영할 수 있어 무의미하다. 교차 검증을 사용해야 한다
- "PPV/NPV는 항상 안정적이다" — PPV와 NPV는 유병률에 따라 크게 변한다. Sensitivity/Specificity는 유병률에 독립적이다
- "F1은 P = R = 0일 때도 정의된다" — 양성 예측이 하나도 없고 실제 양성도 없으면 F1은 정의되지 않는다 (0/0)
다른 주제와의 연결¶
- 정밀도-재현율 트레이드오프: 임계값 변화에 따른 Precision-Recall 관계와 PR 곡선
- ROC와 AUC: TPR(= Recall)과 FPR(= 1 - Specificity)을 사용한 또 다른 성능 시각화
- 교차 검증: 지표를 신뢰할 수 있게 추정하는 방법
- 편향-분산 트레이드오프: 모델 복잡도와 오류의 근본적 관계
- 공정성 지표: 그룹별로 분류 지표가 어떻게 달라지는지 분석
- 보정: 분류 확률의 신뢰성 — AUC가 높아도 보정이 나쁠 수 있다