[ML] Classification Evaluation Metrics (분류성능지표)
Classification Evaluation Metrics 분류성능지표
분류성능지표는 항상 헷갈린다…
데이터를 두 가지 class로 분류해내는 binary classification이진분류 문제를 풀다보면 항상 맞닥뜨리는 것이 ‘어떤 평가지표를 써야 하는 가?’이다. 부적절한 평가지표를 사용하면, 모델 자체의 문제점을 발견할 수 없을 뿐만 아니라, 잘못된 결론을 내릴 수도 있다. 분류성능지표에는 accuracy정확도, precision정밀도, recall재현율, F1 score 등이 있다. 이러한 평가지표를 알아보기에 앞서 confusion matrix혼동행렬를 알고 넘어가야 한다.
1. Confusion Matrix 혼동행렬
Confusion matrix란 모델이 예측한 label 값 (Predicted Class)과 target의 실제 label 값 (True Class)을 비교하기 위한 표이다. 맨날 헷갈려서 confusion matrix라고 이름을 지었나 모르겠다.
헷갈리는 이유는 일단 표의 x축, y축이 그리는 사람마다 달라서인 것 같다. 따라서, 기준을 확실히 하고 머릿속에 박아놔야 안헷갈릴 듯하다.
Figure 1 Confusion Matrix
(출처 : IEEE ACCESS paper)
- True Positive (TP) : 실제 class가 Positive인데, 예측한 class도 Positive로
맞게
예측했을 때 - True Positive (TN) : 실제 class가 Negative인데, 예측한 class도 Negative로
맞게
예측했을 때
사실 까놓고 보면 별거 아닌데… 이 부분이 제일 헷갈린다.
- False Positive (TP) : 실제 class가 Negative인데, 예측한 class는 Positive로
다르게
예측했을 때. 결국 모델이 예측한 건 Positive인데, 잘못 예측한 결과인 것! - False Negative (TN) : 실제 class가 Positive인데, 예측한 class는 Negative로
다르게
예측했을 때. 결국 모델이 예측한 건 Negative인데, 잘못 예측한 결과인 것!
헷갈려도 좋습니다… 하지만 이거 하나만 기억해주세요.. 진심을 다해 전합니다.
앞의 True/False는 실제 class와 예측한 class가 일치 하는지 뒤의 Positive/Negative는 예측한 class
2. Accuracy 정확도
Accuracy는 정확하게 분류 된 data sample의 개수를 총 data sample의 개수로 나눈 것으로, 가장 직관적이고 간단한 분류성능 평가지표이다.
\[\text{Accuracy} =\frac{TP+TN}{TP+FN+FP+TN}\]하지만, accuracy는 class 별 data sample 비율에 영향을 많이 받는 치명적인 단점이 있다. Data sample의 구성이 잘못되어, 전체 데이터의 99%가 Negative class를 가진 sample들로 구성되어있다고 하자. 그러면 이 모델의 classification 성능은 모든 sample 값들에 대해 Negative로 예측하더라도 99%의 정확도를 내게 된다. 즉, accuracy는 불균형 데이터의 영향을 많이 받게 된다.
예를 들어서, 어떤 쇼핑몰에서 명품을 살 만한 사람들에게만 명품 브랜드 광고를 노출하고 싶다고 하자. 명품 사용자들의 데이터를 수집하여 train / valid / test로 나누어 학습을 하여 분류 모델을 만들었고, accuracy가 99%가 넘었다. 그런데 실제 광고를 노출해보니, 모델이 광고 대부분을 명품을 구매하지 않은 사용자들에게 노출하게 되었다. 바로 데이터의 불균형에서 accuracy의 한계점이 온 것이다. 전체 사용자 중 명품 구매 사용자 수의 비중이 매우 적어 데이터의 불균형이 생겼기 때문에, 모델 전체 accuracy가 높더라도 명품 구매자에 대한 분류 정확도는 높다고 할 수 없었다. 광고를 노출할 때, 모델로부터 ‘명품 구매 사용자’ 라고 판별된 사람들에게만 광고를 노출해야 하는데, ‘명품 구매 사용자’ 들에 대한 판별 정확도가 높지 않아 이런 현상이 발생한 것이다.
3. Precision 정밀도 & Recall 재현율
Precision과 recall은 positive class로 예측한 샘플에 대한 평가지표이다. 두 평가지표 모두 TP를 높이기 위한 목적이 있지만, 경우에 따라 FP가 낮아야 하는 경우와 FN이 낮아야 하는 경우가 있다.
Precision
Precision은 모델이 Positive class로 예측한 샘플 중 target이 실제 Positive class인 샘플의 비율을 보여주는 평가지표이다. 즉, FP를 줄이는데 초점을 둔다.
\[Precision = \frac{TP}{TP+FP}\]- 스팸메일 분류 시, 스팸이 아닌 메일 (N)을 스팸메일(P)로 분류할 경우 사용자가 불편함을 느낀다.
Recall
Recall은 target이 실제로 Positive class를 가진 샘플 중 Positive로 예측된 샘플의 비율을 보여주는 평가지표이다. 즉, FN을 줄이는데 초점을 주며, True Positive Rate (TPR) 또는 sensitivity민감도라고도 불린다.
\[Recall = \frac{TP}{TP+FN}\]- 암 검출이나 테러범 및 금융사기 적발과 같이 생명이나 큰 손해를 주는 심각한 케이스를 Positive로 분류해주어야 할 때 recall이 높아야 한다.
- 보통 recall이 precision보다 더 중요한 경우가 많다.
Trade-off btw. Precision and Recall
Precision과 Recall은 trade-off 관계이다. 즉, precision이 좋아지면 recall이 감소하고, 반대로 precision이 나빠지면 recall이 좋아진다. 그러면, 모델을 평가할 때 precision과 recall을 동시에 고려해야 할까? 아니면, 더 고차원적인 평가지표로 precision과 recall을 골고루 고려해야 할까? 경우에 따라 다르지만 두 가지 다 가능하다.
4. F1 Score
앞서 Positive class로 예측한 샘플에 대한 precision과 recall은 trade-off 관계가 있다는 것을 보았다. 이들을 적절히 고려하여 종합적인 평가를 하기 위해 F1 score가 탄생하였는데, precision과 recall의 조화평균으로 정의한다.
\[\text{F1 Score} = \frac{2\times\text{precision}\times\text{recall}}{\text{precision}+\text{recall}}\]Accuracy vs. F1 Score
Accuracy는 dataset의 class 분포가 균일하거나 비슷할 때와 positive 예측과 negative 예측이 옳게 분류가 되었을 지 볼 때 적합하다.
F1 score는 class 분포가 불균일할 때 사용되기 때문에 대부분의 real-world 분류 문제에서는 class 분포가 불균일하여 F1 score가 모델을 평가하기에 더 적합하다. 또한, F1 score는 positive class 예측에 대한 precision과 recall의 균형을 고려할 때 적합하다.
4. ROC curve & AUC
x축 → $FPR = \frac{FP}{FP+TN}$
- 실제
Negative
label인 cases 중에 모델이Positive
로 예측한 비율 - 게임에서 어뷰징 유저 → Positive
- 만약에 클린한 유저를 어뷰징 유저로 분류할 경우 게임 충성도 타격
y축 → $TPR=Recall = \frac{TP}{TP+FN}$
- AUC-ROC curve is one of the most commonly used metrics to evaluate the performance of machine learning algorithms.
- ROC Curves summarize the trade-off between the true positive rate and false positive rate for a predictive model using different probability thresholds.
- The ROC curve can be used to choose the best operating point.
5. P-R curve & PR AUC
Precision Recall Plot (이하 PR 그래프)의 경우도 ROC 와 유사한데, 주로 데이타 라벨의 분포가 심하게 불균등 할때 사용한데, 예를 들어 이상 거래 검출 시나리오의 경우 정상 거래의 비율이 비정상 거래에 비해서 압도적으로 많기 때문에 (98%, 2%) 이런 경우에는 ROC 그래프보다 PR 그래프가 분석에 더 유리하다.
출처: 조대협의 블로그
What is common between ROC AUC and PR AUC is that they both look at prediction scores of classification models and not thresholded class assignments. What is different however is that ROC AUC looks at a true positive rate TPR and false positive rate FPR while PR AUC looks at positive predictive value PPV and true positive rate TPR.
Because of that if you care more about the positive class, then using PR AUC, which is more sensitive to the improvements for the positive class, is a better choice. One common scenario is a highly imbalanced dataset where the fraction of positive class, which we want to find (like in fraud detection), is small. I highly recommend taking a look at this kaggle kernel for a longer discussion on the subject of ROC AUC vs PR AUC for imbalanced datasets.
If you care equally about the positive and negative class or your dataset is quite balanced, then going with ROC AUC is a good idea.
ROC 곡선은 다양한 테스트 셋을 만날 때마다 견고한 결과를 보여줄 수 있다. 곡선 형태 유지
PR 곡선은 반면에 뚜렷한 변화가 생긴다.
Reference
[1] James, Witten, Hastie, and Tibshirani, “An Introduction to Statistical Learning” [2] https://medium.com/swlh/recall-precision-f1-roc-auc-and-everything-542aedf322b9
Leave a comment