Data Leakage 관련 질문있습니다 .

2024.06.06 00:59 796 조회

해커톤 처음 나가는 학생입니다.

다음 규칙에 관해 질문이 있느데요

  • 모델 학습에서 평가 데이터셋 활용(Data Leakage)시 수상 제외
  • label encoding, one-hot encoding 시 test 데이터 셋 활용
  • data scaling 적용 시 test 데이터 셋 활용
  • test 데이터 셋에 pd.get_dummies() 함수 적용
  • test 데이터 셋의 결측치 처리 시 test 데이터 셋의 통계 값 활용
  • 위 예시 외에도 test 데이터 셋이 모델 학습에 활용되는 경우에 Data leakage에 해당됨

모델 만든 후에 test셋 돌릴 때, test셋 결측치를 중앙값으로 바꾸는거 안되는 건가요

그리고 train 셋 학습에서 새로운 피쳐를 만들었는데 test셋에도 똑같이 다항식 피쳐값만들어야 하는데 괜찮은건가요?

그리고  test셋 인코딩 하면 안되나요? (어찌 해야하는건지 . . )  

로그인이 필요합니다
0 / 1000
고세구
2024.06.06 15:11

1. test data에서 결측치를 채울 때 train data의 median값으로 결측치를 채우면 data leakage가 아니지만 test data의 median값으로 결측치를 채우면 data leakage가 되어 규칙에 위반됩니다.

2. train data에서 새로운 Feature를 만들었다면 똑같은 식과 계수로 test data에 적용하는건 가능합니다.
예를 들어 train data에서 a feature와 b feature를 더해서 c feature를 만들었다면 test 데이터에서도 똑같이 적용하는건 문제가 되지 않습니다.
m과 n이라는 계수가 있다고 했을 때 train data에서 m*a + n*b라는 식을 통해 c feature를 만들었고 test data에서도 같은 계수인 m과 n을 그대로 사용한다면 문제가 되지 않으나 train data를 통해 찾은 m과 n이라는 계수를 test data에 맞게 다시 조정해 새로운 m과 n을 만들어 c feature를 생성한다면 data leakage에 해당합니다.

3. test data에서 train data에서 본적이 없던 value가 있을때 모두 같은 value로 처리해준다면 문제가 없습니다.
예를들어 옷 사이즈가 train data에서는 m, x, xl밖에 없었다고 가정해볼게요. 그럼 ordinal encoding 기준으로 m=0, x=1, xl=2 이런식으로 encoding이 될겁니다. 근데 우연히 test data에서는 s, 2xl, 3xl이라는 새로운 value들이 있으면  s=2xl=3xl=3 이런식으로 encoding을 해주면 됩니다. 이러면 문제가 되지 않지만 만약 s=3, 2xl=4, 3xl=5 라고 encoding을 한다면 data leakage에 해당합니다.

저도 처음엔 많이 헷갈렸어서 이해 안되는 부분있으시면 더 자세히 알려드리겠습니다!