TL;DR
AI 파이프라인은 코드가 오류 없이 실행돼도 데이터 누수, 그룹 분할 오류, 학습·Serving 간 전처리 불일치, 불완전한 재현성, 잘못된 평가 상태, 텐서 Shape 오류, 안전하지 않은 모델 Artifact 때문에 실제 배포 성능이 무너질 수 있다. 전체 행에 먼저 Fitting한 SelectKBest는 순수 무작위 데이터에서도 검증 정확도 0.83을 만들었지만, 각 Fold 안에서 변환을 학습하면 0.49로 내려갔다. 사용자 단위로 묶어야 하는 데이터에 무작위 분할을 적용하면 점수가 0.97에서 0.89로 떨어졌고, [batch, 1]과 [batch]를 MSELoss에 넘기면 32×32 브로드캐스팅이 발생해 오류 없이 다른 손실값을 산출했다. 해결책은 각 경계에서 학습에 사용된 행, 전처리 파라미터, 모델 상태, Tensor Shape, Artifact를 명시적으로 기록하고 검증하는 것이며, Pickle 계열 파일은 신뢰할 수 있는 출처와 실제 Serving 환경에서만 로드해야 한다.
섹션별 상세
sel = SelectKBest(f_classif, k=20).fit(X, y) # fit on ALL rows
scores = cross_val_score(model, sel.transform(X), y, cv=5)전체 데이터에 먼저 Feature Selection을 적용한 뒤 교차 검증을 수행해 검증 행의 정보가 전처리에 유입되는 코드다.

model.eval()
with torch.no_grad():
val_loss = criterion(model(x_val), y_val)
model.train()검증 중 Dropout과 Batch Normalization을 평가 상태로 전환하고 Gradient 기록을 끈 뒤, 검증이 끝나면 학습 상태로 되돌리는 코드다.
pred = model(x).squeeze(1) # [batch, 1] -> [batch], on purpose
assert pred.shape == target.shape
loss = criterion(pred, target)모델 출력의 불필요한 차원을 의도적으로 제거하고 손실 계산 전에 예측값과 정답의 Shape 계약을 검사하는 코드다.
용어 해설
- 데이터 누수(Data Leakage)
- — 평가용 데이터의 정보가 학습이나 전처리 과정에 미리 유입되는 현상이다. 예를 들어 데이터 분할 전에 전체 행으로 Feature Selection을 학습하면 검증 데이터의 통계가 변환에 반영된다. 그 결과 실제 일반화 성능보다 높은 점수가 산출되므로, 전처리 단계마다 어떤 행을 볼 수 있었는지 확인해야 한다.
- 데이터 편향(Data Skew)
- — 학습 시점과 추론 시점에 서로 다른 전처리 규칙이나 파라미터가 적용되는 문제다. Serving 코드가 학습된 Scaler를 재사용하지 않고 요청 배치에서 새로 통계를 계산하면 같은 입력도 다른 Feature로 변환된다. Feature 순서, dtype, 결측값 처리까지 학습 경로와 일치해야 예측 결과를 신뢰할 수 있다.
- 그룹 인식 데이터 분할(Group-Aware Splitting)
- — 같은 사용자나 환자처럼 서로 연관된 행을 하나의 그룹으로 묶어 학습과 검증에 나누는 방식이다. GroupShuffleSplit이나 GroupKFold는 동일 그룹의 행이 양쪽에 흩어지는 것을 막아 새로운 개체에 대한 일반화 성능을 측정한다. 시간 순서가 경계라면 미래 데이터가 과거 예측에 섞이지 않도록 TimeSeriesSplit을 사용해야 한다.
- 평가 모드(Evaluation Mode)
- — 모델을 추론에 맞는 동작 상태로 전환하는 PyTorch 실행 모드다. model.eval()은 Dropout과 Batch Normalization처럼 학습과 평가에서 동작이 달라지는 모듈을 바꾸지만, Gradient 기록 자체를 끄지는 않는다. 따라서 검증 루프에서는 torch.no_grad() 또는 torch.inference_mode()와 함께 사용하고 이후 model.train()으로 복귀해야 한다.
- 텐서 브로드캐스팅(Broadcasting)
- — 서로 다른 Shape의 배열이나 텐서에 연산을 적용할 때 차원을 자동으로 확장하는 규칙이다. 예측값이 [batch, 1]이고 정답이 [batch]이면 MSELoss가 오류 없이 [batch, batch] 계산을 수행해 잘못된 손실값을 만들 수 있다. 손실 함수 경계에서 pred.shape와 target.shape를 직접 비교하면 암묵적 확장을 차단할 수 있다.
기술
- Python
- SelectKBest
- scikit-learn
- GroupKFold
- GroupShuffleSplit
- TimeSeriesSplit
- PyTorch
- DataLoader
- Weights & Biases
- MSELoss
- pickle
- joblib
- cloudpickle
활용 사례
- AI 모델 학습·검증 파이프라인
- 사용자·환자·디바이스 단위 예측
- 시간 순서가 있는 시계열 예측
- 모델 Serving 및 Artifact 배포
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.