작성
·
346
0
선생님, 안녕하세요?
분류모델 성능 평가지표에서 roc_auc 에 대해 궁금한 점이 생겨 질문드립니다.
threshold에 따라 roc_auc_score값 구하기
sklearn.metrics.roc_auc_score(y_test, pred_proba)
# pred_proba = model.predict_proba()
위의 코드로 roc_auc값을 구하는 것으로 알고 있습니다.
하지만, 위의 코드로 roc_auc값을 구하면, threshold에 따라 달라지지 않습니다.
그렇다고 pred_proba대신 pred(pred = model.predict())를 사용하면 roc_auc값이 떨어집니다.
threshold에 따라 roc_auc값을 어떻게 구하면 좋을까요?
최적의 threshold를 구할 때 어떤 성능 지표를 제일 최우선으로 봐야할지도 궁금합니다. 저는 지금 질병 진단 예측을 만들고 있어 재현율을 높이는게 중요하다고 생각하는데 roc_auc값도 중요하게 봐야할 것 같아 고민이 됩니다...
pred_proba, pred 둘 중 어느 것으로 roc_auc값을 구하는게 맞나요? 일반적으로 사용되는 것이 무엇인가요?
답변 부탁드리겠습니다.
감사합니다 :)
답변 1
0
안녕하십니까,
roc-auc는 threshold 값을 변경 시켜도 값 자체가 변화지 않습니다. roc-auc 지표 자체가 Threshold값을 변화 시키면서 TPR과 FPR을 측정하기 때문입니다.
예를 들어 Scikit learn의 roc_curve()는 여러개의 threshold 값별로 fpr, tpr 을 반환합니다.
아래에서 thresh1는 list이고 0 ~ 1 사이의 threshold 값을 가지고 있습니다. 그리고 fpr1, tpr1 역시 list이며 thresh1의 개별 threshold 값별로 fpr과 tpr 값을 가지게 됩니다.
fpr1, tpr1, thresh1 = roc_curve(y_true, pred_prob1[:,1], pos_label=1)
roc_auc_score()는 roc_curve()를 이용해서 roc-auc score를 계산하는 것입니다. 따라서 임의로 threshold 값을 변경하는 것은 roc-auc score를 변경하지 못합니다.
의료쪽에서는 전통적으로 roc-auc를 많이 사용합니다. 그리고 Recall도 보조적으로 함께 사용하는 경우가 많습니다. 꼭 하나의 지표만 중시하실 필요는 없을 것 같습니다. 가능하다면 두개를 함께 최적화 하면 좋을 것 같습니다. 꼭 하나를 해야 한다면, 업무적인 특성에 따라서 정하면 좋을것 같고, 업무적인 특성도 애매하면... 음.. roc-auc 아닐까 싶습니다.
사이킷런은 pred_proba()로 roc-auc를 구합니다.
감사합니다.
이해가 많이 되었습니다.
정말 감사드립니다. :)
요즘 더욱이 날씨가 더운데 건강 조심하세요~!