머신러닝에서 데이터 누수
Source: Dev.to
자주 멘티가 머신러닝 워크플로우에서 기본적인 실수를 저지릅니다: Exploratory Data Analysis (EDA) → 전처리 → 데이터셋 분할 → 모델 생성 → 평가. 보통 발생하는 문제는 테스트 데이터가 모델 학습 과정에서 우연히 이미 알려지는 경우입니다. 머신러닝에서는 이를 Data Leakage 라고 합니다.
Data Leakage란?
Data Leakage는 테스트 데이터의 정보가 학습 과정에 들어가 모델이 “볼 수 없어야 할” 데이터를 보게 되는 상황을 말합니다. 이 문제는 Train‑Test Contamination 범주에 속하며, 예를 들어 테스트 데이터의 평균이나 표준편차를 정규화 과정에 사용했을 때 발생합니다.
예시: 잘못된 정규화
정규화 공식:
# Standarisasi yang benar
x_scaled = (x - mean) / std
정규화를 데이터를 학습용과 테스트용으로 나누기 전에 수행하면 mean과 std가 전체 데이터를 기준으로 계산됩니다. 그 결과 모델은 학습 중에 테스트 데이터의 정보를 간접적으로 엿보게 됩니다.
Data Leakage 방지 방법
- 데이터를 먼저 **학습 세트(train set)**와 **테스트 세트(test set)**로 분리합니다.
- 스케일러를 (예:
StandardScaler) 학습 데이터에만 fit 합니다. - 이미 fit된 스케일러를 사용해 학습 데이터와 테스트 데이터를 각각 transform 합니다.
이러한 절차를 따르면 모델은 학습 과정에서 테스트 데이터를 전혀 보지 못하게 되며, 얻은 평가는 실제 성능을 정확히 반영합니다.