◎ 머신러닝 모델 성능 평가지표
- Condusion Matrix
- 정밀도, 재현율
- ROC curve, AUC 점수
분류기의 정확한 성능을 판단하기 위해서는 정확도 외에 다른 평가지표를 같이 사용해야 한다.
특히 정밀도(precision), 재현율(recall) 을 살펴보아야 한다.
Scikit-Learn User Guide — Classification Report
- 정확도(Accuracy)는 전체 범주를 모두 바르게 맞춘 경우를 전체 수로 나눈 값이다.
- 정밀도(Precision)는 Positive로 예측한 경우 중 올바르게 Positive를 맞춘 비율이다.
- 재현율(Recall, Sensitivity)은 실제 Positive인 것 중 올바르게 Positive를 맞춘 것의 비율이다.
- F1점수(F1 score)는 정밀도와 재현율의 조화평균(harmonic mean)이다.
▷ Condusion Matrix
모델을 학습한 뒤 모델의 성능을 평가해보자.
분류모델의 성능 평가지표를 보여주는 Confusion matrix에 관해 살펴보자.
(데이터 모델은 독감데이터를 활용한 이전 랜덤포레스트 모델로 확인)
from sklearn.metrics import plot_confusion_matrix
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
pcm = plot_confusion_matrix(pipe, X_val, y_val,
cmap=plt.cm.Blues,
ax=ax);
plt.title(f'Confusion matrix, n = {len(y_val)}', fontsize=15)
plt.show()
- 정밀도와 재현율의 TP, TN, FP, FN을 정의 해보자.
tp = 4442
tn = 6165
fp = 1515
fn = 1930
total = tp + tn + fp + fn
- 백신 접종을 올바르게 예측한 경우는?
tp
4442
- 백신 접종을 잘못 예측한 경우는?
fp
1515
- 백신 접종에 대해 정밀도(Precision)를 구해보자
positives = tp + fp
tp/positives
0.7456773543730065
- 실제 백신 접종한 경우는 얼마나 됩니까?
real_positives = tp + fn
real_positives
6372
- 백신 접종에 대해 재현율을 구해보자
tp / real_positives
0.697112366603892
- plot_confusion_matrix 에서 테이블 데이터만 가져와 총 정확도(accuracy)를 구해보자
cm = pcm.confusion_matrix
cm
array([[6165, 1515],
[1930, 4442]])
- True Positive(TP) 백신을 맞은 사람을 잘 예측한 경우
# 예측:functional, 실제:functional
cm[1][1]
4442
- 정확하게 맞춘 예측은 모두 몇 가지? (TP + TN)
correct_predictions = np.diag(cm).sum()
correct_predictions
10607
- 총 예측한 수는 어떻게?
total_predictions = cm.sum()
total_predictions
14052
- 분류 정확도(classification accuracy)를 계산
correct_predictions/total_predictions
검증 정확도 : 0.7548391688015941
▷ ROC, AUC (Receiver Operating Characteristic, Area Under the Curve)
ROC curve, AUC를 사용하면 분류문제에서 여러 임계값 설정에 대한 모델의 성능을 구할 수 있게 됩니다. ROC curve는 여러 임계값에 대해 TPR(True Positive Rate, recall)과 FPR(False Positive Rate) 그래프를 보여준다.
- 재현율을 높이기 위해서는 Positive로 판단하는 임계값을 계속 낮추어 모두 Positive로 판단하게 만들면 됩니다. 하지만 이렇게 하면 동시에 Negative이지만 Positive로 판단하는 위양성률도 같이 높아집니다.
- 재현율은 최대화 하고 위양성률은 최소화 하는 임계값이 최적의 임계값입니다.
- AUC 는 ROC curve의 아래 면적을 말합니다.
# ROC curve
plt.scatter(fpr, tpr)
plt.title('ROC curve')
plt.xlabel('FPR(Fall-out)')
plt.ylabel('TPR(Recall)');
이번에는 AUC점수를 계산해 보겠습니다. AUC값은 높을 수록 좋다.
# AUC값은 높을 수록 좋다.
from sklearn.metrics import roc_auc_score
auc_score = roc_auc_score(y_val, y_pred_proba)
auc_score
0.8187195526653066
분류문제에서 모델을 올바르게 평가하기 위해서는 정확도 외에도 정밀도, 재현율 을 잘 이해하고 사용해야 한다는 것을 알았다. 특히 각 범주를 예측하는 기준이 되는 임계값의 위치에 따라 정밀도나 재현율이 달라지기 때문에 문제의 상황에 따라 적절한 임계값을 선택할 필요성이 있다. 이진 분류문제에서는 ROC curve와 AUC 점수를 잘 활용하면 좋은 결과를 만들어낼 수 있을 것이다.
'DataScience > 인공지능' 카테고리의 다른 글
가상환경 구성 및 주피터(jupyter notebook) 연결 (0) | 2023.01.27 |
---|---|
DL.4 _ 신경망 용어정리, Keras Hyperparameters (0) | 2021.08.17 |
DL.3 _ keras 하이퍼파라미터, 활동함수(Activation function) (0) | 2021.08.11 |
DL.1.1 _ 인공신경망이란, 퍼셉트론 알고리즘 (0) | 2021.08.11 |
ML _ 교차검증(k-fold, Randomized Search CV, GridSearchCV) (0) | 2021.06.22 |