iT邦幫忙

2021 iThome 鐵人賽

DAY 27
0
自我挑戰組

Python資料分析學習地圖系列 第 27

Day 27 : 模型解釋 Shap

在經過集成式學習(ensemble learning)之後的 tree based (像是 Random Forest, XGBoost, LightGBM) 機器學習演算法,該方法通常可以提高相當不錯的模型成效。但是其中的理論很難讓人去參透,常常被人詬病說是一個黑盒子。 一個黑盒子是很難去判斷裡面做了什麼事情,我們如果要進行做決策、改良模型等等,都需要了解這個演算法到底學習到了什麼。這時候模型解釋就相當重要,有一塊領域 Explainable AI 就是在探討這方面的知識。

「人非聖賢,孰能無過」,機器與人一樣不是聖賢,都可能會有犯錯的可能性。當發生預測錯誤的時候,若我們能夠透過解釋型 AI 告訴合理的原因,或許可為下一次改版做一些根因探討。

「科技始終來自於人性」,我們有時候很難跟我們的需求方講解或討論這些演算法的深奧的原理或數學知識,也隨著我們越來越倚重機器學習產出的結果,我們勢必也需要能了解其中的原因,我們才可以用的安心,讓大家放心(好像推廣產品XDDD)。

Shap

Shap 最早來源是賽局理論,詳細可以參考wiki。Shap 是將模型的預測解釋分析成每個因子的貢獻,計算每個特徵的 shapely value,來衡量該特徵對預測的貢獻度。如此一來,我們可以詳細了解每個因子的貢獻程度。

圖片來源自 shap 的 github 連結

Shap 是一個可以將機器學習透過視覺化方式輔助理解的 Explainable AI 套件,優點如下

  • 簡單安裝
    pip install shap
    
  • 視覺化呈現多元
  • 容易上手操作

實作程式碼

import xgboost
import shap

classifier = xgboost.XGBClassifier().fit(X_train, y_train)

explainer = shap.Explainer(classifier)
shap_values = explainer(X_train)

單一資料解釋

# waterfall
shap.plots.waterfall(shap_values[0])
# force plot
shap.force_plot(explainer.expected_value, shap_values.values[0,:], X_train.iloc[0,:])

紅色代表正的貢獻度、藍色代表負的貢獻度

  • 正面的影響:
    • Age: +3.3
    • Salary: +2
  • 負面的影響:
    • VIP: -0.32
    • Gender: -0.3

整體資料解釋

1. Summary plot
  • 點的顏色: Feature value 的大小,越紅越高、越藍越低;
  • X 軸: shape value 的範圍
shap.summary_plot(shap_values, X_train)

  • VIP 的註記對於分類很有幫助
  • Age、Salary 的大小某種程度都會影響預測值;而 Gender 並沒有什麼幫助
  • 年齡越小對於預測值的貢獻度越低
2. Aggregated force plot

這張圖真的是 shap 一大賣點,還可以操作 x 、y 軸 切換不同的維度看資料

# 看整體資料
shap.force_plot(explainer.expected_value, shap_values.values, X_train, plot_cmap="DrDb")

其他圖參考

# bar plot
shap.plots.bar(shap_values)
# scatter plot
shap.plots.scatter(shap_values[:, "Age"], color=shap_values[:,"VIP"])


小結論

希望透過 shap 解釋性 AI 套件可以幫助在機器學習迷惘在黑盒子的人們,藉此大家可以更廣泛地應用機器學習所帶來的服務。/images/emoticon/emoticon07.gif

github 程式碼

更詳細可以請參考連結


上一篇
Day 26 : LightGBM 與 GridSearch
下一篇
Day 28 : Git
系列文
Python資料分析學習地圖30

尚未有邦友留言

立即登入留言