본문 바로가기
Data & Research

[Machine Learning] 모델의 평가

by TrillionNT 2021. 11. 14.

이번 포스팅에서는 모델의 평가에 대해서 알아보겠습니다. 일단, 평가를 하기위해서는 모델이 어떤 목적으로 만들어진 모델인지 먼저 판단을 하셔야겠죠. 가장 중요한것이 분류를 위한 모델이었는가 회귀(regression)을 위한 모델이었는가입니다.

연속적인 변수를 예측하는 회귀모형(예를들어 소득 수준을 예측한다든가)인 경우에는 Mean-Squared-Error/Mean-Absolute-Error 등을 활용합니다. 저희가 선형회귀분석에서도 목적함수로 MSE를 사용했던 것 기억하시죠? 그렇다면 분류모델의 경우에는 어떨까요? (이 부분은 https://tykimos.github.io/ 블로그와 책 자료가 좋아서 많이 활용하였습니다. 책이 아주 컬러풀하고 재질도 좋은 종이를 쓰셨더라고요) "얼마나 잘 맞추는지 알아보는 정확도가 있지 않느냐?" 고 반문하실지도 모르겠습니다. 그런데 분류 모델의 평가지표는 정확도만 있는 것이 아니라 더 많습니다. 모델이 Positive/Negative를 가려내는 모델이라면 가장 바람직한 것은 Positive를 Positive로(True Positive), Negative를 Negative로(True Negative) 뱉어내는 것이겠지만 모델이 완벽하지 않기에 Negative를 Positive로(False Positive) 혹은 Positive를 Negative로(False Negative) 뱉어내기도 합니다. 그래서 이 비율들을 가지고 분류모델의 평가지표로 삼습니다. 굳이 이런 것들이 필요한지 의문이 드시죠? (심지어 헷갈림...)

위에서 말씀드린 블로그의 기가막힌 예시를 볼까요? 초록색/노란색 블럭이 있는데 우리가 초록색 블럭을 골라내는 모델(모델 A~F)을 만들었다고 해봅시다. 그럼 각각의 지표는 정의대로 계산이 가능합니다. 지금 초록색이 Positive, 노란색이 Negative이겠죠.

1) 정확도 (Accuracy)

2) 민감도/재현율 (Sensitivity/Recall)

3) 특이도 (Specificity)

4) 정밀도 (Precision)

이제 왜 여러 지표가 필요한지 보이시나요? 만약에 우리가 갖고 있는 샘플이 Imbalanced Sample이었다고 하면 어떻게 될까요? 예를들어서 10개중 9개가 Positive고 1개가 Negative입니다(아주 극단적인 상황같아 보이겠지만 실제 문제에서는 이런경우가 정말 많습니다. 제 현 직장에서도 마케팅 캠페인에 대한 반응을 한 고객을 집계해보면 1%가 안되는 경우가 수두룩합니다) 지금 우리가 직관적으로 생각해도 모델B와 모델C는 개똥같은(?!) 모델입니다. 그냥 눈 감고 다 Positive 혹은 다 Negative로 뱉어내고 있습니다. 그런데도 모델 B는 방금 예시에 대해서 10개중에 9개를 맞추게 되는 셈이라 정확도는 90%입니다. 안 좋은 모델인데 좋은 것같은 착각을 하게되는 것이죠. 그래서 이런경우에 Precision 등의 지표도 같이 보아야 합니다.

 

자, 그리고 한가지 더 체크해야할 부분이 있습니다. 분류모델을 만든다고 해도 보통 모델의 출력(outcome)이 곧바로 Positive/Negative로 뱉어내는 경우는 잘 없습니다. 보통 내부적으로 최적화하는 과정에서 미분등의 작업이 필요하기 때문에 결국 0~1사이의 값으로 뱉어내는 경우가 많죠(0이 Negative, 1이 Positive에 대응). 이러면 모델의 출력은 0.80 뭐 이런식으로 나오게 됩니다. 그럼 우리는 이걸 Positive라고 해야할까요? Negative라고 해야할까요? 정답은 우리 목적에 맞게 케바케라는 겁니다.

80%면 꽤 높은 확률이긴 하지만 사안에 따라서 기준을 보수적으로 잡아야할 수도 아니면 관대하게 잡아야할 수도 있는 겁니다(예를 들어 제약회사에서 신약실험을 하는데 효과가 있는걸 없다고 하는 것까진 그래도 양해의 여지가 있죠. 그런데 만약 효과가 없는걸 있다고 주장한다면? 엄청난 법적/금전적 손실을 감수해야겠죠).

 

따라서 우리가 그 기준값(Threshold)를 어떻게 잡느냐에 따라서도 모델의 지표가 달라지는데, 그럼 모델끼리 비교는 어떻게 해야할까요? Threshold값을 0~1로 바꿔가면서 그래프상에서 Ture/False Positive 평가지표를 찍어봅니다. 그게 ROC 커브입니다.

 

위 그림에서 빨/파/하늘/초 색깔은 각각의 개별적인 모델을 나타내는 겁니다. 각각의 모델 내에서도 Threshold를 바꿔가면 특이도와 민감도가 바뀐다고 말씀드렸죠? 좋은 모델이라는 것은 Positive를 Positive로 잘 분류하기도 하면서 동시에 Negative를 Positive라고 잘못 분류해선 안됩니다. 그렇기에 모델의 ROC curve를 그렸을 때 좌상단으로 붙을수록 좋은 모델이라고 할 수 있습니다. 그리고 이러한 ROC curve의 성능을 종합적으로 나타내는 지표가 AUC ROC라고 할 수 있습니다. 이상적인 최상의 모델이라면 AUC ROC의 값이 1이 나오고 랜덤하게 뱉어내는 모델이라면 0.5가 나옵니다(그림에서 대각선). 

 

이것으로 이번 포스팅을 마치겠습니다.