들어가며
데이터 과학 프로젝트에서 Feature Engineering(피처 엔지니어링)은 모델 성능을 좌우하는 핵심 과정입니다. 하지만 수십 개의 파생변수를 수작업으로 만드는 것은 시간이 오래 걸리고 반복적인 작업입니다. 이 글에서는 Featuretools와 AutoFeat 라이브러리를 활용해 파생변수 생성을 자동화하고, 작업 효율을 획기적으로 높이는 방법을 소개합니다.
핵심 포인트: 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의 주요 기능
- 집계 연산: SUM, MEAN, COUNT, MAX, MIN, STD 등
- 변환 연산: DAY, MONTH, YEAR, WEEKDAY 등 시간 변환
- 다층 관계: 여러 테이블을 거친 복합 파생변수 생성
실무 팁:
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
답글 남기기