Feature Engineering 자동화: Featuretools와 AutoFeat으로 파생변수 생성 효율 10배 높이기

들어가며

데이터 과학 프로젝트에서 Feature Engineering(피처 엔지니어링)은 모델 성능을 좌우하는 핵심 과정입니다. 하지만 수십 개의 파생변수를 수작업으로 만드는 것은 시간이 오래 걸리고 반복적인 작업입니다. 이 글에서는 FeaturetoolsAutoFeat 라이브러리를 활용해 파생변수 생성을 자동화하고, 작업 효율을 획기적으로 높이는 방법을 소개합니다.

핵심 포인트: Feature Engineering 자동화로 데이터 분석가는 반복 작업에서 벗어나 인사이트 도출에 집중할 수 있습니다.

Feature Engineering이란?

Feature Engineering은 원본 데이터에서 새로운 특성(feature)을 생성하거나 기존 특성을 변환하여 머신러닝 모델의 예측 성능을 향상시키는 과정입니다.

전통적인 방식의 한계

  • 도메인 지식에 크게 의존
  • 수작업으로 변수 조합 및 생성
  • 시행착오가 많고 시간 소모적
  • 놓치기 쉬운 유용한 조합 존재

자동화의 필요성

구분 수작업 방식 자동화 방식
소요 시간 수 시간 ~ 수 일 수 분 ~ 수 십분
생성 변수 수 10~50개 수백~수천개
일관성 낮음 높음
재현성 어려움 용이함

Featuretools: 관계형 데이터 기반 자동화

Featuretools는 관계형 데이터베이스 구조를 활용해 자동으로 파생변수를 생성하는 오픈소스 라이브러리입니다.

핵심 개념: Deep Feature Synthesis (DFS)

Deep Feature Synthesis는 테이블 간 관계를 기반으로 집계(aggregation)와 변환(transformation) 연산을 자동으로 수행합니다.

실무 활용 예시: 전자상거래 고객 분석

import featuretools as ft
import pandas as pd

# 고객 데이터
customers = pd.DataFrame({
    'customer_id': [1, 2, 3],
    'age': [25, 35, 45],
    'join_date': pd.to_datetime(['2023-01-01', '2023-02-15', '2023-03-20'])
})

# 주문 데이터
orders = pd.DataFrame({
    'order_id': [101, 102, 103, 104, 105],
    'customer_id': [1, 1, 2, 3, 3],
    'amount': [50000, 75000, 120000, 30000, 95000],
    'order_date': pd.to_datetime(['2023-06-01', '2023-07-15', '2023-06-20', '2023-08-01', '2023-08-15'])
})

# EntitySet 생성
es = ft.EntitySet(id='customer_data')

# 엔티티 추가
es = es.add_dataframe(
    dataframe_name='customers',
    dataframe=customers,
    index='customer_id'
)

es = es.add_dataframe(
    dataframe_name='orders',
    dataframe=orders,
    index='order_id',
    time_index='order_date'
)

# 관계 정의
es = es.add_relationship('customers', 'customer_id', 'orders', 'customer_id')

# 자동 Feature 생성
feature_matrix, feature_defs = ft.dfs(
    entityset=es,
    target_dataframe_name='customers',
    max_depth=2
)

print(feature_matrix.columns.tolist())
# 출력: ['age', 'join_date', 'SUM(orders.amount)', 'MEAN(orders.amount)', 
#        'COUNT(orders)', 'MAX(orders.amount)', 'MIN(orders.amount)', ...]

Featuretools의 주요 기능

  1. 집계 연산: SUM, MEAN, COUNT, MAX, MIN, STD 등
  2. 변환 연산: DAY, MONTH, YEAR, WEEKDAY 등 시간 변환
  3. 다층 관계: 여러 테이블을 거친 복합 파생변수 생성

실무 팁: max_depth 파라미터를 조절하여 생성되는 변수의 복잡도를 제어할 수 있습니다. 너무 높으면 과적합 위험이 있습니다.

AutoFeat: 단일 테이블 기반 자동화

AutoFeat는 단일 데이터프레임에서 다항식 변환과 특성 조합을 통해 최적의 파생변수를 자동 생성합니다.

핵심 특징

  • 선형 모델 기반 특성 선택
  • 다항식 및 상호작용 특성 자동 생성
  • 불필요한 변수 자동 제거
  • Scikit-learn과 호환되는 API

실무 활용 예시: 주택 가격 예측

from autofeat import AutoFeatRegressor
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_california_housing

# 데이터 로드
housing = fetch_california_housing(as_frame=True)
X = housing.data
y = housing.target

# 학습/테스트 분리
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# AutoFeat 모델 생성 및 학습
afreg = AutoFeatRegressor(
    categorical_cols=[],
    feateng_steps=2,  # 파생변수 생성 깊이
    featsel_runs=5,   # 특성 선택 반복 횟수
    verbose=1
)

# 자동 Feature Engineering 및 모델 학습
X_train_transformed = afreg.fit_transform(X_train, y_train)
X_test_transformed = afreg.transform(X_test)

# 생성된 주요 특성 확인
print(f"원본 특성 수: {X_train.shape[1]}")
print(f"생성된 특성 수: {X_train_transformed.shape[1]}")
print(f"\n주요 생성 특성 예시:")
for feat in afreg.new_feat_cols_[:5]:
    print(f"  - {feat}")

# 예측 성능
score = afreg.score(X_test, y_test)
print(f"\nR² Score: {score:.4f}")

AutoFeat vs Featuretools 비교

기준 Featuretools AutoFeat
데이터 구조 다중 테이블(관계형) 단일 테이블
주요 기법 집계, 변환, 관계 활용 다항식, 상호작용
특성 선택 수동 필터링 필요 자동 선택 내장
적용 분야 CRM, 전자상거래, 금융 회귀/분류 일반 문제
학습 곡선 중간 낮음

실무 적용 전략

1. 적절한 도구 선택

  • 여러 테이블이 관계를 가진 경우 → Featuretools
  • 단일 테이블에서 비선형 패턴 발견 → AutoFeat
  • 두 가지 병행 사용으로 최상의 결과 도출 가능

2. 성능 최적화 팁

# Featuretools 성능 최적화
feature_matrix, feature_defs = ft.dfs(
    entityset=es,
    target_dataframe_name='customers',
    max_depth=2,
    n_jobs=-1,  # 병렬 처리
    chunk_size=500,  # 청크 크기 조정
    verbose=True
)

# 불필요한 특성 제거
from featuretools.selection import remove_low_information_features
feature_matrix = remove_low_information_features(feature_matrix)

3. 주의사항

  • 과적합 방지: 생성된 변수가 너무 많으면 교차 검증 필수
  • 도메인 지식 활용: 자동화 결과를 검토하고 비즈니스 관점에서 해석
  • 계산 리소스: 대용량 데이터는 샘플링 후 실험

실제 성능 향상 사례

케이스 스터디: 고객 이탈 예측

방식 특성 수 작업 시간 F1 Score
수작업 Feature Engineering 15개 4시간 0.72
Featuretools 자동화 127개 20분 0.79
Featuretools + 수동 선택 35개 1시간 0.82

핵심 인사이트: 자동화로 생성한 변수 중 의미 있는 것을 선별하면 최고의 성능을 달성할 수 있습니다.

마무리

Feature Engineering 자동화는 데이터 분석가의 생산성을 획기적으로 높이는 강력한 도구입니다.

핵심 요약

  • Featuretools는 관계형 데이터에서 자동으로 집계·변환 변수를 생성하며, 전자상거래·금융 데이터 분석에 최적입니다.
  • AutoFeat는 단일 테이블에서 다항식·상호작용 특성을 자동 생성하고 선택까지 수행합니다.
  • 두 도구를 병행하면 작업 시간은 1/10로 단축하고 모델 성능은 10~15% 향상시킬 수 있습니다.
  • 자동화 결과를 맹신하지 말고 도메인 지식으로 검증하는 것이 중요합니다.

지금 바로 Featuretools와 AutoFeat를 프로젝트에 적용해보세요. 반복 작업에서 벗어나 더 가치 있는 인사이트 발견에 집중할 수 있을 것입니다.

이 글이 도움이 되셨나요? ☕

Buy me a coffee

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

TODAY 36 | TOTAL 36