인프런 커뮤니티 질문&답변

qms13님의 프로필 이미지
qms13

작성한 질문수

[개정판] 파이썬 머신러닝 완벽 가이드

threshold에 따른 roc_auc curve 설정 질문드립니다.

작성

·

346

0

선생님, 안녕하세요?

분류모델 성능 평가지표에서 roc_auc 에 대해 궁금한 점이 생겨 질문드립니다.

  1. threshold에 따라 roc_auc_score값 구하기

    1. sklearn.metrics.roc_auc_score(y_test, pred_proba)

      # pred_proba = model.predict_proba()

      위의 코드로 roc_auc값을 구하는 것으로 알고 있습니다.

    2. 하지만, 위의 코드로 roc_auc값을 구하면, threshold에 따라 달라지지 않습니다.

    3. 그렇다고 pred_proba대신 pred(pred = model.predict())를 사용하면 roc_auc값이 떨어집니다.

    4. threshold에 따라 roc_auc값을 어떻게 구하면 좋을까요?

       

  2. 최적의 threshold를 구할 때 어떤 성능 지표를 제일 최우선으로 봐야할지도 궁금합니다. 저는 지금 질병 진단 예측을 만들고 있어 재현율을 높이는게 중요하다고 생각하는데 roc_auc값도 중요하게 봐야할 것 같아 고민이 됩니다...

  3. pred_proba, pred 둘 중 어느 것으로 roc_auc값을 구하는게 맞나요? 일반적으로 사용되는 것이 무엇인가요?

답변 부탁드리겠습니다.

감사합니다 :)

답변 1

0

권 철민님의 프로필 이미지
권 철민
지식공유자

안녕하십니까,

  1. 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를 변경하지 못합니다.

  1. 의료쪽에서는 전통적으로 roc-auc를 많이 사용합니다. 그리고 Recall도 보조적으로 함께 사용하는 경우가 많습니다. 꼭 하나의 지표만 중시하실 필요는 없을 것 같습니다. 가능하다면 두개를 함께 최적화 하면 좋을 것 같습니다. 꼭 하나를 해야 한다면, 업무적인 특성에 따라서 정하면 좋을것 같고, 업무적인 특성도 애매하면... 음.. roc-auc 아닐까 싶습니다.

     

  2. 사이킷런은 pred_proba()로 roc-auc를 구합니다.

감사합니다.

qms13님의 프로필 이미지
qms13
질문자

이해가 많이 되었습니다.

정말 감사드립니다. :)

요즘 더욱이 날씨가 더운데 건강 조심하세요~!

qms13님의 프로필 이미지
qms13

작성한 질문수

질문하기