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
Precision 과 Recall(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)
반응형