Inflearn brand logo image

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

유창균님의 프로필 이미지
유창균

작성한 질문수

[2025년 최신 기출 반영] 빅데이터 분석 기사 실기 시험 100% 합격 ! 기출 문제의 패턴이 보인다 !

9회 작업형1번 문제1

인코딩 질문!!

작성

·

36

0

훈련 세트에서 보지 못한 카테고리를 테스트 세트에서 발견하여 아래와 같은 오류가 떴는데

ValueError: Found unknown categories ['XXX'] in column 1 during transform

이러한 경우 test에 해당 값을 다른 값으로 대체하거나 삭제 하는게 좋을까요?

시험이 얼마 안남아 궁금한게 많네요

ㅜㅜ

 

 

답변 1

0

코딩 대한민국님의 프로필 이미지
코딩 대한민국
지식공유자

네 이 에러는 훈련시에는 없었던 새로운 카테고리가 테스트 할때 포함되서 나오는 오류 입니다. 이 에러가 나면 훈련시 컬럼과 테스트 컬럼을 비교해보셔야합니다. 아마도 문자를 숫자로 변환하는 과정에서 훈련과 테스트간에 데이터 불일치가 있어보입니다. 전체 코드가 어떻게 되죠?

유창균님의 프로필 이미지
유창균
질문자

강사님 강의 기출문제는 모두 풀고 연습을 하여 다른 교재를 사서 풀이하던중에 오류가 나서 질문을 드렸는데 실례가 안되면 답변 주시면 많은 도움 될 것 같습니다.,,ㅜㅜ

아래 문제입니다

#훈련 데이터로 학습한 모델을 테스트 데이터에 적용하여 예측한 결과를 제출하시오.(분류 예측값 제출)
#※ 제출 형식은 ID, pred 두 칼럼만 존재해야 한다.(평가 지표: macro f1-score)

import pandas as pd
train = pd.read_csv('https://raw.githubusercontent.com/YoungjinBD/data/main/exam/7_2_train.csv')
test = pd.read_csv('https://raw.githubusercontent.com/YoungjinBD/data/main/exam/7_2_test.csv')
코딩 대한민국님의 프로필 이미지
코딩 대한민국
지식공유자

네 ~ 아래와 같이 모델을 만들어보았습니다.

훈련데이터에 unknown 을 포함시키면 해결되는데요.

실제 시험때 이렇게 나오면 아마 많은 수강생들이 못풀거라서 이렇게 문제가 나오지는

않을것 같습니다.

 

import pandas as pd

from sklearn.ensemble import RandomForestClassifier, VotingClassifier

from sklearn.linear_model import LogisticRegression

from sklearn.preprocessing import LabelEncoder, StandardScaler

from sklearn.model_selection import train_test_split

from sklearn.metrics import f1_score

# 데이터 로드

train = pd.read_csv('https://raw.githubusercontent.com/YoungjinBD/data/main/exam/7_2_train.csv')

test = pd.read_csv('https://raw.githubusercontent.com/YoungjinBD/data/main/exam/7_2_test.csv')

# 데이터 분리

X_train = train.drop(['ID', 'Target'], axis=1)

y_train = train['Target']

X_test = test.drop(['ID', 'Target'], axis=1)

# 카테고리 변수 처리

for col in X_train.select_dtypes(include='object').columns:

train_values = set(X_train[col])

X_test[col] = X_test[col].apply(lambda x: 'UNKNOWN' if x not in train_values else x)

le = LabelEncoder()

le.fit(list(X_train[col]) + ['UNKNOWN'])

X_train[col] = le.transform(X_train[col])

X_test[col] = le.transform(X_test[col])

# 피처 엔지니어링 (성적 비율)

if 'Curricular units 1st sem (approved)' in X_train.columns:

X_train['approval_rate'] = X_train['Curricular units 1st sem (approved)'] / (X_train['Curricular units 1st sem (enrolled)'] + 1)

X_test['approval_rate'] = X_test['Curricular units 1st sem (approved)'] / (X_test['Curricular units 1st sem (enrolled)'] + 1)

# 결측치 처리 및 스케일링

X_train = X_train.fillna(X_train.median())

X_test = X_test.fillna(X_train.median())

scaler = StandardScaler()

X_train = scaler.fit_transform(X_train)

X_test = scaler.transform(X_test)

# 앙상블 모델 (성능 UP!)

rf = RandomForestClassifier(n_estimators=100, class_weight='balanced', random_state=42)

lr = LogisticRegression(class_weight='balanced', random_state=42)

ensemble = VotingClassifier([('rf', rf), ('lr', lr)], voting='soft')

# 성능 확인

X_tr, X_val, y_tr, y_val = train_test_split(X_train, y_train, test_size=0.2, random_state=42)

ensemble.fit(X_tr, y_tr)

val_pred = ensemble.predict(X_val)

print(f"검증 Macro F1-score: {f1_score(y_val, val_pred, average='macro'):.4f}")

# 전체 학습 및 예측

ensemble.fit(X_train, y_train)

pred = ensemble.predict(X_test)

# 제출 파일

result = pd.DataFrame({'ID': test['ID'], 'pred': pred})

result.to_csv('submission.csv', index=False)

print("완료!")

유창균님의 프로필 이미지
유창균

작성한 질문수

질문하기