leakage·Pipeline·group/time/site split
이 토픽을 마치면
평가 전에 정보가 train에서 test로 새는 경로를 찾고, 전처리를 Pipeline 안에 격리할 수 있습니다. patient·sample·site·time 같은 group 단위에 맞춰 split을 정의합니다.
split unit이 먼저다
같은 환자나 독립 시료에서 여러 행이 나오면 행 단위 random split은 같은 개체의 정보가 train과 test에 동시에 들어가게 할 수 있습니다. 미래를 예측하는 문제라면 시간 순서도 보존해야 합니다. split은 모델 선택 뒤가 아니라 질문과 데이터 구조에서 먼저 정합니다.
Pipeline은 전처리 범위를 고정한다
from sklearn.pipeline import Pipelinefrom sklearn.preprocessing import StandardScalerfrom sklearn.linear_model import LogisticRegression
model = Pipeline([ ("scale", StandardScaler()), ("classifier", LogisticRegression(max_iter=1000)),])model.fit(X_train, y_train)score = model.score(X_test, y_test)Pipeline은 train fold에서 fit해야 하는 전처리와 모델을 함께 묶습니다. Pipeline 자체가 잘못된 split이나 target leakage를 자동으로 발견하는 것은 아닙니다.
group split
GroupKFold 같은 도구는 같은 group이 train과 test에 동시에 들어가지 않도록 교차검증 구조를 만듭니다. 모든 fold에서 class balance가 보장된다고 가정하지 않으며, group 수와 target 분포를 확인합니다.
leakage 경로 점검표
전처리 leakage는 scaling·imputation·feature selection을 전체 데이터에 먼저 fit할 때 생길 수 있습니다. target leakage는 예측 시점 이후에만 알 수 있는 열이나 target에서 직접 파생한 열이 feature에 포함될 때 생깁니다. group leakage는 동일 patient·sample·site의 관련 행이 train과 test에 나뉠 때 생깁니다.
각 feature에 대해 “실제 예측 시점에 사용할 수 있는가?”를 기록하고, preprocessing 단계마다 fit이 어느 fold에서 수행되는지 확인합니다. split 뒤의 통계량만 train에서 학습돼야 합니다.
연구 질문으로 돌아가 해석하기
test score는 정의한 split과 target에 대한 일반화 성능입니다. 새로운 site·time·patient에 대한 성능을 말하려면 그 단위가 평가에 반영돼야 합니다.
자주 생기는 실패
- 전처리 평균·분산을 전체 데이터로 먼저 fit하지 않습니다.
- 같은 patient/site를 train과 test에 나누지 않습니다.
- 시간 예측에 미래 행을 학습에 넣지 않습니다.
- Pipeline이 leakage를 모두 해결한다고 쓰지 않습니다.
핵심 정리
- split unit은 연구 질문과 데이터 계층에서 결정합니다.
- Pipeline은 fold-local preprocessing을 돕습니다.
- group/time/site 일반화는 각각 다른 평가 설계입니다.
다음 토픽으로
다음 편에서는 feature selection과 nested tuning으로 선택 정보를 fold 안에 격리합니다.
참고 자료
- scikit-learn common pitfalls: https://scikit-learn.org/stable/common_pitfalls.html
- GroupKFold: https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GroupKFold.html
- Bioconductor OSTA experimental design: https://bioconductor.org/books/release/OSTA/pages/bkg-exp-design.html
본 편의 pipeline 예시는 BioStatPy가 독립적으로 작성했습니다.