uuuu

이주현·2023년 11월 19일

Confusion Matrix (오차 행렬) : Training을 통한 Prediction 성능을 측정하기 위해 예측 값 과 실제 값 을 비교하기 위한 표

오차 행렬 예시

# Confusion Matrix 출력 예시

array([[98,  8],
        [ 12, 88]])

Confusion Matrix

환자다(True, Postive) / 환자가 아니다(False, Negative)

  • Actual(Positive) : 실제 환자
  • Actual(Negative) : 실제 환자가 아님
  • Predict(Positive) : 실제 환자로 예측
  • Predict(Negative) : 환자가 아닌 것으로 예측
  1. TP(True Positive) :
    • 긍정예측을 성공 즉, 환자라고 예측해서 실제 환자임을 맞춤
  2. TN(True Negative) :
    • 부정예측을 성공 즉, 비환자라고 예측하여 실제 비환자임을 맞춤
  3. FP(False Positive), Type 1 Error :
    • 긍정예측을 실패 즉, 환자라고 예측했지만 비환자임
  4. FN(False Negative), Type 2 Error :
    • 부정예측을 실패 즉, 비환자라고 예측했지만 실제 환자임
  • Type1(FP)과 Type2(FN), Precision, Recall은 모델에서 항상 중요도 확인을 해야함
    - 암과 관련된 문제로 유명함
    - ex)
    - Type1 Error :
    1. 건강한 환자에게 암에 걸린 것 같다고 예측함
    2. FP 예측이었음
    3. 큰 문제 안됨
    - Type 2 Error
    1. 암 환자에게 건강한 것 같다고 예측함
    2. FN 예측이었음
    3. 큰 문제임
    - 이 경우 Type2가 더 심각한 결과를 불러올 수 있음, 따라서 더 신경써서 모델링 해야함
  • Precision
    - TP / TP + FP or TN / TN + FN
    - Positive라고 예측한 것중에서 실제로 Postivie인 것
    - 내가 예측한 값 중 정답이 있을 경우 (1에 가까울 수록 좋다)
  • Recall (Sensitivity, True Positive Rate)
    - TP / TP + EN
    - 실제 Postivie 중 얼마나 많은 Postivie를 올바르게 예측했는지
    - 실제 1인 값 중 1이라고 예측한 것이 있을 경우 (1에 가까울 수록 좋다)
  • Accuracy
    • TP + TN / TP + FP + TN + FN
    • 전체 예측한 것 중에 올바른 예측을 얼마나 했는지
    • 전체 경우의 수 중에서 정답으로 분류한 비율 (1에 가까울수록 좋다)
      - Error Rate = 1 - Accuracy
      - 정확도만으로는 모델의 성능을 올바르게 평가하기 어려움
      - ex)
      - 95%의 데이터가 A 클래스이고 5%만 B 클래스인 경우, 모든 데이터를 A로만 예측해도 정확도는 95% 임
      - 모델의 척도로 사용할 수 없음
      - 이런걸 불균형 데이터(imbalanced data) 라고 함
      - Accuracy를 평가 척도로 사용한다면 균형 데이터(balanced data)에 사용해야함
  • F1 Score
    - Precision과 Sensitivity의 조화 평균
    - Precision과 Recall의 밸런스를 고려하여 정확도 측정
    - 불균형한 데이터 셋에서는 Accuracy 보다 F1 Score가 모델의 성능을 더 잘 나타내는 경우가 많음 (1에 가까울 수록 좋다)
    - ex) (가정 : conversion의 0의 비율이 약 85% 였음)
    - Model1은 A Class에 대한 예측률은 좀 떨어지지만, B,C,D 에 대해 전반적으로 잘 맞추는 모델이고,
    Model2는 오직 A Class만 잘 맞추는 모델이다. 즉, Model2는 거의 모든 예측을 A라 한다고 봐도 무방한 모델이다.
    		  이 때, 각 모델에 대한 **정확도**를 구해보면
    		  Model1 : (100+9+8+9)/230 = 0.547
    		  Model2 : (198+1+1+1)/230 = 0.87
    		  로 Model2가 Model1에 비해 훨씬 높은 값을 가지고 있다.
    	  
    		  즉, 정확도에 의하면 A Class로만 예측하는 Model2가 Model1에 비해 더 잘 맞춘다고 판단할 수 있다.
    	  
    		  반대로, **F1 Score**를 구하면
    	  
    		  Model1 : (2∗0.492∗0.775)/(0.492+0.775) = 0.601
    		  Model2 : (2∗0.369∗0.323)/(0.369+0.323) = 0.344 
    		  로 Model1의 성능이 더 높을 것을 볼 수 있다.	  
    	  
    		  **즉, Data가 Imbalanced 할 때, 정확도가 아닌 F1 Score를 사용한다.**

Confusion Matrix, Accuracy Score 사용시 유의점

  • accuracy_score, confusion_matrix의 결과를 기존의 데이터 특성과 비교하며 확인 하여야 한다.

  • ex)
    - 사용한 기존 데이터의 경우, conversion의 0의 비율이 약 85% 였음
    - 머신러닝 모델을 생성하지 않고, 모든 인풋에 대한 아웃풋을 0으로 예측해도 정답률은 85%는 나온다는 뜻
    - 실제로 confusion_matrix를 사용하여 확인해보니, 정답(1을, 1로 예측)한 경우가 393인 반면, 오답(1을, 0으로)예측한 경우가 2344로 압도적으로 많았음
    - 안좋은거임
    - 0을 0으로 예측한(16411)에서 accuracy_score의 정답률을 끌어올린것임
    - 정답률이 크게 의미가 없다는 거임

profile
반갑습니다. 이주현입니다.

0개의 댓글