머신러닝 파이프라인(Pipeline), 컬럼 변환기(ColumnTransformer), GridSearchCV 완전 정리
본 문서는 머신러닝 실무에서 가장 많이 사용되는
Pipeline, ColumnTransformer, GridSearchCV를
정의부터 사용법, 주요 메소드, 실전 예시, 그리고 데이터 전처리 및 모델 학습 팁까지
하나의 문서로 정리한 자료입니다.
이 글만 읽으면 머신러닝 워크플로우 전체를 이해하고 바로 적용할 수 있습니다.
────────────────────────────────────────────
1. Pipeline
1-1. Pipeline이란?
여러 단계의 데이터 전처리와 모델 학습 과정을
하나의 흐름(Workflow)으로 묶어주는 Scikit-Learn 기능.
기존 방식(수동으로 전처리 → 모델 학습)은
GridSearchCV, Cross Validation에 문제를 일으킬 수 있지만
Pipeline은 모든 단계를 일관된 구조로 관리해준다.
1-2. 언제 사용하는가?
- 전처리 + 모델 학습을 하나의 작업으로 묶고 싶을 때
- GridSearchCV가 전처리까지 포함하여 교차검증을 수행하도록 만들고 싶을 때
- train/test 간 데이터 누수를 방지하고 싶을 때
- 모델 구성과 파라미터 튜닝을 체계적으로 하고 싶을 때
1-3. 주요 메소드
| 메소드 | 설명 |
| fit(X, y) | 전체 파이프라인 학습 |
| predict(X) | 예측값 반환 |
| predict_proba(X) | 확률 기반 예측 |
| named_steps | 파이프라인 내부 단계 접근 |
| set_params(**kwargs) | 파라미터 변경 |
1-4. 기본 사용 예시
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
numeric_features = ['lead_time', 'adr']
categorical_features = ['hotel', 'deposit_type']
preprocessor = ColumnTransformer([
('num', StandardScaler(), numeric_features),
('cat', OneHotEncoder(handle_unknown='ignore'), categorical_features)
])
────────────────────────────────────────────
2. ColumnTransformer
2-1. ColumnTransformer란?
컬럼별로 다른 전처리 방법을 적용할 수 있도록 해주는 도구.
예:
- 숫자 컬럼 → 표준화(StandardScaler)
- 범주형 컬럼 → OneHotEncoder
- 특정 컬럼만 log 변환
2-2. 주요 기능
- 컬럼별로 서로 다른 Pipeline 적용 가능
- 수치/카테고리/날짜/특수 컬럼을 자동 분리하여 처리
- 전처리 후 전체 특징 벡터를 하나로 결합
2-3. 주요 메소드
| 메소드 | 설명 |
| fit_transform(X) | 컬럼별 전처리 + 변환 |
| transform(X) | 학습된 전처리로 변환 |
| get_feature_names_out() | OneHot 후 생성된 전체 feature 이름 반환 |
| named_transformers_ | 내부에 어떤 변환기가 있는지 조회 |
2-4. 기본 사용 예시
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
numeric_features = ['lead_time', 'adr']
categorical_features = ['hotel', 'deposit_type']
preprocessor = ColumnTransformer([
('num', StandardScaler(), numeric_features),
('cat', OneHotEncoder(handle_unknown='ignore'), categorical_features)
])
────────────────────────────────────────────
3. GridSearchCV
3-1. GridSearchCV란?
모델의 하이퍼파라미터를 자동으로 탐색하는 기능.
- 여러 파라미터 조합을 시도
- Cross Validation 기반 평가
- 가장 성능 좋은 파라미터를 best_params_로 반환
- 해당 파라미터가 적용된 전체 Pipeline을 best_estimator_로 반환
3-2. 주요 속성
| 속성 | 설명 |
| best_params_ | 최고 성능의 파라미터 조합 |
| best_estimator_ | 최고 성능의 Pipeline 전체 모델 |
| best_score_ | 최고 CV 성능 |
| cv_results_ | 모든 조합별 성능 상세결과 |
3-3. param_grid 키 이름 규칙
형식:
'스텝이름__파라미터이름'
예:
'model__n_estimators'
'preprocess__num__scaler__with_mean'
3-4. 기본 사용 예시
from sklearn.model_selection import GridSearchCV
param_grid = {
'model__n_estimators': [100, 200],
'model__max_depth': [5, None],
'model__min_samples_split': [2, 5]
}
grid = GridSearchCV(pipeline, param_grid, cv=5, scoring='roc_auc')
grid.fit(X_train, y_train)
best_model = grid.best_estimator_
────────────────────────────────────────────
4. Pipeline + ColumnTransformer + GridSearchCV 종합 예시
아래 예시는
숫자/범주형 컬럼 전처리 → 랜덤포레스트 분류 → 하이퍼파라미터 탐색
전체 ML Workflow를 하나의 구조로 구현한 실전 예시입니다.
from sklearn.pipeline import Pipeline
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler, OneHotEncoder
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.metrics import roc_auc_score, accuracy_score, f1_score
# 1. 데이터 분리
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42)
# 2. 컬럼 정의
numeric_features = X_train.select_dtypes(include=['int64', 'float64']).columns
categorical_features = X_train.select_dtypes(include=['object', 'bool']).columns
# 3. 컬럼 변환기 정의
preprocessor = ColumnTransformer([
('num', StandardScaler(), numeric_features),
('cat', OneHotEncoder(handle_unknown='ignore'), categorical_features)
])
# 4. 전체 파이프라인 구성
pipeline = Pipeline([
('preprocess', preprocessor),
('model', RandomForestClassifier())
])
# 5. 하이퍼파라미터 탐색
param_grid = {
'model__n_estimators': [100, 200],
'model__max_depth': [5, None],
'model__min_samples_split': [2, 5]
}
grid = GridSearchCV(
pipeline, param_grid, cv=5, scoring='roc_auc', n_jobs=-1)
grid.fit(X_train, y_train)
best_model = grid.best_estimator_
# 6. 테스트 성능 평가
y_pred = best_model.predict(X_test)
y_proba = best_model.predict_proba(X_test)[:, 1]
print("Test ROC-AUC:", roc_auc_score(y_test, y_proba))
print("Test Accuracy:", accuracy_score(y_test, y_pred))
print("Test F1:", f1_score(y_test, y_pred))
────────────────────────────────────────────
5. 머신러닝 전처리 및 모델 학습 팁
5-1. 데이터 전처리 팁
- 숫자형 컬럼은 StandardScaler 또는 MinMaxScaler 적용
- 범주형은 OneHotEncoding
- Boolean은 categorical로 처리하는 것이 일반적
- 로그 변환은 음수/0 존재 여부 반드시 확인
- 결측값은 반드시 train/test split 이전에 split하고, Pipeline 안에서 처리
5-2. 모델 학습 팁
- RandomForest / XGBoost는 scale에 크게 민감하지 않지만
LinearRegression / SVM / KNN은 반드시 표준화 필요 - 분류 문제 평가 지표는 Accuracy만 보면 위험
ROC-AUC, F1을 반드시 함께 확인 - 데이터 누수(Leakage) 방지
Target과 관련된 뒤늦게 알 수 있는 컬럼은 반드시 제거해야 함
5-3. GridSearchCV 팁
- param_grid는 Pipeline 스텝 이름 기반으로 작성
- scoring='roc_auc'는 이진 분류에서 가장 안정적인 지표
- n_jobs=-1로 CPU 전체 사용
- cv=5~10이 안정적
5-4. 모델 해석 팁
- RandomForest/XGBoost는 feature_importances_로 중요도 확인
- ColumnTransformer.get_feature_names_out()으로 실제 feature 목록 생성
- SHAP 값을 통해 개별 데이터의 예측 근거 분석
- ConfusionMatrix로 FP/FN 패턴 확인
────────────────────────────────────────────
6. 마무리
Pipeline, ColumnTransformer, GridSearchCV는
전처리부터 모델 학습, 하이퍼파라미터 튜닝까지
전체 머신러닝 과정을 일관된 구조로 자동화할 수 있는 핵심 기술입니다.
이 세 가지를 자유자재로 활용하면
데이터 분석 프로젝트의 수준이 한 단계 올라가며,
데이터 누수 방지, 안정적 모델 평가, 자동 최적화 구성이 가능해집니다.
'AI 활용 소프트웨어 개발 > AI, 머신러닝, 딥러닝' 카테고리의 다른 글
| ONNX (Open Neural Network Exchange) (0) | 2025.09.15 |
|---|---|
| 백본 특징 추출기, GAP, Attension Pooling , ContrastiveLoss (0) | 2025.09.04 |
| CNN 구조 안에서 커널(kernel), 스트라이드(stride), 채널(channel), MaxPooling, 다운샘플링(downsampling), Fully Connected Layer의 의미, 그리고 실제 계산 (5) | 2025.08.18 |
| Local GPU (Vscode) 환경 설정 및 사용하기 (0) | 2025.08.13 |
| YOLO 하이퍼파라미터 조정하기 (yaml 파일) (3) | 2025.08.11 |