피처 엔지니어링

발행: (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

간단한 예시

다음과 같은 데이터셋이 있다고 가정해 보세요:

NameDate of BirthSalaryCity
Alice1995-06-1250,000Delhi
Bob1988-03-0580,000Mumbai

Feature engineering 후:

  • Age는 Date of Birth에서 계산됩니다.
  • City는 숫자로 인코딩됩니다(Delhi = 0, Mumbai = 1).
  • Salary는 0~1 사이로 스케일링됩니다.

이제 데이터가 더 깔끔해졌으며 모델이 이해하기 쉬워졌습니다.

핵심 정리

  • Feature engineering = 데이터를 전처리하고 개선하는 과정.
  • 모델을 더 똑똑하게 만들고 예측 정확도를 높입니다.
  • 주요 기법: 결측값 처리, 인코딩, 스케일링, 새로운 특성 생성, 최적 특성 선택 등.

Python에서 Feature Engineering

pandasscikit-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을 다이아몬드를 연마하는 과정에 비유해 보세요. 원석(데이터)은 이미 가치가 있지만, 형태를 잡고 다듬어(특성을 만들고 개선)야 비로소 그 진가를 발휘합니다.

Back to Blog

관련 글

더 보기 »

머신러닝 8년 후 배운 교훈

딥 워크, 과도한 동일시, 스포츠, 그리고 블로깅 ‘Lessons Learned After 8 Years of Machine Learning’ 포스트가 처음으로 Towards Data Science에 게재되었습니다....