공부/파이썬(데이터)

[파이썬 sklearn] 오차행렬(혼동행렬, confusion matrix) 공부하기 - 평가 지표 이해(1)

spine_sunbi 2023. 10. 11. 00:53
반응형

빅데이터분석기사 실기 제2유형 문제를 보면서 항상 궁금했던 게 있었습니다.

'제출한 모델의 성능은 000 평가 지표에 따라 채점한다.'

000에는 ROC-AUC, F-1 Score, 정확도 등 다양한 평가 지표에 따라 채점을 한다고 적혀있다. 그럼 과연 평가 지표는 어떤 기준을 가지고 채점하는 걸까요?

 

사실 빅데이터분석기사 필기 혹은 비슷하게 adsp를 공부했던 사람들에게는 익숙한 오차(혼동) 행렬인데, 이번 기회에 알아볼 겸 정리해 보기로 했습니다.

 

오차행렬은 어떠한 유형의 예측 오류가 발생하는지에 따라 TN, FP, FN, TP로 나뉩니다. 귀여운 MBTI 같지 않나요?

1. 오차행렬의 앞 'T/F'는 실제값과 예측값이 동일하면 'T', 다르다면 'F'가 됩니다.

2. 오차행렬의 뒤 'N/P'는 예측값 입니다. 예측을 Negative로 했다면 'N', 예측을 Positive로 했다면 'P'가 됩니다.

 

  • TN : 예측값 Negative(0), 실제값 Negative(0) => 실제값과 예측값이 같기 때문에 'T' + 예측을 Negative(0)으로 했기 때문에 'N' (
  • FP : 예측값 Positive(1), 실제값 Negative(0) => 실제값과 예측값이 다르기 때문에 'F' + 예측을 Negative(0)으로 했기 때문에 'P'
  • FN : 예측값 Negative(0), 실제값 Positive(1) => 실제값과 예측값이 다르기 때문에 'F' + 예측을 Negative(0)으로 했기 때문에 'N'
  • TP : 예측값 Positive(1), 실제값 Positive(1) => 실제값과 예측값이 같기 때문에 'T' + 예측을 Positive(1)으로 했기 때문에 'P'

 

그럼 여기서, 나는 예측 값과 실제 값의 축을 반대로 놓고 외우고(이해하고) 싶어요!라는 사람이 있을 수 있습니다.

그렇지만, 사이킷런에서 제공하는 confusion_matrix()라는 함수가 있는데요. 이 함수가 저 그림 순서대로 값을 리턴합니다. (다양한 분야에서 쓰이기 때문에 검색해 보시면 종종 다른 순서를 보실 수 있습니다. 이왕이면 통일 좀 하지..) 어쨌든 사이킷런에서는 위의 그림 순서대로 반환합니다.

 

그리고 공식 문서를 살펴보시면 아시겠지만, 공식 문서의 예시는 '다중' 분류와 '이진' 분류에 사용되는 혼동행렬로써 위의 그림처럼 2x2 또는 3x3 결과를 나타내는데, 제가 작성한 예시는 '이진' 분류 혼동행렬(Binary Confusion Matrix)' 라고 봐주시면 됩니다.

(다중 분류는 0과 1 두 개가 아닌, 0,1,2처럼 세 개 이상을 이용한다고 생각하시면 됩니다.)

 

confusion_matrix(y_true, y_pred, *, labels=None, sample_weight=None, normalize=None)
  • y_true : 실제 레이블이 담긴 클래스(값)
  • y_pred : 예측 레이블이 담긴 클래스(값)

일단 이렇게 두 개만 알고 넘어가겠습니다.(제가 이해를 못 해서 그런 거 맞습니다.)


간단하게 실제 값과 예측값을 만들어 confusion_matrix를 확인해 보겠습니다.

confusion_matrix를 사용하기 위해서는 우선

from sklearn.metrics import confusion_matrix를 해주어야 합니다.

* 실행환경 : 구글 코랩

 

import pandas as pd
from sklearn.metrics import confusion_matrix

# y_true는 실제 값 입니다.
y_true = [1, 1, 0, 0, 1, 0 ,0 ,1]

# y_pred는 예측 값 입니다. 
y_pred = [0, 1, 1, 0, 1, 0, 1, 1]

confusion_matrix(y_true, y_pred)
 
confusion_matrix()는 위와 같이 오차행렬을 array 형태로 반환합니다.
 

TN, FP, FN, TP가 뭔지 헷갈리신다면 다시 한번 숙지하시고 결과를 확인해 보시면 어떨까요?