스마트 공장 제품 품질 상태 분류 AI 온라인 해커톤

채용 | 알고리즘 | 정형 | 스마트 공장 | LG Aimers | 분류 | Macro F1 Score

  • moneyIcon 상금 : 본선 진출
  • 1,287명 마감

 

Data Leakage 규칙 관련 상세 설명

2023.02.01 12:55 4,319 조회

안녕하세요, LG Aimers 여러분!

AI 해커톤(경진대회)을 진행하다 보면, 가장 빈번하게 실격되는 이유 중 하나가 바로 Data Leakage입니다.

이로 인한 불이익을 받는 일이 없도록, Data Leakage의 개념과 사례에 대해 소개해 드리고자 합니다.


Data Leakage(데이터 누수, 정보 누설)란

미래에 대한 전혀 알 수 없는 대한 정보가 모델 학습에서 사용된 경우를 말합니다.

즉 test 데이터가 모델의 학습에 이용된 경우입니다.

이번 '스마트 공장 제품 품질 상태 분류 AI 온라인 해커톤'의 데이터의 경우, Train 데이터의 경우 약 22년 6월 13일 ~ 22년 9월 8일까지의 데이터로 구성되어 있고, Test 데이터는 약 22년 9월 9일 ~ 22년 11월 5일까지의 데이터로 구성되어 있습니다.

해커톤(경진대회) 특성 상, 리더보드 제출을 위해 추론에 사용될 test 데이터들이 사전에 주어지지만, 실제 모델을 서비스하는 환경에서는 test 데이터들이 어떠한 데이터들이 몇개가 입력으로 들어올 지 전혀 알 수 없습니다.

따라서 해커톤(경진대회) 역시, Test 데이터들을 '전혀 알 수 없고, 볼 수 없다' 라고 가정하고 진행해야합니다.


즉, Test 데이터들의 모든 정보는 모두 '미래'로 간주하여 모델의 학습에 관여, 활용 할 수 없습니다.


대표적인 Data Leakage에 해당하는 사례

  • Label Encoding 시 Test 데이터로부터 Encoder를 fit 시키는 경우
  • Scaler 사용 시 Test 데이터로부터 Scaler를 fit 시키는 경우
  • Test 데이터에 대한 결측치 보간 시 Test 데이터의 통계 정보(평균, 최빈값 등)를 사용하는 경우
  • 파생변수를 생성할 시 2개 이상의 Test 데이터들의 정보를 활용할 경우
  • Test 데이터들의 이동 평균을 활용하는 경우
  • Test 데이터들을 모델 학습에 활용하는 경우 (이번 해커톤에서는 Pseudo-Labeling도 허용하지 않습니다)
  • Test 데이터에 pandas의 get_dummies() 함수를 적용하는 경우
  • Test 데이터의 index 정보 혹은 row 개수 정보를 활용하는 경우
  • Test 데이터로부터 EDA를 진행한 결과(인사이트)를 전처리, 모델 학습에 적용하는 경우
  • 이 밖의 Test 데이터들의 정보를 모델 학습에 활용하는 모든 경우


대표적인 Data Leakage에 해당하지 않는 사례

  • 독립적인 샘플(행(row)) 내에서의 모든 연산 혹은 파생 변수 생성
  • 예를 들어, Test['C'] = Test['A'] + Test['B']와 같이 독립적인 샘플 내에서 A Column과 B Column을 더한 새로운 파생 변수 C Column을 생성하는 경우
  • Train 데이터의 통계 정보를 Test 데이터에 적용하여 전처리하는 경우 혹은 파생 변수를 생성하는 경우
  • Test 데이터의 결측치를 Train 데이터의 통계 정보를 바탕으로 보간하는 경우 등등


대회를 진행하면서 본인이 진행하는 방법이 Data Leakage에 해당하는지 햇갈리는 경우에는 꼭 사전에 데이콘에 문의하여 불이익을 받는 일이 없도록 부탁드리겠습니다.

데이콘은 앞으로도 투명하고 공정한 대회 운영을 위해 더욱 노력하겠습니다.

감사합니다.

로그인이 필요합니다
0 / 1000
bullbear
2023.02.02 03:23

get_dummies가 금지된다면, OneHotEncoder도 사용이 금지되는 건가요?

bullbear
2023.02.02 03:32

OneHotEncoder의 fit만 train data에서 이뤄지고, test data는 fitted for train data encoder 에 transform만 한다면 문제가 없는건가요?

DACON.GM
2023.02.02 09:24

안녕하세요 bullbear님,
Test 데이터에 pandas의 get_dummies 함수를 적용하는 것은 Test 데이터로 Encoder를 fit 시키는 것과 같기 때문에 Data Leakage에 해당합니다.
따라서, Encoder를 Train 데이터로 fit시킨 후 Test 데이터에 Transform만 한다면 Data Leakage에 해당하지 않습니다.
감사합니다.

bullbear
2023.02.02 15:51

알려주셔서 감사합니다!

이게된다고?
2023.02.02 18:24

"파생변수를 생성할 시 2개 이상의 Test 데이터들의 정보를 활용할 경우" 에 해당하는 질문입니다.

만약에 Train dataset에서 기존 칼럼 데이터를 기반으로 학습한 모델로 새로운 칼럼 데이터를 생성 후 학습했다면, Test dataset도 비슷한 방식으로 기존 Train datset으로 학습한 모델을 기반으로 Test dataset을 입력으로 받아 새로운 칼럼 데이터를 생성했다면 Data Leakage에 해당하는지 궁금합니다.

DACON.GM
2023.02.02 18:34

안녕하세요 이게된다고?님,
Train 데이터로부터 파생변수를 만들고, 이 파생변수를 Target으로하여 학습한 모델에
Test 데이터를 입력으로 하여 예측된 값들을 파생변수의 데이터로 활용하는 것은 Data Leakage에 해당하지 않으며 충분히 가능한 방법입니다.
단, 파생변수를 생성하도록 학습된 모델에 예측된 파생변수가 추가된 Test 데이터로 학습하는 것은 Data Leakage에 해당합니다.
감사합니다.

이게된다고?
2023.02.03 00:26

이 대회 규정에 따르면 해커톤(경진대회) 역시, Test 데이터들을 '전혀 알 수 없고, 볼 수 없다' 라고 가정하고 진행해야합니다.라고 되어 있습니다.
따라서 Train 데이터 상에서는 존재하지만 실제 현장 데이터를 표방하고 있는 Test dataset의 경우 어떤 칼럼의 데이터가 결측치로 들어올지에 대해서 확신을 할 수 없는 상태입니다. 이런 상태에서 만약에 Train 데이터 셋 칼럼에 존재하는 'x1'과 'x2'가 존재한다고 가정했을 때, Test 데이터 셋에서는 x1만 있을 때 x2에 대한 칼럼 데이터를 x1를 기반으로 생성 후 사용해도 Data Leakage에 해당하는 사례가 아닌지 확인 부탁드립니다.

DACON.GM
2023.02.03 11:00

독립적인 샘플(1개의 row) 내에서의 연산은 Data Leakage에 해당하지 않습니다.
즉, 독립적인 샘플 내에서 다른 컬럼으로부터 특정의 컬럼의 결측치를 보간하는 방법은 가능합니다.

이게된다고?
2023.02.03 11:07

독립적인 샘플(1개의 row) 내에서의 연산은 Data Leakage에 해당하지 않습니다.
그렇다면 만약에 Train dataset에서 5개의 칼럼을 가지고 하나의 row 데이터를 보간을 진행한 후 , Test dataset에서도 동일한 방식을 적용했다면 Data Leakage에 해당하는 결과인지요(보간은 예를 들어 5개의 Train datset 칼럼을 가지고 학습 후 하나의 row 데이터를 model inference로 보간을 진행 후,  Train datset으로 학습한 모델을 가지고 Test datset의 5개의 칼럼을 input data로 활용하여 하나의 row 데이터 결측치를 보간 했을 때의 경우이며 이는 여러번 수행할 수 있습니다.)

DACON.GM
2023.02.03 11:12

말씀주신 내용으로 이해하였을때는 Data Leakage에 해당하지 않습니다.

doeik
2023.02.05 22:12

pca를 사용한다면 test.csv도 pca하는 것으로 알고 있는데 이는 괜찮나요?
그리고 "Scaler 사용 시 Test 데이터로부터 Scaler를 fit 시키는 경우"가 train을 test로 scaling하는 것을 의미하나요?
train data은 train data 로 fit_transform하고 test는 test data로 fit_transform하는 것은 괜찮을 까요?

DACON.GM
2023.02.06 09:13

안녕하세요 chanchanhy님,
PCA의 경우, 독립적인 Test 데이터의 Sample 1개 (Row행 1개)에 대해서 각각 fit_transform을 수행하는 것은 Data Leakage에 해당하지 않으나,
단순히 PCA를 전체 Test 데이터로부터 fit_transform을 수행하는 것은 Data Leakage에 해당합니다.
후자의 방법을 사용하려면, PCA를 Train 데이터로부터 fit시킨 뒤, Test 데이터로부터 transform만 수행해야합니다.
감사합니다.

doeik
2023.02.06 15:58

삭제된 댓글입니다

DACON.GM
2023.02.06 10:09

안녕하세요 chanchanhy님,
Scaler나, PCA도 마찬가지로 train 데이터로부터 fit 시킨 뒤, test 데이터에는 transform만 수행하여 전처리한 데이터를 모델 입력으로 활용하면 Data Leakage에 해당하지 않습니다.
감사합니다.

월요일은대흉근
2023.02.08 14:12

삭제된 댓글입니다

DACON.GM
2023.02.08 13:55

안녕하세요 월요일은대흉근님,
본 해커톤 규칙에 기재된 것과 같이 어떠한 경우에도 Test데이터셋의 정보를 활용한다면 Data Leakage에 해당합니다.
해당 데이터는 sample들이 시간 순서에 의해 정렬되어있으나, Test 데이터의 경우 sample들이 시간 순서에 의해 무조건 정렬되어 있다는 보장이 없기 때문입니다.

월요일은대흉근
2023.02.08 14:12

삭제된 댓글입니다

DACON.GM
2023.02.08 14:02

Test 데이터는 몇개가 들어올 지 모른다는 가정하에 진행되야하므로 sort는 불가능합니다.
본 대회 규칙을 따라주세요. Test 데이터의 통계 정보를 활용한다면 Data Leakage에 해당합니다.

월요일은대흉근
2023.02.08 14:19

삭제된 댓글입니다

월요일은대흉근
2023.02.08 14:28

삭제된 댓글입니다

DACON.GM
2023.02.08 14:26

Test 데이터의 1개의 샘플마다 독립적으로 적용되는 것은 Data Leakage에 해당 하지 않습니다.

월요일은대흉근
2023.02.08 14:28

친절한 답변 너무 감사합니다!!

DACON.GM
2023.02.08 14:26

삭제된 댓글입니다

머신러닝초보자
2023.02.08 17:40

삭제된 댓글입니다

DACON.GM
2023.02.08 17:30

안녕하세요 머신러닝초보자님,
말씀해주신 방법은 Data Leakage에 해당하지 않습니다.
감사합니다.

bullbear
2023.02.09 01:04

TEST DATA의 칼럼을 TRAIN DATA내의 특정 칼럼들로만 잘라서 사용해도 되나요? 

예를 들어 train_col_for_use = [a, b, c]라고 하고 test_data 칼럼목록에서 해당하지 않는 건 drop하는 방식으로요

DACON.GM
2023.02.10 12:08

안녕하세요 bullbear님,
해당 방법은 가능합니다.
감사합니다.

itsming
2023.02.09 10:22

train 데이터를 분석해본 결과를 토대로 조건문을 활용해 전처리 및 여러 모델을 만들어 학습시킨 후, 
test에 train과 동일한 전처리 후 test 데이터에도 동일한 조건문을 활용해
조건에 해당하는 모델을 적용 시키는 것은 data leakage에 포함이 되나요?

DACON.GM
2023.02.10 12:09

안녕하세요 itsming님,
Test 데이터들의 정보를 활용하지 않고, Train / Test와 동일한 전처리를 적용하는 것은 Data Leakage에 해당하지 않습니다.
감사합니다.

월요일은대흉근
2023.02.10 12:50

삭제된 댓글입니다

DACON.GM
2023.02.10 12:44

조건문을 어떻게 어떤 방식의 조건을 적용하느냐에 따라 달라집니다.
따라서 말씀해주신 내용은 범위가 넓어, 'Data Leakage'에 해당한다, 안한다 라고 단정지어 말씀드리기 어렵습니다.
단, Test 데이터 샘플에 대하여 독립적으로 적용될 수 있는 조건문을 통하여 전처리하는 것은 Data Leakage에 해당하지 않습니다.
감사합니다.

맥도날드치즈버거케찹피클빼고먹으면맛있음
2023.02.09 12:07

예측값을 submission 파일에 할당하기 위해서 test data의 index를 사용하는 것도 문제가 될까요?

DACON.GM
2023.02.10 12:11

안녕하세요
Test 데이터를 Shuffle하여 입력을 받았을 때에도 Test 샘플에 대해 동일한 결과값을 얻을 수 있어야합니다.
감사합니다.

행복한꼬부기
2023.02.14 18:07

train 데이터에서 특정 위치의 컬럼들을 제거하여 해당 제거한 위치값을 토대로 test 데이터에서 컬럼을 동일하게 제거하는것도 Data Leakage에 해당하나요?

DACON.GM
2023.02.14 18:09

안녕하세요 행복한꼬부기님,
말씀해주신 내용이 예를 들어, Train 데이터의 'X_1' 컬럼을 제거하여 진행하고, Test 데이터도 마찬가지로 'X_1' 컬럼을 동일하게 제거하여 추론하는 것이 맞다면 이는 Data Leakage에 해당하지 않습니다.
감사합니다.

정대만의3점슛
2023.02.24 09:10

"파생변수를 생성할 시 2개 이상의 Test 데이터들의 정보를 활용할 경우" 에 해당하는 질문입니다. 
test 데이터에서 이전 행의 정보를 활용하여 다음행의 파생변수를 생성하는 경우(1번째 행의 파생변수는 결측치로 두고, 2번 째 행의 경우 1번 째 행의 정보를 이용하여 새로운 파생변수를 생성) Data Leakage에 해당하는지 질문 드립니다.

DACON.GM
2023.02.27 12:30

안녕하세요
Test 데이터의 경우, 시간 순서에 의해 정렬되어있다는 보장이 없으며 샘플들의 순서를 shuffle하여도 동일한 결과를 도출할 수 있어야하므로 말씀해주신 방법은 Data Leakage에 해당합니다.
감사합니다.

정대만의3점슛
2023.02.27 12:32

답변 감사합니다!!

박상일
2024.02.22 16:50

안녕하세요 data leakage 위반 사례에 대해 궁금한게 생겨 댓글을 남깁니다.
OneHotEncoder를 사용하여 라벨링하여 새로 생긴 열을 test data에 concat하는 것이 data leakage 위반 사례인지 궁금합니다.
아래는 이해를 돕기 위한 코드입니다.

ohe = OneHotEncoder(sparse=False)
# fit_transform은 train에만 사용하고 test에는 학습된 인코더에 fit만 해야한다
train = ohe.fit_transform(df_train[['칼럼이름']])
test = ohe.transform(df_test['칼럼이름'])
df_test = pd.concat([df_test , pd.DataFrame(train_bant_submit, columns=[column+'_' + str(col) for col in ohe.categories_[0]])], axis=1)

이전 글
이전 글이 존재하지 않습니다.
현재 글
Data Leakage 규칙 관련 상세 설명
대회 - 스마트 공장 제품 품질 상태 분류 AI 온라인 해커톤
좋아요 16
조회 4,319
댓글 31
일 년 전
다음 글
업로드 제출 오류
대회 - 스마트 공장 제품 품질 상태 분류 AI 온라인 해커톤
좋아요 6
조회 358
댓글 2
4달 전