콘텐츠로 이동

ML 파이프라인 설계 (ML Pipeline Design)

개요

ML 파이프라인은 문제 정의부터 데이터 수집, 전처리, 모델 학습, 평가, 배포까지의 전체 워크플로우를 체계적으로 구성한 것이다. 좋은 파이프라인은 재현 가능하고, 자동화 가능하며, 데이터 누수를 방지한다. ML 프로젝트의 성패는 종종 모델 아키텍처가 아니라 파이프라인의 견고함에 달려 있다.


핵심 개념

1. End-to-End 파이프라인

flowchart TD
    A["1. 문제 정의<br>비즈니스 목표 → ML 과제 변환<br>성공 지표 정의"] --> B["2. 데이터 수집<br>데이터 소스 식별, ETL<br>품질 점검"]
    B --> C["3. EDA<br>분포, 상관관계<br>이상치, 결측치"]
    C --> D["4. 데이터 전처리<br>정제, 변환<br>특성 공학"]
    D --> E["5. 모델 학습<br>Baseline → 반복 개선"]
    E --> F["6. 평가<br>적절한 지표, 교차검증<br>오류 분석"]
    F --> G["7. 배포<br>서빙, 모니터링<br>유지보수"]
    G -.->|"피드백 루프"| A

2. 데이터 분할 비율 (Data Split Ratios)

전체 데이터셋 \(D\)를 학습(train), 검증(validation), 테스트(test)로 분할한다. 일반적인 비율은 다음과 같다:

\[D = D_{train} \cup D_{val} \cup D_{test}, \quad |D_{train}| : |D_{val}| : |D_{test}| = 60 : 20 : 20\]

데이터가 충분히 많을 때(예: \(|D| > 10^6\))는 검증/테스트 비율을 줄여도 통계적 신뢰성을 유지할 수 있다:

\[|D_{val}| = |D_{test}| \geq \frac{1}{2\epsilon^2} \ln\frac{2}{\delta}\]
  • \(\epsilon\): 허용 오차 (예: 0.01)
  • \(\delta\): 실패 확률 (예: 0.05)

이 부등식은 Hoeffding 부등식에서 유도되며, 평가 지표의 신뢰도를 보장하기 위한 최소 테스트 세트 크기를 결정한다.

3. Baseline First 원칙

항상 간단한 기준 모델부터 시작한다.

과제 유형 기준 모델 예시
분류 로지스틱 회귀, 다수 클래스 예측
회귀 평균 예측, 선형 회귀
시계열 이전 값 반복, 이동 평균
NLP TF-IDF + 로지스틱 회귀

규칙: 복잡한 모델이 baseline을 의미 있게 이기지 못하면, 모델이 아니라 데이터/특성 문제를 먼저 해결하라.

3. 교차 검증 전략 (Cross-Validation)

전략 적합한 데이터 설명
K-Fold (K=5, 10) 일반 정형 데이터 가장 기본적
Stratified K-Fold 분류 (불균형 포함) 클래스 비율 유지
Group K-Fold 그룹 데이터 (환자, 사용자) 같은 그룹이 train/test에 겹치지 않음
Time Series Split 시계열 시간 순서 유지, expanding window
Nested CV 튜닝 + 성능 추정 분리 가장 엄격한 평가

K-Fold 교차 검증의 일반화 오차 추정은 다음과 같다:

\[\hat{E}_{CV} = \frac{1}{K}\sum_{k=1}^{K} L\bigl(f^{(-k)},\; D_k\bigr)\]
  • \(K\): fold 수
  • \(f^{(-k)}\): \(k\)번째 fold를 제외하고 학습한 모델
  • \(D_k\): \(k\)번째 fold (검증용)
  • \(L\): 손실 함수 (예: 0-1 loss, MSE)

교차 검증 추정의 분산은 fold 간 상관관계로 인해 단순히 \(1/K\)로 줄어들지 않는다:

\[\text{Var}(\hat{E}_{CV}) = \frac{1}{K}\sigma^2 + \frac{K-1}{K}\rho\sigma^2\]
  • \(\sigma^2\): 개별 fold 오차의 분산
  • \(\rho\): fold 간 오차의 상관계수 (학습 데이터가 대부분 겹치므로 양수)

Nested Cross-Validation: 외부 루프는 성능 추정, 내부 루프는 하이퍼파라미터 튜닝. 검증 세트에 과적합하는 것을 방지한다.

4. 하이퍼파라미터 튜닝 (Hyperparameter Tuning)

방법 효율성 설명
Grid Search 낮음 모든 조합 탐색, 차원이 늘면 비효율
Random Search 중간 Bergstra & Bengio (2012) — Grid보다 효율적
Bayesian Optimization 높음 이전 결과를 활용한 지능적 탐색 (Optuna, Hyperopt)
Early Stopping - Validation 성능이 개선되지 않으면 학습 조기 종료

Random Search가 Grid Search보다 좋은 이유: 하이퍼파라미터마다 중요도가 다르다. Grid Search는 불필요한 조합에 자원을 낭비하지만, Random Search는 중요한 차원을 더 넓게 탐색한다.

5. 오류 분석 (Error Analysis)

모델 성능 개선의 가장 효과적인 방법은 오류를 분석하는 것이다.

  • Confusion Matrix 분석: 어떤 클래스 간에 혼동이 많은지
  • 오분류 샘플 시각화: 왜 틀렸는지 직관적 이해
  • Slice-based Evaluation: 특정 부분 집합(subgroup)별 성능 확인
  • 예: 성별, 연령대, 지역별로 성능이 다른지

상세 내용

파이프라인 자동화 도구

# sklearn Pipeline으로 데이터 누수 방지
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestClassifier

pipe = Pipeline([
    ('imputer', SimpleImputer(strategy='median')),
    ('scaler', StandardScaler()),
    ('model', RandomForestClassifier())
])

# cross_val_score가 각 fold 내부에서 fit/transform을 올바르게 처리
scores = cross_val_score(pipe, X, y, cv=5, scoring='f1')

모델 선택 가이드

flowchart TD
    A["문제 유형"] --> B{"데이터 유형?"}
    B -->|정형 데이터| C{"데이터 크기?"}
    B -->|이미지| D["CNN / ViT<br>+ Transfer Learning"]
    B -->|텍스트| E["Transformer<br>BERT / GPT"]
    B -->|시계열| F["시계열 모델<br>ARIMA, LSTM, Transformer"]

    C -->|"< 1만 행"| G["로지스틱 회귀, SVM<br>Random Forest"]
    C -->|"1만~100만"| H["XGBoost, LightGBM<br>CatBoost"]
    C -->|"> 100만"| I["LightGBM, 신경망<br>분산 학습"]

언제 사용하는가

ML 파이프라인 설계는 모든 ML 프로젝트의 기반이다. 특히:

  • 프로덕션 배포를 목표로 하는 프로젝트
  • 여러 실험을 체계적으로 비교해야 하는 경우
  • 팀 협업이 필요한 경우
  • 재현 가능성이 중요한 경우

흔한 오해와 함정

  1. Baseline 없이 복잡한 모델부터 시작: 개선 여부를 판단할 기준이 없다. 항상 간단한 baseline부터 시작하라.

  2. 시계열에 random split 사용: 미래 데이터가 학습에 포함되어 성능이 과대 추정된다.

  3. 교차 검증 전에 전처리: 데이터 누수의 가장 흔한 원인. Pipeline을 사용하여 방지하라.

  4. 검증 세트에 반복 튜닝: 반복적인 하이퍼파라미터 튜닝으로 validation set에 과적합된다. Nested CV 또는 별도의 test set을 유지하라.

  5. EDA를 건너뜀: 데이터를 이해하지 않고 모델링을 시작하면, 근본적인 데이터 문제를 놓치게 된다.

  6. 한 가지 지표만 보기: 비즈니스 목표에 맞는 여러 지표를 함께 살펴야 한다.


다른 주제와의 연결