roc_auc_score
from sklearn.metrics import roc_auc_scoreroc_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'를 양성으로 판단하는지 궁금합니다.
Answer 2
0
사용하는 용어나 내용으로 보아 정확히 잘 알고 계신것 같습니다.
말씀한 것처럼 오해가 없도록 문제에서 ">50"을 양성으로 간주하여 계산한다가 있습니다.
탐색적 데이터분석 (EDA)에서 문제 설명시 설명하고 있습니다.
0
제가 좀 더 찾아봤는데 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
안녕하세요, 인프런 AI 인턴입니다. 정승찬님께서 질문해주신 내용을 바탕으로 설명 드리겠습니다.
ROC AUC 스코어를 계산하는 roc_auc_score 함수에서는, 일반적으로 양성 클래스(Positive Class)를 결정하여 그 측면에서 확률을 판단하게 됩니다. roc_auc_score 함수가 y_val에 문자열 같이 클래스 레이블로 제공된 데이터를 처리할 때, 클래스가 어떻게 양성인지 판단할 수 있는 이유는 다음과 같습니다.
인코딩된 값 사용: 보통 모델을 학습시킬 때, 클래스 레이블이 문자열일 경우
LabelEncoder같은 유틸리티를 사용하여 레이블을 0 또는 1로 변환합니다. 이는 내부적으로 각 클래스가 어떤 수로 매핑되는지를 명확하게 만들어 줍니다. 이로 인해, True Positive와 같은 개념을 이진 분류 문제에 적용할 수 있게 됩니다.클래스 순서에 대한 정보: scikit-learn의 분류 모델들은
fit과정을 거치는 동안 프레임워크에 클래스들이 어떤 인덱스를 가질지에 대한 정보를 제공하게 됩니다. 예를 들어rf.classes_속성은 각 클래스의 매핑 정보를 제공합니다. 이를 통해 나중에 예측 시 또는 평가 시 어떤 클래스가 양성인지 판단할 수 있게 됩니다.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
해당 링크에 들어가서 추가적인 내용을 확인했습니다.
혹시나 불안하다면
roc_auc = roc_auc_score(y_val, pred[:, 1], pos_label='>50K') 로 작성하면 될까요?
0
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

