분류 성능 평가 지표인 precision, recall, f1, macro, micro 에 대해서 알아보자.
모델을 평가할 때, 모델이 예측한 결과와 실제 결과를 비교해야 한다.
이때 confusion matrix를 사용한다.
Confusion matrix는 실제 클래스와 모델이 예측한 클래스를 비교하여 행렬로 나타낸 것이다.
예를 들어서 이진 분류 문제가 있고, 모델이 positive 또는 negative로 분류해야 한다고 했을때 모델이 분류한 결과를 다음과 같이 나타낼 수 있다.
행렬은 위와 같이 그릴 수 있다.
Confusion matrix를 바탕으로 3가지 분류평가지표에 대해 알아보자.
Precision(정밀도)는 모델이 positive로 예측한 경우 중에서 실제로 positive인 비율을 말한다.
Positive Predictive Value 즉 PPV라고도 한다.
Recall(재현율)은 실제 데이터 중 positive인 것들 중에서 모델이 positive라고 예측한 비율을 말한다.
sensitivity(민감도)라고도 한다.
F1-score은 Precision과 Recall의 조화평균이다.
자 그러면 아까 보인 Confusion matrix 예시를 보고 precision, recall, f1-score를 구해보자.
답은
.
.
.
.
.
Precision = 0.8
Recall 약 0.889
F1-score 약 0.842
이다.
그럼 왜 positive인 TP만 분자로 사용할까?
정확도 측정 지표인 Accuracy는 모든 결과 중 실제 positive인 클래스를 positive로 분류한 경우 + 실제 negative인 클래스를 negative로 분류한 경우의 비율이다.
하지만 위 정확도 측정기법은 모델의 특성을 반영하지 못한다.
만약 x-ray를 보고 암이라고 판단하는 모델이 있다고 하자. 이 경우는 실제 암이 있는 환자를 암이라고 판단해야 안전한 모델이다. 암이 있는데 없다고 판단하면 큰일이기 때문이다. 따라서 이 경우에는 recall이 높은 모델이 좋다.
예를 들어 보자.
이때 정확도는 0.525이다.
precision은 0.514, recall은 0.95이다.
또 다른 모델을 보자.
이때 마찬가지로 정확도는 0.525이다.
하지만 precision은 0.667이고 recall은 0.1이다.
두 모델 모두 정확도가 같지만, 암인지 아닌지 판단하는 모델은 첫번째 모델을 선택하는 것이 좋다.
Precision과 Recall의 관계는 반비례 관계이다.
아래 예시를 보자.
화살표는 모델이 positive, negative라고 예측한 기준이다.
첫번째 기준을 보면 precision의 경우 0.7, recall의 경우는 1이다.
두번째 기준은 두 값이 같다.
세번째 기준은 precision이 더 높아진 것을 알 수 있다.
그래서 recall과 precision의 관계를 curve 곡선으로 나타낼 수 있다.
[출처: https://cosmiccoding.com.au/tutorials/pr_vs_roc_curves/]
지금까지는 이진 분류 문제만 다루었는데 다중 분류 문제의 경우에는 f1-score를 어떻게 구할까?
예를 들어 보자.
3가지 클래스가 있고 모델이 3가지를 분류해야 한다고 하자.
위 결과를 보고 TP, FP, FN을 구해보자.
FP는 실제는 다른 클래스인데 맞는 클래스라고 분류한 경우이다.
예를 들어 A의 FP를 구해보면,
A의 FN은 실제 A이지만 예측을 B 또는 C로 한 경우이다.
이들의 Precision, Recall, F1-score를 구했다.
Macro f1-score는 모든 클래스에 대한 단순 F1 score 평균이다.
Macro f1 = (0.447+0.647+0.5)/3 = 0.531
Macro는 모든 클래스의 f1 score를 더한 뒤 평균을 내기 때문에 클래스 간 불균형이 심할때 사용하기 좋다.
Micro f1-score는 TP,FP,FN의 각각의 합계를 구한 뒤, Precision과 Recall을 구하고 f1-score를 구한다.
Micro f1은 0.548이다.
Micro는 TP, FP, FN의 각각의 합계를 구하기 때문에 다수의 클래스의 성능이 모델 평가에 큰 영향을 주게 된다.
그럼 어떤 평가 지표를 써야할까?
모든 클래스를 동등하게 취급해야 한다면 Macro를 쓰는 것이 좋고
클래스 상관없이 총 성능을 평가할 땐 Micro를 사용하는 것이 좋다고 한다.