주요 평가 Metrics 정리 - lshhhhh/deep-learning-study GitHub Wiki

Main Topic: Accuracy, Precision, Recall, ROC curve, PR curve

TP, TN, FP, FN

  • T: 맞게 예측한 것(True)
  • F: 틀리게 예측한 것(False)
  • P: Positive로 예측
  • N: Negative로 예측
  • TP: Positive로 예측한 것 중 맞춘 것(True)
  • TN: Negative로 예측한 것 중 맞춘 것(True)
  • FP: Positive로 예측한 것 중 틀린 것(False)
  • FN: Negative로 예측한 것 중 틀린 것(False)

Accuracy

  • (TP + TN) / (Total data) = T / (Total data)

  • 의미

    전체 데이터 중 맞게 예측한 비율

  • 단점

    데이터 label이 한쪽으로 편중되어 있을 때(prevalence), 대부분의 데이터를 편중된 label로 예측하는 모델은 Accuracy는 높을 수 있지만 그렇다고 해서 성능이 뛰어나다고 단정지을 수 없다.

    예를 들어, 암이 걸린 환자가 전체의 1%라고 했을 때, 모든 환자가 암이 아니라고 예측할 경우 Accuracy는 99%로 매우 높으나, 암에 걸린 환자를 찾아내지 못하였으므로 좋은 모델이라고 할 수 없다.

    이럴 때에 Accuracy 대신 사용할 수 있는 metrics로는 ROC curve와 PR curve가 있다.

Precision

  • TP / (TP + FP)

  • 의미

    Positive로 예측한 데이터 중 맞춘 데이터 비율

Recall

  • TP / (TP + FN)

  • 의미

    Positive 데이터 중 맞춘 데이터 비율

ROC curve

Prevalence는 negative 데이터에 대한 positive 데이터의 비율이다. Accuracy에서와는 달리 prevalence에 구애 받지 않고 모델을 제대로 평가하기 위해서는, positive와 negative 데이터를 함께 이용할 것이 아니라, positive와 negative 데이터를 각각 따로 관찰해야한다. 이를 위하여 ROC curve는 sensitivityspecificity를 이용한다.

  • Sensitivity (= Recall = TPR)

    TP / (TP + FN)

    Positive를 얼마나 잘 골라내는가 (Positive 데이터 중 맞춘 데이터 비율)

  • Specificity (= 1 - FPR)

    TN / (FP + TN)

    Negative를 얼마나 잘 골라내는가 (Negative 데이터 중 맞춘 데이터 비율)

Specificity와 sensitivity는 threshold를 어떻게 주느냐에 따라 변한다. 먼저, threshold는 데이터를 positive, negative의 분류 기준이 된다. 예를 들어, 각 데이터에 대한 0과 1사이의 값 x가 0.7보다 크면 positive, 같거나 작으면 negative로 예측할 때의 0.7을 threshold라고 볼 수 있다. 이때, threshold를 0에 가까이 낮추면 대부분의 데이터를 positive로 예측하므로 sensitivity는 높아지지만 specificity는 낮아진다. Threshold를 1에 가깝게 올리면 반대의 결과가 나타날 것이다. 따라서 specificity와 sensitivity 중 하나 만으로는 모델 성능을 제대로 판단할 수 없다.

ROC curve는 threshold 값에 따라 모델의 sensitivity와 specificity가 어떻게 변하는지를 2차원 평면 상에 표현한다. x축은 1 - Specificity(FPR), y축은 Sensitivity(TPR)로 둔다. 그래프가 y=x 윗쪽에 있는 경우 이 모델을 쓸 만하다고 판단한다.

  • TPR

    TP / (TP + FN) = Sensitivity

  • FPR

    FP / (FP + TN) = 1 - Specificity

Sensitivity와 Specificity가 높을 때가 가장 좋으므로, x 값은 0에 가까울수록, y 값은 1에 가까울수록 최적이다. 따라서 ROC curve는 (0, 1)에 다가가는 curve일수록, ROC curve 아래의 면적(AUC, area under curve)이 넓을수록(1에 가까울수록) 모델 성능이 좋다는 것을 의미한다. 결국 AUC는 모든 threshold에 대하여 FPR과 TPR이 0과 1에 얼마나 가까운지를 계산한 값이다.

Threshold를 통해 보는 ROC curve는 FP와 FN사이의 trade-off를 조정하는데에 매우 직관적으로 쓰일 수 있다. 위 그림과 같은 curve에서 FPR이 낮은 모델이 필요하다면 threshold를 0.8로 정하면 되고, FPR은 낮으면서 FNR이 너무 높지 않았으면 한다면 0.3을 택하면 된다.

또한 ROC curve는 FPR/FNR trade-off의 모양을 잘 보여준다.

위 그림에서 A와 B의 AUC는 같으나, 둘은 다른 모양의 curve이다. 이를 활용하면, 높은 specificity를 띄는 A 모델에서 positive가 나오면 positive라고 확신(rule-in)할 수 있고, 높은 sensitivity를 띄는 B 모델에서 negative로 나오면 negative라고 확신(rule-out)할 수 있다.

PR curve

PR curve의 x축은 recall, y축은 precision이다. 그래프가 base line 윗쪽에 있는 경우 이 모델을 쓸 만하다고 판단한다. (Base line = (Positive data size) / (Positive data size + Total data size))

ROC curve AUC와 마찬가지로, PR curve AUC가 1에 가까울수록 (높을수록) 성능이 좋다는 것을 의미한다.

PR AUC vs ROC AUC

우리는 여태 모델에 넣는 데이터의 prevalence가 항상 일정하다는 가정 하에 metrics를 만들었다. 하지만 실제 상황에서는 데이터가 달라짐에 따라 데이터의 prevalence도 달라지고 한 모델의 성능도 달라질 수 있다. PR(Precision-Recall) curve를 이용하면 이러한 점을 잡아낼 수 있다.

왼쪽은 ROC curve, 오른쪽은 PR curve이다. 이 둘은 같은 정보를 가지고 만든 curve이지만 이 정보들이 다른 방식으로 사용되고 해석된다. 다양한 prevalence의 데이터셋에 대하여 ROC curve는 비슷한 형태를 보여 어떤 데이터셋에서 성능이 좋은지를 확인할 수 없다. 모델이 모든 데이터셋에 대하여 비슷한 성능을 가진다고 생각할 수도 있다. 하지만 PR curve를 통하여 모델이 어떤 데이터셋에서 좋은 성능을 보여주는지 확인할 수 있다.

또한 PR curve는 크게 편향된 데이터에서의 성능을 측정할 때, ROC curve보다 좋은 metric으로 여겨진다. Negative 데이터가 positive 데이터에 비해 압도적으로 많을 때, PR curve는 TN을 고려하지 않기 때문이다. (TN은 negative 데이터를 negative라고 예측한 것인데, 지금과 같은 상황에서는 negative 데이터가 대부분이기 때문에 negative를 negative라고 예측한 것은 그다지 유용한 정보가 아니다.)

다음 예시를 통하여 직접 차이를 느껴보자.

  • 총 데이터: 1,000,000개, Positive 데이터: 100개
  • Model 1: 100개를 P로 predict했는데, 90개가 맞음. -> TP = 90, TN = 999890, FP = 10, FN = 10.
  • Model 2: 2000개를 P로 predict했는데, 90개가 맞음. -> TP = 90, TN = 997990, FP = 1910, FN = 10.
  • Model 1이 더 뛰어난 model임을 알 수 있다. 하지만 ROC curve의 TPR, FPR은 이에 대한 차등을 두지 않는다.
  • ROC curve
    • Model 1: 0.9 TPR, 0.00001 FPR
      • TPR = TP/(TP + FN) = 90/(90 + 10) = 0.9
      • FPR = FP/(FP + TN) = 10/(10 + 999890) = 0.00001
    • Model 2: 0.9 TPR, 0.00191 FPR (difference of 0.0019)
      • TPR = TP/(TP + FN) = 90/(90 + 10) = 0.9
      • FPR = FP/(FP + TN) = 1910/(1910 + 997990) = 0.0019
  • PR curve
    • Model 1: 0.9 precision, 0.9 recall
      • Precision = TP/(TP + FP) = 90/(90 + 10) = 0.9
      • Recall = TP/(TP + FN) = 90/(90 + 10) = 0.9
    • Model 2: 0.045 precision (difference of 0.855), 0.9 recall
      • Precision = TP/(TP + FP) = 90/(90 + 1910) = 0.045
      • Recall = TP/(TP + FN) = 90/(90 + 10) = 0.9

[정리] 식 분류 표

  • 빨강: Prevalence invariant metrics
  • 파랑: Prevalence variant metrics
  • 보라: 혼합 metrics

[Reference]

잘못된 내용이나 추가할 내용 있으면 마음껏 수정하셔도 됩니다!