[데이터 사이언스/개념/문법] pipeline이란?

2024. 8. 15. 19:28AI & DS/머신러닝

 

 

Pipeline은 여러 변환기를 순차적으로 적용할 수 있게 해주는 유용한 도구입니다.
각 변환기를 파이프라인의 하나의 "단계(step)"로 추가합니다.
이러한 각 단계는 고유의 이름과 변환기로 구성됩니다.

 

num_transformer = Pipeline(steps=[
	('imputer', SimpleImputer(strategy='mean')),
	('scaler', StandardScaler())
]) 
  • 수치형 데이터를 전처리하는 파이프라인을 정의
  • 이 파이프라인에는 두 가지 주요 단계: 결측치 대체와 표준화

SimpleImputer & StandardScaler

SimpleImputer(strategy='mean'):
  • 결측치를 평균값으로 대체합니다.
  • 각 열에 대해 결측치가 있을 경우, 해당 열의 평균값으로 결측치를 대체합니다.
StandardScaler():
  • 데이터를 표준화합니다.
  • 각 열의 값에서 평균을 빼고, 그 값을 표준편차로 나눕니다. 결과적으로 각 열의 데이터는 평균이 0이고 분산이 1이 됩니다.

예시 데이터

import pandas as pd
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline

# 예시 데이터프레임
df = pd.DataFrame({
    'feature1': [1, 2, None, 4, 5],
    'feature2': [10, None, 30, 40, 50]
})

# 파이프라인 정의
num_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='mean')),
    ('scaler', StandardScaler())
])

# 원본 데이터 출력
print("Original DataFrame:")
print(df)

# 파이프라인을 사용한 전처리
transformed_data = num_transformer.fit_transform(df)

# 전처리된 데이터 출력
print("\\\\nTransformed DataFrame:")
print(transformed_data)


단계별 변화

원본 데이터
    Original DataFrame:
       feature1  feature2
    0       1.0      10.0
    1       2.0       NaN
    2       NaN      30.0
    3       4.0      40.0
    4       5.0      50.0
SimpleImputer 적용 후
  • feature1의 결측치는 (1+2+4+5)/4 = 3.0으로 대체됩니다.
  • feature2의 결측치는 (10+30+40+50)/4 = 32.5로 대체됩니다.
DataFrame after imputation:
   feature1  feature2
0       1.0      10.0
1       2.0      32.5
2       3.0      30.0
3       4.0      40.0
4       5.0      50.0

 

StandardScaler 적용 후
  • feature1의 평균은 3.0, 표준편차는 1.5811 (약 1.58).
  • feature2의 평균은 32.5, 표준편차는 14.6198 (약 14.62).
  • 각 값에서 평균을 빼고 표준편차로 나눕니다.
Transformed DataFrame:
   feature1  feature2
0 -1.264911  -1.540356
1 -0.632456   0.000000
2  0.000000  -0.239129
3  0.632456   0.511676
4  1.264911   1.267809


자세한 변화 설명

SimpleImputer:
  • feature1의 결측치인 2번째 행이 평균 3.0으로 대체됩니다.
  • feature2의 결측치인 1번째 행이 평균 32.5로 대체됩니다.
StandardScaler:
  • feature1:
    • 1.0 -> (1.0 - 3.0) / 1.5811 = -1.264911
    • 2.0 -> (2.0 - 3.0) / 1.5811 = -0.632456
    • 3.0 -> (3.0 - 3.0) / 1.5811 = 0.000000
    • 4.0 -> (4.0 - 3.0) / 1.5811 = 0.632456
    • 5.0 -> (5.0 - 3.0) / 1.5811 = 1.264911
  • feature2:
    • 10.0 -> (10.0 - 32.5) / 14.6198 = -1.540356
    • 32.5 -> (32.5 - 32.5) / 14.6198 = 0.000000
    • 30.0 -> (30.0 - 32.5) / 14.6198 = -0.239129
    • 40.0 -> (40.0 - 32.5) / 14.6198 = 0.511676
    • 50.0 -> (50.0 - 32.5) / 14.6198 = 1.267809

파이프라인(Pipeline)과 단계(Step)

  • Pipeline은 여러 변환기를 순차적으로 적용할 수 있게 해주는 유용한 도구입니다.
  • 각 변환기를 파이프라인의 하나의 "단계(step)"로 추가합니다. 이러한 각 단계는 고유의 이름과 변환기로 구성됩니다.

파이프라인 구성

  • Pipeline을 정의할 때, steps 인자는 각 단계를 순서대로 지정합니다.
  • 각 단계는 튜플 형태로, (단계 이름, 변환기 객체)로 구성됩니다.
  • 파이프라인이 데이터를 처리할 때, 각 단계가 순차적으로 실행됩니다.
imputer 단계:
  • SimpleImputer는 데이터의 결측치를 평균값으로 대체합니다.
  • 예를 들어, 데이터가 [[1, 2, None], [4, None, 6], [7, 8, 9]]라면, None 값을 각 열의 평균값으로 대체합니다.
scaler 단계:
  • StandardScaler는 결측치가 대체된 데이터를 표준화합니다.
  • 표준화는 각 특성의 값에서 평균을 빼고 표준편차로 나누어, 평균이 0이고 분산이 1이 되도록 만듭니다.

예제 코드

from sklearn.pipeline import Pipeline
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler

# 수치형 변환기 파이프라인 정의
num_transformer = Pipeline(steps=[
    ('imputer', SimpleImputer(strategy='mean')),
    ('scaler', StandardScaler())
])
  • imputer와 scaler는 Pipeline 단계에서 사용되는 이름일 뿐이므로, 이 이름들은 임의로 지정할 수 있습니다. 중요한 것은 각 단계가 수행하는 작업과 그 순서이지, 단계 이름 자체는 아닙니다. 단계 이름은 파이프라인 내에서 각 단계를 식별하고 관리하기 위해 사용됩니다.
    • 아래 처럼 단계 이름 변경해도 됨
num_transformer = Pipeline(steps=[
('missing_value_replacement', SimpleImputer(strategy='mean')),
('normalizer', StandardScaler())
])

각 단계 설명

Pipeline 객체 생성
num_transformer = Pipeline(steps=[...])
  • Pipeline 객체를 생성합니다. steps 인자에는 파이프라인에 포함될 각 단계를 순서대로 지정합니다.
'imputer' 단계 추가
('imputer', SimpleImputer(strategy='mean'))
  • SimpleImputer(strategy='mean') 객체를 파이프라인의 'imputer' 단계로 추가합니다.
  • SimpleImputer는 결측치를 평균값으로 대체하는 변환기입니다.
  • 'imputer'라는 이름을 사용하여 이 단계를 명명합니다.
  • 이는 파이프라인이 실행될 때 가장 먼저 실행될 단계입니다.
'scaler' 단계 추가
('scaler', StandardScaler())
  • StandardScaler() 객체를 파이프라인의 'scaler' 단계로 추가합니다.
  • StandardScaler는 데이터를 표준화(평균을 0, 분산을 1로)하는 변환기입니다.
  • 'scaler'라는 이름을 사용하여 이 단계를 명명합니다.
  • 이는 파이프라인 내에서 'imputer' 단계 다음에 실행될 단계입니다.