[python] 피처 선택(Feature Selection) 방법
머신 러닝 모델을 만들 때, 데이터셋에 있는 모든 피처를 사용하는 것이 항상 최선의 방법은 아닙니다. 오히려, 중요한 피처들을 선택하여 모델을 구축하는 것이 더 나은 결과를 얻을 수 있습니다. 이를 위해 사용되는 방법이 바로 “피처 선택(Feature Selection)”입니다.
1. 피처 선택의 필요성
데이터셋에는 수많은 피처가 있을 수 있습니다. 그러나 피처가 많다고 해서 항상 좋은 결과를 얻을 수 있는 것은 아닙니다. 피처가 많을 경우 다음과 같은 문제가 발생할 수 있습니다.
- 차원의 저주(Curse of Dimensionality): 피처의 수가 증가할수록 데이터 공간의 차원도 커집니다. 이로 인해 데이터 샘플 수가 적은 경우 모델이 과적합될 수 있습니다.
- 고차원의 데이터 시각화의 어려움: 피처가 많으면 데이터를 시각화하기 어렵습니다. 시각화는 데이터 이해와 불필요한 피처 발견에 매우 중요합니다.
따라서, 피처 선택은 올바른 모델을 만들기 위해 필수적인 단계입니다.
2. 피처 선택 방법
다양한 피처 선택 방법이 있지만, 여기에서는 주요 방법 몇 가지를 살펴보겠습니다.
2.1 상관관계 기반 선택
상관관계 기반 선택은 피처 간의 상관관계를 측정하여 중요한 피처를 선택합니다. 이 방법은 예측 변수와 목표 변수 간의 상관 관계가 높은 피처를 선택하는데 사용됩니다.
import pandas as pd
import numpy as np
# 데이터셋 불러오기
df = pd.read_csv('dataset.csv')
# 상관계수 계산
corr_matrix = df.corr()
# 목표 변수와의 상관계수 확인
corr_with_target = abs(corr_matrix['target_variable'])
# 상관계수를 기준으로 상위 n개의 피처 선택
n = 10
selected_features = corr_with_target.sort_values(ascending=False)[:n].index.tolist()
2.2 재귀적 피처 제거
재귀적 피처 제거는 모든 피처를 사용하여 모델을 학습한 후, 중요하지 않은 피처를 하나씩 제거해가며 모델의 성능을 평가합니다. 이 방법은 가장 덜 중요한 피처를 하나씩 제거하면서 모델의 성능을 모니터링하는 방식으로 작동합니다.
from sklearn.feature_selection import RFE
from sklearn.linear_model import LinearRegression
# 데이터셋 불러오기
df = pd.read_csv('dataset.csv')
# 특성과 목표 변수 분리
X = df.drop('target_variable', axis=1)
y = df['target_variable']
# 선형 회귀 모델 생성
model = LinearRegression()
# 피처 선택
n_features = 10
rfe = RFE(estimator=model, n_features_to_select=n_features)
X_selected = rfe.fit_transform(X, y)
3. 결론
피처 선택은 머신 러닝 모델의 성능을 향상시키고, 인사이트를 얻기 위해 필요한 작업입니다. 상관관계 기반 선택과 재귀적 피처 제거는 널리 사용되는 피처 선택 방법 중 일부에 불과하며, 데이터셋의 특성과 목표에 따라 다른 방법을 적용해야 합니다. 피처 선택의 결과를 평가하고 다양한 방법을 실험해보는 것이 좋습니다.