0과 1, 두 가지로 분류하는 이진분류 문제에서 Confusion Matrix는 굉장히 중요합니다.
특히 0과 1의 비율이 맞지 않는 경우 accuracy만으로 모델을 평가하기엔 한계가 있습니다.
처음에는 헷갈릴 수 있는 개념이나 알고보면 굉장히 단순한 개념입니다.
Accuracy, Precision, Recall, F1-Score에 대해 하나씩 정리해보겠습니다.
1. Confusion Matrix 란?
0과 1로 분류하는 문제에는 당연히 0과 1로 예측한 것과 0과 1이 정답인 것이 있습니다.
실제 값과 예측값이 맞는 경우를 True라고 칭하고 앞 글자에 T로 표시합니다. ( TN, TP )
실제값과 예측값이 틀린 경우를 False라 칭하고 앞 글자에 F로 표시합니다. ( FN, FP )
1로 예측한 것을 Positive라 칭하고 뒤에 P로 표시합니다. ( FP , TP )
0으로 예측한 것을 Negative라 칭하고 뒤에 N으로 표시합니다. ( TN, FN )
따라서 다음과 같이 정리할 수 있습니다.
1. TP ( True Positive ) : 1로 예측했고 정답인 것
2. TN ( True Negative ) : 0으로 예측했고 정답인 것
3. FP ( False Positive ) - Type 1 Error : 1로 예측했고 오답인 것
4. FN ( False Negative ) - Type 2 Error : 0으로 예측했고 오답인 것
그림2에 대해 Accuracy, Precision, Recall, F1-score을 구해보겠습니다.
2. Accuray
Accuracy는 전체 예측 중 정답인 비율입니다.
- $Accuracy = \frac{TP + TN}{TP + TN + FN + FP}$
따라서 그림 2에서는 $\frac{30 + 930}{30 + 930 + 30 + 10}=0.96$입니다.
96%는 나쁘지 않은 수치이지만 FN이나 FP에 민감한 경우 다른 지표가 필요합니다.
특히 코로나와 같은 전염병을 예방하기 위해서나 암 검사와 같이 잘못된 음성이 큰 피해를 줄 수 있을 때는 FN에 더 집중해서 살표볼 필요가 있습니다.
잘못 음성이라고 판단해서 감염자가 거리를 활보하거나 제때 치료를 받지 못한다면 큰 피해로 이어질 수 있습니다.
3. Precision vs Recall
- $ Precision = \frac{TP}{TP + FP} $
- $ Recall = \frac{TP}{TP +FN}$
먼저 Precision은 양으로 예측한 것 중에 진짜 양인 것의 비율입니다. ( 양 = 1 , 음 = 0 )
그림 3과 같고 $\frac{30}{30+30}=0.5$입니다.
Recall은 실제 양인 것 중에 양으로 예측한 비율입니다.
그림 4와 같고 $\frac{30}{30+10}=0.75$입니다.
특히 Recall은 앞서 언급한 것처럼 FN이 낮아야하는 경우에 주로 사용되는 경우입니다.
정확히는 false alarm은 크게 상관없지만 actual positive를 찾지 못할 경우 큰 피해를 입는 경우로,
암 진단과 같은 경우가 있습니다.
Precision과 Recall은 상호보완적인 관계입니다.
Precision을 높이기 위해서는 진짜 확실한게 아니면 다 0으로 예측하면 되고,
Recall을 높이기 위해서는 전부다 1로 예측하면 되기 때문입니다.
따라서 이 2가지를 모두 고려해야 합니다.
4. F1-Score
$F1-score = 2*\frac{Precision*Recall}{Precision + Recall} =\frac{2}{\frac{1}{Recall}+\frac{1}{Precision}}$
F1-Score는 위의 2가지를 모두 고려하기 위해 필요한 지표로 Precision과 Recall의 조화평균 값입니다.
- 출처
- Reference
'DataScience > MachineLearning' 카테고리의 다른 글
선형함수 정리 (Linear Regression, Ridge, Lasso, Elastic Net) (0) | 2023.07.28 |
---|---|
[평가지표] AUC-ROC Curve (0) | 2023.07.14 |
와디즈 - 모델링 (0) | 2022.04.10 |
ML - NaiveBayes, Scikit learn (0) | 2021.10.31 |
ML - NaiveBayes (0) | 2021.10.31 |
댓글