모델 평가하기
Loss와 Metric
- Loss
- 모델 학습시 train data를 바탕으로 계산됨
- 모델의 파라미터 업데이트에 활용
- Metric
- 모델 학습 종료 후 test data를 바탕으로 계산됨
- 모델 성능 평가에 활용
- Discreate한 Accuracy는 Continuous한 Cross Entropy에 비해 파라미터가 학습되어야 할 방향을 정확하게 제시하지 못하므로 Accuracy는 Loss로 사용할 수 없다. 참고 Loss vs Accuracy
Confusion Matrix와 Precision/Recall
Actual \ predicted | positive | Negative |
---|---|---|
Positive | True Positive | False Negative |
Negative | False Positive | True Negative |
정확도(Accuracy) : 전체 표본 중 정확히 분류된 표본의 수
$Accuracy=\frac{TP+TN}{TP+TN+FP+FN}$
Precision과 Recall
정밀도(Precision): 양성으로 분류된 것 중 진짜 양성인 표본의 수
- $Precision=\frac{TP}{TP+FP}$
- 스팸메일 분류 모델
재현율(Recall): 양성인 것들 중 양성으로 분류된 표본의 수
$Recall=\frac{TP}{TP+FN}$
암환자 예측 모델
F-score
- Precision과 Recall의 조화평균이 되는 값으로, Precision과 Recall 둘 다 고려할 수 있음
- $F_{\beta}=(1+\beta^2)\cdot \frac{precision\cdot recall}{(\beta^2 \cdot precision)+recall}$
Threchold의 변화에 따른 모델 성능
- 학습시킨 모델의 출력이 일정 이상 기준선(Threchold)를 넘어가면 양성으로 분류한다.
- Threchold의 변경을 고려하여 모델을 평가하는 방법으로 PR(Precision and Recall) 커브, ROC(Receiver Operating Characterisic) 커브가 있다.
- Threchold를 변경하여 Precision, Recall 값을 조절할 수 있다.
Precision-Recall 커브
PR 커브는 Recall을 X축, Precision을 Y축에 놓고 Threshold 변화에 따른 두 값의 변화를 그래프로 그린 것이다.
1
2
3
4
5
6
7
from sklean.metrics import PrecisionRecallDisplay
import matplotlib.pyplot as plt
disp = PrecisionRecallDisplay.from_estimator(classifier, X_test, y_test)
disp.ax_.set_title(f'binary class Precision-Recall curve: AP = {disp.average_precision:0.2f}')
plt.show()
출력된 그래프에서 Precision과 Recall 사이의 트레이드오프 관계를 확인할 수 있다. Threshold값에 따라 얻게 되는 Precision, Recall 값이 그래프에 표시되며, (1,1)에 근접할수록 이상적인 값이라고 볼 수 있다. Threshold값에 무관하게 모델의 전체적인 성능을 평가하는 방법으로, PR 커브 아래쪽 면적을 계산하는 AUC(Area Under Curve)값이 있다.
1
2
from sklearn.metrics import average_precision_score
average_precision = average_precision_score(y_test, y_score)
average_precision_score(AP) 수식의 특성을 살펴봤을 때, 의미상으로는 PR 커브의 아래쪽 면적인 PR AUC와 같다. 하지만 사이킷런 문서에서는 average_precision_score와 PR AUC가 구현 측면에서 약간 다르다고 설명하고 있다.
ROC 커브
ROC(Receiver Operating Characteristic Curve)는 수신자 조작 특성 곡선이라는 단어로 표현할 수 있다. ROC는 Confusion Matrix 수치를 활용해 분류기의 분류 능력을 그래프로 표현한다.
ROC 예시 곡선
ROC의 두 축은 TP Rate와 FP Rate이다.
- $TPR(Sensitivity)=\frac{TP}{TP+FN}$
- $FPR(1-Specificity)=\frac{FP}{TN+FP}$
- FP Rate는 음성 샘플에 대한 Recall이라고도 볼 수 있다.
AUC 예시 영역
위 그림의 회색 영역이 ROC AUC로, 해당 영역의 넓이가 넓을수록 상대적으로 좋은 성능을 보여준다.
1
2
3
4
from sklearn.metrics import roc_curve, auc
fpr, tpr, _ = roc_curve(y_test, y_score)
roc_auc = auc(fpr,tpr)
이런 그래프가 있다고 가정하자. 노란색 선은 ROC curve, 파란색 선은 (0,0)과 (1,1)같은 극단적인 값들을 모아놓은 경우이다. 의미 있는 분류기는 적어도 이 파란 점선보다는 위쪽에 그려져야 한다. ROC curve에서 Precision과 Recall이 전부 1이 되는 이상적인 모델은 (0,1)에 점이 찍힐 것이다. 따라서 그래프가 가급적 (0,1)에 가까이 그려질수록 우수한 분류기가 된다고 볼 수 있다.
다양한 머신러닝 모델의 평가척도
회귀 모델의 평가척도
회귀 모델은 분류 모델에 비해 평가척도를 다루는 것이 간단하다. Loss함수가 테스트셋에 적용되면 Metric이 되는 경우가 대부분이기 때문이다. 그래서 회귀 모델의 경우 어떤 Loss가 적합한지 특성을 알아보는 것이 중요하다.
- Mean Absolute Error(MAE)
- 모델의 예측값과 실제값의 차이를 모두 더한 것의 평균
- MSE보다 특이치에 강건하다
- Mean Absolute Percentage Error(MAPE)
- Mean Square Error(MSE)
- Mean Percentage Error(MPE)