특징 엔지니어링

프로덕션을 위한 Machine Learning 모델 개발

Sinan Ozdemir

Data Scientist and Author

특징 엔지니어링 소개

  • 학습 데이터를 변환하여 ML 파이프라인 성능 극대화
  • 계산 복잡도 감소
  • 예시
    • 여러 소스의 데이터 집계
    • 새 특징 구성
    • 특징 변환 적용

특징 엔지니어링 파이프라인

1 https://www.manning.com/books/feature-engineering-bookcamp
프로덕션을 위한 Machine Learning 모델 개발

여러 소스의 데이터 집계

  • 서로 다른 데이터셋 결합
  • 여러 유형의 데이터 사용(예: 수치형, 범주형)

효과:

  • 모델 정확도 향상
  • 더 복잡한 모델 사용 가능

화면의 그래프

프로덕션을 위한 Machine Learning 모델 개발

데이터 집계 예시

class DataAggregator:
    def __init__(self):
        pass

    def fit(self, X, y=None):
        return self  # nothing to fit

    def transform(self, X, y=None):
        # Load data from multiple sources
        data1 = pd.read_csv('data1.csv')
        data2 = pd.read_csv('data2.csv')
        data3 = pd.read_csv('data3.csv')

        # Combine data from all sources (including X) into a single data frame
        aggregated_data = pd.concat([X, data1, data2, data3], axis=0)

        return aggregated_data  # Return aggregated data
프로덕션을 위한 Machine Learning 모델 개발

특징 구성

  • 기존 데이터에서 새 특징 생성
  • 사전 존재 데이터로부터 특징 파생
  • 모델 성능 향상
  • 해석 가능성 향상
프로덕션을 위한 Machine Learning 모델 개발

특징 구성 예시

class FeatureConstructor:
    def __init__(self):
        pass

    def fit(self, X, y=None):
        return self

    def transform(self, X, y=None):
        # Calculate the mean of each column in the data
        mean_values = X.mean()

        # Create new features based on the mean values
        X['mean_col1'] = X['col1'] - mean_values['col1']
        X['mean_col2'] = X['col2'] - mean_values['col2']

        return X  # Return the augmented data set
프로덕션을 위한 Machine Learning 모델 개발

특징 변환

기존 특징을 제자리에서 변환

  • 데이터 분포 정규화
  • 이상치 제거
  • 모델 정확도와 성능 향상
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score

data = load_breast_cancer()  # Load dataset
X, y = data.data, data.target
model = LogisticRegression(random_state=42)  # instantiate a model

# Split data into train and test sets
X_train, X_test, y_train, y_test = train_test_split(
  X, y, test_size=0.3, random_state=42)

model.fit(X_train, y_train)  # Fit logistic regression model without scaling
y_pred_no_scaling = model.predict(X_test)
acc_no_scaling = accuracy_score(y_test, y_pred_no_scaling)

scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

model.fit(X_train_scaled, y_train)  # Fit logistic regression model with scaling
y_pred_with_scaling = model.predict(X_test_scaled)
acc_with_scaling = accuracy_score(y_test, y_pred_with_scaling)

# Compare accuracies of models with and without scaling
print(f"Accuracy without scaling: {acc_no_scaling}")  # 0.971
print(f"Accuracy with scaling: {acc_with_scaling}")  # 0.982
프로덕션을 위한 Machine Learning 모델 개발

특징 선택

더 큰 특징 집합에서 중복·불필요한 특징을 제거해 일부만 선택

  • 과적합 감소
  • 정확도와 성능 향상
  • 해석 가능성 향상

특징 선택

1 https://www.manning.com/books/feature-engineering-bookcamp
프로덕션을 위한 Machine Learning 모델 개발

특징 엔지니어링 예시 (계속)

import pandas as pd
from sklearn.preprocessing import StandardScaler
from sklearn.feature_selection import SelectKBest, chi2
from sklearn.pipeline import Pipeline

pipeline = Pipeline([  # Define feature engineering pipeline

    ('aggregate', DataAggregator()),  # Aggregate data from multiple sources

    ('construction', FeatureConstructor()),  # Feature Construction

    ('scaler', StandardScaler()),  # Feature Transformation

    ('select', SelectKBest(chi2, k=10)),  # Feature Selection
])
X_transformed = pipeline.fit_transform(X)  # Fit and transform data using pipeline
프로덕션을 위한 Machine Learning 모델 개발

특징 엔지니어링 더 알아보기

FE 서적

프로덕션을 위한 Machine Learning 모델 개발

연습해 봅시다!

프로덕션을 위한 Machine Learning 모델 개발

Preparing Video For Download...