티스토리 뷰

ML

오차행렬 (Confusion Matrix)

마로그래머 2023. 7. 27. 00:00
반응형

Confusion Matrix (오차행렬)

Classification 모델의 퍼포먼스를 설명할 수 있는 테이블이다.
간단한 설명을 해보자.


Actual\Predict POSITIVE NEGATIVE
POSITIVE True Positive False Positive
NEGATIVE False Negative True Negative

  • 은 Actual Values로 실제 값을 말한다.
  • 은 Predictive Values로 예측값을 말한다.
  • True Positive (TP): 모델의 예측도 YES, 실제값도 YES일 때
  • True Negative (TN) : 모델의 예측이 NO, 실제값도 NO일 때
  • False Positive (FP) : 모델의 예측이 YES, 하지만 실제값은 NO일 때 (Type 1 에러라고도 부른다.)
  • False Negative (FN): 모델의 예측이 NO, 하지만 실제값은 YES일 때 (Type 2 에러라고도 부른다.)

자, 이제 이것을 가지고 어떻게 분석하는지 살펴보자.


Accuracy

모델이 예측을 얼마나 잘 예측했는지를 확인

TP + TN / total
  • 이것만 가지고 정확도를 예측할 수 없다.
    • 만약 모델에게 990개의 오렌지와 10개의 사과의 데이터를 주고 사과와 오렌지를 분류하라고 했을 때, 모든 것을 오렌지로만 보는 모델은 정확도가 높을 수밖에 없다.
    • 즉, 데이터가 편향되어있으면 이 정확도를 신뢰할 수 없게된다.

Misclassification Rate (Error Rate)

모델이 얼마나 틀렸는지를 확인

FP + FN /total

Recall (Sensitivity, True Positive Rate, 재현율)

실제 True인 것중에서 모델이 True라고 예측한 확률

TP / TP + FN
  • 모델에게 사과와 오렌지를 분류하라고 시킨 뒤, 사과클래스에 분류되어있는 사과전체 사과 값들로 나눈다고 생각하자.
  • 실제로 Positive 한 것을 놓치는지 아닌지 확인할 때 씀.
  • 잘못된 양성반응은 괜찮지만 양성반응 자체를 놓치는 것은 안되는 의료계에서 중요하게 생각할 확률.
  • Precision 과는 trade-off 관계이다.

Specificity(True Negative Rate)

실제값이 True일 때, 모델의 예측값이 False를 한 확률.

TN / TN + FN

Precision (정밀도)

모델이 True라고 예측한 것 중에서 실제 True인 것의 확률

TP / TP + FP
  • 모델에게 사과와 오렌지를 분류하라고 시킨 뒤, 모델이 분류한 사과 클래스 안에 있는 실제 사과 값들을 사과 클래스 안에 있는 모든 값들로 나눈다고 생각하자.
  • Positive 하다고 말한 것이 실제로 Positive 한 것인지를 확인할 때 씀.
  • 잘못된 긍정으로 고객에게 안좋은 영향을 끼칠 수 있는 음악, 영상 추천 시스템이나 e-커머스 사이트에서 중요하게 생각할 확률
  • Recall 과는 trade-off 관계이다

Prevalence

주어진 데이터 샘플에서 모델이 True를 얼마나 많이 했는지를 확인

TP + FP / total

F1 Score

PrecisionRecall(True Positive Rate)trade-off 관계이기 때문에 이를 조화평균해놓은 것.

2 * (Precision * Recall / Precision + Recall)
  • 데이터가 어느 한 쪽으로 치우쳐서 불균형할 때 정확도 대신 쓰인다.



Example

  • sklearn 으로 counfusion matrix를 만든 뒤, pandas로 직접 볼 수 있다.
import pandas as pd
from sklearn.metrics import classification_report, confusion_matrix

# printing confision matrix
pd.DataFrame(confusion_matrix(y_test,y_pred),\
            columns=["Predicted NO", "Predicted YES"],\
            index=["NO","YES"] )



  • sklearn 으로 바로 예측해볼 수 있다.
from sklearn.metrics import accuracy_score
from sklearn.metrics import recall_score
from sklearn.metrics import precision_score

accuracy_score(y_test, y_pred)
recall_score(y_test, y_pred)
precision_score(y_test, y_pred)




반응형

'ML' 카테고리의 다른 글

ROC Curve & AUC Curve  (0) 2023.07.27
9. 배치 정규화 (Batch Normalization)  (0) 2023.07.26
8. 하이퍼파라미터 튜닝 (Hyperparameter Tuning)  (0) 2023.07.26
7. 학습률 감쇠 (Learning Decay), Local Optima  (0) 2023.07.24
6. Adam  (0) 2023.07.24
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함