可解釋 AI (XAI) 系列 — SHAP

張家銘
Taiwan AI Academy
Published in
7 min readJul 8, 2021
SHAP 如何解釋模型?

SHAP (SHapley Additive exPlanations) 是一種機器學習的可解釋方法,在介紹 SHAP 之前需要先介紹什麼是 Shapley Values

Shapley Values

Shapley Values 是博弈論大師 Lloyd Stowell Shapley 基於合作賽局理論 (cooperative game theory) 提出來的,這種方法根據 玩家們 遊戲 中所得到的 總支出,公平的分配 總支出玩家們

  • 玩家們 → features value of the instance
  • 遊戲 → model
  • 總支出 → prediction

Shapley Values 透過 S 中玩家的值函數 val 定義的:

  • x_1, …, x_p 為建立模型所使用的所有特徵,p 為所有的特徵數量。
  • S 為排除 x_j (想看這個玩家的貢獻程度) 的子集合。
  • val(S) 是對於集合 S 的預測值減去期望值 (平均預測值)。

這些公式是怎麼來的?我們來實際看一個例子就可以明白了。

An example

假設工程師們需要合作寫一個 project,共計 100 行 code,圖一 顯示了工程師期望產出 code 的行數,也就是對應的 val(S)

圖一,工程師期望產出 code 的行數

而我們想要計算出 x1 這位工程師的 Shapley values,也就是他的貢獻值該如何計算呢?我們來看一下 圖二 的計算流程,三位工程師,因此會有六種排列組合,需要針對每種情形來計算出 x1 的 Shapley value,因為先後順序是會影響他的貢獻值的,接著再把六個值加總平均就可以得到 x1 的 Shapley values 了。

圖二,x1 的 Shapley values 計算流程

那我們就可以知道為什麼 Shapley values 的公式要這樣計算了,我們在這邊帶入公式給各位看,可以看到得到的結果都是 34.17

最後我們可以分別計算出 x2 和 x3 的 Shapley values,如 圖三 所示,最後得到 x1 是 34.17, x2 是 41.7, x3 是 24.17,可以發現這三個值相加其實就等於 100 行 code,簡單來說,這個 Shapley values 其實就是想要衡量個別的特徵對模型的貢獻程度為何,而不受到其他特徵的影響。

圖三,x1, x2, x3 的 Shapley values 計算過程

讀者看到這邊可以發現,其實這樣計算 Shapley values 是很花計算資源的,而且當 feature values 比較多時,可能的聯盟數量呈指數性增加,因此對於計算精確的 Shapley value 是一大問題,對於這個問題 Štrumbelj et al. 提出蒙地卡羅採樣的近似值 (Shapley Sampling)

  • x_(+j)=(x_1, …, x_(j-1), x_j, z_(j+1)…z_p),意思是除了特徵值 x_j 以外,其他不在聯盟內的特徵值被來自隨機數據點 z 的特徵值替換。
  • x_(-j)=(x_1, …, x_(j-1), z_j, z_(j+1)…z_p),表示連特徵值 x_j 都要替換。

除了這個方法,還可以使用 SHAP (SHapley Additive exPlanations)來估計 Shapley values,SHAP 將模型的預測值解釋為每個輸入特徵的歸因值之和。換句話說,就是計算每一個特徵的 shapley value,依此來衡量特徵對最終預測值的影響。用公式表示:

  • g(z^′ ) 為被簡化的可解釋的模型
  • z^′ 表示相應特徵是否存在 (1 或 0),M 是輸入特徵的個數,因此可以表示成 z^′∈{0, 1}^M
  • ϕ_j 代表我們要求的 Shapley value
  • ϕ_0 代表平均值

Kernel SHAP

圖四,Kernel SHAP 的計算流程

圖四 說明瞭他的計算流程,下面為各位詳細說明:

Step 1:

我們只想要求 Age 的 Sapley values,而 Weight 和 Color 都先不要求,因此將 Age, Weight, Color 的 z 設為 (1, 0, 0)

Step 1

Step 2:

我們取得 DATA 裡的值,假設有一筆資料的 Age, Weight, Color 為 0.5, 20, Blue,由於我們 Age, Weight, Color 的 z 設為 (1, 0, 0),因此只須保留 Age 的正確性 (0.5),其他兩個都隨機替代其他資料存在的值,例如 Weight 從 20 換成 17、Color 從 Blue 換成 Pink,注意,17 和 Pink 必須要是 DATA 裡有存在的值哦,不能隨機填。

Step 3:

Kernel SHAP 中權重的計算根據 Simplified Features 中 0 或 1 的數量,若有很多 0 或是很多 1,我們取較高的權重,若 0 和 1 的數量相近則取較低的權重。

Step 4:

最後再根據資料來 fit 一個 weighted linear model,而獲得的 weight 其實就是特徵對應的 Shapley values

總結

SHAP 是一個很有公信力的可解釋性工具,因為背後有強大的數學理論支持它,而 shap 在程式上的使用和畫面的呈現也很簡單直覺,有興趣的可以參考下面兩篇實作文章

Explain Your Machine Learning Model by SHAP. (Part 1)

Explain Your Machine Learning Model by SHAP. (Part 2)

在我的 github 也有更多詳盡的介紹,有興趣的可以參考以下連結:

https://github.com/d246810g2000/Explainable_AI/tree/main/ML

--

--