머신러닝 및 딥러닝

[데이터 분석] 혼동행렬 Confusion Matrix (R과 Python 코드)

삡삐in오즈 2021. 6. 9. 18:09
728x90
반응형

분류 모델 평가하기

이번 글에서는 분류 모델을 검증하는 단계에 쓰이는 혼동행렬 confusion matrix에 대해 설명해 보겠습니다. 

 

이미지 출처: https://developers.google.com/machine-learning/

분류 모델의 예로는 스팸 메일인지 아닌지 분류, 타이타닉호에서 생존자 예측하기, MNIST 손글씨 분류가 있습니다.

 

완벽한 분류 모델이 아닌 이상 분류하는 모델이 잘못된 분류를 할 수 돼있습니다.

예를 들면, 스팸이라고 분류를 했지만 스팸이 아니거나, 스팸이 아니라고 했지만 스팸이거나!

 

밑과 같이 모형이 예측한 값과 실제 값을 정리한 행렬을 혼동행렬이라고 합니다.

  실제 (Actual)
Positive Negative
예측
(predicted)
Positive True Positive (TP) False Positive (FP)
Negative False Negative (FN) True Negative (TN)

 

  • True Positive: 모델이 예측한 값이 positive이고 실제 값도 positive인 경우
                      (모델이 스팸(1)이라고 분류했는데 실제로 스팸(1)인 경우)
  • False Positive: 모델이 예측한 값이 positive이지만 실제 값은 negative인 경우
                      (모델이 스팸(1)이라고 분류했는데 실제로는 스팸이 아닌(0) 경우)
  • False Negative: 모델이 예측한 값이 negative이지만 실제 값은 positive인 경우
                      (모델이 스팸 아니라고(0) 분류했는데 실제로는 스팸인(1) 경우)
  • True Negative: 모델이 예측한 값이 negative이고 실제 값도 negative인 경우
                      (모델이 스팸 아니라고(0) 분류했는데 실제로 스팸이 아닌 (0) 경우)

 

R에서 혼동행렬 컴퓨팅

R에서 혼동행렬을 컴퓨팅하려면 caret 패키지가 필요합니다. 아래는 간단한 샘플 데이터를 이용해 혼동행렬을 컴퓨팅하는 데에 필요한 코드입니다.

 

install.packages('caret')
library(caret)

actual_label <- factor(c(1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1))
predicted <- factor(c(1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1))

confusionMatrix(data=predicted, reference = actual_label)

Output)

 

 

Python에서 혼동행렬 컴퓨팅

아래는 파이썬에서 혼동행렬을 컴퓨팅하는 코드입니다. sklearn 라이브러리를 사용하면 됩니다.

from sklearn.metrics import confusion_matrix
y_true = [1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1]
y_pred = [1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1]
confusion_matrix(y_true, y_pred)

 

 


위에 예는 이진 binary 분류를 예로 들었지만 어떤 분류 모델도 검증이 가능합니다. 밑에는 손글씨 1에서 9까지를 분류한 모델의 혼동행렬입니다.

728x90
반응형