본문 바로가기

Machine Learning Models/Classic

Classification - Metrics (1)

반응형

분류 모델의 성능은 어떻게 평가할까요? 먼저 간단한 이진 분류부터 생각해보겠습니다. 당장 생각나는 성능 지표는 정확도 (accuracy) 일겁니다. 전체 데이터에서 얼마만큼 맞추었는지에 대한 비율이죠. 평범한 상황에서는 적당한 지표가 되겠지만 90명의 정상환자와 10명의 암환자를 구분하는 케이스와 같이 각 범주에 대한 데이터가 균형적이지 않을 때에 대해서 생각해보면 모델이 단순히 모두 정상이라고 판단해도 정확도는 90%가 됩니다. 

얼핏 보면 매우 잘 학습된 분류 모델이라고 생각할 수 있겠지만 데이터의 불균형으로부터 이뤄진 비정상적인 결과입니다. 이번 포스트에서는 정확도 이외에 데이터 불균형 상황에서 분류 모델의 성능을 평가하는 다양한 성능 지표를 알아보도록 하겠습니다.

 

Metrics

Definitions

가장 간단한 이진 분류를 생각해보면 다음과 같은 4가지 케이스가 있을 수 있습니다.

1) True Positive: 실제로도 참이고 예측도 참인 경우
2) False Positive: 실제로는 거짓이나 예측은 참인 경우
3) True Negative: 실제로도 거짓이고 예측도 거짓인 경우
4) False Negative: 실제로는 참이나 예측은 거짓인 경우

True 가 붙은 경우는 "실제 값 == 예측 값" 인 경우이며 False 가 붙은 경우 "실제 값 != 예측 값" 인 경우입니다. 뒤에 Positive 가 붙은 경우는 모델이 참으로 예측한 경우이며 Negative 가 붙은 경우는 모델이 거짓이라 예측한 경우입니다. 따라서 분류 모델은 False Positive/Negative 가 작아야 좋은 예측 모델이라고 말할 수 있습니다. 

Precision & Recall & F1-score

Precision은 우리 말로 정밀도라고 표현되며 모델이 참으로 예측한 값들 중 실제 참인 데이터의 비율입니다. 즉, (모델이 참으로 예측한 데이터 중 실제 참인 데이터) / (모델이 참으로 예측한 데이터) 로 정의할 수 있고 위의 정의를 이용하면 True Positive / (True Positive + False Positive) 가 됩니다.

$Precision = \frac{TP}{TP + FP}$

반면, recall은 우리 말로 재현율입니다. 즉, 실제 참인 데이터 중 모델에 의해서 얼마나 참으로 판단되었는지에 대한 비율로 (실제 참인 데이터 중 모델이 참으로 예측한 데이터) / (실제 참인 데이터) 로 정의할 수 있습니다. 위의 정의를 이용하면 True Positive / (True Positive + False Negative) 가 됩니다. Recall 은 통계학에서는 Sensitivity, Hit rate 라고도 합니다.

$Recall = \frac{TP}{TP+FN}$

최종적으로 정확도 대신 precision과 recall의 조화 평균인 F1-score를 분류 모델의 성능으로 사용하게 됩니다.

$F1=\frac{2*precision*recall}{precision + recall}$

Example

실제                                모델 예측 참  거짓
70 (True Positive) 20 (False Positive) 90
거짓 5 (False Negative) 5 (True Negative) 10
75 25 100

위와 같은 예제가 있을 때 precision 은 True Positive / (True Positive + False Positive) 이므로 70/(70+5)=0.93이 되고 recall 은 True Positive / (True Positive + False Negative) 이므로 70/(70+20)=0.77이 됩니다. 모델이 참이라 예측한 것은 대부분 맞지만 실제 참인 것을 모델이 상대적으로 발견을 잘 못한 케이스이죠. 

분류 모델은 각 범주에 대한 확률을 출력하기 때문에 참으로 판단되는 기준 (threshold) 을 조절해보면 어떨까요? 예를 들어 다음과 같은 10개 데이터에 대한 분류 확률 결과에 threshold 가 0.5인 상황을 가정해 보겠습니다. 


예측 = [0.1(거짓), 0.2(거짓), 0.3(거짓), 0.4(거짓), 0.45(거짓), 0.55(참), 0.6(참), 0.7(참), 0.8(참), 0.9(참)]

실제 = [거짓, 거짓, 거짓, 참, 참, 참, 참, 참, 참, 참]


이 상황에서의 precision은 5/5=1, recall은 5/7=0.71 이 됩니다. 기준을 살짝 높여 threshold 를 0.65로 설정하면, 


예측 = [0.1(거짓), 0.2(거짓), 0.3(거짓), 0.4(거짓), 0.45(거짓), 0.55(거짓), 0.6(거짓), 0.7(참), 0.8(참), 0.9(참)]

실제 = [거짓, 거짓, 거짓, 참, 참, 참, 참, 참, 참, 참]


precision은 4/4=1, recall은 4/7=0.57 이 됩니다. 반대로 기준을 낮춰 기준을 0.25로 설정하면, 


예측 = [0.1(거짓), 0.2(거짓), 0.3(참), 0.4(참), 0.45(참), 0.55(참), 0.6(참), 0.7(참), 0.8(참), 0.9(참)]

실제 = [거짓, 거짓, 거짓, 참, 참, 참, 참, 참, 참, 참]


precision은 7/8=0.875, recall은 7/7=1 이 됩니다. threshold를 높이면 모델이 참으로 예측한 값 자체가 줄게 되어 precision이 상승하지만 그만큼 recall이 감소하게 됩니다. 반대로 threshold를 낮추면 모델이 모델이 참으로 예측한 값이 늘게 되어 precision이 감소하지만 그만큼 recall은 증가하게 됩니다. 따라서 precision과 recall은 일반적으로 반비례 관계에 있습니다.

 

ROC curve

따라서 분류 모델의 성능은 threshold를 어떻게 잡느냐에 따라 달라지게 됩니다. 그렇다면 자연스럽게 각 threshold 별 성능을 계산해서 이를 전체적으로 통합하는 지표에 대해 생각하게 되는데 여기서 사용하는 방법이 roc (receiver operating characteristic) curve 입니다.

ROC curve 는 TPR (True Positive Rate = Recall = True Positive / (True Positive+False Negative)) 와 FPR (False Positive Rate = False Positive / (False Positive + True Negative) 를 threshold 마다 계산하여 만들어지는 curve로 threshold를 0부터 1가지 조절하면서 계산되는 TPR/FPR 을 계산하고 밑의 부분의 너비를 AUC (Area Under the Curve) 로 하여 분류 모델의 일반적인 성능 지표로 사용합니다.

Figure 1

AUC는 당연하게도 0에서 1사이의 값을 가집니다. 먼저 분류 모델의 threshold가 0이라면 모든 예측 값이 참이 되므로 FPR=TPR=1 이 되게 됩니다. 반대로 threshold가 1이라면 모든 예측 값이 거짓이 되므로 FPT=TPR=0이 됩니다. Figure 1의 초록색 직선은 이 두 지점을 이은 것으로서 FPR과 TPR이 같은 지점을 나타냅니다. 따라서 같은 threshold 에 비해 TPR이 FPR보다 좋을 수록 분류 모델의 성능이 좋아집니다.

가장 베스트인 케이스는 Figure 2-1과 같이 threshold에 따라 실제 참/거짓이 겹침없이 명확히 나누어지는 경우입니다. threshold 가 변하더라도 False Negative 가 없으므로 TPR은 항상 1이고 False Positive 가 없으므로 FPR은 항상 0이 되어 AUC가 1이 됩니다.

Figure 2-1

Figure 2-2의 경우는 threshold 에 따라 TP/TN의 겹침이 생기는 경우입니다. 위의 경우처럼 AUC가 1로 딱 떨어지지는 않지만 TPR의 경우는 FPR에 비해 항상 높습니다. 

Figure 2-2

Figure 2-3의 경우는 모델의 분류 성능이 아예 없다고 볼 수 있습니다. TPR=FPR=0.5가 되는 것이죠. 이 경우에는 AUC가 0.5가 되며 분류 모델 성능의 최저 베이스라인이 됩니다.

Figure 2-3

Figure 2-4의 경우는 모델이 반대 범주를 에측하는 경우입니다. Positive를 negative로 예측하고 negative를 positive로 예측하는 것이죠. 이같은 경우는 True Negative가 없으므로 FPR이 1이 되고 True Positive가 없으므로 TPR이 0이 되어 AUC가 0이 됩니다.

Figure 2-4

정리하면 threshold를 0부터 1까지 움직이면서 ROC 커브를 구하고 커브 밑의 면적 AUC를 일반적인 분류 성능으로 사용합니다.

Multiclass

3개 이상의 범주를 가진 multi-class 상황에서는 AUC를 어떻게 측정할까요? 이때는 지난 포스트에서 살펴봤던 One-Vs-Rest 방법을 사용합니다. 3개의 클래스인 경우 각 클래스에 대해 ROC 커브를 구성해 AUC를 계산합니다. 이때, 기준이 되는 클래스는 positive, 나머지 클래스는 negative로 간주하여 TPR/FPR을 계산하게 됩니다. 모델 전체에 대한 최종적인 AUC는 각 클래스에 대해 평균을 내거나 가중 평균을 내는 등의 방법을 통해 도출합니다.

 

참조

 


Classification - Metrics (2)

반응형

'Machine Learning Models > Classic' 카테고리의 다른 글

Dimension Reduction - PCA  (0) 2021.04.20
Classification - Metrics (2)  (1) 2021.04.19
Feature Selection - XGBoost  (0) 2021.04.17
Feature Selection - Random Forest (2)  (0) 2021.04.16
Feature Selection - Random Forest (1)  (0) 2021.04.16