ADP 실기를 준비하면서 내용을 정리했습니다. 잘못된 부분이 있으면 알려주시면 감사하겠습니다.
최근 회사 업무와 ADP 공부를 병행하다 보니, 각 모델들의 성능을 비교할 수 있는 지표들을 정리할 필요가 있음을 느끼게 되었습니다. 사이킷런 라이브러리 내에도 수많은 지표들이 구현되어 있는데, 막상 골라서 사용하려니 종류도 많고 어떤 것을 쓰는 것이 좋을까?라는 고민에 늘 빠지곤 했습니다. 저와 같은 고민을 하시는 분들에게 도움이 되고, 각 지표에 대한 이해를 높이고자 이 글을 작성해봅니다.
1. 평가 지표(Metrics)란 무엇인가?
머신러닝에서 말하는 평가 지표(Metrics)는 어떤 것을 말할까? 평가 지표(Metrics)는 쉽게 말하면 모델의 성능을 숫자로 표현하는 것을 말합니다. 그리고 이 숫자는 다른 모델과 비교하는 용도로 활용됩니다. 각종 평가 지표들은 수식에 따라 다양한 특성을 지니고 있어서 올바른 지표를 선택하는 것이 굉장히 중요합니다. 그렇기 때문에 각 평가 지표들의 특성을 파악할 필요가 있습니다. 이 포스팅에서는 머신러닝에서 많이 다뤄지는 문제인 분류 문제에 대한 평가 지표들을 다룰 예정입니다. 추후 회귀 문제에 대한 평기 지표들을 다뤄보겠습니다.
위의 사진에서 볼 수 있듯이 분류 문제에서 활용할 수 있는 평가 지표만 해도 27개나 구현이 되어 있는 것을 볼 수 있습니다. 각 지표들 중에서 가장 많이 활용되는 것들을 위주로 작성해보도록 하겠습니다.
2. 분류 문제의 평가 지표
먼저 분류 문제에서는 가장 자주 활용되는 평가 지표들로는 accuracy, auc, f1 score 등이 있습니다. 각 평가 지표를 설명하기 전에 confusion matrix를 먼저 이해하시면 다른 지표들을 이해하는 데에 도움이 됩니다. confusion matrix로부터 파생되는 분류 지표들이 많이 존재하기 때문에 반드시 이해하고 넘어가시길 바랍니다.
Confusion Matrix
Confusion Matrix(혼동행렬)은 실제의 값과 예측 값을 행렬 형태로 표현합니다. 혼동 행렬을 활용하면 다양한 분류 평가 지표들을 표현할 수 있습니다. Confusion Matrix에는 TN, TP, FN, FP 값들이 존재하는데, 각 값의 이해를 돕기 위해 한 가지 예를 들어봅시다.
A라는 회사에서 만든 진단키트가 있다고 가정해보겠습니다. 10명의 사람에게 A 회사에서 만든 진단키트를 사용하도록 했습니다. 양성인 경우 1, 아닌 경우는 0이라고 했을 때, 결과는 아래의 표와 같습니다.
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
A회사 결과 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
양성 여부 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 |
결과 | TP | FP | FP | TN | FP | TP | FN | TN | TP | FN |
먼저, TP, FN, TN, FP에서 각 요소들의 의미를 알아봅시다. T와 F는 True와 False로, 예측 값과 실제 값이 같을 때에는 True, 예측 값과 실제 값이 다른 경우에는 False 값을 가집니다. P와 N은 Positive와 Negative로, 예측 결과가 양성인 경우에는 Positive, 아닌 경우에는 Negative의 값을 가집니다. 그래서 2가지의 조합으로 총 4가지로 분류할 수 있게 됩니다.
TP를 해석해보면, A회사의 예측 결과는 실제 결과와 동일했으므로 True, 예측 결과가 양성이므로 Positive가 되는 것입니다. 만약, 한 의사가 환자의 암 발생 여부를 판단한다고 가정하면, 실제 암이 걸렸는데 걸리지 않았다고 진단할 경우에 큰 문제가 발생할 수 있습니다. 이러한 경우를 제 2종 오류(FN)라고 볼 수 있으며, 제 2종 오류를 줄이는 노력을 할 것입니다. 반대로 실제 암이 걸리지 않은 환자에게 암이 걸렸다고 잘못 진단한 경우를 제 1종 오류(FP)라고 할 수 있습니다. 제 1종 오류와 제 2종 오류는 약간 Trade-off 관계에 있기에 각 도메인마다 어떤 오류가 더 치명적인지 판단하고, 오류를 낮출 수 있도록 노력합니다.
Confusion Matrix로부터 만들 수 있는 다른 평가 지표들에는 Accuracy, AUC, F1 score 등이 있습니다. 각 지표들을 Confusion Matrix를 활용해서 표현해봅시다.
Accuracy
$$Accuracy = \frac{TP+TN}{TP+TN+FP+FN}$$
Accuracy는 정확도를 나타내는 값으로 혼동 행렬로 따지면 모든 케이스 중 TP, TN의 비율을 구한 것입니다. 쉽게 말하면 얼마나 실제와 동일하게 예측했는 지를 측정합니다. Accuracy 값은 비율이기에 0과 1 사이의 값을 가지게 되며, 1에 가까울수록 좋은 성능을 보인다고 할 수 있습니다. 다만, Accuracy의 경우에는 치명적인 문제가 있습니다.
예를 들어, 1000개 중 불량이 5개 나오는 공장에서 불량인지 판단하는 모델을 만들었다고 가정해봅시다. 평가 지표를 Accuracy로 적용한다면, 단순히 모든 제품을 불량이 아니라고 해도 1000개 중에 5개 빼고는 다 맞는 결과가 나오기 때문에 0.995의 높은 결과를 얻게 됩니다. 이처럼 class의 불균형이 심한 데이터에서는 활용하는 것이 적절하지 않습니다. 그럴 때 활용할 수 있는 평가 지표로는 F1 score가 있습니다.
F1 Score
$$ F1 \, score = 2 \times \frac{Precision \times Recall}{Precision+Recall} $$
$$ Precision = \frac{TP}{TP+FP} , \, Recall = \frac{TP}{TP+FN} $$
F1 score는 위에서 말했듯이, 클래스 불균형이 있을 때, 활용하는 지표입니다. 수식을 보면 Precision과 Recall의 조화 평균입니다. Preicision은 모델이 True라고 분류한 것 중 실제로 True인 비율이고, Recall은 실제로 True 중에 모델이 True라고 예측한 비율을 뜻합니다. Precision이 높다는 것은 FP가 낮다는 뜻이므로 제 1종 오류(FP)가 낮다고 볼 수 있습니다. Recall이 높다는 것은 FN이 낮다는 뜻이므로, 제 2종 오류(FN)가 낮다고 볼 수 있습니다.
그럼 어떻게 F1 score가 불균형 데이터에서 객관적인 지표로 활용될까요? 아까 공장의 예시를 다시 한번 돌아가서 1000개 중 불량이 5개 나오는 공장에서 아래와 같은 혼동 행렬을 얻었다고 해봅시다.
불량 | 불량 X | |
불량이라고 예측 | 3 | 5 |
불량 X라고 예측 | 2 | 990 |
위의 혼동 행렬로부터 Accuracy를 구해보면, $\frac{3+990}{3+2+5+990} = 0.993$이라는 값을 얻을 수 있습니다. F1 score를 구해보면, $2 \times \frac{0.6 \times 0.375}{0.6 + 0.375} = 0.4615$라는 값을 얻게 됩니다. Accuracy에 비해 현저히 낮은 값을 얻을 수 있습니다. 이처럼, 불균형이 심한 데이터에서는 F1 score가 평가 지표로 적절합니다.
AUC
AUC를 설명하기 전에 ROC curve가 무엇인지 알아야 합니다. 위에 있는 그림의 초록색 선이 ROC curve이며, 초록선 밑으로 존재하는 회색 영역을 AUC라고 합니다. ROC curve는 그래프로 모든 임계값에서 분류 모델의 성능을 보여주는 형태로, 2개의 파라미터로 그려집니다. 이때 파라미터로 TPR(True Positive Rate)과 FPR(False Positive Rate)을 활용합니다. 각 수식은 아래와 같은 수식을 가집니다.
$$ TPR = \frac{TP}{TP+FN}, \, FPR = \frac{FP}{FP+TN} $$
여기서 나오는 TPR은 F1 score에 나왔던 Recall과 동일한 값을 가집니다. FPR은 실제 음성인 데이터 중 못 맞춘 값을 비율로 표현한 것입니다. TN이 커질수록 FPR 값은 작아지는 형태를 가지게 됩니다.
위의 그림을 보면서 값을 이해해봅시다. 검은색 선이 양성과 음성을 판단하는 기준이라고 했을 때, 해당 위치를 좌우로 움직이면서 TPR, FPR 값을 구해서 plot 하면 바로 우측의 그림의 형태가 나옵니다. AUC의 경우에는 두 개의 분포가 겹치는 영역(FN, FP)이 좁으면 좁을수록 모델이 우수하다고 평가하게 됩니다. 그래프는 1쪽에 가까운 직사각형이 될수록 좋은 분류기라고 판단할 수 있습니다.
3. 정리하기
다양한 모델을 평가하기 위한 지표 중 분류 평가 지표에 대해 알아봤습니다. 각자의 데이터 특성에 알맞은 평가 지표를 활용하는 것은 모델의 성능을 왜곡하지 않도록 도울 수 있습니다. 위에서 설명했던 것처럼 불균형한 데이터에서 Accuracy를 평가 지표로 활용하여 잘못된 모델을 적용하는 문제가 발생하지 않기를 바랍니다. 도움이 되셨길 바라며, 긴 글을 읽어주셔서 감사합니다. 다음엔 회귀에서 활용되는 평가 지표들에 대해 설명하는 포스팅을 작성해보도록 하겠습니다!