머신러닝 기초 - 피처 선택 (Feature Selection): 임베디드 메소드 (Embedded Methods)
🔎 개요 및 소개
머신러닝 모델 성능을 높이기 위해서는 데이터 전처리 과정에서 중요한 피처(Feature)를 선택하는 것이 필수다. 피처 선택 방법은 크게 필터 메소드(Filter Methods), 래퍼 메소드(Wrapper Methods), 임베디드 메소드(Embedded Methods)로 구분된다. 이번 글에서는 임베디드 메소드에 대해 다룬다. 임베디드 메소드는 모델 학습 과정에서 자연스럽게 피처 선택이 이뤄지는 방식으로, 학습 알고리즘 자체에 피처 중요도(feature importance)를 산출하는 메커니즘이 포함되어 있다. 대표적으로 트리 기반 모델(Random Forest, Gradient Boosting 등)과 L1 정규화를 사용하는 선형 모델(Lasso Regression, Logistic Regression with L1 penalty) 등이 있다.
🌟 임베디드 메소드의 개념 및 특징
임베디드 메소드(Embedded Methods)는 모델 학습과 피처 선택을 동시에 수행한다. 즉, 모델 학습 과정에서 각 피처의 중요도를 평가하고, 중요도가 낮은 피처를 자연스럽게 배제한다. 이 방법은 두 가지 장점을 가진다. 첫째, 모델 학습과 피처 선택이 결합되어 연산 효율성이 높다. 둘째, 피처 간의 상호작용이나 비선형 관계를 모델이 고려할 수 있다.
예를 들어, 랜덤 포레스트(Random Forest)와 같은 트리 기반 모델은 각 노드에서 피처의 분할 기준에 따라 피처 중요도를 계산한다. 이 값을 통해 모델은 예측에 가장 기여하는 피처를 자동으로 선택할 수 있다. 또한, L1 정규화를 사용하는 로지스틱 회귀(Logistic Regression with L1 penalty)나 Lasso 회귀(Lasso Regression)는 계수를 0으로 만드는 특성을 이용해 피처를 제거하는 효과를 가진다.
💻 파이썬 코드 예시: Random Forest를 활용한 임베디드 피처 선택
임베디드 메소드의 대표적인 사례로, 랜덤 포레스트(Random Forest)를 활용한 피처 선택 예제를 살펴보자. 아래 코드는 사이킷런(scikit-learn)의 RandomForestClassifier를 사용하여 아이리스(Iris) 데이터셋에서 피처 중요도를 산출하고, 이를 시각화하는 예시다.
# 필요한 라이브러리 불러오기
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 아이리스 데이터셋 로드
iris = load_iris()
X = iris.data # 피처 데이터
y = iris.target # 타깃 변수
# 학습 데이터와 테스트 데이터로 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# RandomForestClassifier 모델 학습
rf_model = RandomForestClassifier(n_estimators=100, random_state=42)
rf_model.fit(X_train, y_train)
# 테스트 데이터 예측 및 정확도 평가
y_pred = rf_model.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("모델 정확도:", accuracy)
# 피처 중요도 확인
importances = rf_model.feature_importances_
feature_names = iris.feature_names
print("피처 중요도:", dict(zip(feature_names, importances)))
# 피처 중요도 시각화
indices = np.argsort(importances)[::-1]
plt.figure(figsize=(8, 6))
plt.title("피처 중요도 (Feature Importance)")
plt.bar(range(X.shape[1]), importances[indices], align="center")
plt.xticks(range(X.shape[1]), [feature_names[i] for i in indices], rotation=45)
plt.xlabel("피처 (Feature)")
plt.ylabel("중요도 (Importance)")
plt.tight_layout()
plt.show()
이 코드는 아이리스 데이터셋을 이용하여 랜덤 포레스트 모델을 학습하고, 각 피처의 중요도를 산출한 후 시각화한다. 임베디드 메소드는 모델 학습 중 자연스럽게 피처 선택을 수행하기 때문에, 별도의 전처리 없이도 데이터의 유용한 피처를 식별할 수 있다.
📊 임베디드 메소드의 작동 원리와 장단점
임베디드 메소드는 학습 과정에서 피처 선택을 수행하기 때문에, 피처 간의 상호작용을 모델이 반영할 수 있는 장점이 있다. 또한, 모델 학습과 피처 선택이 결합되어 있어 전체 파이프라인이 간소화되고, 계산 비용을 줄일 수 있다.
하지만 단점도 존재한다. 임베디드 메소드는 특정 모델에 의존적이므로, 선택된 피처가 다른 모델에도 동일한 효과를 보장하지 않을 수 있다. 예를 들어, 랜덤 포레스트에서 중요한 피처가 로지스틱 회귀 모델에서는 덜 중요할 수 있다. 따라서 임베디드 메소드를 사용할 때는 모델 특성과 데이터 특성을 고려해 신중하게 선택해야 한다.
🔍 초보자를 위한 실습 및 이해 포인트
임베디드 메소드의 개념을 잘 이해하려면, 간단한 실습이 도움이 된다. 위의 예시 코드를 실행하면서 다음 사항을 확인해보자.
- 모델 학습 후 출력되는 피처 중요도 값과 피처 이름을 비교해보고, 어떤 피처가 모델에 큰 영향을 주는지 파악한다.
- 피처 중요도가 낮은 피처를 제거한 후 모델의 성능이 어떻게 변화하는지 실험해본다. 이를 통해 불필요한 피처를 제거하면 모델이 간결해지고 과적합(overfitting)을 방지할 수 있음을 확인할 수 있다.
- 다른 임베디드 방법, 예를 들어 L1 정규화를 사용하는 선형 모델과의 결과를 비교해보며, 다양한 방법의 특성과 장단점을 체험한다.
📚 중요 용어 정리
블로그에서 다룬 주요 용어들을 정리하면 다음과 같다.
- 피처 (Feature): 머신러닝 모델 학습에 사용되는 변수나 속성을 의미하며, 데이터셋의 각 열로 구성된다.
- 타깃 변수 (Target Variable): 예측하려는 결과값 또는 레이블을 의미하며, 모델의 출력과 직접 연결된다.
- 임베디드 메소드 (Embedded Methods): 모델 학습과 피처 선택을 동시에 수행하는 기법으로, 모델 내에 피처 중요도 산출 기능이 포함되어 있다.
- 피처 중요도 (Feature Importance): 모델이 예측 과정에서 각 피처에 부여하는 상대적 중요도를 나타내는 값.
- 랜덤 포레스트 (Random Forest): 다수의 결정 트리(Decision Tree)를 조합해 예측 성능을 높이는 앙상블 기법으로, 피처 중요도를 산출하는 데 자주 사용된다.
🧪 실제 프로젝트에서 임베디드 메소드 활용하기
실무에서는 임베디드 메소드를 단독으로 사용하기보다는, 다른 피처 선택 기법과 병행해 사용하는 경우가 많다. 초기 데이터 전처리 단계에서는 필터 메소드(Filter Methods)로 대략적인 피처 집합을 좁힌 후, 임베디드 메소드를 통해 모델 학습 과정에서 추가적인 최적화를 진행할 수 있다.
또한, 다양한 모델을 실험하면서 각 모델이 산출하는 피처 중요도를 비교 분석해보면, 데이터의 본질적인 특성과 피처 간 상호작용을 더 깊이 이해할 수 있다. 초보자라면, 간단한 데이터셋을 가지고 여러 임베디드 메소드 기법을 적용해보고, 모델 성능 변화를 관찰하는 것이 학습에 큰 도움이 될 것이다.
🔍 마무리 및 요약
임베디드 메소드는 머신러닝에서 피처 선택을 동시에 수행하는 강력한 도구다. 모델 학습과 피처 선택이 결합되어 있어 전체 파이프라인의 효율성을 높이며, 불필요한 피처를 제거해 모델의 해석력을 향상시킨다. 단, 모델에 특화된 방식이기 때문에 선택된 피처가 다른 모델에서 동일한 효과를 보장하지는 않으므로, 다양한 기법을 비교해보는 것이 중요하다.
초보자는 위의 파이썬 예제를 통해 임베디드 메소드의 작동 원리와 피처 중요도 산출 방식을 체험해보고, 이를 실제 데이터 분석 프로젝트에 응용해보길 권장한다.
#피처선택 #임베디드메소드 #머신러닝기초 #데이터전처리