전화 해지 여부 분류 AI 해커톤

대회 나갈건 아니지만 심심해서 만져봤는데

2023.03.26 21:42 1,450 조회

생각보다 결과 잘 나와서 올려볼까 했는데

test 데이터에 get_dumies 쓰는거 막고 test 데이터 통계치도 결측치 제거에 사용 하면 안된다고 나와 있는데

왜 사용하면 안되는지가 궁금해서요 ㅎㅎㅎ

그냥 대회 규칙인지 아니면 쓰면 안되는 이유가 있는건지 궁금합니다.

로그인이 필요합니다
0 / 1000
이세의인공지능
2023.03.26 23:04

실 상황을 예측을 함에 있어서 test 데이터는 우리가 "보유하지 않고 있는" 데이터로 생각해야 한다고 이해하고 있습니다!
test 데이터를 사용해 data leakage가 확인될 경우 목적에 맞지 않아 대부분의 대회에서 모두 인정해주지 않는 걸로 알고 있습니다!
또, test데이터를 포함한 학습을 할 경우엔 새로운 test데이터에 대해 잘 예측하는지도 잘 알 수 없게 된다고 알고 있습니다!
틀린 점이 있다면 아래에 고수분들이 남겨주실 것 같습니다!

마요마요
2023.03.26 23:49

test 데이터를 학습에 사용하면 안 되는 부분은 이해가 가지만 test 데이터에 get_dumies 함수나 테스트 데이터 통계치로 결측치를 제거하면 안되는 이유가 궁금합니다

위 두가지 상황도 예측에 영향을 줘서 그런건가요? 

이세의인공지능
2023.03.27 06:51

제일 핵심 개념은
우리가 이 데이터를 보유하고 있지 않다
라고 판단하는 것 같습니다.
추론을 들어가기 전까지 모든 학습과정에선 이 데이터가 영향을 주지 않은  채로 진행되어야 하고, 만약 영향을 안 주는 작업이라면 할 필요가 없는 작업이 되겠네요!

DACON.YT
2023.03.27 09:23

안녕하세요 마요마요님.
대회에 참여할 때에는 Test 데이터들을 '전혀 알 수 없고, 볼 수 없다' 라고 가정하고 진행하여야 합니다.
get_dummies나 test 데이터의 통계값을 사용하면 이러한 가정이 깨어지기 때문에 사용할 수 없습니다.
감사합니다.

마요마요
2023.03.27 20:27

그러면 train데이터를 스케일링을 하고 모델링 하여 학습을 진행 한 후에 test 데이터를 train데이터에 했던 것과 같은 방법으로 (test 데이터만을 사용하여) 스케일링을 진행하여 predict 결과를 내는 것은 문제가 없는건지 여쭙고 싶습니다.

이 경우엔 test 데이터가 모델 학습에는 영향을 주지 않으니 괜찮은건가요?

DACON.YT
2023.03.27 21:56

test 데이터를 사용하여 스케일링을 수행하는 것은 Data Leakage에 해당합니다. 
위에서 말씀드린대로 test 데이터를 전혀 알 수 없다고 가정하여야 하기 때문에 test 데이터의 통계값을 사용할 수 없습니다.
사이킷런의 StandardScaler를 예로 들자면, train 데이터셋에는 fit, transform 모두 사용이 가능하지만, test 데이터셋에는 오직 transform 만 사용이 가능합니다.

excelsu
2023.03.27 09:51

저도 이해가 안돼서 그런데 get dumies는 통계값이 아니지 않나요?
train set에 더미화를 했으면 test set에도 똑같이 컬럼을 맞춰줘야 하는거 아닌가요?
같은이유로 train set에 어떤 전처리를 했으면 test set에도 똑같이 전처리 해줘야하는걸로 알고 있는데 이는 예측을 위해서고 학습에는 지장이 없는 것 아닌가요?

DACON.YT
2023.03.27 10:06

excelsu님 안녕하세요.
get_dummies 코드 대신 scikit-learn의 OneHotEncoder 사용이 가능합니다.
https://dacon.io/codeshare/7261?dtype=recent
해당 링크에서 data leakage가 되지 않는 원 핫 인코딩 방법이 작성되어 있습니다.
감사합니다.