늦깎이 공대생의 인공지능 연구실
[해석할 수 있는 기계학습(5-10)] SHAP (SHapley Additive exPlanations) 본문
[해석할 수 있는 기계학습(5-10)] SHAP (SHapley Additive exPlanations)
Justin T. 2020. 11. 30. 02:30Lundberg와 Lee (2016)의 SHAP(SHAPley Additional exPlanations)는 개별 예측을 설명하는 방법입니다. SHAP는 최적의 섀플리값을 이론적으로 한 게임을 기반으로 합니다.
여기서 SHAP가 자체 챕터로 다루는 이유는 두 가지가 있습니다. 먼저, SHAP 저자들은 지역 대체모델에서 영감을 받은 섀플리값에 대한 대안적인 커널 기반 추정 접근 방식인 KernelSHAP를 제안했습니다. 그리고 나무 기반 모델을 위한 효율적인 추정 방식인 TreeSHAP를 제안했습니다. 두 번째로, SHAP는 섀플리값의 집계를 기반으로 한 많은 전역 해석 방법을 제공합니다. 이 포스팅에서 새로운 추정 방법과 전역 해석 방법을 모두 설명하고자 합니다.
정의
SHAP의 목적은 예측에 대한 각 특성의 기여도를 계산하여 인스턴스(instance) x의 예측을 설명합니다. SHAP 설명 방법은 협력 게임 이론에서 섀플리 값을 계산합니다. 데이터 인스턴스의 특성값은 연합에서 플레이어 역할을 합니다. 섀플리값은 특성들 사이에 "지급금" (= 예측)을 공정하게 분배하는 방법을 알려줍니다. 플레이어는 표 형식의 데이터에 대해 개별 특성값이 될 수 있습니다. 플레이어는 특성값의 그룹일 수도 있습니다. 예를 들어, 이미지를 설명하기 위해 픽셀을 수퍼 픽셀로 그룹화할 수 있으며 픽셀 사이에 분포된 예측도 가능합니다. SHAP가 표에 제시하는 혁신 중 하나는 섀플리값 설명이 선형 모델인 추가적인 특성 속성 방법으로 표현된다는 것입니다. 이러한 관점은 LIME 값과 새플리값을 연결합니다. SHAP는 설명을 다음과 같이 수행합니다.
$$g(z')=\phi_0+\sum_{j=1}^M\phi_jz_j'$$
이 때 g는 설명 모델이고, \(z'\in\{0,1\}^M\)는 연합 벡터, M은 최대 연합 사이즈, \(\phi_j\in\mathbb{R}\)는 특성 j에 대한 특성 속성(Feature Attribute)으로, 섀플리값을 나타냅니다. "연합 벡터"는 SHAP 논문에서 "간단한 특징(simplified features)"이라고 칭합니다. 왠지 이미지 데이터의 경우 이미지가 픽셀 단계에 표시되지 않고 슈퍼 픽셀에 집계되기 때문에 이러한 이름을 쓰게 된 것으로 보입니다. 차라리 z에 대해 연합을 설명하는 것과 같이 대해 생각하는 것이 도움이 될 듯 합니다. 연합 벡터에서 1을 입력하면 해당 특성값이 "있음"을, 0은 "없음"을 의미합니다. 섀플리값에 대해 알고 있다면 이러한 말은 친숙하게 들릴 것입니다. 섀플리값을 계산하기 위해 일부 특성값만 실행("있음")되고 일부는 실행("없음")되지 않는 것으로 시뮬레이션합니다. 연합의 선형 모델로서의 표현은 ϕ의 계산을 위한 수법이라 볼 수 있습니다. x의 경우, 관심 인스턴스(instance)인 연합 벡터 x'는 모든 1의 벡터(즉, 모든 특성값이 "있음"입니다. 이 공식은 다음과 같이 단순화할 수 있습니다.
$$g(x')=\phi_0+\sum_{j=1}^M\phi_j$$
이 공식은 섀플리값 장에서 유사한 표기법으로 찾을 수 있습니다. 실제 견적에 대한 자세한 내용은 나중에 확인할 수 있습니다. ϕ의 속성에 대해 먼저 이야기한 후에 ϕ의 추정에 대해 자세히 살펴보겠습니다.
섀플리값은 효율(Efficiency), 대칭(Symmetry), 모조(Dummy) 및 부가(Additivity)의 특성을 만족하는 유일한 솔루션입니다. SHAP는 섀플리값을 계산하기 때문에 이러한 값을 만족시킵니다. SHAP 문서에서 SHAP 속성과 섀플리속성의 불일치를 확인할 수 있습니다. SHAP는 다음과 같은 세 가지 그럴싸한 특성을 설명합니다.
1) 지역정확성(Local Accuracy)
$$f(x)=g(x')=\phi_0+\sum_{j=1}^M\phi_jx_j'$$
만약 우리가 \(\phi_0=E_X(\hat{f}(x))\)로 정의하고 모든 \(x_j'\)를 1로 하였을 때, 이는 섀플리 효율성 속성입니다. 다른 이름을 사용하고 연합 벡터를 사용하는 경우에만 사용할 수 있습니다.
$$f(x)=\phi_0+\sum_{j=1}^M\phi_jx_j'=E_X(\hat{f}(X))+\sum_{j=1}^M\phi_j$$
2) 없어짐(Missingness)
$$x_j'=0\Rightarrow\phi_j=0$$
없어짐(Missingness)은 없어진 특성이 0으로 지정된다는 의미입니다. \(x_j'\)는 연합을 나타냅니다. 여기서 값이 0일 경우 특성값이 '없음'을 나타냅니다. 연합 표기법에서, 설명될 인스턴스의 모든 특성값 \(x_j'\)는 '1''이어야 할것입니다. 0의 존재는 관심있는 인스턴스에 대한 특성값이 없어진 것을 의미할것입니다. 이 속성은 "정상" 섀플리값의 속성에 속해있지 않습니다. 그렇다면 왜 SHAP이 필요한 것일까요? Lundberg는 이를 "minor book-keeping property"이라고 부릅니다. 없어진 특성은 \(x_j'=0\)으로 곱하기 때문에 이론적으로 지역 정확도 속성을 손상시키지 않고 임의의 섀플리값을 가질 수 있습니다. 없어짐 속성은 없어진 특성의 섀플리값이 0이 되도록 합니다. 실제로 이는 일정한 특성에만 관련이 있습니다.
3)일관성(Consistency)
수식 \(f_x(z')=f(h_x(z'))\)가 있다고 하고 \(z_{\setminus{}j}'\)는 \(z_j'=0\)를 나타낸다고 합시다. 다음과 같은 식을 만족하는 두 모델 f와 f'가 있을 때
$$f_x'(z')-f_x'(z_{\setminus{}j}')\geq{}f_x(z')-f_x(z_{\setminus{}j}')$$
모든 입력 \(z'\in\{0,1\}^M\)에 대하여
$$\phi_j(f',x)\geq\phi_j(f,x)$$
일관성 속성은 모델이 변경되어 특성값의 한계 기여도가 증가하거나 동일하게 유지되는 경우(다른 특성과 무관하게) 섀플리 값도 증가하거나 그대로 유지된다 합니다. 일관성으로부터 섀플리 속성은 Lundberg와 Lee의 논문에 설명된 대로 선형성, 모조 및 대칭성을 따릅니다.
KernelSHAP
KernelSHAP는 예측에 대한 각 특성값의 기여도에 대한 어느 한 인스턴스 x를 추정합니다. KernelSHAP는 다음과 같이 5단계로 구성됩니다.
- 연합 \(z_k'\in\{0,1\}^M,\quad{}k\in\{1,\ldots,K\}\)(1 = 연합 특성이 있음, 0 = 없음) 샘플링
- 먼저 \(z_k'\)를 본래의 특성 공간으로 변환한 다음 모델 f=\(f(h_x(z_k'))\)에 적용함으로서 각각의 에 대한 예측 \(z_k'\)을 얻음
- SHAP 커널을 적용하여 각 \(z_k'\)에 대한 가중치를 계산
- 가중 선형 모델을 적합화
- 선형 모델로부터의 계수값인 섀플리값 \(\phi_k\)을 반환
우리는 0과 1의 연쇄를 가질 때까지 반복된 동전 던지기로 무작위 연합을 만들 수 있습니다. 예를 들어 (1,0,1,0)의 벡터는 첫 번째와 세 번째 특성의 연합를 의미합니다. K 샘플링된 연합은 회귀 모델의 데이터 집합이 됩니다. 회귀 모델의 목표는 연합에 대한 예측입니다. 아마도 어떤 분께서는 "모델이 이진 연합 데이터에 대해 학습되지 않았을텐데 예측이 가능한가요"라고 말하시는 분이 있을겁니다.
특성값의 연합에서 유효한 데이터 인스턴스를 얻기 위해, 우리는 다음과 같은 조건의 함수를 필요로 합니다.
$$h_x(z')=z\;\;where\;\;h_x:\{0,1\}^M\rightarrow\mathbb{R}^p$$
함수 \(h_x\)는 1을 설명하려는 인스턴스 x의 해당 값에 매핑합니다. 표 형식의 데이터의 경우 데이터에서 추출한 다른 인스턴스의 값에 0을 매핑합니다. 즉, "특성 값이 없음"과 "특성 값이 데이터의 무작위 특성값으로 대체됨"을 동일시합니다. 표 형식 데이터의 경우 아래의 그림은 결합에서 특성값으로 매핑되는 것을 나타냅니다.
표 데이터에 대해 \(h_x\)는 \(X_C\)와 \(X_S\)를 각각 독립적으로 다루고, 주변 분포(Marginal distribution)에 통합됩니다.
$$f(h_x(z'))=E_{X_C}[f(x)]$$
주변 분포에서 표본을 추출한다는 것은 있음 특성과 없음 특성 사이의 종속 구조를 무시한다는 것을 의미합니다. 따라서 KernalSHAP는 모든 순열 기반 해석 방법과 동일한 문제를 겪습니다. 추정치는 있음직하지 않은 경우에 너무 큰 비중을 둡니다. 결과를 신뢰할 수 없게 될 수 있는 것이지요. 그러나 주변 분포로부터 표본을 추출해야 합니다. 없음 특성값이 조건부 분포에서 추출되는 경우 결과값은 더 이상 섀플리값이 아닙니다. 결과값은 결과에 기여하지 않는 특성이 0의 섀플리 값을 가져야 한다는 모조의 섀플리 공리를 위반할 수 있습니다.
이미지의 경우 다음 그림에서 가능한 매핑 함수를 설명합니다.
LIME과의 큰 차이점은 회귀 모형의 인스턴스 가중치입니다. LIME은 인스턴스가 원래 인스턴스와 얼마나 가까운지에 따라 가중치를 부여합니다. 연합 벡터에 0이 많을수록 LIME의 가중치가 작아집니다. SHAP는 섀플리값 추정에서 얻을 가중치에 따라 샘플링된 인스턴스들의 가중치를 측정합니다. 작은 연합(적은 1의 연합)과 큰 연합(많은 1의)은 가장 큰 가중치를 갖습니다. 직관적인 관점에서 다음과 같이 생각할 수 있습니다. 우리는 개별적인 특성에 대해 가장 많이 학습합니다. 만약 우리가 이 효과들을 분리해서 연구할 수 있다면 말이죠. 연합이 단일한 특성으로 구성된다면, 우리는 그 특성들이 예측에 미치는 고립된 주효과에 대해 배울 수 있습니다. 연합이 하나의 특성을 제외한 모든 특성으로 구성된 경우 이 특성의 전체 효과(주효과와 특성 상호 작용)에 대해 알아볼 수 있습니다. 연합이 특성의 절반으로 이루어진다면, 우리는 개별 특성의 기여에 대해 거의 배우지 못합니다. 왜냐하면, 특성의 절반으로도 가능한 많은 연합이 있기 때문입니다. 섀플리를 준수하는 가중치를 달성하기 위해 Lundberg는 SHAP 커널을 제안합니다.
$$\pi_{x}(z')=\frac{(M-1)}{\binom{M}{|z'|}|z'|(M-|z'|)}$$
여기서 M은 연합의 최대 사이즈를, \(|z'|\)는 인스턴스 z'의 있음 특성의 갯수를 나타냅니다. Lundberg와 Lee는 이 커널 가중치로 나타나는 선형회귀가 섀플리값을 나타낸다는 것을 보여줍니다. 만약 이 연합 데이터를 LIME과 함께 SHAP 커널을 사용한다면, LIME 또한 섀플리값을 추정할 수 있습니다.
우리는 연합의 표본 추출에 대해 좀 더 똑똑해질 수 있습니다. 가장 작은것과 큰것의 연합이 그 가중치의 대부분을 차지합니다. 무작정 표본을 추출하는 대신 이러한 고가중치 연합을 포함하기 위해 샘플링 예산 K의 일부를 사용함으로써 섀플리값 추정치를 더 잘 얻습니다. 1과 M-1 특성으로 가능한 모든 연합으로부터 시작하게 되는데, 이는 총 2배의 M 연합을 만듭니다. 예산이 충분히 남았을 때(현재 예산은 K - 2M), 두 가지 특성과 M-2 특성등을 가진 연합을 포함시킬 수 있습니다. 남은 연합 크기에서, 우리는 재조정된 가중치로 표본을 추출합니다.
우리는 데이터, 목표값, 그리고 가중치를 가지고 있습니다. 가중 선형 회귀 분석 모델을 구축하는 데 필요한 모든 것은 다음과 같습니다.
$$g(z')=\phi_0+\sum_{j=1}^M\phi_jz_j'$$
다음 손실함수 L을 최적화하여 선형모델 g를 훈련시키면 다음과 같습니다.
$$L(f,g,\pi_{x})=\sum_{z'\in{}Z}[f(h_x(z'))-g(z')]^2\pi_{x}(z')$$
여기서 Z는 훈련데이터입니다. 이는 우리가 보통 선형 모델에 최적화하는 오래되고 지루하지만 그나마 좋은 오차 제곱합입니다. 모형의 추정된 계수인 \(\phi_j\)은 섀플리값입니다.
선형 회귀 설정을 하는 상황이기에, 회귀 분석에 표준 도구를 사용할 수도 있습니다. 예를 들어 정규화 항을 추가하여 모델을 희박하게 만들 수 있습니다. L1 페널티를 손실함수 L에 추가하면, 우리는 희박한 설명을 만들 수 있습니다. (결과 계수가 여전히 유효한 섀플리값인지는 확신할 수 없습니다.)
TreeSHAP
Lundberg 외 2인(2018)은 의사결정 트리, 랜덤 포레스트 및 경사 부스트 트리(Gradient Boosted Tree)와 같은 트리 기반 기계학습 모델을 위한 SHAP의 변종인 TreeSHAP를 제안했습니다. TreeSHAP는 KernelSHAP에 대한 빠른 모델별 대안으로 도입되었지만 비직관적 특성 속성을 생성할 수 있는 것으로 밝혀졌습니다.
TreeSHAP는 주변 기대값(Marginal expection) 대신에 조건 기대값(Conditional Expectation) \(E_{X_S|X_C}(f(x)|x_S)\)을 사용하여 값 함수를 정의합니다. 조건 기대값의 문제는 예측 함수 f에 영향을 미치지 않는 특성이 0과 다른 TreeSHAP 추정치를 얻을 수 있다는 것입니다. 0이 아닌 추정치는 특성이 예측치에 실제로 영향을 미치는 다른 특성과 상관 있을 때 발생할 수 있습니다.
TreeSHAP는 얼마나 빠를까요? 정확한 KernelSHAP와 비교하여 \(O(TL2^M)\)로부터 \(O(TLD^2)\)까지 계산 복잡도를 줄입니다. 여기서 T는 트리의 갯수이고, L은 트리의 최대 잎 수이고 D는 트리의 최대 깊이입니다.
TreeSHAP는 조건 기대값 \(E_{X_S|X_C}(f(x)|x_S)\)를 사용하여 효과를 추정합니다. 단일 트리, 인스턴스 x 및 특성 부분집합 S에 대한 예상 예측값을 계산하는 방법을 직관적으로 설명드리겠습니다. 만약 S가 모든 특성의 집합이라면 모든 특성에 대해 조건화 하였을때 인스턴스 x가 떨어지는 노드의 예측값은 예상된 예측값이 될 것입니다. 어떤 특성에도 조건이 없다면 (만약 S가 비어 있다면) 모든 터미널 노드의 예측값에 대한 가중치 평균을 사용할 것입니다. S에 모든 특성이 아닌 일부 특성이 포함된 경우 영향력이 없는(Unreachable) 노드의 예측은 무시합니다. 영향력이 없다는 것은 이 노드로 이어지는 의사결정 경로가 \(x_s\)의 값과 모순됨을 의미합니다.
나머지 터미널 노드에서는 노드 크기(즉, 해당 노드의 학습 샘플 수)에 따라 가중치가 부여된 예측을 평균으로 나타냅니다. 노드당 인스턴스 수에 따라 가중치가 부여된 나머지 터미널 노드의 평균은 주어진 S에 대해 예상되는 예측값입니다. 문제는 가능한 각 특성값의 부분 집합 S에 대해 이 절차를 적용해야 한다는 것입니다. TreeSHAP는 지수 대신 다항식 시간으로 계산합니다. 기본 아이디어는 가능한 모든 부분집합 S를 동시에 트리 아래로 밀어 넣는 것입니다. 각 의사결정 노드에 대해 부분집합 수를 추적해야 합니다. 이는 상위 노드의 부분집합과 분할 특성에 따라 달라집니다. 예를 들어 트리의 첫 번째 분할이 특성 x3에 있으면 특성 x3을 포함하는 모든 부분집합이 한 노드(x가 이동하는 노드)로 이동합니다. 특성 x3이 포함되지 않은 부분집합은 가중치가 줄어든 두 노드로 이동합니다. 불행히도 크기가 다른 부분집합은 가중치가 다릅니다. 알고리즘은 각 노드에 있는 부분집합의 전체 가중치를 추적해야 합니다. 이것은 알고리즘을 복잡하게 만듭니다. TreeSHAP에 대한 자세한 내용은 관련 논문을 참조합니다. 컴퓨팅을 더 많은 트리로 확장할 수 있습니다. 샤플리 값의 부가(Additivity) 속성 덕분에, 트리 앙상블의 섀플리값은 개별 트리의 섀플리값의 (가중치) 평균입니다.
다음으로 SHAP에 대한 설명을 예제를 살펴보겠습니다.
예제
자궁경부암 발생 위험을 예측하기 위해 100그루의 트리로 랜덤포레스트 분류방법으로 학습시켰습니다. 여기서 SHAP를 사용하여 개별 예측을 설명하고자 합니다. 랜덤 포레스트는 트리의 앙상블이기 때문에 느린 KernelSHAP 방법 대신 빠른 TreeSHAP 추정 방법을 사용할 수 있습니다. 그러나 이 예제에서는 조건부 분포에 의존하는 대신 한계 분포(Marginal Distribution)를 사용합니다. 이러한 내용들은 패키지에 설명되어 있지만 원본 페이퍼에서는 설명되어 있지 않습니다. Python TreeSHAP 함수는 데이터의 행에 따라 선형적으로 확장되므로 한계 분포에서는 속도가 느리지만 KernelSHAP보다 빠릅니다.
여기서 한계 분포를 사용하기 때문에 섀플리값 챕터에서 다룬 해석과 동일합니다. 그러나 Python shap 패키지는 다른 시각화를 제공합니다. 섀플리값과 같은 특성 속성을 "강제"로 시각화할 수 있습니다. 각 특성값은 예측값을 증가시키거나 감소시키는 힘입니다. 예측값은 기준선에서 시작됩니다. 섀플리값의 기준은 모든 예측값의 평균입니다. 그래프에서 각 섀플리값은 예측을 증가(양수 값) 또는 감소(음수 값)하도록 밀어내는 화살표입니다. 이러한 힘은 데이터 인스턴스의 실제 예측에서 서로 균형을 이룹니다.
아래 그림은 자궁경부암 데이터 집합의 두 여성에 대한 SHAP 설명력 그림을 보여줍니다.
위는 개별적인 예측에 대한 설명입니다.
섀플리값은 전역(Global) 설명으로 결합할 수 있습니다. 모든 인스턴스에 대해 SHAP를 실행하면 섀플리값의 행렬을 얻을 수 있습니다. 이 행렬에는 데이터 인스턴스당 하나의 행과 특성당 하나의 열이 있습니다. 우리는 이 행렬의 섀플리값을 분석함으로써 전체 모델을 해석할 수 있습니다.
이제 SHAP 특성 중요도를 살펴보겠습니다.
SHAP 특성 중요도
SHAP 특성 중요도는 간단합니다. 큰 절대 섀플리값 특성이 중요합니다. 전역중요도(Global Importance)를 원하기 때문에 데이터 전체에서 특성당 절대 섀플리 값을 평균화합니다.
$$I_j=\sum_{i=1}^n{}|\phi_j^{(i)}|$$
다음으로, 중요도를 줄임으로써 특성을 분류하고 이미지로 나타냅니다. 다음 그림은 자궁경부암 예측을 위해 이전에 학습된 랜덤포레스트에 대한 SHAP 특성중요도를 보여줍니다.
SHAP 특성 중요도는 순열 특성 중요도에 대한 대안입니다. 두 가지 중요도 측도 모두 큰 차이가 있습니다. 순열 특성의 중요도는 모델 성능 저하를 기반으로 합니다. SHAP는 특성 속성의 크기를 기반으로 합니다.
특성 중요도 그래프는 유용하지만 중요도를 벗어나는 정보는 포함되어 있지 않습니다. 자세한 내용은 SHAP 요약도를 살펴보겠습니다.
SHAP 요약도(SHAP Summary Plot)
요약도는 특성 중요도와 특성 효과를 결합합니다. 요약도의 각 점은 특성과 인스턴스의 섀플리값입니다. Y축의 위치는 특성에 따라, X축의 위치는 섀플리값으로 결정됩니다. 색상은 낮음에서 높음까지의 특성값을 나타냅니다. 겹치는 점은 Y축 방향으로 조금씩 움직이므로 특성별 섀플리값의 분포를 알 수 있습니다. 특성은 중요도에 따라 정렬됩니다.
요약도에서는 특성의 값과 예측에 미치는 영향 사이의 관계에 대한 첫 번째 표시를 볼 수 있습니다. 하지만 정확한 형태의 관계를 보려면 SHAP 의존도를 살펴봐야 합니다.
SHAP 의존도(SHAP Dependency Plot)
SHAP 특성 의존도는 가장 간단한 전역 해석도일 수 있습니다. 1) 특성을 선택합니다. 2) 각 데이터 인스턴스에 대해 X축에 특성값을 표시하고 Y축에 해당하는 섀플리값을 사용하여 점을 표시합니다. 3) 완료!
수학적으로 그림에는 다음과 같은 점이 포함됩니다: \(\{(x_j^{(i)},\phi_j^{(i)})\}_{i=1}^n\)
다음 그림은 수년간 호르몬 피임약에 대한 SHAP 특성 의존도를 보여줍니다.
SHAP 의존도는 부분의존도 및 누적 지역 효과도에 대한 대안입니다. PDP 및 ALE는 평균 효과를 나타내지만 SHAP 의존도는 Y축에 대한 분산도 표시합니다. 특히 상호작용의 경우 SHAP 의존도가 Y축으로 훨씬 더 분산됩니다. 이러한 특성 상호작용을 강조 표시하여 의존도를 개선할 수 있습니다.
SHAP 상호작용값(SHAP Interactive Values)
상호작용 효과는 개별 특성 효과를 고려한 후에 결합된 추가 특성 효과입니다. 게임 이론의 섀플리 상호작용 지수는 다음과 같이 정의됩니다. \(i\neq{}j\)일때,
$$\phi_{i,j}=\sum_{S\subseteq\setminus\{i,j\}}\frac{|S|!(M-|S|-2)!}{2(M-1)!}\delta_{ij}(S)$$
그리고
$$\delta_{ij}(S)=f_x(S\cup\{i,j\})-f_x(S\cup\{i\})-f_x(S\cup\{j\})+f_x(S)$$
이 공식은 특성의 주효과를 차감하여 개별 효과를 고려한 후 순수 상호작용 효과를 얻습니다. 섀플리값 계산에서와 같이 가능한 모든 특성 결합 S에 대한 값을 평균화합니다. 모든 형상에 대한 SHAP 상호 작용 값을 계산하면 차원 M x M으로 인스턴스당 하나의 행렬을 얻을 수 있습니다. 여기서 M은 특성 갯수입니다.
상호 작용 인덱스를 어떻게 사용할 수 있을까요? 예를 들어, SHAP 특성 종속도를 가장 강한 상호작용도로 색을 자동으로 지정하려면 다음과 같이 합니다.
집단 SHAP값(Clustering SHAP values)
섀플리값을 사용하여 데이터를 집단화(Clustering)할 수 있습니다. 집단화의 목적은 유사한 인스턴스의 그룹을 찾는 것입니다. 일반적으로 집단화는 특성을 기반으로 합니다. 특성은 종종 다른 척도로 표시됩니다. 예를 들어 높이를 미터 단위로, 색 강도가 0에서 100으로, 센서 출력이 -1에서 1로 측정될 수 있습니다. 이렇게 서로 다르고 비교 불가능한 특성을 가진 인스턴스 간의 거리를 계산하는 것이 어렵습니다.
SHAP 집단화는 각 인스턴스의 섀플리값을 집단화하여 작동합니다. 즉, 유사성을 설명하여 인스턴스를 군집화합니다. 모든 SHAP 값은 예측 공간의 단위와 동일한 단위를 가집니다. 모든 집단화 방법을 사용할 수 있습니다. 다음 예제에서는 계층적 집적 군집화를 사용하여 인스턴스를 정렬합니다.
아래의 그래프는 인스턴스의 예측을 설명하는 여러 개의 포스플롯(Force Plot)으로 구성됩니다. 포스플롯을 수직으로 회전시키고 군집화 유사성에 따라 나란히 배치합니다.
장점
SHAP는 섀플리값을 계산하므로 섀플리값의 모든 이점이 적용됩니다. SHAP는 게임 이론에서 확고한 이론적 토대를 가지고 있습니다. 예측값은 특성값 사이에 정직하게 분산되어 있습니다. 예측과 평균 예측을 비교하는 대조적인 설명을 얻을 수 있습니다.
SHAP는 LIME 값과 섀플리값을 연결합니다. 이것은 두 가지 방법을 더 잘 이해하는 데 매우 유용합니다. 해석 가능한 기계학습의 분야를 통합하는 데도 도움이 됩니다.
SHAP는 트리 기반 모델을 신속하게 구현합니다. 이것이 SHAP의 인기에 중요한 요소라고 생각합니다. 왜냐하면 섀플리값을 채택하는 가장 큰 장벽은 느린 연산이기 때문입니다.
빠른 계산을 통해 전역 모델 해석에 필요한 많은 섀플리값을 계산할 수 있습니다. 전역 해석 방법에는 특성중요도, 특성의존도, 상호작용도, 군집화 및 요약도가 포함됩니다. SHAP를 사용하면 섀플리값이 전역 해석의 "원자 단위"이기 때문에 전역 해석은 지역 설명과 일치합니다. 지역 설명에 LIME을 사용하고 전역 설명에 부분의존도 그림 및 순열 특성 중요도를 더하면 공통된 기초가 부족합니다.
단점
KernelSHAP는 느립니다. 따라서 여러 인스턴스에 대해 섀플리값을 계산하려는 경우 KernelSHAP를 사용할 수 없습니다. 또한 SHAP 특성중요도와 같은 모든 전역 SHAP 방법은 많은 인스턴스에 대한 섀플리값을 계산해야 합니다.
KernelSHAP는 특성 종속성을 무시합니다. 대부분의 다른 순열 기반 해석 방법은 이러한 문제를 가지고 있습니다. 특성 값을 랜덤 인스턴스의 값으로 대체하면 일반적으로 한계 분포(Marginal Distribution)에서 랜덤하게 추출하는 것이 더 쉽습니다. 그러나 특성이 상관 관계 등 종속적인 경우에는 가능성이 낮은 데이터 포인트에 너무 많은 가중치를 부여하게 됩니다. TreeSHAP는 조건부 예상 예측값을 명시적으로 모델링하여 이 문제를 해결합니다.
TreeSHAP는 비직관적 특성 속성을 생성할 수 있습니다. TreeSHAP는 있음직하지 않은 데이터 지점으로 추론하는 문제를 해결하지만 새로운 문제가 발생합니다. TreeSHAP는 조건부 기대 예측값에 의존하여 값 함수를 변경합니다. 값 함수의 변경으로 예측에 영향을 주지 않는 특성은 0과 같이 다른 TreeSHAP 값을 얻을 수 있습니다.
섀플리값의 단점은 SHAP에도 적용됩니다. 섀플리값은 잘못 해석될 수 있으며 TreeSHAP를 제외하고 새 데이터를 계산하기 위해 데이터에 접근해야 합니다.
소프트웨어
SHAP 저자들은 저자들은 Shap Python 패키지에 shap를 구현했습니다. 이 구현은 Python용 scikit-learn 기계 학습 라이브러리의 트리 기반 모델에 적용됩니다. shap 패키지는 이 포스팅의 예에도 사용되었습니다. SHAP는 트리 부스팅 프레임워크 xgboost 및 LightGBM에 통합되어 있습니다. R에는 shapper와 fastshap 패키지가 있습니다. 또한 SHAP는 R xgboost 패키지에 포함되어 있습니다.
참고자료: https://christophm.github.io/interpretable-ml-book/shap.html
'해석할 수 있는 기계학습 > 5. 모델 불특정성 방법' 카테고리의 다른 글
[해석할 수 있는 기계학습(5-9)] 섀플리값(Shapley Values) (0) | 2020.10.25 |
---|---|
[해석할 수 있는 기계학습(5-8)] 범위 규칙(Anchor) (0) | 2020.08.17 |
[해석할 수 있는 기계학습(5-7)] 지역 대체모델(LIME) (0) | 2020.07.11 |
[해석할 수 있는 기계학습(5-6)] 전역 대체모델(Global Surrogate) (0) | 2020.06.17 |
[해석할 수 있는 기계학습(5-5)] 순열 특성 중요도(Permutation Feature Importance) (0) | 2020.06.15 |