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

Jason님의 프로필 이미지
Jason

작성한 질문수

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

2회 기출유형(작업형1)

작업2유형 피처엔지니어링 문의

해결된 질문

작성

·

235

0

안녕하세요, 선생님

매번 감사합니다.

 

다름 아니라 오픈된 다른 유형의 문제를 풀이해보고 있는데요.

 

아래 해당 train/test 데이터셋의 경우 원핫인코딩 이후 랜덤포레스트 모델링 예측시 에러가 발생하길래 확인해보니,

train의 object형 데이터의 unique한 갯수(gender 컬럼의 값이 3개)와

test의 object형 데이터의 unique한 갯수(gender 컬럼의 값이 2개)가 다르더라고요

 

이럴경우 train과 test를 합쳐서(Concat)

피처 엔지니어링해야된다고 배운 거 같은데 각각 train/test 피처 엔지니어링하고,

train_test_split 과정에서 train할 데이터를 선택할 때 unique 갯수 차이로 1개더 생성된 'gender_Other'라는 컬럼을 drop시키고 데이터 분리, 모델링 진행해도 평가받을때 문제없을까요?

train.drop(['stroke', 'gender_Other']

 

 

ㅇ 전체 코

import pandas as pd
train= pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/stroke_/train.csv')
test= pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/stroke_/test.csv')

test_id = test.pop('id')
train = train.drop('id', axis=1)

train['age'] = train['age'].str.replace('\*', '').astype('int')

train = pd.get_dummies(train)
test = pd.get_dummies(test)

train['bmi'] = train['bmi'].fillna(train['bmi'].median())
test['bmi'] = test['bmi'].fillna(test['bmi'].median())


from sklearn.model_selection import train_test_split

X_tr, X_val, y_tr, y_val = train_test_split(train.drop(['stroke', 'gender_Other'], axis=1), train['stroke'],
                                            test_size=0.15, random_state=0)


from sklearn.ensemble import RandomForestClassifier

rf = RandomForestClassifier(max_depth=5, random_state=0)
rf.fit(X_tr, y_tr)
pred = rf.predict_proba(X_val)

from sklearn.metrics import roc_auc_score

print(roc_auc_score(y_val, pred[:,1]))

pred = rf.predict_proba(test)

pd.DataFrame({
    'id' : test_id,
    'stroke' : pred[:,1]
}).to_csv('0000.csv', index=False)

 

답변 1

0

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

train에 있는 카테고리 3개가 test의 카테도리 2개를 포함한다면 레이블 인코딩하면됩니다.

포함하지 않는다면 말씀한대로 합쳐서 진행하면 됩니다.

작업형2의 평가는 csv로만 평가받습니다. 코드는 평가대상이 아닙니다 🙂

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

늦은 시간에 답변 감사합니다. 선생님

 

그럼 훈련용/검증용 데이터 구분시에도 위와 같은 방법으로 해도 평가에는 상관없는거죠?

 

ㅇ train gender 컬럼과 test gender 컬럼내 유니크한 값 수가 달라

- train은 3개, test는 2개

train/test를 각각 원핫인코딩하고 아래와 같이 1개 컬럼이 추가로 있는 train의 gender_Other을 삭제해버림

 

X_tr, X_val, y_tr, y_val = train_test_split(train.drop(['stroke', 'gender_Other'], axis=1), train['stroke'], test_size=0.15, random_state=0)

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

음.. 삭제를 하는 형태로는 불가능할 것 같진 않는데

일반적으로는 잘 사용하진 않는 방법이에요!~~ test는 미래데이터이고 언제든 그 값이 또나올 수 있거든요
그렇지만 시험용으로는 문제 없어보입니다.

Jason님의 프로필 이미지
Jason

작성한 질문수

질문하기