Feature Engineering
특징 엔지니어링은 도메인 지식을 활용해 원시 데이터를 모델이 쉽게 학습할 수 있는 입력으로 변환합니다. 주요 기법, 데이터 누수의 위험, 활용 사례, 코드를 다룹니다.
특성 엔지니어링은 도메인 및 데이터 지식을 활용해 머신러닝 모델이 학습하는 입력 변수, 즉 특성을 생성하고 변환 및 선택하는 과정입니다. 원시 타임스탬프는 시간대와 요일이 되고, 카드 거래 목록은 최근 30일간 고객의 지출액이 되며, 이동 거리와 시간은 속도가 됩니다. 잘 선택한 특성은 단순한 모델도 놓칠 수 있는 패턴을 포착하게 하며, 모델이 입력된 열만 사용할 수 있는 테이블 및 시계열 데이터에서 특히 중요합니다. 딥러닝 모델은 원시 이미지, 오디오, 텍스트에서 자체 특성을 학습합니다. 이로 인해 해당 분야의 특성 엔지니어링은 데이터 준비와 모델 출력 기반 특성 구축 중심으로 바뀌었습니다.
일반적인 기법#
- 스케일링 및 정규화: 특성을 평균 0, 분산 1로 표준화하면 단위가 큰 특성이 거리 기반 모델과 그래디언트 기반 학습을 지배하지 않도록 할 수 있습니다. 로그 변환은 소득이나 가격처럼 치우친 값을 압축합니다.
- 범주형 인코딩: 원-핫 인코딩은 색상과 같은 범주를 이진 열로 변환하고, 타깃 인코딩은 각 범주를 해당 범주의 타깃 평균값으로 대체합니다. 인코딩이 각 행 자체의 레이블을 드러내지 않도록 별도 폴드에서 평균을 계산합니다.
- 비율 및 상호작용: 부채 대비 소득 비율, 제곱피트당 가격, 체질량 지수는 원시 값 두 개를 결과에 실제로 영향을 미치는 값으로 결합합니다.
- 날짜 및 시간 특성: 시간, 요일, 월, 공휴일 플래그는 주기성을 드러냅니다. 시간을 사인 및 코사인으로 인코딩하면 23:00이 00:00 옆에 배치됩니다.
- 지연값 및 롤링 윈도우: 이전 값, 롤링 평균, 최근 윈도우의 개수를 사용하면 모델에 센서, 계정 또는 제품의 최근 기록을 제공할 수 있습니다.
- 구간화: 연령대와 같이 연속값을 범위별로 그룹화하면 계단형 효과를 포착하고 극단값의 영향을 제한할 수 있습니다.
- PCA를 통한 차원 축소: 주성분 분석은 상관관계가 있는 여러 특성을 상관관계가 없는 소수의 특성으로 압축합니다.
- 특성 선택: 필터 방식은 타깃과의 상관관계 또는 상호 정보량을 기준으로 특성 순위를 매기고, 래퍼 방식은 모델을 사용해 특성 하위 집합을 테스트하며, L1 정규화와 같은 임베디드 방식은 학습 중 특성을 제거합니다.
비율 특징은 이것이 왜 작동하는지 보여줍니다. 깊이가 제한된 의사결정 트리는 한 번에 하나의 특징만 분할할 수 있으므로, 거리와 지속 시간만으로는 "평균 속도가 90 km/h를 초과한다"는 규칙을 제대로 근사하지 못하지만, 속도를 계산하면 정확히 한 번의 분할로 표현할 수 있습니다:
import numpy as np
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
# 1,000 trips: raw distance (km) and duration (h); label = average speed above 90 km/h
rng = np.random.default_rng(0)
distance = rng.uniform(10, 300, 1000)
hours = rng.uniform(0.5, 4.0, 1000)
y = (distance / hours > 90).astype(int)
raw = np.column_stack([distance, hours])
engineered = (distance / hours).reshape(-1, 1) # domain knowledge: speed = distance / time
tree = DecisionTreeClassifier(max_depth=2, random_state=0)
for name, X in [("Raw distance and duration", raw), ("Engineered speed", engineered)]:
print(f"{name}: accuracy {cross_val_score(tree, X, y, cv=5).mean():.3f}")같은 깊이 2 트리에서 교차 검증 정확도는 원시 거리 및 지속 시간 특성을 사용할 때 0.861에서 엔지니어링된 속도 특성을 사용할 때 1.000으로 높아집니다. 거리-지속 시간 공간의 대각선 경계가 속도에 대한 단일 임계값으로 바뀌기 때문입니다.
데이터 누수 없이 특징 검증하기#
특징 값은 예측 시점에 알려져 있는 경우에만 유효합니다. 취소 후 한 달 동안의 지원 요청 횟수나 전체 데이터셋으로 계산한 타깃 인코딩을 사용하는 이탈 예측 모델은 테스트에서는 점수가 높지만 프로덕션에서는 실패하며, 이는 데이터 누수의 한 형태입니다. 따라서 스케일러 평균이나 범주 인코딩처럼 학습된 파라미터를 사용하는 모든 변환은 학습 폴드에 대해서만 적합화하며, scikit-learn 파이프라인은 이를 자동으로 처리합니다. 또한 새 특징은 교차 검증 점수를 향상하는 경우에만 유지합니다. 프로덕션 시스템은 각 특징도 학습 때와 정확히 동일한 방식으로 계산해야 하며, 특징 저장소는 동일한 특징 정의를 양쪽에 제공하여 이를 처리합니다.
컴퓨터 비전의 특징 엔지니어링#
전통적인 컴퓨터 비전에서는 에지 맵, SIFT 키포인트 디스크립터, 방향성 그래디언트 히스토그램과 같은 수작업 설계 특징을 사용했고, 이후 서포트 벡터 머신과 같은 분류기가 이를 레이블링했습니다. 2012년 AlexNet이 ImageNet 챌린지에서 우승한 이후 합성곱 신경망은 픽셀에서 자체 특징 맵을 학습하게 되었고, 엔지니어링 노력은 데이터 증강을 통한 학습 데이터와 비전 모델의 출력으로 옮겨갔습니다. Ultralytics SpeedEstimator는 YOLO26 객체 추적 출력에서 속도 특징을 생성합니다. 트랙에 위치가 다섯 개 쌓이면 첫 위치와 마지막 위치 사이의 픽셀 변위를 meter_per_pixel 스케일을 사용해 미터로 변환하고, 경과 시간으로 나누어 km/h 단위로 보고합니다.
응용 분야#
- 신용 위험: 대출 기관은 원시 계정 기록에서 부채 대비 소득 비율, 신용 이용률, 마지막 연체 이후 경과 개월 수를 도출합니다. 이러한 특징은 원시 잔액보다 채무 불이행을 더 잘 예측합니다.
- 예측 유지보수: 진동 및 온도 스트림에서 계산한 이동 평균, 변화율, 주파수 대역 에너지는 원시 측정값이 경보 한계를 넘기 전에 진행 중인 마모를 드러냅니다.
- 사기 탐지: 지난 한 시간 동안의 카드 거래 횟수와 구매 장소 및 카드 소지자의 평소 위치 간 거리와 같은 속도 특징은 사기 거래와 정상적인 지출을 구분합니다.
- 수요 예측: 리테일 모델은 각 매장 및 제품에 대해 판매 시차값, 이동 평균, 가격 변동, 프로모션 플래그, 공휴일 지표를 결합합니다.
특징 엔지니어링과 관련 용어 비교#
- 특징 추출: PCA나 신경망 백본처럼 고정된 알고리즘이나 학습된 모델을 사용해 특징을 자동으로 계산합니다. 두 용어는 서로 바꾸어 쓰이는 경우가 많으며, 특징 엔지니어링은 도메인 지식을 바탕으로 하는 더 넓은 프로세스를 포함합니다.
- 데이터 전처리: 오류 수정, 결측값 채우기, 데이터 형식 변환을 통해 데이터를 정리하고 형식을 지정하는 단계로, 특징을 설계하기 전에 수행합니다.
- 임베딩: 모델이 학습 중 단어, 이미지 또는 사용자를 표현하도록 학습하는 밀집 벡터입니다. 대부분의 언어 및 비전 시스템에서 단어 수와 같은 수작업 특징을 대체합니다.










