ML _ 모델 성능 평가지표
DataScience/인공지능

ML _ 모델 성능 평가지표

728x90

◎ 머신러닝 모델 성능 평가지표

  • 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 점수를 잘 활용하면 좋은 결과를 만들어낼 수 있을 것이다.

728x90