move84

머신러닝 기초 - 피처 선택 (Feature Selection): 필터 메소드 (Filter Methods) 본문

머신러닝

머신러닝 기초 - 피처 선택 (Feature Selection): 필터 메소드 (Filter Methods)

move84 2025. 2. 21. 22:35
반응형

🔎 머신러닝 프로젝트에서는 데이터를 분석하기 전에 변수(피처, Feature) 중에서 유용한 정보만 골라내는 작업이 필수다. 피처 선택은 모델의 성능 향상과 학습 속도 개선, 그리고 과적합(overfitting) 방지를 위한 중요한 전처리 과정이다. 피처 선택 기법 중 필터 메소드(Filter Methods)는 통계적 기법이나 점수 기반 방법을 이용해 피처의 유용성을 평가한 후, 상위 몇 개의 피처를 선택하는 방식이다. 이 방식은 모델에 독립적으로 작용하며, 학습 알고리즘에 의존하지 않는다.


🔥
필터 메소드(Filter Methods)의 기본 원리는 각 피처와 타깃 변수(target variable) 사이의 상관관계나 통계적 유의성을 평가해, 성능에 영향을 줄 가능성이 큰 피처들을 선정하는 것이다. 대표적인 방법으로는 상관계수(Correlation Coefficient), 카이제곱(Chi-Square) 검정, 분산(Variance) 기준 등이 있다. 이 방법은 빠르고 계산 부담이 적어 대규모 데이터셋에도 효율적으로 적용할 수 있다.


📊
초보자도 이해할 수 있도록 간단한 예시를 들어보자. 가상의 데이터셋에서 여러 피처 중 타깃 변수와 강한 상관관계를 가진 피처만을 선택한다고 가정하자. 아래 파이썬 코드는 사이킷런(scikit-learn) 라이브러리의 SelectKBest와 chi2 검정을 활용해, 상위 k개의 피처를 선택하는 예시다.

# 라이브러리 불러오기
import numpy as np
import pandas as pd
from sklearn.feature_selection import SelectKBest, chi2
from sklearn.datasets import load_iris

# 데이터셋 로드: 아이리스(Iris) 데이터셋 사용
iris = load_iris()
X = iris.data  # 피처 데이터
y = iris.target  # 타깃 변수

# 피처 스케일 조정: chi2는 양수 값을 요구하므로, 모든 값이 0 이상이어야 함
X = X - np.min(X)

# SelectKBest 사용: 상위 2개의 피처 선택
selector = SelectKBest(score_func=chi2, k=2)
X_new = selector.fit_transform(X, y)

print("선택된 피처의 인덱스:", selector.get_support(indices=True))
print("선택된 피처 데이터:\n", X_new)

이 코드는 아이리스 데이터셋에서 chi2 검정을 통해 상위 2개의 피처를 선택하는 과정을 보여준다. chi2 검정은 각 피처의 카이제곱 통계량을 계산해, 타깃 변수와의 관련성을 평가한다. 데이터 전처리 과정에서 피처 값이 모두 양수인지 확인하는 작업도 함께 진행된다.


💡
필터 메소드(Filter Methods)는 피처 선택의 초기 단계에서 주로 사용된다. 이 방법은 모델의 복잡도와 상관없이 독립적으로 피처의 유용성을 평가하기 때문에, 학습 전에 불필요한 피처를 제거하는 데 효과적이다. 그러나 모델에 반영되는 상호작용(interaction) 효과나 피처 간의 상관관계를 고려하지 못하는 단점이 있다. 모델 기반(feature importance) 선택 기법과 병행하여 사용하는 경우가 많다.


📚
몇 가지 중요한 용어를 정리하자.

  • 피처 (Feature): 모델 학습에 사용되는 변수나 속성을 의미한다. 데이터의 각 열에 해당한다.
  • 타깃 변수 (Target Variable): 예측하고자 하는 결과 값이나 레이블을 의미한다.
  • 필터 메소드 (Filter Methods): 통계적 기법을 사용해 피처의 유용성을 평가한 후 선택하는 피처 선택 방법.
  • chi2 검정 (Chi-Square Test): 범주형 데이터에서 기대 빈도와 관측 빈도의 차이를 이용해 두 변수 간의 독립성을 검정하는 통계적 방법.

📈
실제 머신러닝 프로젝트에서는 필터 메소드 외에도 래퍼 메소드(Wrapper Methods)나 임베디드 방법(Embedded Methods) 등이 사용된다. 래퍼 메소드는 모델을 반복적으로 학습시켜 피처 집합의 최적 조합을 찾고, 임베디드 방법은 모델 학습 과정에서 피처 선택을 동시에 수행한다. 필터 메소드는 간단하고 빠르게 적용할 수 있는 장점이 있어, 데이터 전처리 단계에서 먼저 활용한 후, 다른 방법들과 결합하는 전략이 많이 사용된다.


🧪
초보자에게 도움이 될 수 있는 또 다른 예시로, 임의의 데이터를 생성하여 상관계수를 기준으로 피처 선택을 수행하는 방법을 소개한다. 아래 코드는 각 피처와 타깃 변수 사이의 상관관계를 계산해, 절대값이 큰 피처를 선택하는 예시다.

# 임의 데이터 생성
np.random.seed(0)
data = pd.DataFrame({
    'Feature1': np.random.randn(100),
    'Feature2': np.random.randn(100),
    'Feature3': np.random.randn(100),
    'Target': np.random.randn(100)
})

# 피처와 타깃 변수 간의 상관계수 계산
corr_matrix = data.corr()
print("상관계수 행렬:\n", corr_matrix)

# Target과의 상관관계 절대값이 큰 순으로 정렬하여 상위 2개 피처 선택
target_corr = corr_matrix['Target'].drop('Target').abs().sort_values(ascending=False)
selected_features = target_corr.index[:2]
print("선택된 피처:", selected_features.tolist())

이 코드는 상관계수 행렬을 계산한 후, 타깃 변수(Target)와의 상관관계 절대값이 큰 순서대로 피처를 선택한다. 상관계수는 -1과 1 사이의 값을 가지며, 값이 클수록 강한 선형 관계를 나타낸다. 이 예시는 데이터의 특성을 이해하고, 중요한 피처를 빠르게 찾는 방법으로 활용할 수 있다.


🔍
필터 메소드(Filter Methods)는 머신러닝에서 피처 선택을 위한 기본적이면서도 강력한 도구다. 이 방법을 통해 데이터의 잡음을 줄이고, 모델의 학습 효율을 높이며, 결과 해석을 용이하게 할 수 있다. 다양한 피처 선택 기법을 실험해보고, 각 기법의 장단점을 이해하는 것이 데이터 과학 프로젝트에서 중요한 역할을 한다.

#피처선택 #필터메소드 #머신러닝기초 #데이터분석

반응형