728x90

Confusion Matrix

* Confusion Matrix 를 혼동행렬, 혼돈행렬, 오차행렬 등 여러가지 용어로 사용되고 있네요

 

혼돈매트릭스는 머신러닝에 의해서 예측된 분류가 얼마나 잘 예측되었는지 평가할 때 사용되는 테이블입니다. 

2차원 테이블로 표시가 되는데, 세로축으로 예측치, 가로축으로는 실제 원래 값으로 표시됩니다.

* 때로는 이와 반대로 가로축이 실제 원래값, 가로축이 모형의 예측치로 표시되기도 합니다.

 

(1) 혼돈행렬을 해석할 때, 일단 "예측"을 중심으로,

    예측이 "맞다"라고 주장하면 Positive, "아님" 이라고 주장하면 "Negative"

    그래서 첫 행(가로 방향)은 Positive 입니다. 

    예측값이 실제값(원래값)과 동일하면 True가 되므로,  True Positive 가 됩니다.

 

(2)  혼돈행렬을 해석할 때, 일단 "예측"을 중심으로,

    예측이 "맞다"라고 하면 Positive, "아님" 이라고 하면 "Negative"

   그래서 두번째 행(가로 방향)은 False 입니다. (Negative)

    예측값이 실제값(원래값)과 동일하게 False 이면 ,  True Nagavite 가 됩니다.

 

(3) 그리하여 초록색 부분은 (예측과 실제값이 같아서) 맞게 결론을 내렸으므로 일단 True 입니다.

    맞는 것은  "맞다",  아닌 것은 "아니다" 하는 것이 정확한 것입니다.

 

모형 평가 지표

 

(1) 정확도(정분류율) = 전체 관측치에서 정확하게 예측한 확률(초록색 부분)

                 = "암환자"를 "암환자"라고 예측한 경우와 "암환자 아님"을 "암환자 아님" 이라고 함

                 = (TP+TN) / m

                 = Accuracy

    오분류율  = 1 - 정분류율

 

(2) 민감도(Sensitivey) = 재현도(Recall) = True Positive Rate

     가장 민감한 부분이 "암환자"가 왔을 때 "암환자로 정확하게 예측" 하는 부분일 것입니다.
              = 실제 암환자인데, 암환자로 예측하는 경우(TP)

                 /"암환자 인데 암환자이다" + "암환자인데 암환자가 아니다"

              = T P / (TP +FN) => TP / 실제값True(암)

 

(3) 정밀도(Precision)
     (일단) "암환자"로 예측을 했는데,  그중에서 실제로 암환자인 비율입니다.

               =  T P / (TP+ FP)

 

(4) 특이도 = "거짓인 것" 중에서 거짓으로 예측하는 비율입니다.

              =   암환자가 아닌데 암환자가 아니다로 예측한 경우

                 / "암환자가 아닌데 암환자가 아니다" + "암환자인데 암환자가 아니다"로 예측

              =  TN / (TN+FP)

    

(5) F 스코어
      민감도와 정밀도를 하나로 합친(조화평균) 모형 측정값

      2 X (민감도 X 정밀도) / (민감도+정밀도) 

 

ROC Curve 와 AUC(Area Under Curve)

Confusion Matrix 만으로 모델을 평가하는데 부족할 수 있습니다.

이외에 모델의 효율성을 평가하는 척도로서 ROC(Receiver Operating Characteristics) Curve란 것이 있습니다.

X 축을 False Positive Rate            = 암환자가 아닌데 암환자로 예측... FP / ( TN + FP)...  

Y 축을 민감도(True Positive Rate) = 암환자   인데    암환자로 예측... TP /  (TP + FN)... 

그린 그림을 ROC 곡선이라고 합니다.

 

ROC 커브는 FP비율에 대한 TP 비율을 변화량을 그린 그림인 셈입니다. 

출처 : https://www.ibm.com/support/knowledgecenter/es/SSLVMB_24.0.0/spss/tutorials/mlp_bankloan_roc-curve_02.html

이 ROC 커브와 X 축 사이의 면적을 AUC라고 하는데,AUC 값이 1에 가까울수록 효율적인 모델이라고 평가할 수 있습니다.

패키지 ROCR을 이용하여 ROC커브를 그릴 수 있습니다.

 

install.packages("ROCR")

library(ROCR)

pred <- prediction(예측값, 실제값)

performance(pred,"auc")

 

참고문헌: R을 활용한 데이터처리 & 분석실무(길벗, 서민구저)

+ Recent posts