SHAP은 머신러닝 모델의 예측을 설명하기 위한 게임 이론에 기반한 방법론이다. SHAP 값을 통해 각 피처가 예측에 어떤 영향을 미치는지 측정할 수 있다. 이는 모델의 전반적인 해석뿐만 아니라, 개별 예측의 해석에도 사용될 수 있다.
SHAP 설치
SHAP는 Python의 표준 패키지 관리 도구인 pip을 이용하여 설치할 수 있다.
!pip install shap
SHAP 사용법
1. 모델 훈련
먼저, 사용할 모델을 선택하고 이를 훈련 데이터에 적합시킨다.
from sklearn.ensemble import RandomForestRegressor
# 모델 정의 및 적합
model = RandomForestRegressor(random_state=42)
model.fit(X_train, y_train)
2. SHAP Explainer 생성
훈련한 모델을 바탕으로 SHAP Explainer 객체를 생성한다. 이 Explainer 객체는 SHAP 값을 계산하는 데 사용된다. 트리 기반의 모델에는 shap.TreeExplainer를, 딥러닝 모델에는 shap.DeepExplainer나 shap.GradientExplainer를 사용할 수 있다.
import shap
# Explainer를 생성
explainer = shap.Explainer(model)
3. SHAP Value 계산
Explainer 객체를 이용하면 테스트 데이터에 대한 SHAP 값을 계산할 수 있다.
shap_values = explainer(X_test)
4. SHAP 시각화
계산된 SHAP 값은 다양한 방법으로 시각화하여 각 피처가 예측에 어떻게 기여하는지 이해할 수 있다.
1) Summary Plot
Summary plot은 모든 피처의 SHAP value를 한 번에 보여준다. 피처의 중요도는 그래프에서 위에서 아래로 정렬되며, 각 피처의 SHAP value의 분포는 수평선으로 표시된다.
shap.summary_plot(shap_values, X_test)

2) Dependence Plot
Dependence plot은 특정 피처와 다른 피처와의 상호작용을 보여준다. 즉, 한 피처의 값이 변할 때 SHAP 값이 어떻게 변하는지 보여준다.
shap.dependence_plot("Feature_Name", shap_values, X_test)

3) Force Plot
Force plot은 개별 관측치에 대한 예측을 설명한다. 이는 특정 관측치에 대해 어떤 피처가 예측을 증가시키거나 감소시키는지 보여준다.
shap.force_plot(explainer.expected_value, shap_values[0,:], X_test.iloc[0,:])

4) Waterfall Plot
Waterfall plot은 개별 예측을 설명하는 데 사용되는 또 다른 방법이다. 이는 각 피처의 기여도를 순차적으로 보여주므로, 어떤 피처가 예측에 가장 크게 기여했는지 쉽게 파악할 수 있다.
shap.waterfall_plot(explainer.expected_value, shap_values[0,:], X_test.iloc[0,:])

SHAP 라이브러리를 사용하면, 머신러닝 모델의 예측이 어떻게 이루어지는지 이해하는 데 큰 도움이 된다. 이는 모델의 투명성을 높이고, 피처 엔지니어링이나 모델 선택에 도움이 될 수 있다. 게임 이론에 기반한 이러한 방법론은 모델의 예측을 신뢰할 수 있게 만들어주며, 잠재적인 문제를 발견하는 데 도움이 될 수 있다. 이외에도 SHAP 라이브러리는 다양한 시각화 도구와 고급 기능을 제공한다. 이를 통해 모델의 해석을 개선하고, 머신러닝 모델의 신뢰성을 높일 수 있다. SHAP 라이브러리의 자세한 사용법과 예제는 SHAP 라이브러리의 공식 문서에서 확인할 수 있다.