WIA-AI-009 | 제3장

SHAP: 샤플리 가법 설명

SHAP 소개

SHAP(SHapley Additive exPlanations)는 설명 가능한 AI에 대한 접근법 가운데 이론적 근거가 가장 탄탄하고 가장 널리 채택된 방법 중 하나이다. 2017년 Scott Lundberg와 Su-In Lee가 개발한 SHAP는 게임 이론의 개념을 토대로 모델 예측을 해석하기 위한 통합 프레임워크를 제공한다. 수학적 엄밀성과 바람직한 이론적 성질 덕분에 SHAP는 WIA-AI-009 표준의 초석이 된다.

SHAP의 핵심은 겉보기에는 단순한 질문 하나에 답하는 것이다. 즉, 각 특성이 모델의 예측을 평균 예측에서 멀어지게 하는 데 얼마나 기여했는가? 이 답은 개별 예측에 대한 지역 설명을 제공할 뿐 아니라, 집계를 통해 모델 동작에 대한 전역적 통찰도 제공한다. 이러한 이중 역량에 설명 품질에 대한 증명 가능한 보장이 더해져, SHAP는 위험도가 높은 응용 분야에서 특히 큰 가치를 지닌다.

弘益人間과의 연결: SHAP는 협력 게임 이론에서 빌려 온 공정성의 원칙을 구현하여, 예측에 대한 공로가 특성들 사이에 공평하게 분배되도록 보장한다. 이러한 수학적 공정성은 AI의 결정을 이해하는 데 있어 인간적 공정성으로 이어진다.

게임 이론적 기초: 샤플리 값

SHAP를 이해하려면 먼저 샤플리 값을 이해해야 한다. 샤플리 값은 1953년 Lloyd Shapley가 도입한 협력 게임 이론의 개념이다(Shapley는 2012년 안정적 배분 이론과 시장 설계에 관한 연구로 노벨 경제학상을 공동 수상했다). Shapley가 다룬 근본 문제는 다음과 같다. 참가자들이 함께 협력하여 총 보상을 얻는 협력 게임에서, 그 보상을 참가자들 사이에 어떻게 공정하게 분배해야 하는가?

협력 게임의 비유

간단한 예를 생각해 보자. 세 친구 Alice, Bob, Carol이 함께 회사를 세웠다. 1년 뒤 회사는 $300,000의 이익을 냈다. 이 이익을 세 창업자에게 어떻게 나누어야 하는가?

단순한 방식이라면 균등하게 $100,000씩 나눌 수 있다. 그러나 다음 사실을 알고 있다면 어떻겠는가?

샤플리 값은 원칙에 입각한 답을 제공한다. 팀이 구성될 수 있는 모든 순서에 걸쳐 각 사람의 평균 한계 기여도를 계산하는 것이다. 가능한 여섯 가지 순서에서 각자의 한계 기여도를 평균해 보면(공식은 곧 살펴본다), Alice는 약 $108,333, Bob은 약 $83,333, Carol은 약 $108,333을 받아야 한다는 결과가 나오며(합계 $300,000), 이는 팀의 성공에 대한 각 사람의 실제 기여를 반영한다.

비즈니스에서 머신러닝으로

SHAP는 이와 같은 논리를 머신러닝에 적용한다.

"Alice는 회사의 성공에 얼마나 기여했는가?"라고 물었던 것처럼, SHAP는 "신용 점수 특성은 이 대출 승인 예측에 얼마나 기여했는가?"라고 묻는다.

SHAP 값의 수학적 정의

특성 i의 SHAP 값은 다음과 같이 정의된다.

φᵢ = Σ [|S|! × (M - |S| - 1)! / M!] × [f(S ∪ {i}) - f(S)]

여기서 합은 i를 포함하지 않는 특성의 가능한 모든 부분집합 S에 대해 취하며,
M은 전체 특성의 수이고,
f(S)는 집합 S에 속한 특성만 사용한 모델의 예측이다

이 공식의 의미를 하나씩 살펴보자.

직관적 해석

대출 부도 위험을 예측하려 한다고 상상해 보자. 특성은 10개이다. "credit_score"의 SHAP 값을 계산하려면 다음과 같이 한다.

  1. 나머지 9개 특성으로 만들 수 있는 모든 부분집합을 고려한다
  2. 각 부분집합에 대해 credit_score를 포함한 경우와 포함하지 않은 경우의 예측을 수행한다
  3. 그 차이가 해당 부분집합에 대한 credit_score의 한계 기여도이다
  4. 이 모든 한계 기여도를 (적절한 가중치를 적용하여) 평균한다
  5. 이 평균이 credit_score의 SHAP 값이다

특성이 10개이면 고려해야 할 부분집합은 2⁹ = 512개이다. 특성이 100개이면 부분집합은 2⁹⁹개로, 모두 열거하는 것은 계산상 불가능하다. 이 때문에 실제 SHAP 구현은 근사와 최적화를 사용하며, 이는 곧 살펴본다.

SHAP의 바람직한 성질

SHAP 값은 이론적으로 매력적인 네 가지 성질을 가진다. Lundberg와 Lee(2017)는 앞의 세 가지(지역 정확성, 결측성, 일관성)를 SHAP의 정의적 성질로 제시했으며, 대칭성은 고전적인 샤플리 값 공리에서 이어받은 성질이다.

1. 지역 정확성(가법성)

예측값은 기준값(평균 예측)에 모든 SHAP 값의 합을 더한 것과 같다.

f(x) = E[f(X)] + Σ φᵢ

이는 SHAP 값이 예측을 빠짐없이 설명한다는 뜻이다. 설명되지 않은 잔차가 없다. 모델의 예측이 0.8이고 기준값이 0.5라면, SHAP 값의 합은 반드시 0.3이 되어야 한다.

예시:
대출 부도 예측: 0.73
평균 부도율(기준값): 0.15
SHAP 값의 합이 되어야 하는 값: 0.73 - 0.15 = 0.58

credit_score: -0.22 (위험 감소)
debt_ratio: +0.45 (위험 증가)
employment_years: -0.18 (위험 감소)
recent_inquiries: +0.28 (위험 증가)
기타 특성: +0.25
합계: -0.22 + 0.45 - 0.18 + 0.28 + 0.25 = 0.58 ✓

2. 결측성

어떤 특성이 누락되어 있거나 모델에 아무런 영향을 주지 않으면, 그 특성의 SHAP 값은 0이다. 당연해 보이지만 모든 설명 방법이 이 성질을 만족하는 것은 아니다.

3. 일관성(단조성)

모델을 변경하여 어떤 특성의 한계 기여도가 모든 곳에서 증가한다면, 그 특성의 SHAP 값은 감소할 수 없다. 이는 설명이 모델의 변화와 일관되게 변하도록 보장한다.

4. 대칭성

두 특성이 모든 예측에 동일하게 기여한다면, 두 특성은 같은 SHAP 값을 받는다. 이는 기여도 배분에서 임의적인 불평등을 방지한다.

이 성질들이 중요한 이유: 이 공리들은 SHAP 설명이 수학적으로 건전하고, 기여를 누락하거나 이중으로 계산하지 않으며, 예측 가능하게 동작하도록 보장한다. 덕분에 SHAP 값이 설명 방법이 만들어 낸 인공물이 아니라 실제 특성 기여도를 반영한다고 확신할 수 있다.

SHAP 변형과 계산 방식

정확한 SHAP 값을 계산하는 비용은 지수적으로 증가한다. 최초의 SHAP 논문(2017)은 KernelSHAP, DeepSHAP 같은 근사 방법을 제시했고, 2018년 Lundberg 등의 후속 논문이 트리 앙상블용 정확 알고리즘인 TreeSHAP를 추가했다. 모델 유형별로 최적화된 주요 변형은 다음과 같다.

TreeSHAP

트리 기반 모델(결정 트리, 랜덤 포레스트, XGBoost, LightGBM)에 대해 TreeSHAP는 트리 구조를 활용하여 다항 시간 안에 정확한 SHAP 값을 계산한다. 모든 특성 부분집합을 열거하는 대신 트리를 따라 예측 경로를 추적한다.

TreeSHAP의 복잡도는 O(TLD²)(T=트리 수, L=리프 수, D=깊이)이며, WIA-AI-009 명세의 성능 벤치마크에서는 트리 100개짜리 XGBoost 모델 기준 평균 약 45ms가 걸린다. 이 정도면 프로덕션 환경에서도 실용적이며, 트리 기반 모델의 인기와 맞물려 TreeSHAP는 널리 쓰이는 XAI 방법이 되었다.

// WIA-AI-009 TreeSHAP 구현 예시
import { TreeSHAPExplainer } from 'wia-ai-009';

const model = loadXGBoostModel('loan_model.json');
const explainer = new TreeSHAPExplainer(model);

const shapValues = explainer.explain({
  credit_score: 720,
  debt_ratio: 0.35,
  employment_years: 8,
  loan_amount: 250000
});

console.log(shapValues);
// {
//   credit_score: -0.12,
//   debt_ratio: 0.28,
//   employment_years: -0.10,
//   loan_amount: 0.12,
//   base_value: 0.15,
//   prediction: 0.33
// }

KernelSHAP

KernelSHAP는 모델 비종속적이어서 어떤 유형의 모델에도 사용할 수 있다. KernelSHAP는 다음 절차로 SHAP 값을 근사한다.

  1. 특성 연합(특성의 무작위 부분집합)을 샘플링한다
  2. 그 연합들로 예측을 수행한다
  3. 가중 선형 모델을 적합하여 각 특성의 기여도를 추정한다
  4. 선형 모델의 계수가 SHAP 값의 근사치가 된다

KernelSHAP는 정확도를 내주고 유연성을 얻는다. 샘플이 충분하면(명세 예시의 기본값은 5,000개) 복잡한 신경망에 대해서도 좋은 근사치를 제공한다. 명세 벤치마크 기준 평균 계산 시간은 약 2,500ms이다.

LinearSHAP

선형 모델의 경우 SHAP 값은 닫힌 형식의 해를 가진다. 모델이 다음과 같다면,

f(x) = β₀ + β₁x₁ + β₂x₂ + ... + βₘxₘ

특성 i의 SHAP 값은 간단히 다음과 같다.

φᵢ = βᵢ × (xᵢ - E[Xᵢ])

즉 SHAP 값은 계수에 특성 값이 평균에서 벗어난 정도를 곱한 것이다. LinearSHAP는 즉각적이며 정확하다.

DeepSHAP

DeepSHAP는 기여 점수를 신경망을 통해 역전파하여 심층 신경망의 SHAP 값을 근사한다. 신경망에 대해서는 KernelSHAP보다 빠르지만, 모든 SHAP 공리를 완벽하게 만족하지 못할 수 있는 근사를 사용한다.

GradientSHAP

미분 가능한 모델의 경우 GradientSHAP는 그래디언트를 사용하여 SHAP 값을 추정한다. 기준점에서 입력까지의 경로를 따라 점들을 무작위로 샘플링하고 그래디언트를 평균하는데, 이는 5장에서 다루는 통합 그래디언트(Integrated Gradients)와 유사하다.

SHAP 값의 시각화

SHAP는 복잡한 모델 동작을 이해하기 쉽게 만드는 여러 강력한 시각화 기법을 제공한다.

포스 플롯(지역 설명)

포스 플롯은 각 특성이 예측을 기준값보다 얼마나 높이거나 낮추는지를 보여준다. 빨간색 특성은 예측을 높이고, 파란색 특성은 예측을 낮춘다. 폭은 크기를 나타낸다.

포스 플롯 해석:
기준값(평균): 0.15 ───────────────────────►
+ debt_ratio (0.45) ─────►
+ recent_inquiries (0.28) ──►
- credit_score (0.22) ◄──
- employment_years (0.18) ◄─
최종 예측: 0.48 ───────────────────────►

요약 플롯(전역 특성 중요도)

요약 플롯은 여러 인스턴스에 걸친 SHAP 값을 집계하여 전역 특성 중요도를 보여준다. 요약 플롯에는 다음이 표시된다.

요약 플롯을 보면, 예컨대 credit_score가 전체적으로 가장 중요한 특성이며, 높은 신용 점수는 부도 위험을 일관되게 낮추고 낮은 점수는 위험을 높인다는 사실이 드러날 수 있다.

의존성 플롯

의존성 플롯은 어떤 특성의 SHAP 값이 그 특성의 값에 따라 어떻게 달라지는지 보여주어, 특성 값과 예측에 미치는 영향 사이의 관계를 드러낸다.

예를 들어 x축에 credit_score를, y축에 그 SHAP 값을 그리면 비선형 관계가 나타날 수 있다. 신용 점수가 600에서 700으로 올라갈 때는 SHAP 값이 급격히 떨어지다가 750 이상에서는 평탄해지는 식이다. 이는 나쁜 신용 점수를 개선하는 것이 이미 좋은 점수를 더 개선하는 것보다 더 큰 영향을 준다는 사실을 보여준다.

상호작용 값

SHAP를 확장하면 특성 상호작용, 즉 두 특성의 결합 효과가 각각의 개별 효과와 어떻게 다른지를 포착할 수 있다. 이는 특성 간의 시너지와 의존성을 파악하는 데 도움이 된다.

프로덕션 환경에서 SHAP 구현

프로덕션 시스템에 SHAP를 배포하려면 성능, 일관성, 사용자 경험에 주의를 기울여야 한다.

성능 최적화

적합한 변형 사용: 트리 모델에는 TreeSHAP, 선형 모델에는 LinearSHAP를 사용하고, KernelSHAP는 꼭 필요한 경우에만 사용한다.

배치 처리: 실시간 설명이 필요하지 않다면 SHAP 값을 야간에 배치로 계산하여 캐시한다.

근사 조정: KernelSHAP의 경우 샘플 수와 지연 시간 요구 사항 사이에서 균형을 맞춘다. 디버깅에는 100개 샘플로 시작하고, 프로덕션에서는 1,000개 이상으로 늘린다.

배경 데이터 선택: SHAP에는 "전형적인" 데이터를 대표하는 배경 데이터셋이 필요하다. 학습 데이터의 대표 표본을 사용한다(일반적으로 100~1,000개 인스턴스면 충분하다).

요청 간 일관성

무작위성이 있는 SHAP 변형(KernelSHAP)은 같은 입력에 대한 반복 요청에서 약간씩 다른 설명을 내놓을 수 있다. 일관성을 보장하려면 다음과 같이 한다.

WIA-AI-009 형식과의 통합

// WIA-AI-009 표준화 SHAP 출력
{
  "standard": "WIA-AI-009",
  "version": "1.0",
  "explanation_type": "local",
  "method": "shap",
  "timestamp": "2025-01-20T14:30:00Z",
  "model_info": {
    "model_id": "loan_model_v2.3",
    "model_type": "xgboost",
    "model_version": "2.3.1",
    "framework": "xgboost"
  },
  "prediction": {
    "value": 0.57,
    "class": "default_risk",
    "probability": 0.57,
    "confidence": "medium"
  },
  "explanation": {
    "base_value": 0.15,
    "feature_attributions": {
      "credit_score": -0.22,
      "debt_ratio": 0.45,
      "employment_years": -0.18,
      "recent_inquiries": 0.28,
      "loan_amount": 0.12,
      "age": -0.03
    },
    "feature_values": {
      "credit_score": 720,
      "debt_ratio": 0.52,
      "employment_years": 8,
      "recent_inquiries": 5,
      "loan_amount": 250000,
      "age": 35
    }
  },
  "metadata": {
    "computation_time_ms": 145,
    "shap_variant": "TreeSHAP",
    "background_data_size": 500,
    "sum_check": 0.42  // = prediction - base_value (0.57 - 0.15)
  }
}

모델 유형별 SHAP

WIA-AI-009 표준은 다양한 모델 아키텍처에 SHAP를 적용하기 위한 지침을 제공한다.

모델 유형 권장 SHAP 변형 일반적 지연 시간(참고치) 정확성
선형/로지스틱 회귀 LinearSHAP < 1ms 정확
결정 트리 TreeSHAP 1-10ms 정확
랜덤 포레스트, XGBoost TreeSHAP 10-100ms 정확
신경망 DeepSHAP 또는 KernelSHAP 100-5000ms 근사
SVM, 기타 KernelSHAP 500-10000ms 근사

한계와 고려 사항

SHAP는 강력하지만 그 한계를 이해하는 것이 중요하다.

계산 비용

최적화를 적용하더라도 고차원 데이터나 복잡한 모델에서는 SHAP의 비용이 클 수 있다. 신중한 엔지니어링 없이는 실시간 설명이 비현실적일 수 있다.

상관관계 대 인과관계

SHAP 값은 모델 내의 통계적 연관성을 반영할 뿐, 인과관계를 반영하지 않는다. SHAP 값이 높다는 것은 해당 특성이 예측과 상관되어 있다는 뜻이지만, 교란 변수 때문에 현실 세계에서 그 특성을 바꾸어도 결과가 바뀌지 않을 수 있다.

기준선 의존성

SHAP 값은 기준선(배경 데이터셋)의 선택에 따라 달라진다. 기준선이 다르면 값도 달라질 수 있다. WIA-AI-009 표준은 학습 데이터의 대표 표본을 기준선으로 사용할 것을 권장한다.

해석의 어려움

특성이 수백 개인 모델의 경우 SHAP는 예측마다 수백 개의 기여도 값을 산출한다. 이를 모두 제시하면 사용자가 감당하기 어렵다. 실무에서는 절대 SHAP 값 기준 상위 5~10개 특성만 보여준다.

상관된 특성

특성들이 서로 높게 상관되어 있으면, SHAP는 그 특성들 사이에 중요도를 임의적으로 보이는 방식으로 배분할 수 있다. 전체 중요도는 정확하지만, 다중공선성 때문에 개별 기여도는 달라질 수 있다.

모범 사례: SHAP를 포괄적인 설명 가능성 전략의 한 도구로 사용한다. 교차 검증을 위한 LIME, 타당성 점검을 위한 도메인 지식, 실행 가능성을 위한 반사실적 설명 등 다른 방법과 함께 사용한다.

고급 SHAP 기법

기본적인 특성 기여도 분석을 넘어, SHAP는 정교한 분석을 가능하게 한다.

조건부 기댓값

모든 특성에 대해 주변화하는 대신 현실적인 특성 조합을 조건으로 삼는다. 이렇게 하면 SHAP가 불가능한 특성 조합(예: "age=20 AND employment_years=30")을 고려하지 않게 된다.

군집 SHAP

유사한 인스턴스를 묶어 각 군집의 집계된 SHAP 패턴을 보여준다. 이를 통해 모델이 하위 집단마다 다르게 동작한다는 사실이 드러난다.

SHAP 기반 모델 선택

여러 모델의 SHAP 값을 비교하여 어느 모델의 성능이 더 좋은지뿐 아니라 각 모델의 추론 방식이 어떻게 다른지도 파악한다. 모델 A는 특성 X에 크게 의존하는 반면 모델 B는 특성 Y를 선호할 수 있으며, 이는 도메인 적합성을 기준으로 어떤 모델을 배포할지 결정하는 데 참고가 된다.

시계열 SHAP

모델이 재학습됨에 따라 SHAP 값이 시간에 걸쳐 어떻게 변하는지 추적한다. 특성 중요도의 급격한 변화는 개념 드리프트나 데이터 품질 문제의 신호일 수 있다.

장 요약

SHAP(SHapley Additive exPlanations)는 협력 게임 이론에 기반하여 머신러닝 모델을 해석하기 위한 이론적으로 엄밀한 프레임워크를 제공한다. 특성을 게임의 참가자로, 예측을 보상으로 간주함으로써 SHAP는 예측에 대한 각 특성의 공정한 기여도를 계산한다.

네 가지 핵심 성질, 즉 SHAP의 세 가지 성질인 지역 정확성, 결측성, 일관성과 샤플리 값에서 이어받은 대칭성은 SHAP 설명이 수학적으로 건전하고 동작 면에서 합리적이도록 보장한다. 이러한 성질은 SHAP를 임시방편적인 설명 방법과 구별하며, 기여도가 모델의 실제 동작을 반영한다는 확신을 준다.

실용적인 SHAP 구현(TreeSHAP, KernelSHAP, LinearSHAP, DeepSHAP)은 계산 비용이 큰 샤플리 값 계산을 실제 모델에서 다룰 수 있게 만든다. 특히 TreeSHAP는 트리 기반 모델에 대해 효율적인 정확 계산을 가능하게 하여 프로덕션 배포에 실용적이다.

포스 플롯, 요약 플롯, 의존성 플롯 등 SHAP의 다양한 시각화는 복잡한 모델 동작을 다양한 청중이 이해할 수 있게 한다. 포스 플롯은 개별 예측을 설명하고, 요약 플롯은 전역 특성 중요도 패턴을 드러낸다.

SHAP는 강력하지만 한계도 있다. 계산 비용, 기준선 의존성, 상관된 특성과 관련된 어려움, 그리고 기여도가 인과관계가 아니라 상관관계를 반영한다는 점이다. WIA-AI-009 표준은 SHAP를 포괄적인 설명 가능성 전략의 일부로 사용하고, 상호 보완적인 방법 및 도메인 전문 지식과 결합할 것을 권장한다.

복습 문제

  1. 게임 이론의 샤플리 값과 머신러닝의 SHAP 값 사이의 연관성을 설명하라. "참가자", "연합", "보상"은 각각 무엇으로 대응되는가?
  2. SHAP 값이 만족하는 네 가지 성질은 무엇인가? 각 성질은 왜 중요한가?
  3. 정확한 SHAP 값을 계산하는 데 계산 비용이 큰 이유는 무엇인가? TreeSHAP는 트리 기반 모델에서 이 문제를 어떻게 극복하는가?
  4. "지역 정확성" 성질을 설명하라. SHAP 값의 합이 예측값과 기준값의 차이와 같아지는 것이 왜 바람직한가?
  5. TreeSHAP와 KernelSHAP를 비교하라. 각각은 어떤 경우에 사용하는가?
  6. SHAP 포스 플롯이란 무엇이며, 어떤 질문에 답하는가?
  7. SHAP는 어떻게 지역(인스턴스 수준) 설명과 전역(모델 수준) 설명을 모두 제공할 수 있는가?
  8. SHAP의 주요 한계는 무엇인가? SHAP가 오해를 불러일으키는 통찰을 줄 수 있는 두 가지 상황을 설명하라.
  9. SHAP 계산에서 "배경 데이터셋"은 어떤 역할을 하는가? 어떻게 선택해야 하는가?
  10. SHAP 값이 인과관계가 아니라 상관관계를 반영하는 이유를 설명하라. 이것이 실제 응용에서 왜 중요한가?