Categories
程式開發

黑盒模型事後歸因解析:LIME方法


機器學習模型可解釋性方面的研究,在近兩年的科研會議上成為一個相當熱門的話題。隨著機器學習應用越來越廣泛,大家不再僅僅滿足於模型的效果,而是希望對模型效果背後的原因有更好的理解。構建能讓用戶理解的模型正變得越來越重要,在醫療、金融和司法等高風險應用中,這一點尤其明顯。可解釋機器學習是索信達金融AI實驗室的重點研究方向之一,我們希望通過一系列文章介紹不同解釋模型的方法,並分享可解釋機器學習理論結合實際業務的應用和思考。

1. LIME背景

現今的數據挖掘領域中,機器學習模型被廣泛使用。傳統的機器學習模型更關注預測效果,追求更高預測精準度和更快的訓練速度。然而,機器學習模型的“黑盒”屬性導致了其內部工作原理難以被理解,輸入與輸出之間往往存在極其複雜的函數關係。當模型應用到銀行業等金融領域時,透明度和可解釋性是機器學習模型是否值得信任的重要考核標準。我們需要告訴業務人員如何營銷,告訴風控人員如何識別風險點,而不僅僅告訴他們預測的結果。一個預測表現接近完美、卻屬於黑盒的人工智能模型,會容易產生誤導的決策,還可能招致系統性風險,導致漏洞被攻擊,因而變得不安全可靠。例如在銀行消費者貸款領域,美國聯邦政府頒布的平等信貸機會法(ECOA)明確要求各家銀行在拒絕每個消費者申請信用卡時,必須明確說明拒絕的理據。因此,應用複雜的機器學習模型時,我們需要構造一個“解釋器”,對模型的預測結果進行事後歸因解析,而LIME便是一個很好的事後解釋方法。

2. LIME介紹

LIME全稱Local Interpretable Model-Agnostic Explanations,由Marco Ribeiro, Sameer Singh 和Carlos Guestrin三個人在2016年《“Why Should I Trust You?” Explaining the Predictions of Any Classififier》這一文中提出來的,是一種事後解釋方法,即在建立模型之後所做的解釋,其名稱也很好的反應了它的特點:

Local: 基於想要解釋的預測值及其附近的樣本,構建局部的線性模型或其他代理模型;

Interpretable: LIME做出的解釋易被人類理解。利用局部可解釋的模型對黑盒模型的預測結果進行解釋,構造局部樣本特徵和預測結果之間的關係;

Model-Agnostic: LIME解釋的算法與模型無關,無論是用Random Forest、SVM還是XGBoost等各種複雜的模型,得到的預測結果都能使用LIME方法來解釋;

Explanations: LIME是一種事後解釋方法。

黑盒模型事後歸因解析:LIME方法 21

LIME可處理不同類型的輸入數據,如表格數據(Tabular Data)、圖像數據(Image Data)或文本數據(Text Data)。對於表格數據,如用銀行客戶行為數據預測理財產品銷售,訓練完複雜模型後可以用LIME得到哪些特徵影響理財產品銷售;圖像數據,如識別圖片中的動物是否為貓,訓練完複雜模型後可以用LIME得到圖片中的動物被識別為貓是因為哪一個或幾個像素塊;文本數據,如識別短信是否為垃圾短信,訓練完複雜模型後可以用LIME得到一條信息被判斷為垃圾短信是因為哪一個或幾個關鍵詞。

3. LIME原理

LIME的算法需要輸入想要解釋的預測樣本和已經訓練好的複雜模型,基於表格數據,算法步驟如下:

(1)預測樣本附近隨機採樣:對於連續型(continuous)特徵,LIME在預測樣本點附近用一個標準正態分佈N(0,1)來產生指定個數(代碼中設置的num_samples)的樣本;而對於類別型(categorical)特徵,則根據訓練集的分佈進行採樣,當新生成樣本的類別型特徵與預測樣本相同時,該類別型特徵取值為1,否則取值為0;假設,想要解釋的預測點為$x ^{*}=(x_1,x_2,dots,x_p)$ ,有p個特徵,其中第i個特徵為連續型特徵,取值為$x_i$ , $sigma_{i}$為該特徵在訓練集中的標準差;生成的N個樣本為$z_k=(z_1,z_2,dots,z_p), k=1,2,dots ,N$, 通過標準正態分佈$N(0,1) $對應生成一個隨機數$a_{ki}$(對應第k個新生成樣本的第i個特徵),則新生成的第k個樣本的第i個特徵的取值為$a_{ki}* sigma_{i}+x_{i}$。

(2)對新生成的樣本打標籤:將新生成的樣本放入已經訓練好的複雜模型中訓練,得到對應的預測結果;設訓練好的複雜模型為$f$,則新生成的的樣本預測結果為$f(z_1),f (z_2),dots,f(z_N)$。

(3)計算新生成的樣本與想要解釋的預測點的距離並得到權重:新生成的樣本距離想要解釋的預測點越近,我們認為這些樣本能夠更好的解釋預測點,因此需要賦予更高的權重。我們用指數核函數(exponential kernal)去定義新生成樣本的權重,設為$Pi_{x^{*}}(z)=exp (frac{-D(x^{*},z)^ {2}}{sigma^{2}})$, 此處$D(x^{*},z)$ 為某個新生成的樣本到$x^{*}$的距離函數, $ sigma$則為超參數。從公式中可以看到,距離越近, $Pi_{x^{*}}$的值越大。

(4)篩選用來解釋的特徵,擬合線性模型:設想要用來解釋的特徵有$p^{‘}$個,則用來解釋的特徵為$z^{‘}=(z_{(1)},z_{(2)},dots, z_{(p^{‘})})$,此處$z_{(1)}$與$z_{1}$ 不一定相等,只是用來表示從p個特徵中選取$p^{‘} $ 個作為解釋;設用來解釋的線性模型為$g(z^{‘})=omega_{g}.z^{‘}=omega_{0}+omega_{1}z_{(1 )}+dots omega_{p^{‘}}z_{(p^{‘})}$ ,為了求出線性模型的係數,我們用一個加權平方損失構造損失函數:$mathcal{L} (f,h,Pi_{x^{*}})=sum_{k=1}^{N} Pi_{x^{*}}(z_{k})(f(z_{k}) -g(z^{‘}_{k}))^2$, 找出使得損失最小的$omega_{g}$ ,而$omega_{g}.z^{‘}$即為我們用來解釋的特徵的線性組合;而對於$p^{‘}$個特徵的選擇,代碼中提供forward selection、highest weights、lasso_path等方法。

4. Submodular Pick

雖然LIME可以實現對單個預測值的事後解釋,提高了大家對黑箱模型的理解,但要看變量對模型預測值的整體影響,還需要進行全局解釋。當我們用數據集做特徵變量的全局解釋時,需要挑選具有代表性且多元化的樣本。一般的隨機挑選方法(Random pick)得到的效果一般般,而且也不太穩定。論文中提出次模挑選(Submodular Pick)來得到具有代表性的樣本集。

4.1 什麼是submodular?

submodular(次模)實際上是對“邊際效用遞減”這個說法的形式化。對於一個集合函數$f: 2^{V} rightarrow R$, 如果有一個集合V,滿足$V subseteq S$, 那麼在$V$中增加一個元素所增加的收益要小於等於在$V $的子集中增加一個元素所增加的收益。更清晰地表示:對於函數$f$而言,若$A subseteq B subseteq S$, 且$e in SB$,則$f(B cup lbrace e rbrace)-f(B) leq f(A cup lbrace erbrace)-f(A)$

在事後解釋領域裡, 我們想找到最具有代表性的樣本集,就可以藉鑑次模的思想,在集合$V$中不斷加入增益最大的樣本。但是如何尋找到這樣的樣本呢?在計算機領域裡,次模函數有個性質,俗稱NP-hard,即對於一個次模函數$f$, 如果給定一個限制條件,找出一個滿足條件的集合$V$,使得$f(V )$值最大。

貪心算法常用於解決上述的NP-hard問題。迭代地在解集合$V$中加入增益最大且滿足條件的元素,即第i次迭代時解$V_i=V_{i-1} cup lbrace argmax_e Delta (e|V_{i-1} )rbrace$, 其中增益為$Delta(e|V_{i-1})=f(V_{i-1} cup lbrace e rbrace)-f(V_{i-1})$.

4.2 Submodular pick(SP) 的步驟

當使用SP-LIME時,首先得設定好sample_size, 也就是次模挑選需要的樣本數目。假定我們從數據集中挑選n個樣本來做事後解釋,每個樣本是$d^{’}$維的,$d^{’}$是用來做事後解釋的特徵變量個數。基於該樣本集 $X$在解釋器中得到的解釋,我們構建了$n times d^{’}$的解釋矩陣$W$。

解釋矩陣$W$中的每一個元素$W_{ij}$, 代表第$i$個樣本的第$j$個可解釋成分的局部重要性。鑑於使用的是線性模型當代理模型,解釋器中對每一個樣本$x_i$都會計算出對應的線性解釋$g_i=xi(x_i)=alpha_0+sum_{j=1}^{d^{ ‘}}alpha_j z_{ij}$, $z_{ij}$是經過標準化之後的$x_{ij}$。在這裡定義$W_{ij}=|{g_{ij}}|=|alpha_{j}z_{ij}|$。

為了度量解釋空間中第j個特徵的全局重要性,根據上文計算好的解釋矩陣$W$,定義了重要性函數$I_j=sqrt{sum_{i=1}^n W_{ij} }$, $j in lbrace1,2…d^{‘}rbrace$。直觀地,我們想要令選取的特徵可以解釋不同的樣本,使重要性函數可以取更高的值。

在下圖中,我們展示了一個例子。假定$W$是$5times 5$的二元矩陣,即5個樣本,每個樣本是5維的,每個元素要么取0要么取1。重要性函數$I$給特徵f2打的分$I_2$比特徵f1打的分$I_1$要高, 所以特徵f2用來解釋更多的實例, 屬於重要的可解釋特徵。

黑盒模型事後歸因解析:LIME方法 22

為了挑選可以覆蓋最重要特徵的樣本,解釋集一定不能冗餘,即避免選取有相似解釋性的實例。比如,第二個樣本第三個樣本的事後解釋特徵相同,所以我們只用二選一即可。

我們將非冗餘的覆蓋程度用下面的公式來計算。定義覆蓋函數$c(x)$, 給定$W$和$I$, 計算至少出現在集合$V$中的一個樣本的特徵的重要性。

$c(V,W,I)=sum_{j=1}^{d^{’}} 1_{exists i in V:W_{ij} >0} I_j$

挑選的問題由如下公式定義,找到集合$V$, 滿足$|V| leq n$,可以使得$c(x)$達到最大。

$Pick(W,I)=argmax_{V,|V|leq n} c(V,W,I)$

集合函數$c$是次模函數, 上文提出貪心算法來解決挑選n個樣本的問題。其可以迭代地增加對函數$c$有最高邊際覆蓋增益的樣本$i$,並以常數$1-1/e$的速度近似到最優。

算法展示了具體的挑選流程,我們稱之為submodular pick (次模挑選)。

黑盒模型事後歸因解析:LIME方法 23

5. 案例展示

我們以比特幣的數據集為例,先使用XGBoost回歸模型預測比特幣價格,再用LIME做事後解釋。用到數據集中的15個變量作為特徵,響應變量為比特幣價格。下圖展示了部分的數據集結構。

黑盒模型事後歸因解析:LIME方法 24

用XGBoost對數據集做回歸預測,發現該模型的$R^2$高達97%。模型效果很好但是內在是黑箱模型。

黑盒模型事後歸因解析:LIME方法 25

因此接下來對XGBoost用LIME做事後解釋。先產生一個LIME的解釋器。

黑盒模型事後歸因解析:LIME方法 26

接著在測試集中任意挑選一個樣本,設置用10個特徵來開始解釋。代碼會輸出線性代理模型的截距,係數,標準化之後的樣本數據,用LIME得到的預測值以及XGB預測該樣本的比特幣價格。

黑盒模型事後歸因解析:LIME方法 27
黑盒模型事後歸因解析:LIME方法 28

上圖是在Notebook中展示的LIME解釋。左邊是用默認的5000個抽樣得到的樣本,通過擬合線性回歸模型計算出來的預測值,最小是355.03,最大是15423.96,2295.3則是XGBoost模型的預測值。中間的圖是線性模型中10個特徵變量對應的係數大小,positive代表係數為正,negative代表係數為負。右邊是樣本中對應10個特徵的取值。

下面會輸出對應的特徵變量的局部解釋圖。

黑盒模型事後歸因解析:LIME方法 29

接下來嘗試使用submodular pick 來挑選10個代表性的樣本做全局解釋。

from lime import submodular_pick
sp_obj = submodular_pick.SubmodularPick(explainer, train, reg.predict, sample_size=10, num_features=10, num_exps_desired=1)
[exp.as_pyplot_figure() for exp in sp_obj.sp_explanations]

黑盒模型事後歸因解析:LIME方法 30

從該全局解釋圖中可以看到,排名前三的特徵變量BlockSizeTot, TradeFee,TradeVol對XGBoost預測結果有正向的影響,TransValue則是對XGBoost產生了相對大的負向的影響。排名靠後的特徵變量影響相對較小。

6.結語

本文介紹了LIME作為一種複雜模型事後解釋器,如何擬合局部代理模型,以及如何挑選全局樣本,達到模型局部解釋和整體解釋的目的。更詳細的介紹參考《“Why Should I Trust You?” Explaining the Predictions of Any Classififier》原文。為了演示LIME方法的效果,我們以一個比特幣實際數據為例,對現下流行的XGBoost模型進行了LIME局部解釋和全局解釋。

7.參考文檔

[1] Túlio Ribeiro, M., Singh, S., Guestrin, C.: “Why Should I Trust You?”: explaining the predictions of any classifier. In: ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (2016)

[2] https://github.com/marcotcr/lime

原文鏈接:
https://mp.weixin.qq.com/s/qkWGKrAuDQqmNl-vxTekXg