딥러닝 분류기 (classifier)의 성능을 평가하기 위한 수단에는 여러가지가 있습니다. 이번 글에서는 딥러닝 분류기의 성능을 평가하기 위해 사용되는 여러가지 지표들을 보도록 하겠습니다. 이번에 소개드릴 지표로는 F1 score, precision, recall, AP (average precision), mAP (mean of Average Precision) 등이 있습니다. 그리고 이것을 설명하기 TP (True Positive), FP (False Positive), TN (True Negative), FN (False Negative) 개념을 알려드릴 것이고요 precision curve 등의 개념도 알려드리도록 하겠습니다.
분류모델 평가지표: Confusion matrix, Accuracy, F1 score, precision, recall, PR 곡선, AP (Average Precision), mAP (mean of Average Precision)
Confusion matrix (혼동행렬)
분류모델이 있다고 합시다. 설명을 위해 이진분류모델이라고 합시다. 이진 분류모델은 양성 (postive)인지 음성 (negative)인지 판단하는 모델입니다. 고런데 사실 항상 정확한 것은 아니지요. 실제로는 N (음성)인데 P (양성)으로 판단할 수 있고, 실제로는 P (양성)인데 N (음성)으로 판단 할 수 있습니다. 정확히 알아맞추는 경우 (P를 P라 맞추고, N을 N이라 맞추고)와 틀리는 경우를 (P를 N이라 예측하고, N을 P라고 예측하는) 모두 세서 한눈에 표시한것이 confusion matrix 입니다. confusion matrix 를 표현하기 전에 TP, FP, TN, FN 에 대해 알아보겠습니다.
이진분류에서 TP, FP, TN, FN
TP (True Positive) : 실제로는 P이고 분류모델도 P라고 예측한 경우의 수
TN (True Negative) : 실제 로는 N이고 분류모델도 N이라고 예측한 경우의 수
FP (False Positive) : P라고 판단했지만 실제로는 N인 경우의 수
FN (False Negative) : N이라고 판단했지만 실제로는 P인 경우의 수
Confusion matrix 그럼 뭔데?
Confusion matrix 는 TP, TN, FP, FN 인 경우를 각각세서 Matrix 형태로 표현한 것입니다.
모델이 예측한 값 | |||
Positive | Negative | ||
실제값 | Positive | TP | FN |
Negative | FP | TN |
주목할점은 실제 positive의 경우는 TP+FN 이고 실제 Negative의 경우는 FP + TN 와 동일하다는 점이네요. 위의 confusion matrix 를 이용해서 분류모델을 평가할 수 있습니다. 평가지표는 아래와 같습니다.
이진분류 평가모델
Accuracy (정확도)
Accuracy 는 이진분류모델의 정확도를 측정하기 위한 지표입니다. 이 모델이 얼마나 옳은 예측을 하는지를 측정합니다.
$$Acc = \frac{TP+TN}{TP+TN+FP+FN}$$
Precision (정밀도)
정밀도는 P라고 예측한 것중에서 실제로 P를 얼마나 검출 했는지를 측정합니다.
$$Precision = \frac{TP}{TP+FP}$$
Recall (재현율)
재현율은 말그대로 재현한건데요. P를 얼마만큼 재현하냐는 의미입니다. 실제 P중에서 몇개의 P를 알아맞추었냐를 측정하는 수치입니다.
$$Recall = \frac{TP}{TP+FN}$$
F1 score
F1 score 는 Precision 과 Recall의 조화평균 입니다.
$$F1-score = \frac{ 2 Recall * Precision} { Precision + Recall}$$
PR 곡선
PR곡선은 가로축이 Recall 이고 세로축이 Precision 입니다. 분류모델의 판단기준 (threshold) 에 따라 결과값도 달라지겠고 그에 따라 Precision 과 Recall 값이 달라지는데요. threshold 에 따른 Recall과 Precision 의 변화를 보는 그래프입니다.
AP (Average Precision)
PR곡선과 가로축 사이의 넓이를 의미합니다.
클래스가 여러개인 분류모델의 경우
방금전까지는 클래스가 두개인 이진분류 모델에 대해 여러지표들을 살펴보았고요. 이제는 클래스가 여러개인 분류모델에 대해 알아보겠습니다. 예를들어 클래스가 {사과,배,딸기}라고 합시다. Confusion matrix 는 클래스의 갯수만큼 그려집니다. 사과를 P라고 하면 사과가 아닌 {배, 딸기}를 N이라고 할 수 있습니다. 이 상태에서 Confusion matrix를 구하고 앞에서 소개드린 평가지표를 구할 수 있습니다. 사과에 대해 하였으면 배를 P라고 하고 {사과, 딸기}를 N이라 해서 Confusion matrix 구할 수 있습니다. 이런식으로 각 클래스 마다 P라 두고 나머지를 N이라 두어서 Confusion matrix 를 구할 수 있고 클래스의 갯수만큼 confusion matrix가 그려집니다. 이를 바탕으로 구할 클래스가 여러개인 분류모델의 성능을 구할 수 있습니다.
클래스가 여러개일 때 Accruacy
클래스마다 정확도를 구한 후 평균을 취합니다.
클래스가 여러개일 때 Precision
클래스마다 Precision 을 구한 후 평균을 취합니다.
클래스가 여러개일 때 Recall
클래스마다 Recall 을 구한 후 평균을 취합니다.
클래스가 여러개일 때 F1-score
클래스마다 F1-score 을 구한 후 평균을 취합니다.
mAP (mean Average Precision)
클래스마다 Average Precision 을 구한 후 클래스에 관한 평균을 취합니다.