AUC(Area Under the Curve)와 Log loss는 둘 다 분류 모델의 성능을 측정하는데 사용되는 지표이다.
해당 지표들은 각 다른 측면을 평가하는데, 해당 평가 지표를 공부할 때 둘의 차이점을 제대로 파악하지 못하고 있는 것 같아서 정리를 해보려고 한다.
머신러닝 지도학습(suvervised learning)의 대표적인 유형 중 하나
주어진 데이터를 클래스 별로 구별해 내는 과정으로, 다양한 분류 알고리즘을 통해 데이터와 데이터의 레이블 값을 학습시키고 모델을 생성
데이터가 주어졌을 때 학습된 모델을 통해 어느 클래스에 속할 데이터인지 판단하고 예측함
이렇게 주어진 데이터를 두 개의 클래스 중 하나로 예측하느냐?
세 개 이상의 클래스 중 하나로 예측하느냐에 따라서
즉, 모델이 예측하려고 하는 출력 범주의 개수 에 따라서
두 개의 클래스 중 하나로 예측하는 분류 문제인 '이진 분류(binary classification)' 과 세 개 이상의 클래스 중 하나를 예측하는 '다중 분류(multiclass Classification)' 로 나눌 수 있다.
분류를 위한 알고리즘은 현재 작성 중인 주제와 관련은 있지만 양이 방대해지므로 패스
각 평가 지표에 대한 자세한 정의는 주제와 벗어나니 다음에
각 지표들은 평가할 대상의 다른 측면(기준)들을 보고 판단하기 때문에 이렇게 분류 모델의 평가하는 평가 지표가 다양하지 않을까?
그렇다면 자주 활용하는 Accuracy와 ROC curve는 분류 모델의 어떤 측면을 어떤 기준으로 보고 판단하는 것일까?
출처 : 공돌이의 수학정리노트 머신러닝 part의 ROC curve
ROC(Receiver Operating Characteristic) curve는
다양한 threshold에 대한 이진 분류기의 성능을 한번에 표시한 것이다. ROC curve는 좌상단에 붙어 있는 커브가 더 좋은 분류기를 의미한다.
이진 분류의 성능은 True Positive Rate와 False Positive Rate 두 가지를 이용해 표현한다.
이러한 ROC curve를 이해하기 위해 세 가지 측면을 이 파악하는 것이 좋다고 하는데
(1) True Positive rate(TPR) / False Postivie rate(FPR)
여기서 '암에 걸렸다/걸리지 않았다' 를 예측하는 것을 하나의 이진 분류 모델로 본다면, 모두 암에 걸렸다고 예측한다면 실제 암에 걸린 사람들이 모두 암환자로 판별되면서 True Positive Rate (실제 암에 걸렸고 암에 걸렸다고 예측하는 비율)은 당연히 높아진다.
그러나, 실제 암에 걸리지 않았던 환자들 또한 모두 암환자로 판별해버림으로써 False Positive Rate(실제 암에 걸리지 않았지만 암에 걸렸다고 예측하는 비율) 또한 높아지게 된다.
추가적으로 여기서 모두 암에 걸렸다고 예측한다는 것은 모델의 threshold가 매우 낮다는 것을 의미한다.
반면에 모두 암에 걸리지 않았다라고 예측한다면 True Positive Rate(실제 암에 걸렸고 암에 걸렸다고 예측하는 비율)은 낮아지고, False Positive Rate(실제 암에 걸리지 않았지만 암에 걸렸다고 예측하는 비율) 또한 낮아진다.
여기서는 모두 암에 걸리지 않았다고 예측하는 것은 모델의 threshold가 매우 높다는 것을 의미한다.
(2) ROC curve에서의 한 점
(3) ROC curve의 휜 정도
즉, 정리하면 ROC cuve는 이진 분류기의 성능을 나타낸 것이고,
가능한 모든 threshold에 대해 FPR< TPR의 비율을 표현한 것이다.
수식으로 표현하면 위와 같이 표현할 수 있다
확률의 값을 음의 log 함수에 넣어 변환을 하는데, 잘못 예측할수록 페널티를 부여하기 위해서이다.
예를 들어서 100% 확률로 답을 구한 경우 log loss는 -log(1.0) =0이 된다. 그러나 50%의 확률로 답을 구한경우 log loss는 -log(0.5)로 약 0.69가 된다.
log loss는 낮을 수록 좋은데, 낮은 확률로 답을 구한 경우 log loss가 더 높은 것을 볼 수 있다.
즉, 확률이 낮아질수록 log loss는 기하 급수적으로 증가하고, log loss는 확률이 낮을 때 패널티를 더 많이 부여하기 위해 음의 로그 함수를 사용한다.
log loss는 가능도(likelihood) 함수라고 불리긴 하지만, 실제로 log loss는 가능도(likelihood) 함수의 log * -1 이라고 한다.
가능도 함수는 모델이 실제로 예측한 결과 셋을 어느 정도 생각했는가? 라고 보면되는데, 예를들어서 모델이 정답이 True인 3건에 관해 [0.8, 0.4, 0.1]의 확률로 예측했다고 가정한다면,
첫 번째 가능도 함수의 예측값은 0.8 이고, 두 번째 가능도 예측값은 0.4 이다. 여러 독립적인 사건의 확률은 개별 확률의 곱이라는 규칙에 따라서 관련된 두 확률을 곱해서 두 예측에서 결환된 가능성인 0.8 0.4=0.32 가 나오게 된다.
마지막 세번째에서는 1일 가능성이 0.1 이라고 했으므로 예측한 확률이 90% 이므로 0.320.9를 해준다.
이러한 예측을 단계별로 진행해서, 실제 발생한 결과와 관련된 확률을 찾을 때마다 이전 결과와 곱하는 것이 likelihood의 값이다.
각 예측은 0~1 사이에 존재하고, 이 범위에 수를 계속해서 곱한다면 결과가 작아져 컴퓨터가 이를 추적하기 어려워 질 수 있다. 그래서 가능도(likelihood)의 값에 로그를 취해서 이를 추적하고, log loss가 작을수록 성능이 좋기 때문에 이에 -1를 곱해주는 것이다.
AUC는 하나의 분류 모델에서 다양한 임계값을 확인할 수 있으므로, 임계값에 대한 모델의 성능 변화를 보고 싶을 때 사용한다.
즉, 분류 모델링 클래스를 올바르게 분류하는 능력을 보고자 할 때 확인한다.
log loss는 모델이 예측하는 클래스의 확률이 중요할 때 확인하면 되며, 모델의 확률 예측 정확도를 확인할 수 있는 것이다.
즉, auc는 분류 모델의 두 클래스간 분리 능력을 측정하고,
log loss는 모델 확률 예측의 정확성을 측정하는 지표라고 보면 되겠다.