Evaluation Metrics for Classification


Tree Based Model


1. Confusion 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()

  • 정확도( Accuracy ) : 전체 범주를 모두 바르게 맞춘 경우를 전체 수로 나눈 값

    • TP+TNTotal\large \frac{TP + TN}{Total}
  • 정밀도( Precision ) : Positive로 예측한 경우 중 올바르게 Positive를 맞춘 비율

    • TPTP+FP\large \frac{TP}{TP + FP}
  • 재현율( Recall, Sensitivity ) : 실제 Positive인 것 중 올바르게 Positive를 맞춘 것의 비율

    • TPTP+FN\large \frac{TP}{TP + FN}
  • F1점수( F1 score ) : 정밀도와 재현율의 조화평균(harmonic mean)

    • 2precisionrecallprecision+recall2\cdot\large\frac{precision\cdot recall}{precision + recall}

다음과 같은 경우, 어떤 평가지표를 우선시 해야할까요?
Q1 . 병원에서 초기 암진단을 하는 경우?
Q2 . 넷플릭스에서 영화추천을 해주는 경우?

A .
1. 암진단의 경우, FN이 더 치명적일 것이다. 실제 암이지만 암이 아니라고 잘못 진단할 경우 환자의 목숨이 위험하기 때문이다.
2. 넷플릭스의 경우, FP가 치명적일 것이다. 내가 싫어하는것을 추천해줄 경우 넷플릭스에 대한 신뢰도가 떨어지기 때문이다.

넷플릭스 추천시스템은 어떤 평가지표를 활용하면 좋을까요?

  • 어떤게 더 치명적일지를 생각해보자.
  • 넷플의 경우, FP가 치명적
    • 내가 싫어하는것을 추천해줄 경우

2. Thresholds

  • 임계값을 낮추면 정밀도는 올라가지만 재현율은 떨어질 것이다.

Q . binarizer의 threshold 사용하는 방법은?
A .


3. ROC Curve

Q . 모든 임계값을 한 눈에 보고 모델을 평가하는 방법은?
A . ROC curve, AUC를 사용하면 분류문제에서 여러 임계값 설정에 대한 모델의 성능을 구할 수 있게 된다.
ROC curve는 여러 임계값에 대해 TPR( True Positive Rate, recall )과 FPR( False Positive Rate ) 그래프를 보여준다.

Recall(재현율) = Sensitivity = TPR=TPP=TPTP+FN=1FNR{\displaystyle \mathrm {TPR} ={\frac {\mathrm {TP} }{\mathrm {P} }}={\frac {\mathrm {TP} }{\mathrm {TP} +\mathrm {FN} }}=1-\mathrm {FNR} }

Fall-out(위양성률) = FPR=FPN=FPFP+TN=1TNR(Specificity){\displaystyle \mathrm {FPR} ={\frac {\mathrm {FP} }{\mathrm {N} }}={\frac {\mathrm {FP} }{\mathrm {FP} +\mathrm {TN} }}=1-\mathrm {TNR(Specificity)} }

  • 재현율을 높이기 위해서는 Positive로 판단하는 임계값을 계속 낮추어 모두 Positive로 판단하게 만들면 된다. 하지만, 이렇게 하면 동시에 Negative이지만 Positive로 판단하는 위양성률도 같이 높아진다.

  • 재현율은 최대화 하고 위양성률은 최소화 하는 임계값이 최적의 임계값이다.

  • AUCROC curve의 아래 면적을 말한다.

from sklearn.metrics import roc_curve

# roc_curve(타겟값, prob of 1)
fpr, tpr, thresholds = roc_curve(y_val, y_pred_proba)

roc = pd.DataFrame({
    'FPR(Fall-out)': fpr, 
    'TPRate(Recall)': tpr, 
    'Threshold': thresholds
})
  • ROC curve는 이진분류문제에서 사용할 수 있다.

  • 다중분류문제에서는 각 클래스를 이진클래스 분류문제로 변환( One Vs All )하여 구할 수 있다.

    • 3-class( A, B, C ) 문제 : A vs ( B, C ), B vs ( A, C ), C vs ( A, B ) 로 나누어 수행
  • 분류문제에서 모델을 올바르게 평가하기 위해서는 정확도 외에도 정밀도, 재현율 을 잘 이해하고 사용해야 한다.

  • 특히 각 범주를 예측하는 기준이 되는 임계값의 위치에 따라 정밀도나 재현율이 달라지기 때문에 문제의 상황에 따라 적절한 임계값을 선택할 필요성이 있다.

  • 이진 분류문제에서는 ROC curve와 AUC 점수를 잘 활용하면 좋은 결과를 만들어낼 수 있다.



👉 과정 한눈에 보기

profile
기록하지 않으면 기록되지 않는다.

0개의 댓글