您當前的位置:首頁 > 娛樂

再見"黑匣子模型"!SHAP 可解釋 AI (XAI)實用指南來了!

作者:由 Python與資料探勘 發表于 娛樂時間:2021-06-09

歡迎關注 @Python與資料探勘 ,專注Python、資料分析、資料探勘、好玩工具!

原文:再見“黑匣子模型”!SHAP 可解釋 AI (XAI)實用指南來了!

作者:機器貓

我們知道模型可解釋性已成為機器學習管道的基本部分,它使得機器學習模型不再是“黑匣子”。幸運的是,近年來機器學習相關工具正在迅速發展並變得越來越流行。本文主要是針對迴歸問題的 SHAP 開源 Python 包進行 XAI 分析。

Lundberg 和 Lee (2016) 的 SHAP(Shapley Additive Explanations)是一種基於遊戲理論上最優的 Shapley value來解釋個體預測的方法。 Shapley value是合作博弈論中一種廣泛使用的方法,它具有令人滿意的特性。從博弈論的角度,把資料集中的每一個特徵變數當成一個玩家,用該資料集去訓練模型得到預測的結果,可以看成眾多玩家合作完成一個專案的收益。Shapley value,透過考慮各個玩家做出的貢獻,來公平的分配合作的收益。

在本文中,我們將使用來自 sklearn 資料集的波士頓房價資料集進行示例展示,它是一個簡單的迴歸問題。

boston

=

datasets

load_boston

()

X_train

X_test

y_train

y_test

=

model_selection

train_test_split

boston

data

boston

target

random_state

=

0

拆分資料集進行訓練和測試後,建立模型並擬合。

regressor

=

ensemble

RandomForestRegressor

()

regressor

fit

X_train

y_train

);

計算Shapley value

使用 SHAP 包,計算非常簡單明瞭。我們只需要模型(regressor)和資料集(X_train)。

# Create object that can calculate shap values

explainer = shap。TreeExplainer(regressor)

# Calculate Shap values

shap_values = explainer。shap_values(X_train)

計算 SHAP 值後,我們可以繪製幾個分析圖,以幫助我們理解模型。

SHAP 特徵重要性

SHAP 提供了特徵重要性的計算方式,取每個特徵的SHAP value的絕對值的平均值作為該特徵的重要性,得到一個標準的條形圖。在下圖中,你可以看到由 SHAP value計算的特徵重要性與使用 scikit-learn 計算的特徵重要性之間的比較,它們看起來非常相似,但它們並不相同。

shap。summary_plot(shap_values, X_train, feature_names=features, plot_type=“bar”)

再見"黑匣子模型"!SHAP 可解釋 AI (XAI)實用指南來了!

SHAP Summary Plot

Summary_plot 結合了特徵重要性和特徵效果。Summary_plot 為每一個樣本繪製其每個特徵的Shapley value。y 軸上的位置由特徵確定,x 軸上的位置由每 Shapley value 確定。顏色表示特徵值(紅色高,藍色低),可以看到特徵 LSTAT 是最重要的特徵,具有很高的 Shapley value範圍。重疊點在 y 軸方向抖動,因此我們可以瞭解每個特徵的 Shapley value分佈,這些特徵是根據它們的重要性排序的。

shap。summary_plot(shap_values, X_train, feature_names=features)

再見"黑匣子模型"!SHAP 可解釋 AI (XAI)實用指南來了!

在Summary_plot圖中,我們首先看到了特徵值與對預測的影響之間關係的跡象,但是要檢視這種關係的確切形式,我們必須檢視 SHAP Dependence Plot圖。

SHAP Dependence Plot

Partial dependence plot (PDP or PD plot) 顯示了一個或兩個特徵對機器學習模型的預測結果的邊際效應,它可以顯示目標和特徵之間的關係是線性的、單調的還是更復雜的。PDP是一種全域性方法:該方法考慮所有例項並給出關於特徵與預測結果的全域性關係。PDP 的一個假設是第一個特徵與第二個特徵不相關。如果違反此假設,則PDP計算的平均值將包括極不可能甚至不可能的資料點。

Dependence plot 是一個散點圖,顯示單個特徵對模型預測的影響。在這個例子中,當每個住宅的平均房間數高於 6 時,房產價值會顯著增加。

每個點都是來自資料集的單個預測(行)。

x 軸是資料集中的實際值。

y 軸是該特徵的 SHAP 值,它表示該特徵值對該預測的模型輸出的改變程度。

顏色對應於可能與我們正在繪製的特徵有互動作用的第二個特徵(預設情況下,第二個特徵是自動選擇的)。如果另一個特徵與我們正在繪製的特徵之間存在互動作用,它將顯示為不同的垂直著色模式。

shap。dependence_plot(5, shap_values, X_train, feature_names=features)

再見"黑匣子模型"!SHAP 可解釋 AI (XAI)實用指南來了!

在上面的例子中,我們可以看到每個住宅的平均房間數高於 7。5,CRIM 總是很低。這些案例的 Shapley value很高,極大地影響了結果,可以看出 RM、CRIM 特徵之間相互作用。

SHAP Force plot

SHAP force plot為我們提供了單一模型預測的可解釋性,可用於誤差分析,找到對特定例項預測的解釋。

i = 18

shap。force_plot(explainer。expected_value, shap_values[i], X_test[i], feature_names = features)

再見"黑匣子模型"!SHAP 可解釋 AI (XAI)實用指南來了!

從圖中我們可以看出:

模型輸出值:16。83

基值:如果我們不知道當前例項的任何特性,這個值是可以預測的。基礎值是模型輸出與訓練資料的平均值。(程式碼中的explainer。expected_value)。

繪圖箭頭上的數字是此例項的特徵值。CRIM:城鎮人均犯罪率 = 0。06664 和 RM:平均房間數 = 6。546

紅色代表將模型分數推高的特徵,藍色代表將分數推低的特徵。

箭頭越大,特徵對輸出的影響越大。在 x 軸上可以看到影響的減少或增加量。

0。066 的 CRIM 增加屬性值,6。546 的 RM 降低屬性值。

如果我們想要更全面地展現先前的預測,我們可以使用力圖的變體。在這裡,我們可以看到一組垂直放置(旋轉 90°)和並排放置的預測。在下圖中,我們可以看到資料集中的前 5 行。

# visualize the first 5 predictions explanations with a dark red dark blue color map。

shap。force_plot(explainer。expected_value, shap_values[0:5,:], X_test[0:5,:], plot_cmap=“DrDb”, feature_names=features)

再見"黑匣子模型"!SHAP 可解釋 AI (XAI)實用指南來了!

SHAP Decision plot

決策圖顯示的資訊與力圖基本相同。灰色垂直線是基礎值 ,紅線表示每個特徵是否將輸出值移動到高於或低於平均預測的值。

這張圖比前一張圖更清晰和直觀,尤其是要分析的特徵比較多的時候。在力圖中,當預測變數的數量較多時,資訊可能看起來非常緊湊。

shap。decision_plot(explainer。expected_value[0], shap_values[0], feature_names = list(features))

再見"黑匣子模型"!SHAP 可解釋 AI (XAI)實用指南來了!

決策圖的垂直直線標記了模型的基礎值。彩色線是預測。特徵值在預測線旁邊以供參考。從圖的底部開始,預測線顯示 SHAP value 如何從基礎值累積到圖頂部的模型最終分數。決策圖是 SHAP value 的文字表示,使其易於解讀。

力圖和決策圖都可以有效地解釋上述模型的預測。而且很容易識別出主要影響的大小和方向。

再見"黑匣子模型"!SHAP 可解釋 AI (XAI)實用指南來了!

將決策圖疊加在一起有助於根據 SHAP value 定位異常值。在上圖中,你可以看到一個不同資料集的示例,用於使用SHAP決策圖進行異常值檢測。

Summary

SHAP 框架已被證明是機器學習模型解釋領域的一個重要發展。 SHAP 結合了幾種現有方法,建立了一種直觀、理論上合理的方法來解釋任何模型的預測。 SHAP value 量化了特徵對預測影響的大小和方向(正或負)。 我相信使用 SHAP 和其他工具進行 XAI 分析應該是機器學習管道的一個組成部分。

文章推薦

超級乾貨!史上最全資料分析學習路線(附資源下載)

吐血整理:43種機器學習開源資料集(附地址/呼叫方法)

盤點2021年資料科學最流行的29個Python庫

被Altair圈粉了!Python資料視覺化又來一位猛將!

4 款 Python 資料探索性分析(EDA)工具包,總有一款適合你!

效率倍增!12 個必須嘗試的 Python 工具包!

下一代資料科學工具!

繪圖就可以建立機器學習模型!human-learn做到了!

這招可以讓Pandas 資料幀處理速度提高400倍!

再見Pyechart,一個非常棒的 Python 統計圖表庫來了!

乾貨 | 2021年機器學習不容錯過的14個部落格

超讚!20個炫酷的資料視覺化大屏(含原始碼)

整理不易,有所收穫,點個贊和愛心

❤️,

更多精彩歡迎關注

標簽: shap  value  特徵  PLOT