⚠️ 머신러닝에서 데이터 누수
Source: Dev.to
ML 엔지니어링 실패 시리즈 파트 2
Symptoms
| 보이는 현상 | 예시 |
|---|---|
| 검증 정확도가 매우 높음 | “와! 이 모델 대단해!” |
| 산업 벤치마크에 비해 비현실적인 성능 | “우리는 시도도 없이 SOTA를 능가했어!” |
| 학습 중 거의 완벽한 예측 | “프로덕션에 바로 적용 가능!” |
| 배포 후 급격한 붕괴 | “모든 것이 망가졌어. 왜?!” |
모델이 절대로 접근해서는 안 되는 패턴을 우연히 학습하면, 학습에서는 완벽하게 동작하지만 실제 환경에서는 전혀 쓸모가 없게 된다.
Illustrative case
소매 기업이 고객의 구독 취소를 예측하는 모델을 만들었다.
- 학습 정확도: 94 %
- 프로덕션 AUC: 0.51 (거의 무작위)
cancellation_timestamp 라는 특징이 정답을 누출했다: 학습 시 비‑null cancellation_timestamp 가 있으면 고객이 취소할 것이라는 것을 모델이 학습한 것이다. 이 특징은 추론 시 존재하지 않아 붕괴가 일어났다. 문제는 파이프라인 문제였지, 알고리즘 문제는 아니다.
Types of Leakage
| 유형 | 설명 |
|---|---|
| Target Leakage | 모델이 예측 전에 타깃 정보를 볼 수 있음. |
| Train–Test Contamination | 동일한 레코드가 학습 및 테스트 세트에 모두 존재함. |
| Future Information Leakage | 미래 타임스탬프의 데이터가 학습에 사용됨. |
| Proxy Leakage | 타깃와 높은 상관관계를 가진 특징이 숨은 지름길 역할을 함. |
| Preprocessing Leakage | 분할 전에 스케일링이나 인코딩을 수행해 겹침이 발생함. |
Example: Preprocessing Leakage
# Leaky version
scaler = StandardScaler()
scaled = scaler.fit_transform(dataset) # LEAKS TEST INFORMATION
x_train, x_test, y_train, y_test = train_test_split(scaled, y)
# Correct version
x_train, x_test, y_train, y_test = train_test_split(dataset, y)
scaler = StandardScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.transform(x_test)
Detection Methods
| 신호 | 지표 |
|---|---|
| 학습 정확도가 검증 정확도보다 훨씬 높음 | 모델 성능이 의심스러움 |
| 검증 정확도가 프로덕션 정확도보다 훨씬 높음 | 파이프라인 불일치 |
| 특정 특징이 중요도 점수를 압도함 | 프록시 누수 |
| 모델이 희귀 이벤트를 완벽히 예측 | 누수 없이는 불가능 |
| 배포 후 급격한 정확도 저하 | 실제 환경 붕괴 |
견고한 워크플로우:
- Split → Preprocess → Train → Evaluate (시계열 데이터는 시간 순으로 분할).
- 데이터 라인리지와 소유자를 문서화.
- 프로덕션에서 허용되는 특징을 정의.
- 드리프트, 정확도, 실시간 피드백을 지속적으로 추적.
모델이 믿을 수 없을 정도로 좋은 성능을 보이면 축하하지 말고 조사하라. 좋은 모델은 점진적으로 개선되며, 완벽한 모델은 거의 항상 누수를 숨기고 있다.
Truth About Model Performance
- 학습 정확도는 실제 성능이 아니다; 프로덕션이 유일한 진실이다.
- 누수는 파이프라인 문제이며, 알고리즘 문제가 아니다; 엔지니어링이 모델링보다 중요하다.
- 예방 > 디버깅: 학습 전에 데이터 설계를 바로 잡아라.
Feature Drift & Concept Drift — Why Models Rot in Production
모델은 입력 데이터 분포가 변하거나(특징 드리프트) 입력과 타깃 간 관계가 변할 때(컨셉 드리프트) 시간이 지남에 따라 정확도가 떨어진다. 악화를 감지하고 방지하려면:
- 실시간으로 특징 통계와 모델 예측을 모니터링.
- 드리프트가 감지되면 최신 데이터를 사용해 재학습.
- 프로덕션 결과를 학습 파이프라인으로 되돌려주는 피드백 루프 유지.