再見"黑匣子模型"!SHAP 可解釋 AI (XAI)實用指南來了!
歡迎關注 @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 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)
在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)
在上面的例子中,我們可以看到每個住宅的平均房間數高於 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)
從圖中我們可以看出:
模型輸出值: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 Decision plot
決策圖顯示的資訊與力圖基本相同。灰色垂直線是基礎值 ,紅線表示每個特徵是否將輸出值移動到高於或低於平均預測的值。
這張圖比前一張圖更清晰和直觀,尤其是要分析的特徵比較多的時候。在力圖中,當預測變數的數量較多時,資訊可能看起來非常緊湊。
shap。decision_plot(explainer。expected_value[0], shap_values[0], feature_names = list(features))
決策圖的垂直直線標記了模型的基礎值。彩色線是預測。特徵值在預測線旁邊以供參考。從圖的底部開始,預測線顯示 SHAP value 如何從基礎值累積到圖頂部的模型最終分數。決策圖是 SHAP value 的文字表示,使其易於解讀。
力圖和決策圖都可以有效地解釋上述模型的預測。而且很容易識別出主要影響的大小和方向。
將決策圖疊加在一起有助於根據 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個炫酷的資料視覺化大屏(含原始碼)
整理不易,有所收穫,點個贊和愛心
❤️,
更多精彩歡迎關注