Notebook 환경
Google Colaboratory
정확도 (Accuracy)
정확도는 실제 데이터에서 예측 데이터가 얼마나 같은지를 판단 하는 지표다
$$
Accuracy = \frac{num\_correct}{num\_data}
$$
직관적이지만, 데이터의 구성에 따라 ML 모델의 성능을 왜곡할 수 있기에, 정확도만으로 성능을 평가하지 않는다
- 타이타닉의 경우, 단순히 성별만 보고 여성은 생존, 남성은 사망으로 예측만 해도 정확도가 높게 나온다.
- 비슷한 예시로, MNIST 데이터 셋에서 만약 7 인지 아닌지 맞추는 모델을 만들 경우, 데이터의 90%는 False 이기 때문에, False 만 반환해도 정확도가 90%가 나온다.
오차 행렬 (Confusion Matrix), 정밀도, 재현율
오차 행렬이란, 모델이 예측을 수행하면서 얼마나 헷갈리고 있는지도 함께 보여주는 지표다
- 단순히 맞았는지 아닌지만 보는게 아닌, 4개의 지표로 나눠서 보여준다.
실제 클래스 \ 예측 |
Negative (0) |
Positive (1) |
Negative (0) |
TN (True Negative) |
FP (False Positive) |
Positive (1) |
FN (False Negative) |
TP (True Positive) |
- 실제로 맞으면 맞다고 해야하고, 틀리면 틀리다고 할 수 있어야지 제대로 된 예측이라고 할 수 있다.
- 위의 MNIST 문제에서 7을 맞추지 못했기 때문에, TP = 0% 로 매우 안좋은 성능을 보인다.
from sklearn.metrics import confusion_matrix
confusion_matrix(y_test, predictions)
- 위의 TP, TN, FP, FN 을 조합해서 성능 평가의 세가지 지표를 측정 할 수 있다.
- 정확도 (Accuracy): $\frac{TN+TP}{TN+FP+FN+TP}$
- 위에서 언급된 문제로, 불균형한 데이터에서는 정확도보다는 아래 두개의 지표가 더 정확하다.
- 정밀도 (Precision): $\frac{TP}{FP+TP}$
- 예측을 Positive로 한 대상 중에 예측과 실제 값이 Positive로 일치한 데이터의 비율
- Positive 예측 성능을 더욱 정밀하게 측정하기 위한 평가 지표이다
(i.e. 스팸 메일 판단의 경우, 일반을 스팸으로 판단하지 않는 것이 중요하다..)
- FP를 낮춰야지 정밀도가 올라간다. $\frac{TP}{TP + 0} = 1$
- 재현율 (Recall): $\frac{TP}{FN+TP}$
- 실제 값이 Positive인 대상 중에 예측과 실제 값이 Positive로 일치하는 데이터의 비율
- 민감도 (Sensitivity) 혹은 TPR (True Positive Rate) 라고도 불린다.
- 실제 Positive 양성 데이터를 Negative로 잘못 판단하게 되면 큰 영향이 발생하는 경우, 주요 지표로 사용된다. (i.e. 암 판단 모델의 경우 정밀도보다는 재현율이 더 중유하다.)
- FN을 낮춰야지 재현율이 올라간다. $\frac{TP}{TP + 0} = 1$
- 재현율과 정밀도 모두 높은 수치를 얻는 것이 바람직하다.
정밀도/재현율 트레이드오프
정밀도 또는 재현율이 강조돼야 할 경우, 분류의 결정 임곗값 (Threshold)를 조정해 수치를 높일 수 있다
- 정밀도/재현율 Trade-off: 한쪽을 높이면 다른 한쪽은 쉽게 떨어지기 쉽다
- Threshold 가 낮아지면, 더 많은 데이터가 Positive으로 진단 되기 때문이다. 더 많은 데이터가 Positive 가 되면, 정밀도는 올라가고, 재현율은 내려갈 확률이 높다.
- 더 많은 실제 Positive 가 positive 로 예측 되면 정밀도가 올라간다.
- 더 많은 실제 Negative 가 positive로 예측 되면 재현율이 떨어진다.