피처 엔지니어링
발행: (2025년 12월 17일 오후 03:57 GMT+9)
4 min read
원문: Dev.to
Source: Dev.to
Feature Engineering이란?
- **Feature(특성)**는 데이터의 한 열을 의미합니다(예: 나이, 급여, 구매 횟수).
- Feature engineering은 모델이 더 잘 학습하도록 올바른 특성을 만들고, 수정하고, 선택하는 작업을 말합니다.
- 요리를 하기 전에 재료를 깨끗이 씻고, 다듬고, 준비하는 과정에 비유할 수 있습니다.
왜 필요할까요?
- 원시 데이터는 종종 지저분하고, 불완전하거나, 올바른 형식이 아닙니다.
- 좋은 특성은 알고리즘이 패턴을 더 명확히 볼 수 있게 도와줍니다.
- 좋은 특성 → 더 나은 예측, 빠른 학습, 높은 정확도.
Feature Engineering의 일반적인 기법
| 기법 | 의미 | 간단한 예시 |
|---|---|---|
| Missing Value 처리 | 빈 값을 채우거나 불완전한 데이터를 제거 | 결측된 나이를 평균 나이로 대체 |
| 범주형 데이터 인코딩 | 텍스트 라벨을 숫자로 변환 | “Red, Blue, Green” → 0, 1, 2 |
| 스케일링 / 정규화 | 숫자를 비슷한 범위로 맞춤 | 급여(₹10,000–₹1,00,000)를 0–1 범위로 스케일 |
| Feature Creation | 기존 데이터를 결합하거나 변형해 새로운 특성 생성 | “Date of Birth” → “Age” 생성 |
| Feature Selection | 가장 유용한 특성만 남김 | “User ID”와 같은 무관한 열 삭제 |
| Binning | 연속값을 구간으로 묶어 범주화 | Age 0–12 = Child, 13–19 = Teen, 20+ = Adult |
간단한 예시
다음과 같은 데이터셋이 있다고 가정해 보세요:
| Name | Date of Birth | Salary | City |
|---|---|---|---|
| Alice | 1995-06-12 | 50,000 | Delhi |
| Bob | 1988-03-05 | 80,000 | Mumbai |
Feature engineering 후:
- Age는 Date of Birth에서 계산됩니다.
- City는 숫자로 인코딩됩니다(Delhi = 0, Mumbai = 1).
- Salary는 0~1 사이로 스케일링됩니다.
이제 데이터가 더 깔끔해졌으며 모델이 이해하기 쉬워졌습니다.
핵심 정리
- Feature engineering = 데이터를 전처리하고 개선하는 과정.
- 모델을 더 똑똑하게 만들고 예측 정확도를 높입니다.
- 주요 기법: 결측값 처리, 인코딩, 스케일링, 새로운 특성 생성, 최적 특성 선택 등.
Python에서 Feature Engineering
pandas와 scikit-learn이 설치되어 있는지 확인하세요:
pip install pandas scikit-learn
import pandas as pd
from sklearn.preprocessing import LabelEncoder, MinMaxScaler
# Example dataset
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Date_of_Birth': ['1995-06-12', '1988-03-05', '2000-12-20'],
'Salary': [50000, 80000, None], # Missing value
'City': ['Delhi', 'Mumbai', 'Delhi']
}
df = pd.DataFrame(data)
print("Original Data:\n", df)
# 🔹 Handling Missing Values
df['Salary'].fillna(df['Salary'].mean(), inplace=True)
# 🔹 Feature Creation (Age from Date of Birth)
df['Date_of_Birth'] = pd.to_datetime(df['Date_of_Birth'])
df['Age'] = pd.Timestamp.now().year - df['Date_of_Birth'].dt.year
# 🔹 Encoding Categorical Data (City)
label_encoder = LabelEncoder()
df['City_encoded'] = label_encoder.fit_transform(df['City'])
# 🔹 Scaling Numerical Data (Salary)
scaler = MinMaxScaler()
df['Salary_scaled'] = scaler.fit_transform(df[['Salary']])
print("\nAfter Feature Engineering:\n", df)
코드 설명
- 평균 급여로 결측값을 채웁니다.
Date_of_Birth에서 Age라는 새로운 특성을 생성합니다.- City라는 범주형 데이터를 숫자로 인코딩합니다.
- Salary를 0과 1 사이로 스케일링합니다.
마무리
Feature engineering을 다이아몬드를 연마하는 과정에 비유해 보세요. 원석(데이터)은 이미 가치가 있지만, 형태를 잡고 다듬어(특성을 만들고 개선)야 비로소 그 진가를 발휘합니다.