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 LogisticRegressionStep 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배 단축)
- 최적화 효과: 데이터 병렬화, 메모리 효율화
선행 개념
이 개념을 배우기 전에 필수로 알아야 할 것:
- Module 2: EDA 및 데이터 전처리 기초
- 왜?: Pipeline이 “어떤 변환을 어떤 순서로 적용할 것인가”를 다루므로, 먼저 각 변환(결측치 처리, 스케일링 등)을 이해해야 함
- Module 1: Python 기본 문법 및 환경설정 (pandas, scikit-learn)
후속 개념 (이 개념이 선행)
이 개념을 배운 후 다음 단계:
- Module 5-2 → sklearn-pipelines-medium-advanced: Pipeline의 하이퍼파라미터 최적화
- 예: “파이프라인의 모든 단계(스케일링, 모델)의 파라미터를 GridSearchCV로 동시 최적화”
- Module 5-3 → data-leakage-prevention-ml: fit_transform vs transform 차이와 데이터 누수 방지
- 이 소스에서: “Pipeline의 이점 = 자동으로 데이터 누수 방지”
- 다음 단계: “왜 누수가 발생하고, 어떻게 방지하는가?”를 심화
연결되는 위키 페이지
- ml-pipeline — ML 파이프라인 개념 및 설계 원칙
- data-leakage — 데이터 누수 문제 및 방지 방법
- scikit-learn — Scikit-learn 라이브러리
- pandas-dataframe — 판다스 데이터 조작