강의

멘토링

커뮤니티

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

고라니님의 프로필 이미지
고라니

작성한 질문수

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

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

기출 8회 작업형 2 질문

해결된 질문

작성

·

39

0

데이터 전처리 과정에서

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

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

target=train.pop('TotalCharges')

train = pd.get_dummies(train)

test = pd.get_dummies(test)

 

이렇게 customerID를 drop하는 처리 진행 후 인코딩을 해서 학습 평가 까지는 잘 진행이 되는데, 예측단계(pred=rf.predict(test))에서 아래와같은value에러가 뜹니다.

ValueError: The feature names should match those that were passed during fit. Feature names unseen at fit time: - customerID_CUST0001

 

이런 경우는 무조건 train과 test를 하나로 묶어서 원핫인코딩을 진행해야하나요? train, test 각각 개별로 진행하면 안되는 떄의 기준이 궁금합니다.

답변 2

0

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

에러 원인은 train에는 CUST0001 값이 있지만 test에는 없고

원핫인코딩은 카테고리를 모두 컬럼으로 만듭니다.

예를 들어 과일 종류 100가지가 있다고 한다면 인코딩 후엔 모두 컬럼으로 만들어 버리죠!

데이터 수 만큼 모두 유니크한 값이라면 숫자면 그냥 둬도 되지만 문자면 삭제를 권장합니다.

 

에러가 나는 경우

  • train과 test의 카테고리 종류가 다를 때

  • 특히 train에만 있는 값이 test에 없으면 문제가 됨
    → train에서는 그 값의 원핫 컬럼이 생겼기 때문에 모델이 그 컬럼을 기대함
    → test에는 해당 컬럼이 없어 오류 발생

에러가 안 나는 경우

  • train과 test의 카테고리 종류가 완전히 일치할 때

  • 예: 과일 종류가 “사과, 포도, 바나나"로 train과 test 모두 같다면 문제 없음

0

안녕하세요, 인프런 AI 인턴입니다. 고라니님의 질문에 답변 드리겠습니다.

이번 질문에서는 원핫 인코딩 시 발생할 수 있는 차원 또는 열 불일치 문제와 관련된 내용입니다. 주어진 코드에서 customerID를 제거했지만 여전히 예측 시의 에러가 발생하는 상황은 train과 test의 컬럼 차이 때문입니다.

문제의 원인

  1. Train과 Test의 원핫 인코딩 차이: train과 test 데이터셋 각각에 대해 독립적으로 원핫 인코딩을 진행하면, 특정 범주가 train에만 있고 test에는 없거나 그 반대일 수 있습니다. 이런 경우 서로 다른 컬럼 수로 인해 모델이 예측 시 데이터가 맞지 않아 에러가 발생할 수 있습니다.

  2. 교집합 범주의 불일치: 원핫 인코딩 후 train과 test에 존재하는 범주의 수가 다를 수 있으며, 이에 따라 원핫 인코딩 후의 컬럼 수가 다르게 됩니다.

해결책 및 권장 방법

  • 데이터 병합 후 원핫 인코딩: train과 test를 하나로 결합한 뒤 원핫 인코딩을 진행하고, 다시 나눠 사용하는 방법이 안전합니다. 이렇게 하면 인코딩 후로 feature 컬럼의 불일치 문제를 방지할 수 있습니다.
# 데이터 병합
df_all = pd.concat([train, test], axis=0)

# 원핫 인코딩
df_all_encoded = pd.get_dummies(df_all)

# 데이터 분리
train_encoded = df_all_encoded[:len(train)]
test_encoded = df_all_encoded[len(train):]

이렇게 하면 train과 test 모두 동일한 컬럼을 가지게 되어 학습과 예측에 문제가 없어집니다.

참고 자료

유사한 문제와 해결책에 대한 정보는 아래 링크를 참고하시면 도움이 될 것입니다:
- 데이터 병합 후 인코딩 문제 해결

고라니님께 도움이 되었기를 바라며, 추가적으로 궁금한 사항 있으시면 언제든지 질문해 주세요. 곧 지식공유자께서도 답변해 주실 것입니다. 현재는 베타 기능으로 답변의 완벽성을 확신할 수 없는 점에 대해 양해 부탁드립니다. 🙏

감사합니다.

고라니님의 프로필 이미지
고라니

작성한 질문수

질문하기