21년 4월 14일 

코드스테이츠 부트캠프 #일차

S2-Week 2: Tree Based Model - Evaluation Metrics for Classification


 

분류문제에서 모델을 올바르게 평가하기 위해서는 정확도 외에도 정밀도, 재현율 을 잘 이해하고 사용해야 한다는 것을 알았습니다. 특히 각 범주를 예측하는 기준이 되는 임계값의 위치에 따라 정밀도나 재현율이 달라지기 때문에 문제의 상황에 따라 적절한 임계값을 선택할 필요성이 있습니다. 이진 분류문제에서는 ROC curve와 AUC 점수를 잘 활용하면 좋은 결과를 만들어낼 수 있을 것 입니다.

 

ROC Curve

Confusion Matrix로만 모델을 평가하기에는 부족할 수 있어서 효율성을 평가하는 척도로 ROC Curve를 사용한다.

 

-모델의 효율성을 민감도(Sensitivity, recall), 특이도(Specificity)를 이용하여 그래프로 나타낸 것

-모든 임계값에서 분류 모델의 성능을 보여주는 그래프이다

 

 

X축은 FPR (False Positive Rate)로, 틀린 것을 맞았다고 잘못 예측한 수치 (FPR = FP / (FP + TN))

Y축은 TPR (True Positive Rate)로, 맞은 것을 맞았다고 예측한 수치 (TPR = TP / (TP + FN)) = recall(재현율)

 

 

AUC

-ROC Curve의 아래 면적

-범위는 0.5 ~ 1이며 1에 가까울 수록 모델의 성능이 좋다.

 

 

AUC = 1

-곡선이 겹치지 않는 상태로 가장 이상적인 상태이다.

-TN과 TP를 완벽하게 구분할 수 있다.

 

 

AUC = 0.7

-두 곡선이 겹치면 error가 발생한다.

-Threshold(임계값)을 수정하면 오류값들을 조절할 수 있다.

 

 

AUC = 0.5

-분류 모델의 성능이 좋지 못한 상태

 

 

 

사이킷런에 roc_curve는 임계값에 따른 TPR, FPR 수치를 자동으로 계산해준다.

1
2
3
4
5
6
7
8
9
10
11
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
cs

 

ROC curve 그리는 코드

1
2
3
4
plt.scatter(fpr, tpr)
plt.title('ROC curve')
plt.xlabel('FPR(Fall-out)')
plt.ylabel('TPR(Recall)');
cs

 

 

최적의 threshold 값 찾기

1
2
3
4
5
# threshold 최대값의 인덱스, np.argmax()
optimal_idx = np.argmax(tpr - fpr)
optimal_threshold = thresholds[optimal_idx]
 
print('idx:', optimal_idx, ', threshold:', optimal_threshold)
cs

'개발 관련자료 > ML, DL' 카테고리의 다른 글

Ridge regression과 Lasso regression 개념  (0) 2021.06.11
cross validation(교차검증)  (0) 2021.05.05
Confision Matrix  (0) 2021.05.05
Random Forests  (0) 2021.04.25
Decision Trees  (0) 2021.04.24

+ Recent posts