在這篇文章中,我們將深入探討機器學習和人工智慧模型的可解釋性與可理解性。我們會了解為什麼理解模型如何做出預測是非常重要的,尤其是當這些技術被應用在醫療、金融和法律等關鍵領域時。我們將透過像 LIME 和 SHAP 這樣的工具,展示如何獲得模型決策過程的見解,讓複雜的模型變得更透明。文章還強調了可解釋性和可理解性之間的差異,並解釋這些概念如何有助於建立對 AI 系統的信任,同時也討論了它們的挑戰和限制。
學習目標
- 了解機器學習和人工智慧中模型可解釋性與可理解性的區別。
- 學習 LIME 和 SHAP 工具如何增強模型的透明度和決策見解。
- 探索可解釋性和可理解性在建立對 AI 系統信任中的重要性。
- 了解如何簡化複雜模型以便更好地理解,而不影響性能。
- 識別與 AI 模型可解釋性和可理解性相關的挑戰和限制。
可解釋性和可理解性是什麼,為什麼在機器學習和人工智慧中至關重要?
可解釋性是回答模型決策背後原因的過程。例如,當一個機器學習和人工智慧模型能夠提供解釋和推理,說明它如何在樹中分裂某個特定節點並解釋其邏輯時,我們就可以說這個模型具有可解釋性。
另一方面,可理解性是將模型的解釋和決策轉換為非技術用戶能理解的過程。它幫助數據科學家了解影響模型預測的權重和係數,並幫助非技術用戶理解模型如何做出決策,以及模型在做出這些預測時重視哪些因素。
隨著 AI 和機器學習模型變得越來越複雜,擁有數百層模型和數千到數十億個參數,例如在大型語言模型和深度學習模型中,我們很難理解模型的整體和局部觀察層級的決策。模型的可解釋性提供了對模型內部運作的解釋和見解。因此,數據科學家和 AI 專家必須在模型構建過程中利用可解釋性技術,這也將改善模型的可理解性。
提高模型可解釋性和可理解性的好處
以下是提高模型可解釋性和可理解性的好處:
增強信任
信任是一個有廣泛意義的詞。它是對某人或某物可靠性、誠實性或完整性的信心。
信任與人和非生命物體都有關。例如,依賴朋友的決策或依賴完全自動駕駛的汽車將你從一個地方運送到另一個地方。缺乏透明度和溝通也會導致信任的侵蝕。此外,信任是通過小步驟和重複的正面互動逐漸建立的。當我們與某人或某物有一致的正面互動時,這會加強我們對其可靠性、正面意圖和無害性的信念。因此,信任是通過我們的經驗隨著時間的推移而建立的。
這對於我們依賴機器學習和人工智慧模型及其預測起著重要作用。
增強透明度和合作
當我們能夠解釋機器或深度學習模型的內部運作、決策過程以及規則和選擇背後的直覺時,我們可以建立信任和責任感。這也有助於改善與利益相關者和合作夥伴的合作和參與。
改善故障排除
當某些東西壞掉或未按預期工作時,我們需要找出問題的根源。為此,對系統或模型的內部運作的透明度是至關重要的。它有助於診斷問題並採取有效行動來解決它們。例如,考慮一個模型預測某人「B」不應該獲得貸款批准。要了解這一點,我們必須檢查模型的預測和決策。這包括識別模型為「B」的觀察結果所優先考慮的因素。
在這種情況下,模型的可解釋性將非常有用,可以深入了解與「B」相關的模型預測和決策。此外,在深入了解模型的內部運作時,我們可能會迅速發現一些可能影響和影響模型決策的偏見。
因此,擁有可解釋性並利用它們將使故障排除、監控和持續改進變得高效,並幫助識別和減輕偏見和錯誤,以改善模型性能。
機器學習和人工智慧可解釋性和可理解性的熱門商業用例
我們總是對模型的整體預測能力感興趣,以影響和做出數據驅動的明智決策。機器學習和人工智慧模型在各行各業中有無數應用,例如銀行和金融、零售、醫療、互聯網、商業、保險、汽車、製造、教育、電信、旅遊、太空等。
以下是一些例子:
銀行和金融
對於銀行和金融行業,識別合適的客戶以提供貸款或發放信用卡是非常重要的。他們也希望防止欺詐交易。此外,這個行業受到高度監管。
為了使這些內部流程(如申請批准和欺詐監控)高效,銀行和金融機構利用機器學習和人工智慧模型來協助這些重要決策。他們利用機器學習和人工智慧模型根據某些已知因素預測結果。
一般來說,這些機構不斷監控交易和數據,以檢測模式、趨勢和異常情況。對於他們來說,了解每個處理的申請的機器學習和人工智慧模型預測能力變得非常重要。他們希望了解模型預測背後的推理以及在做出預測時起重要作用的因素。
現在,假設一個機器學習模型預測某些高信用評分的客戶的貸款申請應被拒絕,這可能看起來不尋常。在這種情況下,他們可以利用模型解釋進行風險分析,深入了解為什麼模型決定拒絕客戶的申請,以及哪些客戶因素在這一決策中起了重要作用。這一發現可能幫助他們檢測、調查和減輕模型決策中的問題、漏洞和新偏見,並幫助改善模型性能。
醫療保健
如今,在醫療保健行業,機器學習/人工智慧模型被用來根據各種因素(例如病歷、實驗室檢查、生活方式、遺傳等)預測患者的健康結果。
假設一個醫療機構使用機器學習/人工智慧模型來預測患者在治療過程中是否有高概率患癌症。由於這些問題涉及到一個人的生命,AI/ML 模型預期能以非常高的準確度預測結果。
在這種情況下,深入了解模型的預測、使用的決策規則以及影響預測的因素變得非常重要。醫療專業團隊會進行必要的盡職調查,並期望機器學習/人工智慧模型提供與預測患者結果和貢獻因素相關的清晰和詳細的解釋。這就是機器學習/人工智慧模型可解釋性變得至關重要的地方。
這種調查有時可能幫助發現模型決策中的一些隱藏漏洞和偏見,並可以加以解決以改善未來模型的預測。
自動駕駛車輛
自動駕駛車輛是指自動運行的車輛,如汽車、貨運卡車、火車、飛機、船隻、太空船等。在這些車輛中,AI 和機器學習模型在使這些車輛能夠獨立運行、無需人類干預方面起著至關重要的作用。這些模型是使用機器學習和計算機視覺模型構建的。它們使自動駕駛汽車能夠感知周圍環境中的信息,做出明智的決策,並安全地導航。
在設計用於道路上運行的自動駕駛車輛的情況下,導航意味著在不需要人類干預的情況下,實時引導車輛進行關鍵任務,例如檢測和識別物體、識別交通信號和標誌、預測物體行為、保持車道和規劃路徑、做出明智的決策以及採取適當的行動,例如加速、剎車、轉向、停止等。
由於自動駕駛道路車輛涉及到駕駛員、乘客、公眾和公共財產的安全,因此它們被期望能夠無故障地運作並遵守法規和合規性,以獲得公眾的信任、接受和採用。
因此,建立對這些車輛完全依賴的 AI 和機器學習模型的信任是非常重要的。在自動駕駛車輛中,AI 和機器學習的可解釋性也被稱為可解釋的 AI (Explainable AI, XAI)。可解釋的 AI 可以通過實時向用戶提供有關 AI 行動和決策的反饋來改善用戶互動,這些工具也可以用作調查 AI 決策和問題的工具,識別和消除隱藏的偏見和漏洞,並改善自動駕駛車輛模型。
零售
在零售行業,AI 和機器學習模型被用來指導各種決策,例如產品銷售、庫存管理、營銷、客戶支持和體驗等。擁有機器學習和人工智慧的可解釋性有助於理解模型預測,並深入了解與預測相關的問題,例如哪些類型的產品未能產生銷售,或下個月某個商店或零售點的銷售預測,或哪些產品需求量大,需要補貨,或哪些營銷活動對銷售有正面影響等。
從上述商業用例中,我們可以清楚地看到,對於機器學習和人工智慧模型來說,擁有清晰且可用的解釋對於整體模型以及個別預測都是非常重要的,以指導商業決策並提高商業運營的效率。
一些複雜的模型具有內建的可解釋性,而一些模型則依賴外部工具來實現這一點。今天有幾個模型無關的工具可用來幫助我們增加模型的可解釋性。我們將深入探討其中兩個流行的外部工具,以增加機器學習和人工智慧模型的可解釋性和可理解性:
- LIME (Local Interpretable Model-Agnostic Explanations)
- SHAP (SHapely Additive exPlanations)
LIME 是模型無關的,這意味著它可以與任何機器學習和深度學習模型一起實施。它可以與機器學習模型(如線性回歸和邏輯回歸、決策樹、隨機森林、XGBoost、KNN、ElasticNet 等)以及深度神經網絡模型(如 RNN、LSTM、CNN、預訓練的黑箱模型等)一起使用。
它的工作原理是基於一個假設,即可以使用一個簡單的可解釋模型來解釋複雜模型的內部運作。簡單的可解釋模型可以是簡單的線性回歸模型或決策樹模型。在這裡,我們利用簡單的線性回歸模型作為可解釋模型,使用 LIME/SHAP 解釋來生成複雜模型的解釋。
LIME,也稱為局部可解釋模型無關解釋,針對單個觀察進行本地工作,幫助我們理解模型是如何為該觀察預測得分的。它的工作原理是使用來自原始觀察的特徵的擾動值創建合成數據。
什麼是擾動數據,如何創建?
為了創建表格數據的擾動數據集,LIME 首先獲取觀察中的所有特徵,然後通過使用各種轉換稍微修改特徵值,迭代地為觀察創建新值。擾動值非常接近原始觀察值,並來自接近原始值的鄰域。
對於文本和圖像數據類型,LIME 通過隨機選擇原始數據集中的特徵並從特徵的鄰域創建新的擾動值來迭代創建數據集。LIME 核心寬度控制數據點鄰域的大小。
較小的核心大小意味著鄰域較小,距離原始值最近的點將對解釋產生重大影響,而對於較大的核心大小,遠離的點可能會對 LIME 解釋產生影響。
更廣泛的鄰域大小會導致解釋不夠精確,但可能有助於揭示數據中的一些更廣泛的趨勢。對於更精確的本地解釋,應優先考慮較小的鄰域大小。
理解圖示
通過下面的圖(圖-1),我們試圖給出擾動值、核心大小和鄰域的直覺。
在這次討論中,我們使用了來自 Bigmart 數據集的數據示例,這是一個回歸問題。我們利用表格數據進行 LIME。
考慮來自 Bigmart 數據集的觀察 #0。這個觀察有一個特徵「Item_Type」,其值為 13。我們計算了這個特徵的平均值和標準差,得到平均值為 7.234,標準差為 4.22。這在上面的圖中顯示。使用這些信息,我們計算了 Z 分數為 1.366。
Z 分數左側的區域告訴我們該特徵的 % 值會低於 x。對於 Z 分數為 1.366,我們會發現大約 91.40% 的特徵值會低於 x=13。因此,我們得到的直覺是,對於這個特徵,核心寬度必須低於 x=13。而核心寬度將幫助控制擾動數據的鄰域大小。
下面的圖-2 顯示了來自 Bigmart 數據集的三個原始測試數據點,我們考慮這些數據以獲得 LIME 過程的直覺。XGBoost 是一個複雜的模型,用於生成原始觀察實例的預測。

LIME 距離公式
LIME 內部使用原始數據點和鄰域中的點之間的距離,並使用歐幾里得距離計算距離。假設點 X = 13 的坐標為 (x1,y1),而鄰域中的另一點的坐標為 (x2, y2),這兩點之間的歐幾里得距離使用以下公式計算:

下面的圖(圖-4)顯示了藍色擾動數據點和紅色數據點作為原始值。距離原始數據點較近的擾動數據點對 LIME 解釋的影響會更大。

上述公式考慮了 2D。對於具有 N 維的數據點,可以推導出類似的公式。
核心寬度幫助 LIME 確定選擇特徵的擾動值的鄰域大小。隨著值或數據點遠離原始值,它們對預測模型結果的影響會減少。
下面的圖(圖-6)顯示了擾動特徵值,以及它們與原始值的相似性分數,還有使用 XGBoost 模型的擾動實例預測,圖(圖-5)顯示的是一個黑箱可解釋的簡單模型(線性回歸)的信息。


內建可解釋性和可理解性如何在複雜模型中運作
複雜模型如 XGBoost、隨機森林等具有基本的內建模型可解釋性特徵。XGBoost 模型在全球層面提供模型可解釋性,無法解釋觀察的局部預測。
由於在這次討論中,我們使用了 XGBoost 作為複雜模型,因此我們在下面討論其內建模型可解釋性。XGBoost 為我們提供了繪製決策樹的功能,以獲得對模型全球決策和預測特徵重要性的直覺。特徵重要性返回一個按對模型結果的貢獻重要性排序的特徵列表。
首先,我們啟動一個 XGBoost 模型,然後使用訓練集的獨立特徵和目標特徵對其進行訓練。XGBoost 模型的內建可解釋性特徵被用來獲取對模型的見解。
要繪製 XGBoost 內建解釋,使用以下源代碼:
# plot single tree
plot_tree(xgbr_model)
plt.figure(figsize=(10,5))
plt.show()
下面的圖(圖-7)顯示了上述 Bigmart 複雜 XGBoost 模型的輸出決策樹。

從上述 XGBoost 模型樹中,我們獲得了一些對模型決策和其用於分割數據和做出最終預測的條件規則的見解。從上面看來,對於這個 XGBoost 模型,特徵 Item_MRP 對結果的貢獻最大,其次是 Outlet_Type。在決策過程中,我們可以通過使用 XGBoost 的特徵重要性來驗證這一點。
顯示特徵重要性的源代碼
要顯示 XGBoost 模型的特徵重要性,使用以下源代碼。
# feature importance of the model
feature_importance_xgb = pd.DataFrame()
feature_importance_xgb['variable'] = X_train.columns
feature_importance_xgb['importance'] = xgbr_model.feature_importances_
# feature_importance values in descending order
feature_importance_xgb.sort_values(by='importance', ascending=False).head()
下面的圖(圖-9)顯示了使用上述 XGBoost 模型內建解釋生成的特徵重要性。

從上述 XGBoost 特徵重要性中,我們有趣地看到,對於 XGBoost 模型,Outlet_Type 的貢獻程度高於 Item_MRP。此外,模型還提供了其他貢獻特徵及其對模型預測的影響的信息。
如我們所見,XGBoost 模型的解釋是在全球層面,提供了相當多的信息,但缺少一些額外信息,例如特徵貢獻的方向,並且我們沒有對局部觀察的見解。方向將告訴我們特徵是對預測值的增加還是減少有貢獻。對於分類問題,特徵貢獻的方向意味著知道特徵是對類別「1」還是類別「0」有貢獻。
這就是外部可解釋性工具如 LIME 和 SHAP 可以發揮作用的地方,並補充 XGBoost 模型的可解釋性,提供特徵貢獻或特徵影響的方向信息。對於沒有內建功能來解釋模型決策過程的模型,LIME 有助於增加解釋其預測決策的能力,無論是對於局部還是全球實例。
LIME 模型決策如何運作,如何解釋其解釋?
LIME 可以與複雜模型、簡單模型以及我們對其運作沒有任何了解的黑箱模型一起使用,僅有預測結果。
因此,我們可以直接將 LIME 模型與需要解釋的模型進行擬合,還可以通過替代簡單模型來解釋黑箱模型。
下面我們將使用 XGBoost 回歸模型作為複雜模型以及黑箱模型,並利用簡單的線性回歸模型來理解 LIME 解釋黑箱模型的過程。這也將使我們能夠比較 LIME 使用兩種方法生成的解釋,對於同一複雜模型。
要安裝 LIME 庫,使用以下代碼:
# install lime library
!pip install lime
# import Explainer function from lime_tabular module of lime library
from lime.lime_tabular import LimeTabularExplainer
方法1:如何使用複雜的 XGBR 模型實現和解釋 LIME 解釋?
要直接與複雜模型(如 XGBoost)實現 LIME 解釋,使用以下代碼:
# Fit the explainer model using the complex model and show the LIME explanation and score
explanation = explainer.explain_instance(X_unseen_test.values[0], xgbr_model.predict)
explanation.show_in_notebook(show_table=True, show_all=False)
print(explanation.score)
這將生成一個輸出,如下圖所示。

從上面我們看到,擾動觀察 #0 的相似性分數為 71.85%,這表明該觀察中的特徵與原始觀察的相似性為 71.85%。觀察 #0 的預測值為 1670.82,預測值的整體範圍在 21.74 和 5793.40 之間。
LIME 確定了對觀察 #0 預測的最重要特徵,並按特徵貢獻的大小降序排列。
標記為藍色的特徵表示它們對模型預測值的減少有貢獻,而標記為橙色的特徵表示它們對觀察的預測值有貢獻,即局部實例 #0。
此外,LIME 還進一步提供了模型用於為該觀察分割數據的特徵級條件規則。
使用 LIME 可視化特徵貢獻和模型預測
在上面的圖(圖-13)中,左側的圖顯示了所有觀察的預測值範圍(最小到最大),而中間的值是該特定實例的預測值,即觀察。
中間的圖顯示藍色表示對模型預測的負面貢獻特徵,而對模型預測的正面貢獻特徵則用橙色表示。特徵的數值表示擾動值,或者我們可以說它們表示特徵對模型預測的貢獻大小,這次是針對特定觀察(#0)或局部實例。
最右側的圖顯示了模型在生成該實例預測時給予特徵的重要性順序。
注意:每次運行這段代碼時,LIME 都會選擇特徵並為其分配稍微新的權重,因此預測值和圖表可能會有所變化。
方法2:如何使用替代簡單 LR 模型實現和解釋黑箱模型(XGBR)的 LIME 解釋?
要將 LIME 與複雜的黑箱模型(如 XGBoost)一起使用,我們可以使用替代模型方法。對於替代模型,我們可以使用簡單模型,如線性回歸或決策樹模型。LIME 在這些簡單模型上運作良好。我們也可以使用複雜模型作為 LIME 的替代模型。
要使用 LIME 與替代簡單模型,首先我們需要從黑箱模型獲得預測。
# Black box model predictions
y_xgbr_model_test_pred
第二步
在第二步中,使用複雜模型、訓練集的獨立特徵和 LIME,我們生成一個擾動特徵值的新數據集,然後使用擾動特徵和複雜模型預測值訓練替代模型(在這裡是線性回歸)。
# Initiate Simple LR Model
lr_model = LinearRegression()
# Fit the simple model using the Train X
# and the Complex Black Box Model Predicted Predicted values
lr_model.fit(X_train, y_xgbr_model_test_pred)
#predict over the unseen test data
y_lr_surr_model_test_pred = lr_model.predict(X_unseen_test)
y_lr_surr_model_test_pred.mean()
要使用 LIME 生成擾動特徵值,我們可以利用以下源代碼。
# Initialize the explainer function
explainer = LimeTabularExplainer(X_train.values, mode="regression", feature_names=X_train.columns)#i
# Copy the test data
X_observation = X_unseen_test
上述代碼適用於回歸。對於分類問題,模式必須修改為「classification」。
注意
最後,我們將使用所有觀察的平均值來查看使用 LIME 的模型可解釋性。
# fit the explainer model and show explanations and score
explanation = explainer.explain_instance(X_unseen_test.values[0], lr_model.predict)
explanation.show_in_notebook(show_table=True, show_all=False)
print(explanation.score)
執行上述代碼後,我們得到了以下 LIME 解釋,如圖(圖-13)所示。

我們立即注意到的一件事是,當我們將 LIME 直接用於 XGBoost 模型時,LIME 解釋的分數對於觀察 #0 為 71.85%,而當我們將其視為黑箱模型並使用替代 LR 模型獲得黑箱模型(XGBoost)的 LIME 解釋時,解釋分數顯著下降至 49.543%。這表明使用替代模型的方法,觀察中相似於原始特徵的特徵數量較少,因此,使用解釋器的預測可能與原始模型和 LIME 的預測存在一些差異。
觀察 #0 的預測值為 2189.59,預測值的整體範圍在 2053.46 和 2316.54 之間。
使用 LIME XGBR 的觀察 #0 的預測值為 1670.82。
如何訪問 LIME 擾動數據?
要查看 LIME 擾動值,使用以下代碼。
# Accessing perturbed data
perturbed_data = explanation.as_list()
perturbed_data
上述輸出的結果將如下所示。

# Accessing Feature Weights
for feature, weight in perturbed_data:
print(feature, weight)

LIME 特徵重要性
模型中的每個實例在生成該實例的預測時給予不同的特徵重要性。這些識別出的模型特徵在模型的預測中起著重要作用。特徵重要性值表示擾動特徵值或識別特徵的新大小。
什麼是 LIME 解釋分數,如何解釋?
LIME 解釋分數表示 LIME 解釋的準確性以及識別特徵在預測模型結果中的作用。較高的解釋分數表示模型為觀察識別的特徵在該實例的模型預測中起了重要作用。從上面的圖(圖-13)中,我們看到可解釋的替代 LR 模型對觀察中的識別特徵給予了 0.4954 的分數。
現在讓我們看看另一個名為 SHAP(SHapley Additive Explanations)的工具,以增加模型的可解釋性。
理解 SHAP(SHapley 加法解釋)
另一個流行的用於機器學習和人工智慧模型解釋的工具是 SHAP(SHapley Additive Explanations)。這個工具也是模型無關的。它的解釋基於一個名為「Shapley 值」的合作博弈論概念。在這個博弈論中,所有玩家的貢獻都被考慮,每個玩家根據他們對整體結果的貢獻獲得一個值。因此,它提供了對模型決策的公平和可解釋的見解。
根據 Shapley 的說法,一組玩家共同努力以達成一個結果。所有玩家並不相同,每個玩家都有不同的特徵,這使他們能以不同的方式對結果做出貢獻。通常,正是多個玩家的貢獻幫助他們贏得比賽。因此,玩家之間的合作是有利的,應該被重視,而不僅僅依賴單個玩家對結果的貢獻。根據 Shapley,從結果中產生的收益應根據他們的貢獻在玩家之間分配。
SHAP 機器學習和人工智慧模型解釋工具基於上述概念。它將數據集中的特徵視為團隊(觀察)中的個別玩家。這些聯盟在機器學習模型中共同工作以預測結果,收益就是模型的預測。SHAP 有助於公平和有效地在各個特徵(玩家)之間分配結果收益,從而認識到它們對模型結果的貢獻。
使用 Shapley 值公平分配貢獻

在上面的圖(圖-15)中,我們考慮了兩個玩家參加競賽,並且結果以獲得的獎金的形式達成。這兩個玩家通過形成不同的聯盟(c12、c10、c20、c0)參加,通過每個聯盟他們獲得不同的獎金。最後,我們看到 Shapley 平均權重如何幫助我們確定每個玩家對結果的貢獻,並公平地在參與者之間分配獎金。
在「i」個玩家的情況下,可以使用圖(圖-16)中顯示的公式來確定每個玩家或特徵的 SHAP 值。

讓我們進一步探索 SHAP 庫。
如何安裝 SHAP 庫並初始化?
要安裝 SHAP 庫,使用以下源代碼。
# Install the Shap library
!pip install shap
# import Shap libraries
import shap
# Initialize the Shap js
shap.initjs()
# Import libraries
from shap import Explainer
如何實現和解釋複雜的 XGBR 模型 SHAP 解釋?
SHAP 庫可以直接與複雜模型一起使用以生成解釋。以下是使用 SHAP 直接與複雜的 XGBoost 模型(使用與 LIME 解釋相同的模型實例)一起使用的代碼。
# Shap explainer
explainer_shap_xgbr = shap.Explainer(xgbr_model)
如何為複雜的 XGBR 模型生成 SHAP 值?
# Generate shap values
shap_values_xgbr = explainer_shap_xgbr.shap_values(X_unseen_test)
# Shap values generated using Complex XGBR model
shap_values_xgbr
上述代碼將顯示每個特徵玩家在聯盟中的 SHAP 值數組,即測試數據集中的觀察值。
SHAP 值將看起來像下面的圖(圖-19):

複雜的 XGBR 模型的 SHAP 特徵重要性是什麼?
SHAP 幫助我們識別哪些特徵對模型的結果有貢獻。它顯示每個特徵如何影響預測及其影響。SHAP 還比較特徵對其他特徵的貢獻。
SHAP 通過考慮所有可能的特徵排列來實現這一點。它計算並比較有和沒有特徵的模型結果,從而計算每個特徵的貢獻以及整個團隊(所有考慮的玩家,即特徵)的貢獻。
如何實現和解釋複雜的 XGBR 模型 SHAP 總結圖?
SHAP 總結圖可以用來查看 SHAP 特徵貢獻、重要性及其對結果的影響。
以下是生成總結圖的源代碼。
# Display the summary plot using Shap values
shap.summary_plot(shap_values_xgbr, X_unseen_test)

上面的圖(圖-21)顯示了 Bigmart 數據的 SHAP 總結圖。從上面我們看到,SHAP 將 Bigmart 數據集中的特徵按重要性排序。在右側,我們看到特徵從高值特徵排列在上方,低值特徵排列在下方。
此外,我們可以解釋模型特徵對其結果的影響。特徵影響在 SHAP 平均值周圍水平繪製。SHAP 值在 SHAP 平均值左側的特徵以粉紅色表示,表示其負面影響。SHAP 平均值右側的特徵 SHAP 值表示該特徵對正面影響的貢獻。SHAP 值還指示特徵對結果的大小或影響。
因此,SHAP 提供了模型的整體圖像,顯示每個特徵對預測結果的貢獻的大小和方向。
如何實現和解釋複雜的 XGBR 模型的 SHAP 依賴圖?
# Display SHAP dependence plot
shap.dependence_plot("Item_MRP", shap_values_xgbr, X_unseen_test, interaction_index="Outlet_Type")

SHAP 特徵依賴圖幫助我們解釋特徵與另一特徵之間的關係。在上面的圖中,Item_MRP 似乎依賴於 Outlet_Type。對於 Outlet_Type 1 到 3,Item_MRP 有上升趨勢,而從上面看,對於 Outlet_Type 0 到 Outlet_Type 1,Item_MRP 則有下降趨勢。
如何實現和解釋複雜的 XGBR 模型的 SHAP 力量圖?
到目前為止,我們看到了 SHAP 特徵重要性、影響和全球層面的決策。SHAP 力量圖可以用來獲得對模型在局部觀察層面決策的直覺。
要使用 SHAP 力量圖,我們可以使用以下代碼。記得使用自己的數據集名稱。以下代碼查看測試數據集的第一個觀察,即 X_unseen_test.iloc[0]。這個數字可以更改以查看不同的觀察。
#Shap force plots
shap.plots.force(explainer_shap_xgbr.expected_value, shap_values_xgbr[0,:], X_unseen_test.iloc[0, :], matplotlib = True)

我們可以這樣解釋上面的力量圖。基準值表示使用 SHAP 替代 LR 模型對局部實例 #0 的預測值。標記為深粉色的特徵是推高預測值的特徵,而標記為藍色的特徵則是將預測值拉低的特徵。特徵旁邊的數字是特徵的原始值。
如何實現和解釋複雜的 XGBoost 模型的 SHAP 決策圖?
要顯示 SHAP 決策圖,我們可以使用以下代碼,如圖-24 所示。
# Shap dependence plot
shap.decision_plot(explainer_shap_xgbr.expected_value, shap_values_xgbr[0,:], X_unseen_test.columns)
SHAP 決策圖是另一種查看不同模型特徵對模型預測影響的方式。從下面的決策圖中,我們試圖可視化各種模型特徵對預測結果(即商品零售銷售)的影響。
從下面的決策圖中,我們觀察到特徵 Item_MRP 對預測結果有正面影響。它增加了商品零售銷售。同樣,Outlet_Identifier_OUT018 也通過提高銷售額作出正面貢獻。另一方面,Item_Type 對結果有負面影響。它減少了商品零售銷售。同樣,Outlet_Identifier_27 也以其負面貢獻減少了銷售。
下面的圖顯示了 Big Mart 銷售數據的決策圖。

如何使用 TreeExplainer 實現和解釋複雜的 XGBR 模型的 SHAP 力量圖?
# load the JS visualization code to notebook
shap.initjs()
# explain the model's predictions using SHAP values
explainer_shap_xgbr_2 = shap.TreeExplainer(xgbr_model)
shap_values_xgbr_2 = explainer_shap_xgbr_2.shap_values(X_unseen_test)
# visualize the first prediction's explainations
shap.force_plot(explainer_shap_xgbr_2.expected_value, shap_values_xgbr_2[0, :], X_unseen_test.iloc[0, :])
# visualize the training set predictions
shap.force_plot(explainer_shap_xgbr_2.expected_value, shap_values_xgbr_2, X_unseen_test)

如何使用替代模型實現和解釋黑箱模型的 SHAP 解釋?
要使用 SHAP 解釋與替代模型(這裡使用線性回歸模型),使用以下代碼。線性回歸模型是使用黑箱模型的預測和訓練集獨立特徵進行訓練的。
# Wrap the explainer in a function called Explainer and create a SHAP explainer object
explainer_shap = Explainer(lr_model.predict, X_train)
# Generate Shap values
shap_values = explainer_shap.shap_values(X_unseen_test)
shap_values[:3]
對於 SHAP 解釋替代模型,SHAP 值將看起來像下面的圖。

新聞來源
本文由 AI 台灣 運用 AI 技術編撰,內容僅供參考,請自行核實相關資訊。
歡迎加入我們的 AI TAIWAN 台灣人工智慧中心 FB 社團,
隨時掌握最新 AI 動態與實用資訊!