콘텐츠로 이동

혼동 행렬과 분류 지표 (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)

\[\text{Accuracy} = \frac{TP + TN}{TP + TN + FP + FN}\]

전체 샘플 중 올바르게 분류한 비율이다. 가장 직관적이지만, 불균형 데이터에서는 매우 위험한 지표다.

정확도 역설 (Accuracy Paradox): 양성:음성 = 1:99인 데이터에서, "모두 음성"으로 예측하면 99% 정확도를 달성한다. 이 모델은 아무런 분류 능력이 없지만 정확도는 높다.

균형 정확도 (Balanced Accuracy):

\[\text{Balanced Accuracy} = \frac{1}{2}\left(\frac{TP}{TP+FN} + \frac{TN}{TN+FP}\right)\]

각 클래스의 정확도를 평균하여 불균형에 강건하다.


정밀도 (Precision / Positive Predictive Value)

\[\text{Precision} = \frac{TP}{TP + FP}\]

"양성이라고 예측한 것 중에서, 실제로 양성인 비율은?"

정밀도가 중요한 경우: 거짓 경보(FP)의 비용이 높을 때 - 스팸 필터: 정상 메일을 스팸으로 분류하면 중요한 메일을 잃음 - 법적 판단: 무고한 사람을 유죄로 판단하는 비용


재현율 / 민감도 (Recall / Sensitivity / True Positive Rate)

\[\text{Recall} = \frac{TP}{TP + FN}\]

"실제 양성 중에서, 얼마나 많이 잡아냈는가?"

재현율이 중요한 경우: 놓침(FN)의 비용이 높을 때 - 암 검진: 암 환자를 놓치면 치료 기회를 잃음 - 사기 탐지: 사기 거래를 놓치면 금전적 피해 발생

용어 정리: Sensitivity = Recall = TPR — 모두 같은 개념이지만, 의학에서는 민감도(Sensitivity), ML에서는 재현율(Recall), 통계에서는 TPR이라 부른다.


특이도 (Specificity / True Negative Rate)

\[\text{Specificity} = \frac{TN}{TN + FP}\]

"실제 음성 중에서, 얼마나 올바르게 음성으로 판단했는가?"

위양성률(FPR)과의 관계:

\[\text{FPR} = 1 - \text{Specificity} = \frac{FP}{FP + TN}\]

특이도는 주로 의학/임상 맥락에서 사용되며, ROC 곡선의 x축은 \(1 - \text{Specificity}\), 즉 FPR이다.


음성예측도 (Negative Predictive Value, NPV)

\[\text{NPV} = \frac{TN}{TN + FN}\]

"음성이라고 예측한 것 중에서, 실제로 음성인 비율은?"

중요: PPV(= Precision)와 NPV는 유병률(Prevalence)에 크게 의존한다. 반면, Sensitivity와 Specificity는 유병률에 독립적이다. 이는 베이즈 정리(Bayes' Theorem)로 설명된다.


F1-Score

\[F_1 = \frac{2 \cdot \text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}} = \frac{2 \cdot TP}{2 \cdot TP + FP + FN}\]

정밀도와 재현율의 조화 평균(Harmonic Mean)이다. 산술 평균 대신 조화 평균을 사용하는 이유는 둘 중 하나가 극단적으로 낮을 때 이를 더 강하게 반영하기 위함이다.

일반화 — \(F_\beta\) Score:

\[F_\beta = (1 + \beta^2) \cdot \frac{\text{Precision} \cdot \text{Recall}}{\beta^2 \cdot \text{Precision} + \text{Recall}}\]
  • \(\beta < 1\) (예: \(F_{0.5}\)): 정밀도에 더 큰 가중치
  • \(\beta > 1\) (예: \(F_2\)): 재현율에 더 큰 가중치
  • \(\beta = 1\): 정밀도와 재현율을 동등하게 취급 → \(F_1\)

Matthews Correlation Coefficient (MCC)

\[\text{MCC} = \frac{TP \cdot TN - FP \cdot FN}{\sqrt{(TP+FP)(TP+FN)(TN+FP)(TN+FN)}}\]
  • 범위: \([-1, 1]\)
  • \(+1\): 완벽한 예측
  • \(0\): 랜덤 수준
  • \(-1\): 완벽하게 반대로 예측
  • 장점: 혼동 행렬의 네 칸 모두를 사용하므로, 불균형 데이터에서도 신뢰할 수 있다
  • 피어슨 상관계수(Phi coefficient)와 동일하며, 카이제곱 통계량과도 관계가 있다

Cohen's Kappa (\(\kappa\))

\[\kappa = \frac{p_o - p_e}{1 - p_e}\]
  • \(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 사기를 놓치는 비용 > 오탐 비용, 하지만 심한 불균형
제조 불량 도메인별 비용함수 불량 유형과 비용에 따라 임계값 설정

흔한 오해와 함정

  1. "정확도가 높으면 좋은 모델이다" — 불균형 데이터에서는 정확도가 무의미할 수 있다 (정확도 역설)
  2. "정밀도가 높으면 재현율도 높다" — 정밀도와 재현율은 대체로 트레이드오프 관계다. 자세한 내용은 정밀도-재현율 트레이드오프 참조
  3. "F1이 항상 최선의 균형 지표다" — F1은 TN을 무시한다. 불균형 데이터에서는 MCC가 더 신뢰할 만하다
  4. "훈련 데이터에서 계산한 지표로 모델을 평가할 수 있다" — 훈련 데이터 성능은 과적합을 반영할 수 있어 무의미하다. 교차 검증을 사용해야 한다
  5. "PPV/NPV는 항상 안정적이다" — PPV와 NPV는 유병률에 따라 크게 변한다. Sensitivity/Specificity는 유병률에 독립적이다
  6. "F1은 P = R = 0일 때도 정의된다" — 양성 예측이 하나도 없고 실제 양성도 없으면 F1은 정의되지 않는다 (0/0)

다른 주제와의 연결