머신러닝 모델을 해석하는 과정에서 중요한 질문 중 하나는, ‘어떤 feature가 예측에 가장 큰 영향을 미치는가?’라는 점입니다. 이 질문에 답하기 위해 feature의 중요도(feature importance)와 기여도(feature contribution)를 측정하는 다양한 방법이 사용됩니다. 이 글에서는 feature란 무엇인지부터 시작해, feature의 중요도 및 기여도를 평가하는 대표적인 방법들을 소개하고, 실제 사용 예시도 함께 설명하겠습니다.
1. Feature란 무엇인가?
Feature는 머신러닝 모델이 학습할 때 사용하는 데이터의 특성(속성)을 의미합니다. 각 feature는 데이터의 독립 변수를 나타내며, 모델이 종속 변수(타겟)를 예측하는 데 필요한 정보입니다. 예를 들어, 집값 예측 모델에서는 집의 크기, 위치, 층수 등이 feature에 해당합니다.
Feature의 예시:
- 집값 예측 모델의 feature:
- 집의 크기 (Size)
- 방 개수 (Number of Rooms)
- 위치 (Location)
- 건축 연도 (Year Built)
- 거리 (Distance to City Center)
이러한 feature들이 타겟 변수(종속 변수)인 집값을 예측하는 데 어떤 영향을 미치는지 분석하는 과정에서, feature의 중요도와 기여도를 평가하게 됩니다.
2. Feature Importance와 Feature Contribution의 차이
Feature Importance는 각 feature가 모델 예측에 얼마나 중요한 역할을 하는지 전반적으로 평가한 값입니다. Feature Contribution은 개별 예측에 대해 각 feature가 얼마나 기여했는지를 평가합니다.
- Feature Importance: 모델이 학습한 전체 데이터에 대해 각 feature가 얼마나 자주 사용되고 중요한지 평가.
- Feature Contribution: 개별 예측에서 각 feature가 예측값에 얼마나 기여했는지 설명.
이제 다양한 feature 중요도와 기여도 평가 방법을 살펴보겠습니다.
3. Feature 중요도와 기여도를 평가하는 다양한 방법
3.1. Permutation Importance (순열 중요도)
Permutation Importance는 각 feature의 값을 랜덤하게 섞은 후 모델 성능에 미치는 영향을 평가하는 방식입니다. feature의 값을 무작위로 섞어도 모델 성능이 크게 떨어지지 않으면, 해당 feature는 덜 중요하다고 판단합니다.
- 장점: 모델에 독립적이고, 계산이 비교적 간단.
- 단점: 계산 속도가 느릴 수 있으며, 상호작용이 강한 feature의 경우 단독 중요도를 낮게 평가할 수 있음.
예시 코드:
from sklearn.inspection import permutation_importance
result = permutation_importance(model, X, y, n_repeats=10, random_state=42)
3.2. Gini Importance (지니 중요도) 또는 Mean Decrease in Impurity (MDI)
Gini Importance는 트리 기반 모델에서 노드 분할을 통해 불순도가 얼마나 줄어드는지를 기반으로 feature의 중요도를 평가합니다. Random Forest 같은 모델에서 자주 사용됩니다.
- 장점: 빠르게 계산 가능.
- 단점: 상호작용을 충분히 반영하지 못할 수 있음.
예시 코드:
importances = model.feature_importances_
3.3. SHAP (Shapley Additive Explanations)
SHAP은 개별 예측에 대해 각 feature가 얼마나 기여했는지를 계산하는 방법으로, 상호작용을 포함하여 기여도를 분석할 수 있습니다. 협력 게임 이론에서 착안한 이 방법은, feature의 기여도를 정밀하게 설명할 수 있어 매우 유용합니다.
- 장점: feature 간 상호작용을 정확하게 평가.
- 단점: 계산 복잡도가 높음.
예시 코드:
import shap
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X)
shap.summary_plot(shap_values, X)
3.4. LIME (Local Interpretable Model-Agnostic Explanations)
LIME은 모델의 개별 예측을 로컬 모델로 해석하는 방법입니다. 특정 예측에 대해 feature가 어떻게 기여했는지를 설명하며, 모델의 복잡한 내부 구조와 무관하게 사용할 수 있습니다.
- 장점: 다양한 모델에 적용 가능.
- 단점: 전반적인 중요도를 설명하지는 못하고, 특정 예측만 해석.
예시 코드:
import lime
from lime import lime_tabular
explainer = lime_tabular.LimeTabularExplainer(X_train.values, feature_names=feature_names, class_names=['class1', 'class2'], mode='classification')
explanation = explainer.explain_instance(X_test.iloc[0], model.predict_proba)
explanation.show_in_notebook()
3.5. Recursive Feature Elimination (RFE)
RFE는 feature를 하나씩 제거하면서 모델 성능에 미치는 영향을 평가하여, 중요하지 않은 feature를 제거해나가는 방식입니다.
- 장점: 모델이 최적의 feature 집합을 찾도록 돕는 방법.
- 단점: 계산 비용이 클 수 있음.
예시 코드:
from sklearn.feature_selection import RFE
selector = RFE(estimator=model, n_features_to_select=5, step=1)
selector = selector.fit(X, y)
3.6. Mutual Information (상호 정보량)
Mutual Information은 두 변수 간의 상호 의존성을 평가하는 방법으로, feature와 타겟 변수 간의 비선형적 관계를 포착할 수 있습니다.
- 장점: 비선형 관계를 포착 가능.
- 단점: 상호작용을 다루지는 못함.
예시 코드:
from sklearn.feature_selection import mutual_info_classif
mi = mutual_info_classif(X, y)
4. 실제 사용 예시
이제 위에서 설명한 방법들을 활용한 실제 예시를 살펴보겠습니다. 아래는 집값 예측 모델을 예로 들어, feature 중요도와 기여도를 평가하는 과정입니다.
데이터셋:
- 타겟: 집값
- Feature: 크기(Size), 방 개수(Number of Rooms), 위치(Location), 건축 연도(Year Built), 거리(Distance)
from sklearn.ensemble import RandomForestRegressor
from sklearn.model_selection import train_test_split
# 데이터 준비
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# Random Forest 모델 학습
model = RandomForestRegressor(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
# Feature Importance 계산
importances = model.feature_importances_
# SHAP 값 계산
import shap
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X_test)
# 중요도 시각화
shap.summary_plot(shap_values, X_test)
5. 결론
모델 해석에서 feature 중요도와 기여도를 평가하는 방법은 매우 다양합니다. SHAP, LIME, Permutation Importance와 같은 기법들은 모델을 더 잘 이해하고, 각 feature가 예측에 얼마나 중요한지, 그리고 개별 예측에 어떤 영향을 미치는지 확인하는 데 유용한 도구들입니다. 머신러닝 모델의 성능을 향상시키기 위해서는 이러한 방법들을 적절히 활용하여 중요한 feature를 파악하고, 최적화된 모델을 설계하는 것이 중요합니다.
'Data Science > machine learning' 카테고리의 다른 글
LLM 모델 성능 향상을 위한 다양한 방법들 (6) | 2024.10.12 |
---|---|
llama-stack 사용법 (1) | 2024.10.02 |
LLM: 대규모 언어 모델의 원리, 종류, 그리고 활용 방법 (4) | 2024.09.28 |
딥러닝이란 (3) | 2024.09.28 |
차원 축소(Dimensionality Reduction)의 정의 (0) | 2024.09.28 |