본문 바로가기
Python/Machine Learning

[TIL] 머신러닝 파이프 라인 개념

by 좌우지간에 2024. 12. 24.

🚀 머신러닝 파이프라인 개념 정리 📝

오늘은 머신러닝 모델링 과정을 효율적으로 관리하는 데 도움이 되는 파이프라인(Pipeline)에 대해 학습했습니다. 파이프라인은 복잡한 머신러닝 워크플로우를 단순화하고, 코드의 재사용성을 높이는 데 유용한 도구입니다. 초급 개발자의 입장에서 파이프라인의 기본 개념과 활용 방법을 정리해 보겠습니다.

 

1. 파이프라인이란 무엇인가? 🤔

파이프라인은 머신러닝 모델을 개발하는 데 필요한 여러 단계들을 하나의 흐름으로 연결해주는 도구입니다. 데이터 준비, 전처리, 모델 학습, 예측 등 일련의 과정을 미리 정의해두고, 파이프라인을 통해 자동으로 처리할 수 있습니다. Scikit-learn 라이브러리에서는 Pipeline 클래스를 제공하여 파이프라인을 쉽게 구축할 수 있습니다. 🛠️

 

파이프라인을 사용하는 이유:

  • 코드 간결성: 여러 단계를 묶어 코드를 더욱 간결하게 만들 수 있습니다. 🧹
  • 코드 재사용성: 한 번 만든 파이프라인을 다른 데이터셋이나 모델에도 재사용할 수 있습니다. ♻️
  • 오류 감소: 각 단계를 연결하는 과정에서 발생할 수 있는 오류를 줄여줍니다. ✅
  • 데이터 누수 방지: 교차 검증 시 데이터 누수를 방지하여 모델의 성능을 정확하게 평가할 수 있습니다. 🛡️
  • 모델 튜닝 효율성: 파이프라인 전체에 하이퍼파라미터 튜닝을 적용할 수 있어 모델 튜닝 과정을 효율적으로 관리할 수 있습니다. ⚙️

 

2. 파이프라인 구조 이해하기 🧱

Scikit-learn에서 파이프라인은 Pipeline 클래스를 사용하여 만들 수 있습니다. Pipeline이름과 객체로 이루어진 튜플을 리스트 형태로 받습니다. 각 단계는 데이터 변환기(transformer) 또는 모델 학습기(estimator)가 될 수 있습니다. 🧩

 

예시 코드:

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

# 파이프라인 생성
pipeline = Pipeline([
    ('scaler', StandardScaler()),  # 데이터 스케일링 단계
    ('model', LogisticRegression())  # 모델 학습 단계
])

# 파이프라인 학습 및 예측
pipeline.fit(X_train, y_train)
y_pred = pipeline.predict(X_test)

위 코드는 StandardScaler를 사용하여 데이터를 스케일링한 후, LogisticRegression 모델을 학습하는 파이프라인 예시입니다. fit(), predict()와 같은 메소드를 사용하여 파이프라인을 학습하고 예측할 수 있습니다. 💡

 

3. ColumnTransformer: 데이터 전처리 적용하기 🧰

ColumnTransformer는 데이터셋의 각 컬럼에 서로 다른 전처리 단계를 적용해야 할 때 유용하게 사용되는 도구입니다. 예를 들어, 수치형 컬럼에는 스케일링을, 범주형 컬럼에는 원-핫 인코딩을 적용할 수 있습니다. ⚙️

 

예시 코드:

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

# ColumnTransformer 생성
preprocessor = ColumnTransformer(
    transformers=[
        ('num', StandardScaler(), ['numeric_feature1', 'numeric_feature2']),  # 수치형 컬럼 스케일링
        ('cat', OneHotEncoder(), ['categorical_feature'])  # 범주형 컬럼 인코딩
    ])

# 파이프라인 생성
pipeline = Pipeline([
    ('preprocessor', preprocessor),   # 전처리 단계
    ('model', LogisticRegression())    # 모델 학습 단계
])

# 파이프라인 학습 및 예측
pipeline.fit(X_train, y_train)
y_pred = pipeline.predict(X_test)

위 코드에서는 ColumnTransformer를 사용하여 수치형 컬럼에 StandardScaler를, 범주형 컬럼에 OneHotEncoder를 적용했습니다. 이를 통해 데이터를 더욱 효율적으로 전처리할 수 있습니다. 🚀

 

4. 파이프라인 학습 후 정리 📝

  • 코드 가독성 향상: 파이프라인을 사용하니 여러 단계를 명확하게 구분하여 코드를 읽기 쉽게 만들 수 있었습니다. 👓
  • 코드 재사용성 향상: 한 번 만들어 놓은 파이프라인을 다른 데이터셋이나 모델에도 재사용할 수 있어 개발 생산성이 향상될 수 있습니다. ♻️
  • 데이터 전처리 자동화: 여러 단계를 파이프라인으로 묶어 데이터 전처리 과정을 자동화할 수 있습니다. ⚙️
  • 체계적인 모델링: 파이프라인을 통해 머신러닝 모델링 과정을 체계적으로 관리할 수 있습니다. 🗂️