예시문제 작업형2(구 버전)
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'))
답변 2
0
시험에서 0점 맞기 쉬운 부분입니다.
컬럼의 수가 다름을 이전에는 id와 예측 결과가 달라서 이렇게 에러로 발견할 수 있었지만
지금은 예측컬럼만 제출하기 때문에 이렇게 발견하기 어렵습니다.
제출하기 전에 예측 컬럼의 수가 맞는지 반드시 확인해주세요!!
0
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
# 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
네 아래 코드로 하시면 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')
2번문제 출력값 질문
0
5
1
pd.get_dummies()가 bool로 반환
0
8
1
대응표본검정 레빈
0
15
2
단일표본검정 문제 유형
0
17
2
[작업형 3] 6~7. 카이제곱 검정
0
15
2
9회 작업형3 문제 1-1
0
22
2
최종답안 계산 방식 질문
0
16
1
시험 치기 전 급하게 질문 사항
0
26
2
유형3
0
25
2
작업형 2 연습문제 섹션 3
0
18
2
11 기출문제 ipynb파일
0
22
2
작업형 3 유형
0
23
2
11회 기출 유형(작업형1) 2번 정답
0
22
2
f1 score 질문
0
19
2
10회 작업형 2 인코딩 질의
0
17
2
53번 강의에서 갑자기 수업노트가 없어졌습니다.
0
21
2
28:19 roc_auc이유
0
21
2
수강연장문의
0
23
2
전체적인 머신러닝 순서
0
25
2
빅분기 실기 유형2질문
0
26
1
ID 전처리 이유
0
34
2
데이터제공
0
33
2
예시문제 작업형3 꼬리질문2번
0
22
1
데이터 개수를 구할 때, len과 value_counts 차이
0
29
2





