move84

머신러닝 설명 가능성: SHAP 값을 활용한 모델 해석 본문

머신러닝

머신러닝 설명 가능성: SHAP 값을 활용한 모델 해석

move84 2025. 3. 3. 10:10
반응형

머신러닝 모델은 강력한 예측 능력을 제공하지만, 때로는 모델의 예측이 왜 그렇게 나왔는지 이해하기 어려울 수 있다. SHAP (SHapley Additive exPlanations) 값은 이러한 '블랙 박스' 모델의 예측을 해석하고 설명하는 데 도움을 주는 강력한 도구이다. 이 글에서는 SHAP 값의 기본 개념, 계산 방법, 그리고 실제 활용 사례를 살펴본다.

💡 SHAP 값의 기본 개념
SHAP 값은 게임 이론의 Shapley value (섀플리 값)을 기반으로 한다. 섀플리 값은 협력 게임에서 각 플레이어가 기여한 정도를 나타내는 개념이다. SHAP 값은 머신러닝 모델의 예측을 '게임'으로 간주하여, 각 특성(feature)이 모델의 예측에 얼마나 기여했는지 계산한다. 즉, 각 특성이 모델의 예측 값을 얼마나 'shap'했는지, 즉 '형성'했는지 나타낸다.

SHAP 값의 주요 특징은 다음과 같다.

  • 개별 예측 설명: SHAP 값은 개별 데이터 포인트에 대한 예측을 설명한다. 각 예측에 대해 각 특성의 기여도를 확인할 수 있다.
  • 전역적 해석: 모든 데이터 포인트에 대한 SHAP 값을 평균내어, 전체 모델의 특성 중요도를 파악할 수 있다.
  • 일관성: SHAP 값은 모델의 예측과 일관성을 유지하며, 예측 값의 변화에 따라 적절하게 변화한다.
  • 대비(Contrastive) 설명: 예측을 특정 값에서 다른 값으로 이동시키는 각 특성의 기여도를 제공한다.

📊 SHAP 값 계산 방법
SHAP 값을 계산하는 방법은 여러 가지가 있으며, 대표적인 방법으로는 다음과 같다.

  1. 정확한 SHAP 값: 모든 가능한 특성 조합에 대해 모델을 평가하여 SHAP 값을 계산한다. 하지만 이 방법은 계산 비용이 매우 높아서, 실제로는 잘 사용되지 않는다.
  2. 근사 SHAP 값:
    • Kernel SHAP: 커널 함수를 사용하여 SHAP 값을 근사한다. 다양한 모델에 적용 가능하며, 비교적 널리 사용된다.
    • Tree SHAP: 트리 기반 모델(예: 의사 결정 트리, 랜덤 포레스트, XGBoost)에 특화된 방법으로, 계산 효율성이 높다.
    • Deep SHAP: 딥러닝 모델에 특화된 방법으로, 딥러닝 모델의 구조를 활용하여 SHAP 값을 계산한다.

Python에서 SHAP 값을 계산하는 간단한 예시를 살펴보자. 여기서는 scikit-learnGradientBoostingClassifier 모델과 shap 라이브러리를 사용한다.

import shap
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import make_classification

# 데이터 생성
X, y = make_classification(n_samples=100, n_features=5, random_state=42)

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 모델 학습
model = GradientBoostingClassifier(random_state=42)
model.fit(X_train, y_train)

# SHAP 값 계산 (Kernel SHAP 사용)
explainer = shap.KernelExplainer(model.predict_proba, X_train, link="logit") # link = "logit"은 로짓 변환을 사용함을 의미
shap_values = explainer.shap_values(X_test)

# shap_values는 각 클래스에 대한 SHAP 값을 포함하는 리스트입니다.
# shap_values[0]은 첫 번째 클래스, shap_values[1]은 두 번째 클래스에 대한 SHAP 값

# shap.summary_plot(shap_values[1], X_test, feature_names=[f"feature_{i}" for i in range(X.shape[1])]) # summary plot 그리기

# 개별 예측에 대한 SHAP 값 시각화
shap.force_plot(explainer.expected_value[1], shap_values[1][0], X_test[0], feature_names=[f"feature_{i}" for i in range(X.shape[1])])

위 코드에서는 shap.KernelExplainer를 사용하여 SHAP 값을 계산한다. explainer.shap_values(X_test)를 호출하면 테스트 데이터셋 X_test에 대한 SHAP 값이 계산된다. shap_values는 각 클래스에 대한 SHAP 값을 담고 있는 리스트이다. shap.force_plot을 사용하면 개별 예측에 대한 SHAP 값을 시각화할 수 있으며, shap.summary_plot을 사용하면 전체 데이터셋에 대한 SHAP 값을 요약하여 시각화할 수 있다. Tree SHAP을 사용하는 경우, explainer를 생성할 때 shap.TreeExplainer를 사용하면 된다.


📈 SHAP 값 활용 사례
SHAP 값은 다양한 분야에서 활용될 수 있다.

  1. 모델 디버깅: 모델의 예측이 예상과 다른 경우, SHAP 값을 사용하여 왜 그런 예측이 나왔는지 파악할 수 있다. 특성의 기여도를 분석하여 모델의 취약점을 발견하고, 개선할 수 있다.
  2. 특성 중요도 분석: 전체 데이터셋에 대한 SHAP 값을 평균내어, 각 특성의 중요도를 파악할 수 있다. 이를 통해 모델의 핵심적인 예측 요소를 이해하고, 불필요한 특성을 제거하여 모델을 단순화할 수 있다.
  3. 규제 준수: 금융, 의료 등 규제가 중요한 분야에서는 모델의 예측을 설명하는 것이 필수적이다. SHAP 값은 모델의 예측을 투명하게 설명하여 규제 준수를 돕는다.
  4. 의사 결정 지원: SHAP 값을 사용하여 각 개별 사례에 대한 예측을 설명함으로써, 의사 결정 과정을 지원할 수 있다. 예를 들어, 대출 심사 시 SHAP 값을 사용하여 대출 거절 사유를 명확하게 설명할 수 있다.
  5. 모델 비교: 서로 다른 모델의 SHAP 값을 비교하여, 각 모델의 장단점을 파악할 수 있다. 이를 통해 특정 문제에 가장 적합한 모델을 선택할 수 있다.

💡 SHAP 값의 장단점

장점

  • 개별 예측 설명: 각 예측에 대해 각 특성의 기여도를 파악할 수 있다.
  • 전역적 해석: 전체 모델의 특성 중요도를 파악할 수 있다.
  • 모델 독립적: 다양한 종류의 모델에 적용 가능하다.
  • 시각화 용이: 시각화를 통해 결과를 쉽게 이해할 수 있다.

단점

  • 계산 비용: 정확한 SHAP 값은 계산 비용이 많이 들 수 있다. 근사 SHAP 값을 사용해야 하는 경우가 많다.
  • 해석의 복잡성: SHAP 값을 올바르게 해석하기 위해서는 어느 정도의 머신러닝 지식이 필요하다.
  • 특성 간의 상관관계: 특성 간의 상관관계가 높을 경우, SHAP 값이 왜곡될 수 있다.

🎯 요약
SHAP 값은 머신러닝 모델의 예측을 설명하는 강력한 도구이다. 각 특성의 기여도를 계산하여 개별 예측과 전체 모델을 모두 해석할 수 있다. SHAP 값을 활용하면 모델 디버깅, 특성 중요도 분석, 규제 준수, 의사 결정 지원 등 다양한 분야에서 유용하게 활용할 수 있다. 계산 비용과 해석의 복잡성이라는 단점도 있지만, 머신러닝 모델의 투명성을 높이는 데 기여하는 중요한 기술이다.

핵심 용어 정리

  • SHAP (SHapley Additive exPlanations): 머신러닝 모델의 예측을 설명하는 방법론
  • Shapley value (섀플리 값): 게임 이론에서 각 플레이어의 기여도를 나타내는 개념. SHAP 값의 기반이 됨
  • 특성 (feature): 모델의 입력 변수
  • 커널 SHAP (Kernel SHAP): 커널 함수를 사용하여 SHAP 값을 근사하는 방법
  • 트리 SHAP (Tree SHAP): 트리 기반 모델에 특화된 SHAP 값 계산 방법
  • 딥 SHAP (Deep SHAP): 딥러닝 모델에 특화된 SHAP 값 계산 방법
  • 모델 해석 (model interpretation): 머신러닝 모델의 예측 원리를 이해하는 과정
  • 특성 중요도 (feature importance): 모델의 예측에 기여하는 각 특성의 중요도

영어 용어 정리

  • SHAP (SHapley Additive exPlanations): SHAP
  • Shapley value: 섀플리 값
  • feature: 특성
  • Kernel SHAP: 커널 SHAP
  • Tree SHAP: 트리 SHAP
  • Deep SHAP: 딥 SHAP
  • model interpretation: 모델 해석
  • feature importance: 특성 중요도
반응형