아는 만큼 보인다
[머신러닝 machine learning] 척도metric (accuracy, precision, recall, and f1 score) 본문
[머신러닝 machine learning] 척도metric (accuracy, precision, recall, and f1 score)
계토 2022. 8. 27. 17:41척도는 모델을 평가하기 위해 사용하는 값이다. 척도를 통해 모델의 성능을 비교하여 여러 모델 중 하나를 선택할 수도 있고, 기존 모델의 성능이 낮다면 이를 높이기 위해 다양한 대처를 해볼 수도 있다. 결국 잘 맞추면 되는 것 아닌가? 즉 정확도(accuracy)가 높으면 되는 것 아닌가? 라고 생각할 수도 있지만, 데이터의 특징이나 상황, 목적에 따라 다양한 척도가 사용될 수 있다.
척도에 대한 설명으로 바로 들어가기 전에, 분류 문제에 있어서 다음과 같은 confusion matrix를 그려볼 수 있다.
Predicted/classified label 예측된/분류된 라벨 |
|||
Negative | Positive | ||
Actual label 실제 라벨 |
Negative | True Negative 980 |
False Positive 0 |
Positive | False Negative 10 |
True Positive 10 |
우선, 단순히 답을 얼마나 맞췄는지(negative인 것을 negative라고 분류, positive인 것을 positive라고 분류)를 정확도라고 정의하고 생각해보자. 위의 정보를 통해, 모델의 정확도는 (980+10)/(980+10+10) = 0.99라는 것을 알 수 있다! 매우 높은 정확도이다.
그러나 살펴보면, 이 모델이 실제로 negative인 것에 대해서는 모두 negative라고 정확하게 예측했지만, positive인 것에 대해서는 20개 중 10개를, 즉 1/2의 확률로 positive라고 예측했다는 것을 알 수 있다. 즉 실제 positive인 것에 대한 예측률은 낮은 편이다.
나아가, 애초에 전체 데이터 셋에서 negative 인 데이터이 980개, positive인 데이터가 20개이다. 데이터의 분포가 상당히 불균형하다. 이 경우, 그냥 모든 데이터에 대해 negative라고 예측하는 멍청한(!) 모델을 만들어도 그 모델은 0.98의 정확도를 갖게 된다.
이처럼 단순하게 정확도만 계산해서는 모델의 성능을 제대로 평가할 수 없으므로 이를 위한 다양한 척도가 사용되고 있다.
정확도(Accuracy)
앞서 잠깐 설명했듯이, 정확도가 가장 단순한 척도이다. true label을 얼마나 맞추었는지를 나타낸다.
정밀도(Precision)
모델이 positive로 예측/분류한 것 중 얼마나 실제로 positive인지 나타내는 척도이다. 양성예측률(positive predictive value)라고도 불린다.
식을 들여다보면, 정밀도는 false positive가 작으면 높아진다. 즉, 정밀도는 모델을 활용하는 맥락을 생각해볼 때, false positive의 비용이 매우 높아 false positive를 줄여야할 때 사용하기 좋다. 스팸 메일을 분류하는 문제를 생각해볼 수 있다. 이 상황에서 false positive는 스팸이 아닌(negative) 메일이 스팸으로 분류되는 것이다. 모델의 정밀도가 높지 않은 경우 중요한 이메일이 스팸으로 분류될 수 있고, 그렇게 되면 사용자가 중요한 메일을 놓치는 상황이 생길 수 있다. 이에 이러한 경우처럼 false positive가 최소화되어야하는 경우에는 정밀도를 사용하면 좋다.
재현율(Recall)
실제 positive 중에서 우리의 모델이 얼마나 positive라고 잡아냈는지 나타내는 척도이다. 민감도(sensitivity)라고도 불린다.
정밀도에서 살펴본 것처럼 식을 들여다보면, 재현율은 false negative가 작으면 높아진다. 즉 false negative를 최소화해야 할 때 사용하기 좋다. 의료 현장, 즉 환자의 질환 진단 여부를 분류/예측하는 문제를 생각해볼 수 있다. 환자가 실제로 병을 갖고 있는데 (positive), 병이 없는 것으로 분류/예측되는 경우로, 만약 해당 병이 빠른 조치가 필요한 종류의 병이었다면, 잘못된 예측의 결과가 매우 치명적일 수 있다.
F1 score
F1 score는 정밀도와 재현율을 함께 고려한 척도이다.
즉, false negative와 false positive를 모두 최소화하는 것이 중요하여 재현율과 정밀도 간의 균형/절충이 필요한 경우 사용될 수 있다. 동시에 정확도와는 달리 전체 데이터 분포가 불균형할 때에도 사용될 수 있다. 그러나 f1도 데이터의 불균형을 완벽히 보정해주지는 못하고 특히 true negative가 고려되지 않는다는 한계가 있다. 또한, 앞서 설명했듯 문제 상황에 따라 재현율과 정밀도의 상대적인 중요도가 다를 수 있는데, 두 척도에 같은 중요도를 부여한다는 한계도 존재한다. 그러나 여전히 널리 쓰이는 척도이다.
참고한 자료
https://towardsdatascience.com/accuracy-precision-recall-or-f1-331fb37c5cb9
'머신러닝&딥러닝' 카테고리의 다른 글
Tensorflow SavedModel 포맷 모델을 Tensorflow Lite (TFLite)로 변환할 때 input_signature 오류 (1) | 2023.10.13 |
---|---|
Tensorflow Lite (TFLite) 로 효율적으로 배포/추론하기 (0) | 2023.10.13 |
[읽고 구현하기] ResNet 완전 처음부터 하나하나 구현하기 - tensorflow, subclassing 방법 (ResNet34) (0) | 2023.09.06 |
[논문 읽기] ResNet - Deep Residual Learning for Image Recognition 2015 이해하기 (0) | 2023.06.14 |
내 딥러닝 모델(학습)이 지나치게 느릴 때 점검해야할 사항들 (0) | 2023.05.01 |