머신러닝에 입문한지 얼마 안되는 초짜라 분류기의 평가 지표는 언제나 헷갈립니다. 익숙해졌다고 또는 다 외웠다고 자만(근자감)했을때 누군가 물어보면 어버버하면서 제대로된 설명이나 답을 못하는 경우가 많았습니다.
이 글을 쓰는 순간에도 사실 진정한 의미까지 파악하지는 못했지만 (왜 그 평가 지표를 사용하는지 등) 평가 지표가 가지는 표면적인 이유 수준에서 정리해보려고 합니다.
나중에 또 누군가 물어보면 까먹겠지만요...
아래는 참과 거짓을 판별하는 분류기에 대한 Confusion Matrix입니다.
실제 참/거짓은 Label상에 참과 거짓이고, 예측 참/거짓은 분류기가 분류한 결과입니다.
실제 참 | 실제 거짓 | |
---|---|---|
예측 참 | True Positive | False Positive |
예측 거짓 | False Negative | True Negative |
테이블 바디내의 두 단어는 {정답}{예측값} 의 조합으로 되어 있습니다.
Accuracy는 ML 분야에서는 통상 정확도로 불립니다.
정확도의 의미는 '모든 분류 결과 중에서 살제참-예측참 그리고 실제거짓-예측거짓'의 비율입니다.
좀 쉽게 설명하면, 참을 참으로 거짓을 거짓으로 잘 분류한 비율입니다.
Precision은 일반적으로 정밀도라고 불리웁니다. 왜 정밀도라고 부르는지는 사실 잘 모르겠습니다만, 이건 그냥 통상적으로 그렇게 쓰기 때문에 받아들이는 것이 편할 것 같습니다.
정밀도의 의미는 '분류기가 참으로 분류한 결과 중에서 실제 참의 비율'입니다. 즉, 얼마나 정밀하게 참으로 분류했는지를 비율적으로 표현한 것입니다.
여기서 잠깐 Recall과 헷갈라는 분들(나를 포함)을 위해 외우는 방법을 하나 소개합니다.
Precision은 위 공식에서 보는 바와 같이 분류기가 Positive로 예측한 것만을 취급하기 때문에 Precision의 'p'만 사용해서 공식이 이루어진다고 생각하면 외우기 좀 수월할 것 같습니다.
그래서 공식의 분모가 TP + FP로 이루어지고, 분자가 TP로 구성되어 있습니다.
Recall은 일반적으로 재현율이라고 합니다. 그외에도 Hit Ratio 등으로 불리우지만, 재현율이라는 이름이 사실 굉장히 와닿지는 않습니다. 멀 재현했다는 거지?
재현율의 의미는 '실제 참 중에서 분류기가 참으로 분류한 비율'입니다. 이 부분이 정밀도와 굉장히 헷갈리는 부분입니다. 하지만, 아래에서 보는 것과 같이 수식의 분모가 실제 참이라는 부분이 다릅니다. 정밀도는 분류기가 참으로 분류한 것이 기준인데 반해 재현율은 실제 참값이 기준입니다.
F1 Score는 Precision과 Recall의 조화평균으로 주로 분류 클래스 간 데이터가 심각한 불균형을 이루는 경우에 사용합니다. 정확도의 경우, 클래스가 데이터 분류가 균일하지 못하면 머신의 성능을 제대로 나타내줄 수 없기 때문에 F1을 사용한다고 생각하면 될 것 같습니다.
F1 Score는 원래는 F Score에서 왔다고 합니다.(흠 그럼 F Score는 또 뭘까) F Score는 Precision과 Recall의 조화평균을 구하는데 가중치를 0.5(즉 둘다에게 동일한 가중치)를 주는 경우 아래와 같이 값이 1이 되기 때문에 F1 Score라고 부른다고 합니다. (https://blog.acronym.co.kr/557)
여기서 가 되면,
과 같이 됩니다.
F1 Score는 위에서 소개한 것과 같이 분류 클래스간 데이터가 불균형을 이루는 경우에 사용한다고 했습니다. 이러한 경우 Accruacy를 사용하게 되면, 머신의 성능을 잘못평가하게 되는 우려를 범할 수 있기 때문에 F1 Score와 같이 종합(?)으로 클래스간 불균형에 대해 보정한 성능을 보여주는 지표를 사용하게 되는 것입니다.
예를 들어, MRI 사진으로 암판별을 수행하는 머신이 있다고 가정하겠습니다. 그리고, 아래와 같이 Confusion Matrix가 있다고 생각해봅니다. 각 칸은 예측 갯수입니다. 편의상 전체 케이스가 100개라고 하겠습니다.
실제 양성 | 실제 음성 | |
---|---|---|
예측 양성 | True Positive = 5 | False Positive = 3 |
예측 음성 | False Negative = 5 | True Negative = 87 |
위에서 보이듯이 실제 데이터 양성:음성의 비율이 10:90으로 불균형의 클래스를 이루고 있습니다.
여기서 Accuracy를 구해보면,
정확도가 0.92가 나옵니다. 이 머신이 92%의 정확도를 보이는 괜찮은 성능의 머신이라고 생각하기 좋습니다.
하지만, 좀더 관찰해보면, 실제 양성 케이스 10건 중에서 음성으로 예측한 케이스가 무려 50%에 해당합니다. 5명의 환자는 음성이라고 믿었는데, 실제는 양성이었던 것이죠. 또한 실제 음성임에도 양성이라고 예측한 환자는 3명이나 됩니다. 환자들에게는 날벼락같은 얘기가 될것 같습니다.
여기서 Recall을 구해보면,
즉 재현율(실제 양성이라고 판별해야하는 것 중에서 양성으로 예측한 것)은 50%에 불과합니다.
마찬가지로 Precision은,
가 됩니다.
Accuracy에 비해서 다른 지표들이 현저하게 낮음을 알 수 있습니다.
F1 Score도 구해보겠습니다.
이 됩니다.
위 예에서 본 것 처럼 Accuracy는 클래스가 불균형한 문제에서는 좋은 지표가 아님을 확인할 수 있었습니다. 이러한 경우,재현율, F1 Score를 고려하는 것이 더 좋은 머신을 만드는 것이 될 것입니다.
confusion matrix 에 오류가 있는 것 같습니다.