강의

멘토링

로드맵

Inflearn brand logo image

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

niut0598님의 프로필 이미지
niut0598

작성한 질문수

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

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

작업형 2 파일 생성전 pred 순서에 오류

작성

·

35

0

안녕하세요 8회 작업형 2번을 간단한 방법을 풀다가 오류가 발생했는데 도통 뭐 잘못작성한지 모르겠습니다..

확인 부탁드리겠습니다!

 

import pandas as pd
train = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/refs/heads/main/p4/8_2/churn_train.csv")
test = pd.read_csv("https://raw.githubusercontent.com/lovedlim/inf/refs/heads/main/p4/8_2/churn_test.csv")

# print(train.shape, test.shape)
# train.head()
# train.isnull().sum()

# train = train.drop('CustomerID', axis = 1)
# tesT = test.drop('CustomerID', axis = 1)
target = train.pop('TotalCharges')

# cols = train.select_dtypes(include = 'O').columns
# # print(cols)
# from sklearn.preprocessing import LabelEncoder

# for col in cols :
#   le = LabelEncoder()
#   train[col] = le.fit_transform(train[col])
#   test[col] = le.transform(test[col])

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

from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state = 0)
# print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)

# from sklearn.ensemble import RandomForestRegressor
# rf = RandomForestRegressor(random_state = 0)
# rf.fit(X_tr, y_tr)
# pred = rf.predict(X_val)
# print(pred)
# 937.577739684466

import lightgbm as lgb
model = lgb.LGBMRegressor(random_state = 0, verbose=-1)
model.fit(X_tr,y_tr)
pred = model.predict(X_val)
# 946.7024808036148

from sklearn.metrics import mean_absolute_error
print(mean_absolute_error(y_val, pred))

pred = model.predict(test)
submit = pd.DataFrame({'pred':pred})
submit.to_csv('result.csv',index = False)

# result = pd.read_csv('result.csv')

답변 3

0

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

이전에 댓글 남겨주신거 찾았습니다!ㅠㅠ

빅분기 정말 어렵네요 ㅠㅠ 1유형도 다 못봤는데 ㅠㅠ

 

  • 숫자형 ID라면 모델에 넣어도 에러는 안 나지만, 여전히 의미가 없을 수 있습니다.

  • 문자형 ID는 one-hot 인코딩 시 너무 많은 컬럼을 만들 수 있어 삭제하는 게 일반적입니다.

 

2

원핫 인코딩 자체는 오류를 내지 않지만, 에러 메시지가 떴다면 해당 컬럼을 삭제한 뒤 다시 삭제하려고 해서 생긴 KeyError일 가능성이 큽니다. 삭제 코드와 데이터 불러오는 코드를 한 셀에서 함께 실행하면 문제를 예방할 수 있어요.

 

3 네, ID가 숫자면 원핫 인코딩 대상이 아닙니다.

 

4 ID가 문자인데 유니크 수가 너무 많은 상황이에요. train과 test ID가 같지도 않고요

설사 같다고 하더라도 train ID로 인해 컬럼이 4000개가 생겨버려요

1분 내에 학습하기에는 컬럼 수가 많습니다.

합쳐서 진행 보다는 ID컬럼 삭제가 깔끔합니다. 합친수 인코딩 하면 컬럼수가 5000개가 넘어갈 수도 있어요 테스트 해보시죠!


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

아무래도 시간이 촉박해져서 그렇게 느끼실 것 같아요

남은 기간도 화이팅입니다. !!

0

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

image.png

 

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

오류는 현재 이런 메세지가 뜹니다!

0

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

오타가 보입니다. tesT

 

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

어디에 오타가 있을까요? test로 다 입력이 되어있는걸로 보입니다!

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

제가 눈으로 봐서 잘못봤네요!

주석 처리되어 있으니 영향이 없어요

 

train = pd.get_dummies(train)
test = pd.get_dummies(test)
print(train.shape, test.shape)

(4116, 4159) (1764, 1807)로 train과 test 컬럼수가 달라졌어요

 

모든 값이 다른 ID가 문자인 경우 삭제 또는 합쳐서 인코딩이 필요합니다.

train = train.drop('customerID', axis = 1)
test = test.drop('customerID', axis = 1)

 

 

customerID 를 지우고 다시 작성해 주세요 눈으로 보기엔 문제 없었는데

특수문자가 들어간건지 문제가 있었어요

 

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

와 감사합니다. 아직 행삭제 혹은 합치는거에 감이 없는데 어떻게 하면 구분 지을 수 있을까요?

말씀해주신대로 범주형 값이 유니크하면 삭제하고 데이터 전처리를 진행해야할까요?

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

삭제를 우선으로 하지 마시고 범주형 데이터는 인코딩을 진행하고 결제 치는 채워 주세요. 그리고 첫 번째 모델을 만들고 평가 지표 점수를 확인한 뒤에 여유가 있다면 두 번째 세 번째 모델을 만들어 주세요.

 

이 때는 모델을 변경하거나 전 처리를 달리 해 볼 수 있어요. 아이디가 수자 일때는 그대로둬도 괜찮습니다. 굳이 힘들게 삭제 할 필요 없습니다.

niut0598님의 프로필 이미지
niut0598

작성한 질문수

질문하기