[파이썬 머신러닝 완벽 가이드] 평가 (Evaluation)

2 분 소요

분류성능 평가지표

  • 정확도 (Accuracy)
  • 오차행렬 (Confusion Matrix)
  • 정밀도 (Precision)
  • 재현율 (Recall)
  • F1 스코어 (정밀도+재현율)
  • ROC AUC

정확도

— 전체 데이터 대비 예측 결과가 맞는 데이터의 비율을 %로 표현

  • 직관적으로 모델 예측 성능을 나타내는 평가 지표
  • 하지만 이진 분류(True or False)에서는 모델 성능을 왜곡할 수 있기 때문에 정확도만 가지고 성능을 평가하지는 않는다. 특히, 불균형한 레이블 값 분포에서 적합한 평가 지표가 되지 못한다.

오차행렬 (Confusion Matrix)

— 이진분류의 예측 오류가 얼마인지와 더불어 어떤 유형의 예측 오류(Type I, II Error)가 발생하고 있는 지를 나타내는 지표

  • [[TN, FP], [FN, TP]] 형태로 결과 반환
  • False Positive, 실제로는 거짓일 때 참을 반환한 경우 → Type I Error
  • False Negative, 실제로는 참인데 거짓을 반환한 경우 → Type II Error
  • 정확도 = 예측 결과와 실제 값이 동일한 건수/전체 데이터 수 = (TN + TP)/(TN + FP + FN + FP)
from sklearn.metrics import confusion_matrix

confusion_matrix(y_test, pred)

정밀도 & 재현율

정밀도 (Precision)

— 예측을 Positive로 한 대상 중 예측과 실제 값이 Positive로 일치한 데이터의 비율

정밀도 = TP / (FP + TP)

  • precision_score() 메서드로 확인

재현율 (Recall)

— 실제 값이 Positive인 대상 중에 예측과 실제 값이 Positive로 일치한 데이터의 비율

재현율 = TP / (FN + TP)

  • recall_score() 메서드로 확인

정밀도와 재현율의 트레이드오프

— 업무에 따라 정밀도와 재현율의 중요도는 상대적일 수 있다

  • 정밀도가 중요한 경우 : 스팸 메일을 거르는 시스템의 경우 정상 메일(Negative)을 스팸(Positive)으로 분류하면 안된다. 즉, False Positive 혹은 Type I Error를 일으키면 안되는 경우 정밀도가 더 중요한 지표가 된다.
  • 재현율이 중요한 경우 : 암 진단 처럼 실제로 양성(Positive)인 결과를 음성(Negative)로 판별해버리는 경우가 더 치명적인 경우. 즉, False Negative 혹은 Type II Error를 일으키면 안되는 경우 재현율이 더 중요한 지표가 된다.
  • 분류 업무 특성상 위 처럼 정밀도 또는 재현율이 특별히 강조돼야 할 경우 분류 결정 임계값 (Threshold)을 조정해 수치를 높일 수 있다.
    • Estimator 객체의 predict_proba() 메소드로 분류 결정 예측 확률 반환
    • 임계값이 낮아질 수록 Positive로 예측할 확률이 높아진다 → 재현율 증가
  • 정밀도와 재현율은 상호 보완적인 평가 지표이기 때문에 어느 한쪽을 강제로 높이면 다른 하나의 수치가 떨어지기 쉽다. 이를 정밀도/재현율의 트레이드오프(Trade-off)라고 한다.
    • precision_recall_curve() 함수를 통해 임계값에 따른 정밀도, 재현율의 변화값 확인

F1 Score

정밀도와 재현율의 맹점 : 임계값을 필요에 따라 조정하면 얼마든지 정밀도 또는 재현율을 100%로 조작할 수 있다. 즉, 두 지표의 밸런스를 확인할 필요가 있다.

F1 스코어는 정밀도와 재현율을 결합한 지표로 정밀도와 재현율이 어느 한쪽으로 치우치지 않는 수치를 나타낼 때 상대적으로 높은 값을 갖는다.

  • 사이킷런에서 f1_score() 함수로 확인 가능

ROC 곡선과 AUC

ROC 곡선 (Receiver Operation Characteristic Curve)

— FPR(False Positive Rate)이 변할 때 TPR(True Positive Rate, =재현율)이 어떻게 변하는지 나타내는 곡선

  • TPR, 즉 재현율은 “민감도”로도 불린다

  • roc_curve(y_true, y_score)

    • y_true : 실제 클래스 값
    • y_score : predict_proba()의 반환 값 중 positive 예측 확률을 사용

    → fpr, tpr, thresholds 반환

AUC (Area Under Curve)

— ROC곡선 아래의 면적을 구한 것. 면적이 1에 가까울 수록 좋은 수치

  • roc_auc_score(y_true, y_score)

    • 사용되는 파라미터는 roc_curve()와 동일

    → AUC 스코어 값 반환

댓글남기기