분류 모델을 연구개발하여 완성된 결과물은 분류 성능 평가지표(Classification Evaluation Metrics)를 통해 얼마나 유의미한 모델인지에 대한 평가가 필요하다. 이를 위해 여러 가지 방법들이 있는데 Confusion Matrix, Accuracy, Precision , Recall , F1 score, ROC curve, AUC 등이 있다. 많은 종류가 있지만 모델이 사용되는 환경에 따라 어떤 지표를 이용하여 모델을 평가할지는 연구자의 몫이다.
Confusion Matrix(혼동 행렬)
Confusion Matrix란 모델이 예측한 값(Predicted Class)과 실제 값(Actual Class)을 비교하기 위한 표이다
True/False는 실제 값과 예측 값이 일치하는지에 대한 판단에서 사용된다. Positive/Negative는 예측한 값에 대해서 사용된다.
- T(True): 예측한 것이 정답
- F(False): 예측한 것이 오답
- P(Positive): 모델이 positive라고 예측
- N(Negative): 모델이 negative라고 예측
위 True/False와 Positive/Negative를 이용하여 아래와 같은 여러 케이스로 나누어 볼 수 있다.
- TP(True Positive): 모델이 positive라고 예측했는데 실제로 정답이 positive (정답)
- TN(True Negative): 모델이 negative라고 예측했는데 실제로 정답이 negative (정답)
- FP(False Positive): 모델이 positive라고 예측했는데 실제로 정답이 negative (오답) -> (제1종 오류, Type I Error )
- FN(False Negative): 모델이 negative라고 예측했는데 실제로 정답이 positive (오답) -> (제2종 오류, Type II Error )
이 케이스들은 여러가지 다른 평가지표에 응용하여 사용할 수 있다.
Accuracy(정확도)
Accuracy는 분류 모델이 전체 문제 중에서 정답을 맞힌 비율이다.
0 ~ 1 사이의 값을 가지며, 1에 가까울수록 좋다.
$$ Accuracy = \frac{TP + TN}{TP + FN + FP + TN} $$
예시) 스팸 필터링
: 이메일 필터가 100개의 이메일 중 90개를 정확히 분류했다면, 정확도는 90%이다. 즉, 전체 이메일 중 올바르게 분류된 비율이 된다.
하지만 Accuracy는 데이터가 불균형하다면 Accuracy만으로 제대로 분류했는지는 알 수 없기 때문에 Recall과 Precision을 함께 사용한다.
예를 들어 샘플 데이터의 99%가 Negative class를 가진 샘플로 구성되어 있다면, 이때 이 모델의 classification 성능은 모든 샘플 값들에 대해 Negative로 예측하더라도 99%의 정확도를 내게 된다.
Precision(정밀도)
Precision은 모델이 Positive라고 예측한 것들 중에서 실제로 정답이 Positive인 비율이다. Precision을 높이기 위해선 FP(모델이 Positive라고 예측했는데 정답은 Negative인 경우)를 낮추는 것이 중요하다.
0 ~ 1 사이의 값을 가지며, 1에 가까울수록 좋다.
$$ \text{Precision} = \frac{TP}{TP + FP} $$
실제 정답이 Negative인 데이터를 Positive라고 잘못 예측하면 안 되는 경우에 중요한 지표가 될 수 있다.
예시) 고객 이탈 예측
: 이탈할 것으로 예측된 고객 중 70%가 실제로 이탈했다면, 정밀도는 70%입니다. 즉, 모델이 양성으로 예측한 샘플 중 얼마나 많은 샘플이 실제로 양성인지를 나타냅니다.
Recall(재현율)
Recall은 실제로 정답이 Positive인 것들 중에서 모델이 Positive라고 예측한 비율이다. Recall를 높이기 위해선 FN(모델이 Negative라고 예측했는데 정답이 Positive인 경우)을 낮추는 것이 중요하다.
0 ~ 1 사이의 값을 가지며, 1에 가까울수록 좋다.
$$ \text{Recall} = \frac{TP}{TP + FN} $$
실제 정답이 Positive인 데이터를 Negative라고 잘못 예측하면 안 되는 경우에 중요한 지표가 될 수 있다.
예시) 암 진단
: 실제로 암에 걸린 환자 중 80%가 양성 판정을 받았다면, 재현율은 80%이다. 즉, 실제 양성 샘플 중 얼마나 많은 샘플이 올바르게 식별되었는지를 나타낸다.
F1 score
F1 score는 Precision과 Recall의 조화평균이다.
Precision과 Recall은 trade-off 관계이다. 즉, Recall이 좋아지면 Precision이 감소하고, 반대로 Precision이 나빠지면 Recall이 좋아진다. 따라서 F1 score는 Recall과 Precision이 한쪽으로 치우쳐지지 않고 모두 클 때 큰 값을 가진다.
0 ~ 1 사이의 값을 가지며, 1에 가까울수록 좋다.
$$ F1 Score = \frac{2 \times \text{Precision} \times \text{Recall}}{Precision + Recall} $$
예시) 질병 검사
: Precision과 Recall이 각각 80%와 60%일 때, F1 Score는 68.57%이다. 이는 불균형한 데이터에서 모델의 전반적인 성능을 평가하는 데 유용하다.
ROC(Receiver Operating Characteristic) curve & AUC(Area Under the Curve)
ROC curve는 이진 분류 모델의 성능을 시각적으로 평가하는 그래프이다. x축은 False Positive Rate(FPR), y축은 True Positive Rate(TPR)를 나타낸다.
$$ FPR = \frac{FP}{FP + TN} $$ $$ TPR = \text{Recall} = \frac{TP}{TP + FN} $$
다양한 임계값에 따른 모델의 성능을 비교할 수 있도록 해주며, 임계값을 변경함에 따라 TP와 FP의 수가 달라지고, 그에 따라 TPR과 FPR이 변화한다. ROC 곡선의 기울기가 크고 오른쪽 위 코너에 가까울수록 성능이 우수한 모델이라고 볼 수 있다.
AUC는 ROC 곡선 아래의 면적으로, 0에서 1 사이의 값을 가진다.
0 ~ 1 사이의 값을 가지며, 1에 가까울수록 좋다. AUC가 0.5이면 무작위 분류와 동일한 성능을 의미하며, 0.5 이하이면 모델이 실제로 잘못 분류하고 있다는 것을 나타낸다. 예를 들어 AUC 값이 0.8이면, 임의로 선택된 두 개의 샘플(하나는 Positive, 하나는 Negative)에서 모델이 양성을 더 높게 점수화할 확률이 80%라는 의미가 된다.
관련 포스트
2024.04.12 - [Data Science/Statistics] - [Python] 산술 평균, 기하 평균(Gmean), 조화 평균
참고 자료
https://www.ml-science.com/confusion-matrix
https://white-joy.tistory.com/9
https://sumniya.tistory.com/26
https://deeesp.github.io/machine%20learning/Classification-Evaluation-Metrics/
https://www.geeksforgeeks.org/auc-roc-curve/