move84

머신러닝 기초 – 혼동 행렬(Confusion Matrix) 분석 본문

머신러닝

머신러닝 기초 – 혼동 행렬(Confusion Matrix) 분석

move84 2025. 2. 25. 13:22
반응형

머신러닝에서 모델의 성능을 평가할 때 혼동 행렬(Confusion Matrix)은 필수적인 개념이다. 특히, 이진 분류(Binary Classification) 문제에서 모델이 얼마나 정확하게 분류했는지를 분석하는 데 유용하다. 이 글에서는 혼동 행렬의 개념, 각 지표의 의미, 그리고 실제 파이썬 코드 예제를 통해 혼동 행렬을 효과적으로 활용하는 방법을 설명한다.


🧐 혼동 행렬(Confusion Matrix)이란?

혼동 행렬(Confusion Matrix)은 모델의 예측값과 실제값을 비교하여 정리한 표다. 이를 통해 모델이 맞춘 데이터와 틀린 데이터를 직관적으로 분석할 수 있다.

✅ 혼동 행렬의 기본 구조

실제 값 \ 예측 값 양성(Predicted Positive) 음성(Predicted Negative)
양성(True Positive, TP) 모델이 맞게 양성으로 예측 모델이 양성을 음성으로 잘못 예측 (False Negative, FN)
음성(False Positive, FP) 모델이 음성을 양성으로 잘못 예측 모델이 맞게 음성으로 예측 (True Negative, TN)
  • True Positive (TP): 실제 양성을 양성으로 정확히 예측한 개수
  • False Positive (FP): 실제 음성을 양성으로 잘못 예측한 개수 (오탐)
  • False Negative (FN): 실제 양성을 음성으로 잘못 예측한 개수 (누락)
  • True Negative (TN): 실제 음성을 음성으로 정확히 예측한 개수

📌 혼동 행렬의 주요 성능 지표

혼동 행렬을 활용하면 다양한 성능 지표를 계산할 수 있다.

1️⃣ 정확도(Accuracy)

모델이 전체 데이터에서 올바르게 분류한 비율.

Accuracy = (TP + TN) / (TP + TN + FP + FN)

언제 유용한가?

  • 데이터가 균형 잡혀 있을 때(양성과 음성 데이터 개수가 비슷할 때)

2️⃣ 정밀도(Precision)

모델이 양성이라고 예측한 것 중에서 실제 양성의 비율.

Precision = TP / (TP + FP)

언제 유용한가?

  • 스팸 필터: 정상 메일을 스팸으로 분류하는 FP(오탐)를 줄이는 것이 중요함.
  • 광고 추천: 잘못된 광고 추천(FP)이 많으면 사용자 경험이 나빠질 수 있음.

3️⃣ 재현율(Recall, Sensitivity)

실제 양성 중에서 모델이 양성으로 정확하게 예측한 비율.

Recall = TP / (TP + FN)

언제 유용한가?

  • 의료 진단: 암 환자를 음성으로 잘못 분류하는 FN(누락)을 최소화해야 함.
  • 보안 시스템: 공격을 놓치지 않는 것이 중요(FN 최소화).

4️⃣ F1-Score

정밀도(Precision)와 재현율(Recall) 사이의 균형을 맞춘 조화 평균.

F1-Score = 2 * (Precision * Recall) / (Precision + Recall)

언제 유용한가?

  • 정밀도와 재현율 간의 균형이 필요한 경우
  • 불균형 데이터에서 성능을 평가할 때

🛠 혼동 행렬을 파이썬으로 계산하는 방법

파이썬에서 scikit-learn을 활용하면 혼동 행렬을 쉽게 생성할 수 있다.

✅ 혼동 행렬 시각화 예제

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.metrics import confusion_matrix

# 실제값과 예측값 정의
y_true = np.array([1, 0, 1, 1, 0, 1, 0, 0, 1, 1])  # 실제 값
y_pred = np.array([1, 0, 1, 0, 0, 1, 0, 1, 1, 1])  # 예측 값

# 혼동 행렬 계산
cm = confusion_matrix(y_true, y_pred)

# 시각화
plt.figure(figsize=(5,4))
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues", xticklabels=["Negative", "Positive"], yticklabels=["Negative", "Positive"])
plt.xlabel("Predicted Label")
plt.ylabel("True Label")
plt.title("Confusion Matrix")
plt.show()

🎯 혼동 행렬 기반 모델 평가 방법

혼동 행렬을 기반으로 한 평가 방법을 이해하기 위해, 암 진단 모델을 예로 들어보자.

실제 \ 예측 Positive(암) Negative(정상)
Positive(암 환자) 90 (TP) 10 (FN)
Negative(정상인) 5 (FP) 95 (TN)
  • 정확도(Accuracy)
    (90 + 95) / (90 + 95 + 10 + 5) = 92.5%
  • 정밀도(Precision)
    90 / (90 + 5) = 94.7%
  • 재현율(Recall)
    90 / (90 + 10) = 90.0%
  • F1-Score
    2 * (94.7 * 90.0) / (94.7 + 90.0) = 92.3%

이처럼 정밀도, 재현율, F1-Score를 함께 분석해야 모델의 성능을 정확히 평가할 수 있다.


📊 불균형 데이터에서 혼동 행렬 활용

불균형 데이터란?

  • 한 클래스(예: 정상 데이터)가 다른 클래스(예: 사기 거래)에 비해 훨씬 많은 데이터셋.

✅ 불균형 데이터 문제 해결 방법

  1. Oversampling – 적은 클래스의 데이터를 복제하여 균형 맞추기 (SMOTE 사용)
  2. Undersampling – 다수 클래스를 일부 삭제하여 균형 맞추기
  3. 클래스 가중치 조정 – 손실 함수에서 적은 클래스에 가중치 부여
  4. 정확도(Accuracy) 대신 F1-Score, Precision, Recall 사용

🚀 정리

성능 지표 공식 의미 중요성
정확도(Accuracy) (TP + TN) / (TP + TN + FP + FN) 전체 예측 중 올바르게 분류된 비율 데이터가 균형 잡혔을 때 유용
정밀도(Precision) TP / (TP + FP) 양성으로 예측한 것 중 실제 양성의 비율 FP(오탐)를 줄이는 것이 중요할 때
재현율(Recall) TP / (TP + FN) 실제 양성 중에서 올바르게 예측한 비율 FN(누락)을 줄이는 것이 중요할 때
F1-Score 2 * (Precision * Recall) / (Precision + Recall) Precision과 Recall의 균형 불균형 데이터에서 유용

🔑 주요 용어 정리

  • TP (True Positive): 실제 양성을 양성으로 예측
  • FP (False Positive): 실제 음성을 양성으로 예측 (오탐)
  • FN (False Negative): 실제 양성을 음성으로 예측 (누락)
  • TN (True Negative): 실제 음성을 음성으로 예측
  • F1-Score: Precision과 Recall의 균형을 맞춘 성능 지표

🔥 키워드

  • 혼동 행렬
  • 정밀도
  • 재현율
  • 머신러닝 평가
반응형