혼동 행렬, Confusion Matrix
Machine Learning

혼동 행렬, Confusion Matrix

혼동 행렬(Confusion Matrix)이란

 

분류(Classifier) 모델의 예측값과 실제 값의 교차표를 말한다. 더 나아가 행렬 값들을 조합해 학습 성능 평가에 사용한다.

여러가지 성능 지표가 존재하며 상황에 따라 적절한 지표를 활용하여 모델의 성능을 비교 할 수 있다.

즉, 혼동 행렬 생성은 분류 모델의 성능 비교를 위한 초석 단계라 할 수 있다.

이진분류모델의 혼동 행렬(Confusion Matrix)

구분 예측 값
Positive Negative
실제 값 Positive TP FN
Negative FP TN
  • TP(True Positive) : 실제 값이 Positive인 경우를 올바르게 예측
  • TN(True Negative) : 실제 값이 Negative인 경우를 올바르게 예측
  • FP(False Positive) : 실제 값이 Negative인 경우를 Positive로 잘못 예측
  • FN(False Negative) : 실제 값이 Positive인 경우를 Negative로 잘못 예측

분류모델의 성능이 좋고 나쁨을 이야기 할 때는 얼마나 실제값을 잘 예측하는지에 대한 문제로 단순화 시킬 수 있다.

그럼에도 단순한 정확도(Accuracy) 외에 여러가지 성능 지표들이 존재한다는 사실은 각 상황에 알맞게 여러 성능 지표를 사용해야한다는 말의 방증이기도 하다.


정확도(Accuracy)

전체 건수중 실제 값을 올바르게 예측한 비율을 나타낸다. 따라서 정확도는 0에서 1사이의 값을 가진다.

실생활에서도 자주 접할 수 있기 때문에 타 성능 지표들에 비해 직관적 이해가 쉽다고 생각된다.  

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

하지만 정확도(Accuracy)는 클래스별 분포가 같을 때에만 의미있는 모델 성능 비교가 가능하다.

앞선 상황과 다를 때에는 ROC 커브의 AUC 값이나, F-1 Score를 통해 성능 비교를 해야한다.

 

왜 그런지 이유


 

민감도(Sensitivity) / 특이도(Specificity)

의학통계에서 많이 사용되는 개념

  • Sensitivity = TP / (TP + FN)
  • Specificity = TN / (TN + FP)

진단검사에 있어서 민감도와 특이도는 매우 중요하다고 할 수 있다.

 

민감도(Sensitivity)란 실제 질병을 가진 사람을 진단검사에서 질병이 있다고 판정하는 능력이다.

이와 반대로 특이도(Specificity)는 실제 질병이 없는 사람을 진단검사에서 질병이 없다고 판정하는 능력이다.

 

의학적 관점에서 보았을 땐, 질병이 있지만 그것을 판정하지 못하고 집으로 돌려 보내는 상황은 매우 위험한 상황이다. 그렇기 때문에 민감도를 높이는 것은 중요하다고 할 수 있다. 


ROC Curve

여러 공모전에서 이진분류 모델의 성능 비교를 위해 ROC 커브 곡선 아래 영역의 적분값인 AUC를 기준으로 삼고 있다.

현재 ROC Curve 관련 오픈 라이브러리가 많이 있으니 코드는 직접 짤 필요가 없다. 감사한 마음으로 사용하자. 

 

ROC Space & ROC Curve

 

- Y 축

  참 양성 비율(TPR) = Sensitivity

  TPR = TP / (TP + FN)

- X 축

  허위 양성 비율(FPR) = 1 - Specificity

  FPR = FP / (FP + TN)

- 그리는 방법

 

ROC 곡선이 좌상단 쪽으로 더 가까울 수록 성능이 좋은 이진분류기모델이라 할 수 있다.

 

AUC

"ROC Curve 아래의 면적 값"

계산 방법은 (0,0)에서 (1,1) 까지 전체 ROC 곡선 아래에 있는 2차원 영역을 측정.

그렇기 때문에 AUC 값은 0에서 1사이 값을 가진다.

 

경험상 AUC 값의 절대적 기준은 없다.

리더보드에 공개되고 있는 성능을 보고 비교하는게 제일 마음편하고 정확하다고 생각한다.

 

그려진 여러개의 ROC Curve를 눈으로만 보고 제일 성능이 좋은 모델을 찾는 것은 애매하기 때문에 AUC 값이 가장 높은 이진분류기 모델을 채택하면 된다.

 

곡선이라 시각화가 가능하다는 장점이 있다.


재현율(Recall)/ 정밀도(Precision)

머신러닝 분야에서 자주 사용하는 개념

  • Recall = TP / (FN + TP)
  • Precision = TP / (FP + TP)

정밀도(Precision)는 양성으로 예측된 결과의 정확한 예측의 비율을 의미하는 모델의 성능 지표이다. 그리고 재현율(Recall)은 민감도(Sensitivity) 산출식과 동일하며, 실제 양성 중 모델이 정확하게 양성으로 예측한 비율을 나타내는 성능 지표이다.

 

재현율과 민감도를 보면 알 수 있듯이, 같은 값이라 할지라도 각 분야마다 용어가 서로 상이하다. 각 분야에서 발전되어 온 개념이기 때문에 다양한 사람들과 같이 협업하기 위해서는 여러 용어를 알아 두는 것도 필요해 보인다.

 

  • 정밀도는 잘못된 Positive를 줄이는 데에 초점
  • 재현율은 잘못된 Negative를 줄이는 데에 초점

 


F-1 Score

정밀도와 재현율이 동시에 모두 중요한 경우

 

  • F1 = 2* (Precision * Recall)/ (Precision + Recall)

정밀도와 재현율을 따로 볼 경우 Trade off 관계가 발생해서 비교가 복잡해진다.

이러한 문제를 해결하기 위해 둘을 조화평균한 값인 F1-Score을 사용한다.

 


* 동의어 정리

- 민감도(sensitivity); 재현율(recall);

- 특이도(specificity); True Negative Rate(TNR);

- 정밀도(precision); positive predictive value(PPV);

 

* [혼동 행렬 & F1 Score]

  1. itwiki.kr/w/%ED%98%BC%EB%8F%99_%ED%96%89%EB%A0%AC

* [ROC]

  1. developers.google.com/machine-learning/crash-course/classification/roc-and-auc?hl=ko

  2. ko.wikipedia.org/wiki/%EC%88%98%EC%8B%A0%EC%9E%90_%EC%A1%B0%EC%9E%91_%ED%8A%B9%EC%84%B1

  3. www.wikiwand.com/en/Receiver_operating_characteristic