inflearn logo
강의

Course

Instructor

[Side Project After Work] Big Data Analysis Certification Practical Exam (Type 1, 2, 3)

Practical Exam Type 2 Mock Test 2

LabelEncoding 시 train data 학습(fit_transform, transform)

Resolved

60

bjh9403016904

1 asked

0

작업형2 모의문제 풀이에서

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

다음과 같이 코딩을 진행하셨는데,

이는 그 후 train을 split해서 학습 시 이미 fit_transfrom이 되어 데이터 누출이 되는 방법 아닌가요?

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

Answer 2

0

roadmap

결론부터 말하면 데이터 누출(Data Leakage)이 아닙니다.

데이터 누출은 test의 정보가 train 학습에 영향을 줄 때 발생합니다.

이 코드는 train은 으로 인코딩 사전만들고 test에는 적용만 했어요!!

 

다만 강의에서는 데이터 누출에 대해 자세히 다루지 않고 있으며, train과 test의 카테고리가 다를 경우에는 누출 문제를 무시하고 둘을 합쳐서 인코딩하는 방법을 설명하고 있습니다. 이 부분은 시험에서 크게 중요하지 않아 별도로 설명하지 않고 있으니 참고해 주세요.

화이팅입니다!

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 각나닫님.

질문해주신 코드에서 fit_transformtransform을 처리하는 방식은 머신러닝 모델에서 데이터 누출을 방지하기 위해 주의해야 할 부분입니다. LabelEncoderfit_transform을 데이터셋의 전체에 사용하는 것은 일반적으로 훈련과 테스트 데이터 분할 전 사전처리 단계에서만 사용하는 것이 바람직합니다. 그렇지 않으면, 데이터 누출(data leakage)이 발생할 수 있습니다.

데이터 누출이란, 모델이 테스트 데이터에 관한 정보를 모델 훈련 중에 미리 알게 되면서 일반화 성능이 실제로 과대 측정되는 문제를 의미합니다. 주로 훈련 세트에 포함되지 않은 데이터를 훈련하는 과정에서 안 보일 데이터의 일부를 누설하는 경우에 발생합니다.

이 문제를 방지하기 위해서는 다음과 같이 훈련 데이터와 테스트 데이터를 분할 후에 인코딩을 수행하는 방법이 있습니다:

from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import train_test_split

# 데이터 분리
train_df, val_df = train_test_split(train, test_size=0.2, random_state=42)

# 각 범주형 컬럼에 대해 인코딩 수행
for col in cols:
    le = LabelEncoder()
    train_df[col] = le.fit_transform(train_df[col])
    val_df[col] = le.transform(val_df[col])
    test[col] = le.transform(test[col])

이 방법은 훈련 데이터(train_df)에 대해 LabelEncoder를 처음으로 적합(fit)하고, 그 동일한 인코더를 검증 및 테스트 데이터(val_dftest)에 적합한 인코딩 정보로 변환하는 방식입니다.

관련된 질문은 아래 링크를 통해 추가로 확인하실 수 있습니다. 유사하거나 확장된 설명과 예제가 포함되어 있습니다:
1. 반복문 안에서 LabelEncoder() 해주는 이유가 궁금합니다

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

0

bjh9403016904

작업형 모의문제2 에서 말씀하신 대로 시도해 보았지만

y contains previously unseen labels: 'Westerleigh'

라는 오류가 떴습니다.

설명을 들어보니 train엔 없는 test의 컬럼 데이터값이 존재해서 이런 에러가 발생했다고 인지했지만, 해당 에러를 해결하기 위한 방법이 있는지 궁금합니다.

작업형2 인코딩 질문

0

17

2

작업형 3 벼락치기 공부방법 질문

0

16

2

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

0

27

2

예측값 결과 소수점 차이

0

24

2

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

0

27

1

전처리 train() test([ ])

0

19

2

작업형 1 배경지식 질문

0

25

2

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

0

16

1

roc_auc_score

0

28

2

추가질문 합니다

0

20

2

시험환경 구름

0

19

2

2유형 질문드려요

0

17

2

RandomForest vs lgb

0

26

2

전처리 관련질문

0

26

3

작업형3 기출

0

18

2

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

0

30

2

9회 기출 유형3 질문

0

21

2

lgb 기초편

0

17

2

괄호 사용

0

25

2

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

0

23

1

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

0

22

1

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

0

20

2

Data type에 따른 처리

0

23

2

데이터 전처리 관련

0

21

2