ML 파이프라인 기초 — 초급자 가이드 (SAS Blog)

Source: https://blogs.sas.com/content/sgf/2025/05/23/python-ml-pipelines-with-scikit-learn/ Type: Article By: Emmett Smith Published: 2025-05-23 Valid as of: 2026-04-26

핵심 Takeaway

  • ML 파이프라인은 데이터 정제→변환→모델 훈련을 하나의 재사용 가능한 단위로 묶은 것 (to-do list 개념)
  • 데이터 누수(data leakage) 방지: 훈련 데이터로만 변환 학습, 테스트 데이터는 훈련된 변환만 적용
  • ColumnTransformer: 수치형 vs 범주형 데이터에 서로 다른 전처리 파이프라인을 병렬 적용
  • 5단계 구현: 패키지 임포트 → 데이터 로드 및 탐색 → ColumnTransformer 구성 → 모델 추가 → 훈련 및 평가
  • 4가지 핵심 이점: 데이터 누수 방지, 전처리와 모델 코드 분리, 교차검증 간편화, joblib으로 모델 저장/재사용
  • 주의: fit_transform (훈련용)과 transform (추론용) 혼동 금지, 파이프라인 외부에서 전처리 금지

상세 요약

파이프라인의 개념 및 역할

파이프라인은 머신러닝 워크플로의 모든 단계를 하나의 객체로 통합하는 설계 패턴이다. 각 단계가 순서대로 실행되며, 훈련 데이터와 테스트 데이터에 동일한 변환을 일관되게 적용한다.

파이프라인의 구성:

  • Transformer: 데이터를 변환하는 단계 (예: 스케일링, 인코딩, 결측치 대체)
    • fit(): 훈련 데이터로부터 변환 규칙 학습
    • transform(): 규칙을 데이터에 적용
  • Estimator: 예측 모델 (예: 로지스틱 회귀, 그래디언트 부스팅)
    • fit(): 훈련
    • predict(): 예측

ColumnTransformer: 혼합 자료형 처리

실무 데이터셋은 수치형 컬럼(연속변수)과 범주형 컬럼(카테고리)을 함께 포함한다. 이를 처리하려면 서로 다른 전처리가 필요하다.

수치형 변수의 전처리:

  • SimpleImputer: 결측치를 평균값으로 대체
  • StandardScaler: 평균 0, 표준편차 1로 정규화
  • 선택사항: PCA (주성분분석)로 차원 축소

범주형 변수의 전처리:

  • SimpleImputer: 결측치를 가장 빈번한 값(모드)으로 대체
  • OneHotEncoder: 카테고리를 더미 변수(0/1)로 변환

병렬 처리: ColumnTransformer는 두 전처리 파이프라인을 병렬로 실행한 후, 결과를 좌우로 연결(concatenate)한다.

5단계 구현 프로세스

Step 1: 라이브러리 임포트

from sklearn.pipeline import Pipeline, ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder, SimpleImputer
from sklearn.compose import ColumnTransformer
from sklearn.linear_model import LogisticRegression

Step 2: 데이터 로드 및 탐색

  • Kaggle 호주 날씨 데이터셋 (또는 유사 혼합형 데이터)
  • 수치형 컬럼: 기온, 강수량 등
  • 범주형 컬럼: 계절, 날씨 상태 등

Step 3: ColumnTransformer 구성

  • 수치형 전처리 파이프라인 정의
  • 범주형 전처리 파이프라인 정의
  • 두 파이프라인을 ColumnTransformer로 결합

Step 4: 모델 추가

  • 전처리된 데이터를 분류 모델(로지스틱 회귀, 그래디언트 부스팅 등)에 입력
  • 파이프라인으로 전체를 감싸기: Pipeline([('preprocessor', ct), ('classifier', model)])

Step 5: 훈련 및 평가

  • fit(): 훈련 데이터로 전처리 규칙과 모델 학습
  • predict(): 테스트 데이터 예측
  • 정확도, F1-스코어 등으로 성능 평가

파이프라인의 4가지 핵심 이점

1. 데이터 누수 방지

  • 잘못된 방식: 전체 데이터를 변환한 후 train-test 분할 → 테스트 데이터의 통계(평균, 스케일)가 훈련에 영향
  • 올바른 방식: 훈련 데이터로만 변환 규칙 학습, 테스트 데이터는 그 규칙 적용 → 현실적 평가

2. 코드 정리 및 유지보수성

  • 전처리와 모델 코드가 분리되어 각각 독립적으로 수정 가능
  • 파이프라인 객체 하나로 전체 워크플로를 저장·로드 가능

3. 교차검증(Cross-Validation) 간편화

  • 파이프라인을 cross_val_score() 등에 직접 전달 가능
  • 각 폴드에서 자동으로 전처리 규칙이 재학습됨

4. 모델 배포 & 재사용

  • joblib.dump(): 파이프라인 전체(전처리 + 모델)를 단일 파일로 저장
  • joblib.load(): 프로덕션 환경에서 로드하여 즉시 예측 가능

주의사항: 흔한 실수

실수결과해결책
전체 데이터 전처리 후 분할데이터 누수파이프라인으로 자동화
fit_transform을 테스트에 사용테스트 규칙 학습(오염)transform만 사용
파이프라인 외부에서 스케일링일관성 부족모든 변환을 파이프라인 내부에

성능 개선 예시

SAS Viya Workbench 최적화:

  • 그래디언트 부스팅 실행 시간: 41초 → 2.5초 (약 16배 단축)
  • 최적화 효과: 데이터 병렬화, 메모리 효율화

선행 개념

이 개념을 배우기 전에 필수로 알아야 할 것:

  1. Module 2: EDA 및 데이터 전처리 기초
    • 왜?: Pipeline이 “어떤 변환을 어떤 순서로 적용할 것인가”를 다루므로, 먼저 각 변환(결측치 처리, 스케일링 등)을 이해해야 함
  2. Module 1: Python 기본 문법 및 환경설정 (pandas, scikit-learn)

후속 개념 (이 개념이 선행)

이 개념을 배운 후 다음 단계:

  1. Module 5-2 → sklearn-pipelines-medium-advanced: Pipeline의 하이퍼파라미터 최적화
    • 예: “파이프라인의 모든 단계(스케일링, 모델)의 파라미터를 GridSearchCV로 동시 최적화”
  2. Module 5-3 → data-leakage-prevention-ml: fit_transform vs transform 차이와 데이터 누수 방지
    • 이 소스에서: “Pipeline의 이점 = 자동으로 데이터 누수 방지”
    • 다음 단계: “왜 누수가 발생하고, 어떻게 방지하는가?”를 심화

연결되는 위키 페이지