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 |