yuns
4. 머신러닝 모델 개발 과정 - Feature Selection 본문
머신러닝 모델의 성능을 높이기 위해서는 좋은 데이터를 사용하는 것이 중요합니다. 하지만 데이터가 많다고 해서 무조건 성능이 좋아지는 것은 아닙니다. 오히려 불필요한 특징(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을 꼭 활용해 보세요! 🚀
'머신러닝' 카테고리의 다른 글
4. 머신러닝 모델 개발 과정 - 성능평가 및 하이퍼파라미터 튜닝 (0) | 2025.03.17 |
---|---|
4. 머신러닝 모델 개발 과정 - 모델 선택 및 학습 (0) | 2025.03.16 |
4. 머신러닝 모델 개발 과정 - 데이터 수집 및 전처리 (0) | 2025.03.15 |
3. 머신러닝의 주요 알고리즘 - k-최근접 이웃(KNN) (0) | 2025.03.15 |
3. 머신러닝의 주요 알고리즘(4) - Support Vector Machine (0) | 2025.03.14 |