머신러닝 기초 - 피처 선택 (Feature Selection): 래퍼 메소드 (Wrapper Methods)
🔎 개요 및 소개
머신러닝 프로젝트에서 피처 선택은 모델의 성능과 학습 속도를 높이는 핵심 단계다. 데이터셋에서 모든 피처가 동일하게 유용하지 않기 때문에, 중요한 피처만 선별하는 것이 필요하다. 피처 선택 방법은 필터 메소드(Filter Methods), 임베디드 방법(Embedded Methods), 그리고 래퍼 메소드(Wrapper Methods)로 나뉜다. 이번 글은 래퍼 메소드에 초점을 맞춰, 그 원리와 활용 사례, 그리고 파이썬 코드 예제를 통해 개념을 설명한다.
🔥 래퍼 메소드 개념 및 특징
래퍼 메소드(Wrapper Methods)는 후보 피처 집합을 실제 모델에 적용해보고, 모델의 성능 지표(예: 정확도, F1 스코어 등)를 기준으로 최적의 피처 조합을 선택하는 기법이다. 이 방법은 모델에 의존적이라는 특징이 있다. 즉, 특정 모델에서 중요한 피처가 다른 모델에서는 그렇지 않을 수 있다.
장점은 피처 간 상호작용(interaction)이나 모델 특성에 맞춘 최적의 조합을 찾을 수 있다는 것이고, 단점은 모든 조합을 평가해야 하므로 계산 비용이 많이 들고, 피처 수가 많으면 실행 시간이 기하급수적으로 늘어날 수 있다는 점이다.
💻 파이썬 코드 예시: RFE (Recursive Feature Elimination)
래퍼 메소드의 대표적인 예시로, Recursive Feature Elimination (RFE)을 활용한 방법을 살펴보자. RFE는 전체 피처 집합에서 덜 중요한 피처를 하나씩 제거해 나가며 최적의 피처 집합을 찾는 알고리즘이다. 아래 코드는 사이킷런(scikit-learn)의 RFE를 사용해 로지스틱 회귀(Logistic Regression) 모델에 적용하는 예제다.
# 필요한 라이브러리 불러오기
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.feature_selection import RFE
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 아이리스 데이터셋 로드
iris = load_iris()
X = iris.data # 피처 데이터
y = iris.target # 타깃 변수
# 데이터 분할 (학습용 70%, 테스트용 30%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 로지스틱 회귀 모델 생성
model = LogisticRegression(max_iter=200)
# RFE를 사용해 상위 2개 피처 선택
selector = RFE(model, n_features_to_select=2, step=1)
selector = selector.fit(X_train, y_train)
# 선택된 피처 인덱스 확인
selected_idx = selector.get_support(indices=True)
print("선택된 피처 인덱스:", selected_idx)
# 선택된 피처만 사용해 학습 데이터와 테스트 데이터 구성
X_train_selected = selector.transform(X_train)
X_test_selected = selector.transform(X_test)
# 선택된 피처로 모델 재학습 및 예측
model.fit(X_train_selected, y_train)
y_pred = model.predict(X_test_selected)
# 모델 성능 평가
accuracy = accuracy_score(y_test, y_pred)
print("선택된 피처 기반 모델 정확도:", accuracy)
이 코드는 아이리스 데이터셋을 활용하여, RFE를 통해 상위 2개의 피처를 선택한 후 선택된 피처로 로지스틱 회귀 모델을 학습하고, 테스트 데이터에 대한 예측 성능을 평가하는 과정을 보여준다. RFE는 반복적으로 피처의 중요도를 평가해 덜 중요한 피처를 제거하는 방식으로 작동한다.
📈 래퍼 메소드의 작동 방식 및 활용 예시
래퍼 메소드의 핵심은 후보 피처 집합에 대해 실제 모델을 돌려보고, 그 성능을 평가하는 것이다. 두 가지 주요 방식은 다음과 같다.
- 순방향 선택 (Forward Selection): 처음에는 아무 피처도 없는 상태에서 시작해, 모델 성능 향상에 기여하는 피처를 하나씩 추가해 나간다.
- 후방 제거 (Backward Elimination): 전체 피처 집합에서 시작해, 가장 기여도가 낮은 피처부터 하나씩 제거해 나가는 방식이다.
이러한 접근법은 모델에 최적화된 피처 집합을 찾기 위한 효과적인 방법으로, 데이터의 특성과 모델의 구조에 따라 적절히 선택해 사용할 수 있다.
초보자에게 도움이 될 수 있는 또 다른 예시로, 간단한 데이터셋에서 래퍼 메소드를 적용해보는 실습을 추천한다. 실제 데이터셋이 아닌 임의의 데이터를 생성한 후, 여러 피처 조합의 성능을 비교해 보는 것도 개념을 체감하는 데 유용하다.
💡 중요 용어 정리
블로그 내에서 다룬 주요 용어들을 정리하면 다음과 같다.
- 피처 (Feature): 데이터셋의 변수 또는 속성을 의미하며, 모델 학습에 사용된다.
- 타깃 변수 (Target Variable): 예측하고자 하는 결과 값 또는 레이블로, 모델의 출력과 직접 연결된다.
- 래퍼 메소드 (Wrapper Methods): 실제 모델을 사용해 피처의 조합을 평가하고 최적의 피처 집합을 선택하는 피처 선택 기법.
- RFE (Recursive Feature Elimination): 후보 피처 집합에서 덜 중요한 피처를 반복적으로 제거해 최적의 조합을 찾는 알고리즘.
- 로지스틱 회귀 (Logistic Regression): 확률적 예측을 기반으로 분류 문제를 해결하는 통계적 모델.
🔍 래퍼 메소드의 장단점과 실무 적용 방안
래퍼 메소드는 모델의 성능을 직접 반영하는 피처 선택 방식이기 때문에, 피처 간의 상호작용이나 모델 특성에 최적화된 피처 조합을 찾아낼 수 있다는 강점이 있다. 다만, 모든 가능한 피처 조합을 평가하는 과정에서 계산 비용이 많이 들고, 데이터의 피처 수가 많을 경우 실행 시간이 길어질 수 있다.
실무에서는 보통 데이터 전처리 단계에서 필터 메소드로 초기 피처 집합을 좁힌 후, 래퍼 메소드를 적용해 최종 피처 조합을 선택하는 하이브리드 접근 방식을 사용한다. 이를 통해 연산 비용을 절감하면서도 모델 성능을 극대화할 수 있다.
🧪 초보자를 위한 실습 가이드 및 마무리
초보자가 래퍼 메소드 개념을 쉽게 이해할 수 있도록, 위의 파이썬 예제와 함께 실제 데이터셋에 적용해보는 실습을 권장한다. RFE와 같은 래퍼 메소드를 사용해보고, 선택된 피처가 모델 성능에 어떤 영향을 미치는지 직접 확인해보면 이론과 실습이 결합되어 이해도가 높아진다.
또한, 다양한 피처 선택 기법들을 비교 분석해보고, 데이터셋에 따라 어떤 방법이 더 적합한지 고민해보는 과정은 머신러닝 전문가로 성장하는 데 큰 도움이 될 것이다.
래퍼 메소드는 단순히 알고리즘을 적용하는 것을 넘어, 데이터의 본질과 피처의 중요성을 이해하는 데 기여한다. 다양한 사례와 실습을 통해, 데이터 전처리의 중요성을 깨닫고 최적의 모델을 구축하는 경험을 쌓아보길 바란다.
#피처선택 #래퍼메소드 #머신러닝기초 #데이터분석