yuns

4. 머신러닝 모델 개발 과정 - Feature Selection 본문

머신러닝

4. 머신러닝 모델 개발 과정 - Feature Selection

yuuuun 2025. 3. 16. 00:24
반응형

머신러닝 모델의 성능을 높이기 위해서는 좋은 데이터를 사용하는 것이 중요합니다. 하지만 데이터가 많다고 해서 무조건 성능이 좋아지는 것은 아닙니다. 오히려 불필요한 특징(feature)이 많아지면 모델의 복잡성이 증가하고, 성능이 저하될 수 있습니다. 이를 해결하기 위해 사용하는 기법이 바로 Feature Selection(특징 선택)입니다.


1. Feature Selection이란?

Feature Selection은 모델의 예측 성능을 높이고 학습 속도를 개선하기 위해 불필요하거나 관련성이 낮은 특징을 제거하는 과정입니다.

✅ Feature Selection의 필요성

  • 과적합(Overfitting) 방지: 불필요한 특징이 많으면 모델이 노이즈를 학습할 가능성이 증가
  • 학습 속도 개선: 적은 특징을 사용하면 연산량이 감소하여 학습 및 추론 속도가 향상됨
  • 해석 가능성 증가: 중요한 특징만 남겨 모델의 예측 결과를 더 쉽게 해석할 수 있음

2. Feature Selection 방법

Feature Selection 기법은 크게 Filter, Wrapper, Embedded 방식으로 나눌 수 있습니다.

1️⃣ Filter Method (사전 평가 방식)

Filter 방법은 각 특징과 목표 변수(target) 간의 관계를 통계적으로 분석하여 관련성이 낮은 특징을 제거하는 방법입니다.

✅ 주요 기법

  • 분산 기반 선택(Variance Threshold): 분산이 낮은 특징 제거
  • 상관계수(Correlation Coefficient): 특정 특징과 타겟 간의 상관관계를 분석하여 선택
  • 카이제곱 검정(Chi-square Test): 범주형 데이터에서 중요한 특징을 선택하는 통계적 방법

🛠️ Python 예제 (상관계수 기반 Feature Selection)

*참고: load_boston은 sklearn 1.2 버전 이후로 삭제됨

import pandas as pd
from sklearn.datasets import load_boston

# 데이터 로드
boston = load_boston()
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df["TARGET"] = boston.target

# 상관계수 확인
corr_matrix = df.corr()
important_features = corr_matrix["TARGET"].abs().sort_values(ascending=False)
print(important_features)

결과

TARGET     1.000000
LSTAT      0.737663
RM         0.695360
PTRATIO    0.507787
INDUS      0.483725
TAX        0.468536
NOX        0.427321
CRIM       0.388305
AGE        0.376955
ZN         0.360445
B          0.333461
DIS        0.249929
Name: TARGET, dtype: float64

2️⃣ Wrapper Method (모델 기반 평가 방식)

Wrapper 방법은 모델을 여러 번 학습시키면서 성능이 가장 좋은 특징 조합을 찾는 방식입니다.

✅ 주요 기법

  • 재귀적 특징 제거(RFE, Recursive Feature Elimination): 모델을 반복적으로 학습하면서 중요하지 않은 특징을 하나씩 제거
  • 전진 선택(Forward Selection): 특징을 하나씩 추가하면서 성능을 평가하여 최적의 조합 찾기
  • 후진 제거(Backward Elimination): 모든 특징을 사용한 후 하나씩 제거하면서 성능을 평가

🛠️ Python 예제 (RFE 활용)

from sklearn.feature_selection import RFE
from sklearn.linear_model import LinearRegression

# 모델 정의
model = LinearRegression()

# RFE 적용
rfe = RFE(model, n_features_to_select=5)
rfe.fit(df.drop("TARGET", axis=1), df["TARGET"])

# 선택된 특징 출력
selected_features = df.drop("TARGET", axis=1).columns[rfe.support_]
print(selected_features)

결과

Index(['CHAS', 'NOX', 'RM', 'DIS', 'PTRATIO'], dtype='object')

3️⃣ Embedded Method (모델 내장 방식)

Embedded 방법은 모델 학습 과정에서 자체적으로 특징의 중요도를 평가하여 선택하는 방식입니다.

✅ 주요 기법

  • LASSO(Least Absolute Shrinkage and Selection Operator): L1 정규화를 적용하여 중요하지 않은 특징의 가중치를 0으로 만듦
  • 트리 기반 모델(Decision Tree, Random Forest): 특징의 중요도를 자동으로 계산하여 선택

🛠️ Python 예제 (LASSO 활용)

from sklearn.linear_model import Lasso

# LASSO 회귀 모델 학습
lasso = Lasso(alpha=0.1)
lasso.fit(df.drop("TARGET", axis=1), df["TARGET"])

# 선택된 특징 출력
selected_features = df.drop("TARGET", axis=1).columns[lasso.coef_ != 0]
print(selected_features)
Index(['CRIM', 'ZN', 'INDUS', 'CHAS', 'RM', 'AGE', 'DIS', 'RAD', 'TAX',
       'PTRATIO', 'B', 'LSTAT'],
      dtype='object')

3. Feature Selection 실전 적용 전략

✅ 언제 Feature Selection을 해야 할까?

  • 데이터에 불필요한 특징이 많을 때 (예: 중복된 컬럼, 의미 없는 데이터)
  • 모델이 과적합되는 경향을 보일 때
  • 데이터가 많아 학습 속도가 너무 느릴 때

✅ Feature Selection을 적용할 때의 팁

  • 도메인 지식 활용: 데이터를 이해하고, 직관적으로 필요 없는 특징을 먼저 제거
  • 다양한 방법 조합: Filter, Wrapper, Embedded 방법을 함께 활용하여 최적의 특징 선택
  • 특징 중요도 시각화: 트리 기반 모델의 feature_importances_ 속성을 활용해 중요도 분석
from sklearn.ensemble import RandomForestRegressor

# 랜덤 포레스트 모델 학습
model = RandomForestRegressor()
model.fit(df.drop("TARGET", axis=1), df["TARGET"])

# 특징 중요도 출력
importances = model.feature_importances_
feature_names = df.drop("TARGET", axis=1).columns
sorted_features = sorted(zip(importances, feature_names), reverse=True)
print(sorted_features)

결과

[(0.4360323497881714, 'RM'), (0.3688009768058492, 'LSTAT'), (0.06696235641954595, 'DIS'), (0.03924804687182036, 'CRIM'), (0.023902636806769115, 'NOX'), (0.016378865133991453, 'PTRATIO'), (0.014165311611726416, 'TAX'), (0.012364430809732667, 'AGE'), (0.011247703002639775, 'B'), (0.00534401857550716, 'INDUS'), (0.0039932523471860985, 'RAD'), (0.0008990177403006338, 'ZN'), (0.0006610340867597667, 'CHAS')]

4. 마무리

Feature Selection은 머신러닝 모델의 성능을 최적화하고 과적합을 방지하는 중요한 과정입니다.

  • Filter 방법: 상관계수, 카이제곱 검정 등으로 특징을 평가
  • Wrapper 방법: RFE, 전진 선택 등을 활용해 최적 조합 탐색
  • Embedded 방법: LASSO, 랜덤 포레스트 등을 활용해 자동 선택

특징 선택을 적절히 수행하면 모델의 성능을 높이고 해석 가능성을 증가시킬 수 있습니다.
앞으로 머신러닝 모델을 개발할 때 Feature Selection을 꼭 활용해 보세요! 🚀

반응형
Comments