inflearn logo
강의

Course

Instructor

[Side Project After Work] Big Data Analysis Certification Practical Exam (Type 1, 2, 3)

Machine Learning Training and Evaluation (Classification)

roc_auc_score

Resolved

40

nine141417329586

3 asked

0

from sklearn.metrics import roc_auc_score
roc_auc = roc_auc_score(y_val, pred[:, 1])

print('roc_auc: ', roc_auc)

 

11:19 즈음에 나오는 해당 코드에 궁금한 점이 있어 질문 드립니다. roc_auc_score() 메서드에 전달할 두 번째 아규먼트는 양성(positive)에 대응하는 클래스일 확률 리스트를 전달하는 것으로 알고 있습니다. 그런데 roc_auc_score() 메서드의 첫 번째 아규먼트에 전달하려는 값(y_val)이 0 또는 1로 이루어지지 않고 지금과 같이 '<=50K' 또는 '>50K'와 같은 문자열로 이루어진 리스트라면 roc_auc_score() 메서드 입장에서 도대체 어떻게 '<=50K'가 양성인지 '>50K'가 양성인지 판단할 수 있는 것인지 궁금합니다. 다른 수강생의 질문에서 print(rf.classes_)를 통해 보여지는 리스트의 인덱스 번호로 0이면 양성 X, 1이면 양성으로 판단한다라고 본 것 같은데, 해당 정보를 알고 있는 것(해당 정보를 저장한 주체)은 rf, 즉 랜덤포레스트 모델 객체 아닌가요? roc_auc_score() 입장에서는 rf.classes_ 속성에 직접 접근하지 않는 한, 해당 정보를 알지 못할 것 같은데 어떻게 '>50K'를 양성으로 판단하는지 궁금합니다.

python 머신러닝 빅데이터 pandas 빅데이터분석기사

Answer 2

0

roadmap

사용하는 용어나 내용으로 보아 정확히 잘 알고 계신것 같습니다.


말씀한 것처럼 오해가 없도록 문제에서 ">50"을 양성으로 간주하여 계산한다가 있습니다.

탐색적 데이터분석 (EDA)에서 문제 설명시 설명하고 있습니다.

0

nine141417329586

제가 좀 더 찾아봤는데 roc_auc_score() 메서드가 rf.classes_ 속성을 직접 참조하는 것이 아니라, roc_auc_score() 메서드가 내부적으로 클래스명을 정렬한 후에 첫 번째는 0, 두 번째는 1(양성, positive)로 판단한다고 합니다. 그런데 roc_auc_score(), 랜덤 포레스트 모델, LightGBM, XGBoost, LogisticRegression 등 scikit-learn 규약을 따르는 객체들은 모두 같은 정렬 방식을 채용하므로 roc_auc_score() 메서드의 정렬 방식을 'rf.classes_' 속성을 통해 대신 확인하는 것이라고 이해하면 될 것 같습니다.

0

roadmap

네 맞습니다 정렬이 되어

1컬럼을 선택했지만

만약 반대로 되어있는지 확인하기 위해선 rf.classes_로 정확한 확인이 필요합니드

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 정승찬님께서 질문해주신 내용을 바탕으로 설명 드리겠습니다.

ROC AUC 스코어를 계산하는 roc_auc_score 함수에서는, 일반적으로 양성 클래스(Positive Class)를 결정하여 그 측면에서 확률을 판단하게 됩니다. roc_auc_score 함수가 y_val에 문자열 같이 클래스 레이블로 제공된 데이터를 처리할 때, 클래스가 어떻게 양성인지 판단할 수 있는 이유는 다음과 같습니다.

  1. 인코딩된 값 사용: 보통 모델을 학습시킬 때, 클래스 레이블이 문자열일 경우 LabelEncoder 같은 유틸리티를 사용하여 레이블을 0 또는 1로 변환합니다. 이는 내부적으로 각 클래스가 어떤 수로 매핑되는지를 명확하게 만들어 줍니다. 이로 인해, True Positive와 같은 개념을 이진 분류 문제에 적용할 수 있게 됩니다.

  2. 클래스 순서에 대한 정보: scikit-learn의 분류 모델들은 fit 과정을 거치는 동안 프레임워크에 클래스들이 어떤 인덱스를 가질지에 대한 정보를 제공하게 됩니다. 예를 들어 rf.classes_ 속성은 각 클래스의 매핑 정보를 제공합니다. 이를 통해 나중에 예측 시 또는 평가 시 어떤 클래스가 양성인지 판단할 수 있게 됩니다.

  3. predict_proba 결과 해석: roc_auc_score(y_val, pred[:, 1])에서 pred[:, 1]은 두 번째 클래스(이 경우 ‘>50K’로 판단되는 클래스)에 대한 확률을 나타냅니다. 이 정보는 모델이 이전에 학습할 때 정한 순서대로 제공됩니다.

따라서, roc_auc_score 함수 측면에서는 y_val 레이블이 처리되었거나, predict_proba로부터 온 확률 값의 해석이 필요할 때 이런 변환 과정을 통해 대응 니즈를 충족하게 됩니다. 질문자의 이해를 돕기 위해 유사한 질문을 통해 얻은 정보를 추가로 제공해 드리겠습니다:

  • 이진분류에서 양성이 0일 때, roc_auc_score 적용..: 이 게시물에서는 이진 분류 문제에서 양성 클래스가 0일 때의 처리 방법 및 분류 클래스가 문자일 경우의 roc_auc_score 함수 적용 방법에 대해 설명하고 있습니다.

  • roc_auc: 클래스에 대한 확률값 구하는 이진 분류와 다중 분류 환경에서 roc_auc 사용 시 predict_proba의 선택적 활용 관계에 대해 설명하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

0

nine141417329586

해당 링크에 들어가서 추가적인 내용을 확인했습니다.

혹시나 불안하다면

roc_auc = roc_auc_score(y_val, pred[:, 1], pos_label='>50K') 로 작성하면 될까요?

0

nine141417329586

https://www.inflearn.com/community/questions/1618812/%EC%9D%B4%EC%A7%84%EB%B6%84%EB%A5%98%EC%97%90%EC%84%9C-%EC%96%91%EC%84%B1%EC%9D%B4-0%EC%9D%BC-%EB%95%8C-roc-auc-score-%EC%A0%81%EC%9A%A9 여기에서 선생님께서 pos_label 속성을 이용하면 된다고 하셔서 붙여서 돌려봤는데 TypeError: got an unexpected keyword argument 'pos_label' 이라고 뜨면서 에러가 발생했어요. 실제로 공식 문서(https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html)를 봐도 pos_label이라는 파라미터는 없는 것 같은데 확인 부탁드립니다.. ㅠ

책이랑 강의랑 순서나 예제가 다른것 같네요

0

35

2

수강연장 문의

0

54

1

재검토 요청 방법 좀 알려주셔요...-.-;;

0

74

2

12회 실기 질문(작업형 2)

0

63

2

뒤로가기 버튼 같은 것이 있나요?

0

46

1

강의 연장 문의

0

63

2

출력값 질문

0

41

2

수업노트가 어디에 있나요?

0

40

1

실기시험 제출관련

0

199

3

6.20 작업형 2 과적합

0

192

3

코딩팡 장업형2 베이스 라인 인코딩 종류 질문

0

63

2

로지스틱회귀, 회귀

0

58

2

회귀 문제를 풀때 질문입니다.

0

65

1

불균형 처리 후 성능이 더 낮아졌다면,

0

73

2

실기 체험 제2유형 에러 문의

0

73

1

LIGHTGBM 으로 하면 pred값이 소수점 6자리까지 나오는게 맞나요

0

60

2

3번문제 등분산 가정

0

53

2

작업형3 target 형 변환 질문

0

42

2

[작업형1] 연습문제 섹션1 ~ 10 의 section4

0

48

3

원핫인코딩과 레이블 인코딩에서 concat

0

67

2

제2유형 질문입니다.

0

51

2

C()

0

50

2

작업형 2에서 strafity 적용 유무

0

62

2

수강 기간 연장 가능 여부 문의드립니다.

0

83

2