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

arinmedical27님의 프로필 이미지
arinmedical27

작성한 질문수

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

데이터나누기/자체예측하기/출력 전 데이터프레임만들기

해결된 질문

작성

·

482

·

수정됨

0

코드 필사하면서 연습중인데 2유형의 경우, 항상 동일한 부분에서 어려움을 느끼고 있습니다.
(이론을 완벽하게 이해하지 못한상태에서 따라만하기에 나타나는 문제점 입니다)
기출2회를 풀어보면서 어려움을 느끼는 부분을 표시해 드릴테니
왜 그 컬럼이 그 부분에 들어가는지 문제와 매칭하여... 설명해주실 수 있으실까요?

더불어서 기출 4회 기준으로도 왜 그 코드가 들어가는지 추가설명해주시면
감사하겠습니다.

[기출2회 기준]
#데이터 나누기
항상 "문제"가 바뀔때마다 1번과 2번위치에 뭘 넣어야할지 헷갈립니다.
이것저것 넣어봣는데 다 에러가 떠서....아래의 기준이 맞는지요?
1번위치: x_train data set에서 id를 제외한 데이터들?
2번위치: 출력이미지 기준으로 예측할 컬럼?

저는 LightGBM기준으로 돌려봤는데, EDA 후object형을 카테고리화 한후 x_train data set에서 id컬럼만을 pop하는 과정을, 데이터 나누기 전에 미리 해줘야하는지요?

X_test_ID=X_test.pop('ID')

from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(y_train.drop('Reached.on.Time_Y.N',axis=1),
                                            y_train['Reached.on.Time_Y.N'],
                                            test_size=0.2,
                                            random_state=2000,
                                            )

import lightgbm as lgb
model=lgb.LGBMClassifier(random_state=2000, max_depth=7, n_estimator=100, learning_rate=0.01)
model.fit(X_tr, y_tr)
pred=model.predict_proba(X_val)
pred

# 자체예측하기

아래 3번도 문제가 바뀔때마다 어떤것을 넣어야할지 잘 모르겠습니다.

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

# random_state=2000, max_depth=5, n_estimator=100, learning_rate=0.01 / 0.7278342882937344

 

#최종제출전 데이터프레임만들기
위에와 자꾸연결되는 부분인거 같은데
설정을 잘못해주니 4,5번도 어떤것을 넣어햐하는지 헷갈립니다.


데이터프레임 제목은 문제에 주어진 "출력할이미지"를 보고 가지고오지만
4번의 경우는 id별로 도착하지 않을 확률을 구하는게 문제이니까
X_train의 아이디를 가지고오는것같고
5는 문제에서 주어진 예측값인 도착하지 않는 확률이 있는 열을 넣어주는거 같은데
이게 위 코드에서 설정했던 값과 어떻게 이어지는건지 잘 이해되지 않습니다.
4번의 경우, x_train data set에서 id컬럼만을 pop하는 과정?에서 X_test_ID가져옴..

좀 더 일찍 물어봐야 할 질문인거 같은데 죄송합니다....
답변해주시면 주어진 문제에 따라 어떤로직으로 해당 코드를 설정했는지 이해해보겠습니다.

 

2유형 기출 4회(데이터 2종)일 경우도 함께 설명해주시면
어떤 문제에 따라 어떤 원리로 구하고자 하는 예측값 대비해서
해당 코드(1번위치~5번위치까지)들을 설정했는지 이해할수 있을 것 같습니다!

감사합니다.

 

 

 

 

 

 

 

 

 

답변 1

0

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

안녕하세요 :)

우선 id는 별개로 봐주세요

제가 코드에서 id를 제외하였지만 있더라도 보통 머신러닝 모델이 중요도를 거의 무시하는 수준으로 생각해요~~

다만 id가 숫자가 아닌 문자일 때는 범주형 처리와 또 엮이기 때문에 복잡해져요! 

그런데 만약 값이 모두 다른 userid가 아닌 제품아이디 일 경우엔 중복 id가 많습니다. 이럴경우엔 중요한 id라는 점 기억해 주세요!!

 

#데이터 나누기

train_test_split(X, y)
X는 label을 제외한 데이터 입니다.y는 label우리가 예측할 값입니다.

만약 아이디를 삭제한다면 나누기 전에 하는 것이 좋을 것 같아요~ 나누기 전엔 한번만 하면 될 일을 나눈 후에는 두번 작업이 필요하겠네요

 

# 자체예측하기

roc_auc는 확률값을 평가합니다.

따라서 predict_proba로 예측하게 되면

이진분류의경우 0 확률과 1확률을 출력해요

이에 1(양성) 확률를 문제에서 보통 묻게 되고 1 확률값만 얻기 위해서
pred[:1]로 슬라이싱 합니다.

#최종제출전 데이터프레임만들기
6회에선 test데이터에 대한 예측값만 제출하면 됩니다.

본 캡쳐로 설명하면 test의 id와 예측값을 csv로 만들었습니다.

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

계속 문제를 풀다가 이해했습니다. 답변 감사드립니다.

1. 문제에서 id는 학습시 머신러닝 모델이 중요도를 무시하고 돌려주기 때문에 고려하지 않기
다만, 타문제에서 id 컬럼의 데이터가 제품 id 등등 머신러닝에 중요한 항목일 경우
제거하면안된다는 사실 인지하기

2. 데이터 나누기 train_test_split(X, y)

x위치: 예측값 제외한 학습데이터
y위치 : 예측값

3. 자체 예측하기

자체적으로 예측할 모집단 y_val 검증값과
검증값에 대입해볼 그 예측한 리스트들 가지고오기

4. 최종 제출할 데이터 프레임 형태 만들기 : 이해함

arinmedical27님의 프로필 이미지
arinmedical27

작성한 질문수

질문하기