inflearn logo
강의

講義

知識共有

[仕事終わりの趣味] ビッグデータ分析実技 (作業型1,2,3)

예시문제 작업형2(구 버전)

解決済みの質問

577

mjjj04096045

投稿した質問数 12

0

ValueError: array length 2482 does not match index length 3500

제가 안보고 풀어봤는데 이런 에러가 뜨는건 무슨 이유일까요..

밑에는 제가 작성한 코드입니다. # 5. 평가까지 잘 돌아가다가 # 6. 제출 부분 작성하니깐 갑자기 저런 오류가 뜨네요 ㅠㅠ.. 제 코드 중에 어느 부분이 잘못된 걸까요..

 

# 2. 전처리
# 2-1. 결측치 처리
# print(X_train.isnull().sum())
X_train['환불금액'] = X_train['환불금액'].fillna(0)
X_test['환불금액'] = X_test['환불금액'].fillna(0)

# 2-2. object 컬럼 라벨인코딩
from sklearn.preprocessing import LabelEncoder
cols = ['주구매상품', '주구매지점']
le = LabelEncoder()
for col in cols :
        X_train[col] = le.fit_transform(X_train[col])
        X_test[col] = le.transform(X_test[col])

# 2-3. 불필요한 컬럼 삭제
X_train = X_train.drop(columns = 'cust_id')
X_test = X_test.drop(columns = 'cust_id')
test_id = y_train.pop('cust_id')

# 3. 분리
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(X_train, y_train['gender'], test_size = 0.2, random_state = 2022)

# 4. 학습
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(random_state = 2022)
model.fit(X_tr, y_tr)
pred = model.predict_proba(X_val)

# 5. 평가
from sklearn.metrics import roc_auc_score
# print(roc_auc_score(y_val , pred[:, 1]))

# 6. 제출
pred = model.predict_proba(X_test)
pd.DataFrame({'custid' : test_id, 'gender' : pred[:,1]}).to_csv('00000.csv', index = False)
# print(pd.read_csv('00000.csv'))

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

回答 2

0

roadmap

시험에서 0점 맞기 쉬운 부분입니다.

컬럼의 수가 다름을 이전에는 id와 예측 결과가 달라서 이렇게 에러로 발견할 수 있었지만

지금은 예측컬럼만 제출하기 때문에 이렇게 발견하기 어렵습니다.

제출하기 전에 예측 컬럼의 수가 맞는지 반드시 확인해주세요!!

0

mjjj04096045

컬럼 수 확인하는 습관이 잘 안돼서 ㅠㅠ 연습 많이 하겠습니다!

0

Jason

pd.DataFrame 만드실 때,

test_id를 y_train에 있는 cust_id 값으로 만드신 거 같은데요

y_train shape이 아마 3500 이었을거 같고,

결과값으로 저장하시려는 gender의 예측값은 2482개라서 에러발생한거 같습니다.

 

분리과정에서 y_train['gender']에 대한 시리즈 값을 명시하셨으니,

drop 과정에서 y_train은 column drop이라던지 pop 없이

test_id = X_test.pop('cust_id')로 pop 하시면 될거같습니다.

0

mjjj04096045

# 2-3. 불필요한 컬럼 삭제

X_train = X_train.drop(columns = 'cust_id')

test_id = X_test.pop('cust_id')

y_train = y_train.drop(columns = 'cust_id')

혹시 이렇게 수정하면 되는걸까요?

 

만약 분리과정이 없었더라면 아래와 같이 그대로 사용하면 되는걸까요?

# 2-3. 불필요한 컬럼 삭제

X_train = X_train.drop(columns = 'cust_id')

X_test = X_test.drop(columns = 'cust_id')

test_id = y_train.pop('cust_id')

 

 

 

2

Jason

네 아래 코드로 하시면 test_id가 X_test 'cust_id'를 받기때문에 DataFrame 생성시 pred하고 같은 행수를 가질거 같습니다.

저라면 분리과정에서 y_train['Gender']라고 명시하셨기때문에 drop 처리는 하지 않을거같습니다.

 

X_train = X_train.drop(columns = 'cust_id')

test_id = X_test.pop('cust_id')

근데 만약 분리과정에서 y_train['Gender']가 아닌 y_train으로 하셨으면

앞서 컬럼 삭제시 y_train에 'cust_id' 컬럼을 삭제해야 'Gender'만 남는 시리즈 형태가 되기 때문에 아래와 같이 작성할거같습니다.

X_train = X_train.drop(columns = 'cust_id')

y_train = y_train.drop(columns = 'cust_id')

test_id = X_test.pop('cust_id')

0

mjjj04096045

덕분에 이해가 잘 가네요.. 상세한 답변 감사합니다!!

기출 11회 작업형 2_전체 데이터 학습 여부

0

13

1

예측값 결과 소수점 차이

0

17

2

기출 문제와 실전챌린지 연습문제 무엇부터 푸는게 나은가요?

0

14

0

전처리 train() test([ ])

0

15

2

작업형 1 배경지식 질문

0

19

2

옳게 풀은건지 질문드립니다!

0

14

1

roc_auc_score

0

22

2

추가질문 합니다

0

16

2

시험환경 구름

0

18

2

2유형 질문드려요

0

15

2

RandomForest vs lgb

0

23

2

전처리 관련질문

0

23

3

작업형3 기출

0

17

2

유형2에서 데이터분할 생략 가능여부

0

28

2

9회 기출 유형3 질문

0

19

2

lgb 기초편

0

13

1

괄호 사용

0

23

2

작업형 2 데이터 전처리 질문

0

21

1

11회 기출 유형 작업형1 문제 3-1

0

19

1

예시문제 작업형2 (ver2023) 질문입니다

0

20

2

Data type에 따른 처리

0

20

2

데이터 전처리 관련

0

19

2

시험에서 문제 불러오기

0

19

2

2번문제 출력값 질문

0

27

2