是時候擺脫黑匣子並培養對機器學習的信任
想象一下,你是一名數據科學家,在你的空閑時間,你會根據自己的臉書和推特數據,預測你的朋友將在夏天去哪裡度假。現在,如果預測結果準確,你的朋友可能會留下深刻的印象,可以認為你是一個可以看到未來的魔術師。如果預測是錯誤的,除了你作為“數據科學家”的聲譽之外,它仍然不會對任何人造成傷害。現在讓我們說這不是一個有趣的項目,並且涉及投資。說,你想投資你朋友可能度假的地方。如果模型的預測出錯,會發生什麼?你會賠錢。只要該模型沒有產生重大影響,它的可解釋性就沒那麼重要,但是當基於模型的預測涉及到影響時,
可解釋的機器學習
解釋意味着以可理解的術語解釋或呈現。在ML系統的背景下,可解釋性是向人類解釋或以可理解的術語呈現的能力[ Finale Doshi-Velez ]
機器學習模型被許多人稱為“黑匣子”。這意味着雖然我們可以從中獲得準確的預測,但我們無法清楚地解釋或識別這些預測背後的邏輯。但是我們如何從模型中提取重要的見解呢?要記住哪些事項以及我們需要實現哪些功能或工具?這些是在提出模型可解釋性問題時會想到的重要問題。
可解釋性的重要性
一些人常常問的問題是,為什麼我們不滿足於模型的結果,為什麼我們如此痴迷於知道為什麼做出特定的決定?這很大程度上與模型在現實世界中可能產生的影響有關。對於僅僅用於推薦電影的模型,其影響遠遠小於為預測藥物結果而創建的模型。
問題在於,單個指標,例如分類準確性,是對大多數現實世界任務的不完整描述。”(Doshi-Velez和Kim 2017)
這是一個可解釋的機器學習的大圖。在某種程度上,我們通過收集原始數據捕獲世界,並使用該數據進行進一步預測。從本質上講,可解釋性只是模型上的另一層,可以幫助人們理解這個過程。
- 可靠性
- 調試
- 通知功能工程
- 指導未來的數據收集
- 告知人類決策
- 建立信任
模型可解釋性技術
只要我們能將其付諸實踐,理論才有意義。如果您想真正了解這個主題,可以嘗試Kaggle的機器學習解釋性速成課程。它具有適當數量的理論和代碼,可以將概念置於透視中,並有助於將模型可解釋性概念應用於實際的現實問題。
點擊下面的屏幕截圖直接進入課程頁面。如果您想先了解內容的簡要概述,可以繼續閱讀。
可以從模型中提取的見解
要解釋模型,我們需要以下見解:
- 模型中的功能是最重要的。
- 對於來自模型的任何單個預測,數據中的每個特徵對該特定預測的影響。
- 每個特徵對大量可能預測的影響
讓我們討論一些有助於從模型中提取上述見解的技巧:
1.排列重要性
模型認為哪些特徵很重要?哪些功能對模型預測的影響可能比其他功能更大?這個概念稱為特徵重要性,置換重要性是一種廣泛用於計算特徵重要性的技術。它幫助我們看到我們的模型何時產生違反直覺的結果,並且當我們的模型按照我們希望的方式工作時,它有助於顯示其他模型。
置換重要性適用於許多scikit-learn估算器。這個想法很簡單:隨機排列或混洗驗證數據集中的單個列,使所有其他列保持不變。如果模型的精度下降很多並導致誤差增加,則該特徵被認為是“重要的”。另一方面,如果對其值進行改組不會影響模型的準確性,則該特徵被視為“不重要”。
工作
考慮一個模型,該模型根據某些參數預測足球隊是否會有“ 遊戲人 ”獲勝者。表現出最佳表現的玩家將獲得此獎項。
在擬合模型之後計算置換重要性。因此,讓我們在訓練數據上訓練並擬合表示為my_model的RandomForestClassifier模型。置換重要性使用
ELI5庫計算。
ELI5是一個Python庫,允許使用統一API可視化和調試各種機器學習模型。它內置了對多個ML框架的支持,並提供了一種解釋黑盒模型的方法。
使用eli5庫計算和顯示重要性:
(這裡val_X,val_y
分別表示驗證集)
import eli5
from eli5.sklearn import PermutationImportance
perm = PermutationImportance(my_model, random_state=1).fit(val_X, val_y)
eli5.show_weights(perm, feature_names = val_X.columns.tolist())
解釋
- 頂部的功能最重要,底部的功能最少。對於這個例子,得分的目標是最重要的特徵。
- ±之後的數字測量了從一次重新洗牌到下一次重組的表現。
- 一些權重是負面的。這是因為在那些情況下,發現混洗數據的預測比實際數據更準確。
實踐
現在,有關完整示例並測試您的理解,請單擊下面的鏈接轉到Kaggle頁面
2. 部分依賴圖
部分依賴圖(短PDP或PD圖)顯示了一個或兩個特徵對機器學習模型的預測結果的邊際效應(JH Friedman 2001)。PDP顯示特徵如何影響預測。PDP可以通過1D或2D圖顯示目標與所選特徵之間的關係。
工作
在模型擬合後也計算PDP。在我們上面討論的足球問題中,有很多功能,比如傳球,投籃,進球等等。我們首先考慮單排。假設該排表示一個球隊有50%的時間擁有球,100次傳球,10次射門並打進1球。
我們繼續擬合我們的模型並計算一支球隊擁有一名贏得“遊戲人”的球員的概率,這是我們的目標變量。接下來,我們將選擇一個變量並不斷改變其值。例如,如果球隊打進1球,2球,3球等,我們將計算結果。然後繪製所有這些值,我們得到預測的結果與目標得分的圖表。用於繪製PDP的庫稱為
python partial dependence plot toolbox或簡稱
from matplotlib import pyplot as plt
from pdpbox import pdp, get_dataset, info_plots
# Create the data that we will plot
pdp_goals = pdp.pdp_isolate(model=my_model, dataset=val_X, model_features=feature_names, feature='Goal Scored')
# plot it
pdp.pdp_plot(pdp_goals, 'Goal Scored')
plt.show()
解釋
- Y軸表示預測的變化與在基線或最左邊的值預測的變化。
- 藍色區域表示置信區間
- 對於“目標得分”圖表,我們觀察到得分目標會增加獲得“遊戲人”獎勵的可能性,但會在一段時間內達到飽和度。
我們還可以使用2D部分圖一次可視化兩個特徵的部分依賴性。
3. SHAP值
SHAP代表SH apley A Dditive ex P lanation,有助於細分預測以顯示每個特徵的影響。它基於Shapley值,這是一種用於博弈論的技術,用於確定協作遊戲中每個玩家對其成功貢獻的程度¹。通常情況下,在準確性和可解釋性之間取得正確的權衡可能是一個困難的平衡行為,但SHAP值可以同時提供這兩者。
工作
再次,與足球示例一起,我們想要預測球隊有一個贏得“遊戲人”的球員的概率。SHAP值解釋了對於給定特徵具有特定值的影響,與我們在該特徵採用某些基線值時所做的預測相比較。SHAP值使用
Shap庫計算,可以從PyPI或conda輕鬆安裝。
Shap值顯示給定特徵改變我們預測的程度(與我們在該特徵的某個基線值處進行預測相比)。讓我們說我們想知道當球隊打進3球而不是某些固定基線時的預測是什麼。如果我們能夠回答這個問題,我們可以對其他功能執行相同的步驟,如下所示:
sum(SHAP values for all features) = pred_for_team - pred_for_baseline_values
因此,預測可以分解為如下圖:
解釋
上面的說明顯示了各自有助於將模型輸出從基值(我們傳遞的訓練數據集上的平均模型輸出)推送到模型輸出的特徵。將預測推高的特徵以紅色顯示,推動預測更低的特徵為藍色
- 這裡的base_value是0.4979,而我們的預測值是0.7。
Goal Scored
= 2對增加預測的影響最大,而ball possession
特徵對降低預測的影響最大。
實踐
SHAP值比我在此解釋的理論更深入。請務必通過這個鏈接獲得完整的理解。
4. SHAP值的高級用法
匯總許多SHAP值可以為模型提供更詳細的見解。
- SHAP摘要圖
為了概述哪些特徵對於模型最重要,我們可以繪製每個樣本的每個特徵的SHAP值。摘要圖說明哪些特徵最重要,以及它們對數據集的影響範圍。
對於每個點:
- 垂直位置顯示它描繪的功能
- 顏色顯示該特徵對於該行的數據集是高還是低
- 水平位置顯示該值的影響是否導致更高或更低的預測。
左上角的點是一支進球很少的球隊,將預測值降低了0.25。
- SHAP依賴貢獻圖
雖然SHAP匯總圖概述了每個特徵,但SHAP依賴圖顯示了模型輸出如何隨特徵值變化。SHAP依賴性貢獻圖提供了與PDP相似的洞察力,但它們增加了更多細節。
上述依賴性貢獻情節表明,擁有球會增加球隊讓球員贏得獎勵的機會。但是如果他們只得到一個進球,那麼這個趨勢就會逆轉而且如果他們得分那麼少,那麼裁判可能會因為球得分而懲罰他們。
結論
機器學習不再是黑匣子了。如果我們無法向其他人解釋結果,那麼有什麼用途是好模型。可解釋性與創建模型同樣重要。為了在人群中獲得更廣泛的認可,機器學習系統能夠為其決策提供令人滿意的解釋至關重要。阿爾伯特愛因斯坦說,“ 如果你不能簡單地解釋它,你就不能理解它”。
本文轉自towardsdatascience,原文地址
Comments