카테고리 없음 [머신러닝] 데이터 누수(Data Leakage)사례와 예방 방법 알아보기 미로그 2025. 10. 22. 21:13 데이터 누수란 ? 모델이 학습할 때, 실제 예측 시점에는 알 수 없어야 할 정보가 훈련 데이터에 포함되는 현상을 말한다. 즉, 미래 정보나 정답에 해당하는 데이터가 학습에 들어가서 비정상적으로 높은 성능이 나오는 문제이다. 🔍 데이터 누수의 대표적인 사례 1. 미래 데이터 포함 사례: 주식 가격 예측 모델을 만들 때, 2025년 데이터를 학습에 포함해놓고 2024년 데이터를 예측함. 문제: 실제 예측 시점에는 미래 데이터를 알 수 없는데, 모델이 미리 그 정보를 본 셈이라 실제 성능보다 훨씬 높게 나옴. ✅ 예방: 시간 순서를 기준으로 데이터를 분리 (train: 과거, test: 미래). train_test_split 대신 TimeSeriesSplit 같은 시계열 전용 검증 방식 사용. 2. 정답 정보가 포함된 특징 사용 사례: 암 진단 모델에서 “수술 후 생존 여부” 같은 변수를 입력 특성으로 사용함. 문제: 이 변수는 예측하려는 “암 여부” 결과 이후에만 알 수 있는 정보로, 실제 예측 때는 쓸 수 없음. ✅ 예방: 예측 시점에 사용 가능한 정보만 변수로 포함. “이 정보가 예측할 당시에도 존재했을까?”를 항상 점검. 3. 데이터 전처리 시 누수 사례: 전체 데이터에 대해 표준화(평균·표준편차 계산)를 한 뒤 train/test를 나눔. 문제: test 데이터의 통계 정보가 이미 학습에 반영됨. ✅ 예방: train 데이터로만 스케일러를 학습하고,test 데이터는 train에서 구한 통계값으로 변환. 4. 중복 데이터 또는 동일 환자/고객 포함 사례: 한 고객의 데이터가 train과 test 양쪽에 모두 포함됨. 문제: 모델이 그 고객의 특성을 이미 학습했기 때문에 test 성능이 실제보다 높아짐. ✅ 예방: ID, 이름, 고객번호 등으로 그룹 단위 분할(Group split) 수행. 예: GroupKFold, GroupShuffleSplit 사용. 5. Feature Leakage (특징 누수) 사례: 예를 들어 “배송 여부”를 예측하는데, 입력 변수에 “배송 완료 시간”이 포함되어 있음. 문제: “배송 완료 시간”은 이미 결과를 알고 있는 정보임. ✅ 예방: 모든 feature가 예측 시점 이전에 존재할 수 있는지 논리적으로 점검. 변수 생성 시 시간 순서 기반으로 처리. 🧩 정리표 유형 예시 예방 방법 미래 데이터 포함 주가 예측에 미래 데이터 포함 시계열 분리, TimeSeriesSplit 정답 정보 포함 생존 여부를 입력 변수로 사용 예측 시점 검증 전처리 누수 전체 데이터로 스케일링 train 기반 전처리 후 test 적용 중복/동일 개체 동일 고객이 train/test 둘 다 있음 그룹 단위 분리 특징 누수 결과값에서 파생된 변수 포함 변수 생성 시 시점 검증 공유하기 게시글 관리 MI_Log