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

kccjjang님의 프로필 이미지
kccjjang

작성한 질문수

[퇴근후딴짓] 빅데이터 분석기사 실기 (작업형1,2,3)

모델링 및 평가(분류)

예측 후 평가관련하여

해결된 질문

작성

·

111

1

평가관련하여 질의 드리겠습니다.

from sklearn.metrics import roc_auc_score roc_auc_score(y_val,y_pred[:,1])

 

roc_auc 등 다 평가할때

y-val 와 값이 같은 인덱스에 딸려 와야 하는것이

아닌지요?

같은 사람이 암인지 아닌지 예측을 하고 평가를 해야 하는데.

 

이건 자동으로 시스템에서 맞춰 지는건지요?

제가 돌린 자료를 보고 출력을 하면 좀 다른거 같아서

보통 분활 후 y_val 과 y_pred 데이터 정열 값이 어떤 순서로 이루어지는지 궁금합니다.

 

 

답변 7

0

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

정말 감사드립니다.

근데. 제가 왜 자꾸 질문을 드리는 이유가

너무 다르기 때문입니다.

 

y-pred 값은 즉 1일 확률이 아래와 같은데

array([[0.88, 0.12],
       [0.29, 0.71],
       [0.41, 0.59],
       [0.75, 0.25],
       [0.89, 0.11],
       [0.76, 0.24],
       [0.49, 0.51],
       [0.6 , 0.4 ],
       [0.48, 0.52],
       [0.85, 0.15]])

 

y_val.head(10)

Outcome

454 1

52 1

536 1

469 1

55 1

62 1

539 1

432 0

367 1

482 0

로 이렇게 다르게 나올 수 있는가 하는 의문때문입니다.

 

roc_auc_score 값은 0.80 인데요

 

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

성능이 떨어지는 모델이 나올 수는 있습니다.

그런데 0.8이 나왔다면 나쁘지 않을 모델로 볼 수있네요

우리가 함께본 데이터는 조금 많이 틀렸을 수도 있으나 전체적으로는 그게 아닌것 같네요!

 

일부를 뜯어 보는 것은 좋으나 평가는 평가지표로 봐주세요!

0

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

옙,, 답변 주신 내용은 문구 상으로는 이해가 되는데요.

실제로 값을 좀 보고 싶은데요.

교재 272쪽(빅데이터 분석실기) 여기서 예측한

y-pred값

[0.88 0.12]

[0.29 0.71] 이 값에 대응되는 x-val과 y-val 값을 알고 싶습니다.

죄송합니다. 저도 제가 답답하네요..^^

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

반복된 답변입니다만 순서대로 입니다.

 

X_val, y_val의 첫번째 행이 [0.88 0.12]

X_val, y_val의 두번째 행이 [0.29 0.71]

입니다.

 

X_val.head(2)
y_val.head(2)
로 첫번째와 두번째 데이터를 확인할 수 있어요

0

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

감사합니다.

그래도 좀 이해가 되지 않아서 한번만 더 물어보겠습니다.

x_val 자료를 통해서 r-pred 값을 예측하고,, 이 값하고 y-val과 비교하는 거 아니겠습니까?

 

제가 궁금한것은 어떤 x_val 값을 가지고 y-pred값을 추정했는지 알고 싶은거고,, 이 값과 대응되는 y-val 값이 무엇인지

알수 없는지 입니다..

즉,, 명확하게 어떤 값을 가지고 추정한 값이,, 뭐고, 이것의 정답은 어떻게 되어 있다는 알고 싶은거죠..

제대로 질문이 되지 않아 계속 빙빙 ,, 죄송합니다..

 

x-val 이나 y-val을 출력하면 인덱스 454번 1 로 나오는데. 예측값 즉 y-pred는 0.12로 매우 낮고,

이순서로 보면 너무 다르기 때문에 이 순서는 아닌거 같고, 그럼 어떻게 하면 명확하게 무슨자료를 활용하여 뭐엇으로 예측했는데, 정답은 뭐다,

뭐 이런게 보이지가 않아서 답답합니다

 

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

질문이 섞여있어 구분을 할게요.

제가 궁금한것은 어떤 x_val 값을 가지고 y-pred값을 추정했는지 알고 싶은거고,, 이 값과 대응되는 y-val 값이 무엇인지

  • x_val의 n번째 데이터로부터 예측된 y_pred[n]y_val[n]과 비교합니다.

  • 순서를 유지한 상태로 예측되기 때문에, 각 예측값에 대응되는 실제 값을 순서대로 파악할 수 있습니다.

 

명확하게 어떤 값을 가지고 추정한 값이,, 뭐고,

  • 머신러닝 모델을 통해 확률 값을 예측했어요. 각 행의 데이터를 가지고 예측합니다.

     

 

이것의 정답은 어떻게 되어 있다는 알고 싶은거죠..

정답으로 평가하는 것이 아니라 ROC-AUC 평가지표로 채점합니다.

그 평가지표에 값을 넣을 때는 예측된 확률값을 넣고 있고요

0

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

강사님 저술하신 빅데이터 분석기사 실기 책자를 보고 있습니다.

 

거기서, 파트2에 챕터 6에서,,

 

y-pred는

array([[0.88, 0.12], [0.29, 0.71], [0.41, 0.59], [0.75, 0.25], [0.89, 0.11], [0.76, 0.24], [0.49, 0.51], [0.6 , 0.4 ], [0.48, 0.52], [0.85, 0.15]])

y-val{:10]은


Outcome

454 1

52 1

536 1

469 1

55 1

62 1

539 1

432 0

367 1

482 0

 

인데요.. 여기서 부터 헷갈려서요.. pred 에서 예측한 첫번째 값인 [0.88, 0.12]이 값은 도대체 몇번째 y_val 값인지 모르겠습니다.

454번 인덱스에 값인지요? 그런 아닌거 같아서

제대로 질문의 의도가 전달되었는지 모르겠습니다.

 

 

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

 

  • pred 에서 예측한 첫번째 값인 [0.88, 0.12]는 첫번째 데이터(행)의 확률값입니다.

  • y_val 값에서도 첫번째 데이터(행)입니다.

    • 0확률(정상) 0.88

    • 1확률(당뇨) 0.12가 되는거죠

그리고 도서에서는 outcome을 나눌 때 인덱스 번호를 가져가지 않아요

target = train.pop('Outcome')로 값만 target 변수로 옮기고 있습니다.

인덱스는 신경쓸 필요 없습니다. p.202 첫번째 그림을 보면 X와 y는 세트로 함께 잘라내고있어요 (물론 X와 y를 랜덤하게 세트로 자릅니다)

0

퇴근후딴짓님의 프로필 이미지
퇴근후딴짓
지식공유자

질문이 어떻게 매칭해서 비교하느냐 말하는거죠?

순서대로입니다!

pred를 예측값, y_val를 정답이라고 정의 한다면 둘 다 순서가 같다는 전제입니다.

 

train_test_split()를 사용하면 랜덤으로 나눠지기 때문에 순서는 달라질 수 있어요

하지만 데이터를 X_train과 X_val y_train, y_val 분할 할때도

train의 X와 y의 순서는 같고

val의 X와 y의 순서는 같아요.

 

  • 따라서 임의로 정렬을 할 필요는 전혀 없습니다.

  • 분할 후 데이터가 원래 데이터셋의 순서를 유지 -> 분할이 되었다면 기본 설정이 랜덤 추출이라 순서를 유지할 수 없어요!

    • 인덱스를 확인하고 정렬하는 작업은 무의미 합니다.

[심화]

  • 만약 시계열이라면 순서를 변경하면 안되기 때문에 인덱스를 활용해서 데이터를 슬라이싱 하는 방식을 사용해 val을 만들어요

     

0

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

  1. 인덱스 확인: 분할 후 데이터가 원래 데이터셋의 순서를 유지하도록 보장하기 위해, y_valy_pred의 인덱스를 확인할 수 있습니다. 보통 이들은 동일한 데이터로부터 나왔기 때문에 인덱스는 자동으로 맞춰집니다.

이걸 확인할 수 있는 방법이 있는지요?

저는 궁금하네요..

정열을 해보고 해도, 잘 안 맞아서요..

인덱스를 같은지 좀 확인하는 방법 좀 알려주세요..^^

0

안녕하세요, 인프런 AI 인턴입니다. kccjjang님께서 질문하신 예측 및 평가 관련한 내용에 대해 설명드리겠습니다.

roc_auc_score(y_val, y_pred[:,1])에서 y_valy_pred의 관계에 대해 궁금하신 것 같습니다. 이 함수는 모델이 예측한 확률과 실제 값(y_val)을 비교하여 ROC AUC 스코어를 계산합니다.

평가 시 인덱스 매칭에 대한 이해

  1. 데이터 프레임의 일치: 평가 시 y_valy_pred는 서로 매칭된 데이터셋에서 나옵니다. 이는 모델에서 예측한 결과(y_pred)가 타깃 변수(y_val)와 동일한 인덱스 구조 내의 데이터여야 함을 의미합니다. 따라서, 당신이 데이터를 분할할 때 train_test_split 와 같은 함수를 사용하는 경우, 데이터의 순서가 자동으로 정렬됩니다.

  2. 인덱스 확인: 분할 후 데이터가 원래 데이터셋의 순서를 유지하도록 보장하기 위해, y_valy_pred의 인덱스를 확인할 수 있습니다. 보통 이들은 동일한 데이터로부터 나왔기 때문에 인덱스는 자동으로 맞춰집니다.

여기와 관련된 비슷한 질문들이 Inflearn에 이미 존재하여 추천 드립니다:

  1. 작업형2모의문제1 / 평가 (predict/predict_proba)질문: 이 게시물에서는 ROC AUC 평가 시 predict_probapredict의 차이에 대해 설명하고 있습니다. roc_auc_score의 핵심 사용법에 대한 설명을 확인할 수 있습니다.

  2. 3회 기술유형(작업형2) roc_auc_score(y_val,pred[:,1]) 문의: ROC AUC 평가 시 확률을 활용하는 것이 모델의 성능 평가에 어떻게 영향을 미치는지에 대해 다룹니다.

이와 같은 자료들을 통해 roc_auc_score을 사용할 때 데이터 정렬과 관련된 이해를 돕기 위한 구체적 사례들을 확인할 수 있습니다.

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

kccjjang님의 프로필 이미지
kccjjang

작성한 질문수

질문하기