在這一部分中咱們所要展示的技術,能夠爲非線性、非單調的響應函數生成解釋。咱們能夠把它們與前兩部分提到的技巧結合起來,增長全部種類模型的可解釋性。實踐者極可能須要使用下列加強解釋性技巧中的一種以上,爲他們手中最複雜的模型生成使人滿意的解釋性描述。算法
圖14. 爲了解釋複雜神經網絡而使用代理模型的示意圖api
代理模型是一種用於解釋複雜模型的簡單模型。最多見的創建方法是,對原始輸入和複雜模型給出的預測值創建簡單線性迴歸或者決策樹模型。代理模型中所展現的係數、變量重要性、趨勢以及交互做用,是複雜模型內部機制的一種體現。不過,幾乎沒有理論依據可以保證簡單的代理模型可以以高精度表達出更復雜的模型。網絡
代理模型適用於何種尺度的可解釋性?app
通常而言,代理模型是全局性的。一個簡單模型的全局可解釋特性會用於解釋一個更復雜模型的全局特性。不過,咱們也沒法排除代理模型對複雜模型條件分佈的局部擬合能力,例如先聚類,再用自變量擬合預測值、擬合預測值的分位點、判斷樣本點屬於哪一類等等,可以體現局部解釋性。由於條件分佈的一小段傾向因而線性的、單調的,或者至少有較好的模式,局部代理模型的預測精度每每比全局代理模型的表現更好。模型無關的局部可解釋性描述(咱們會在下一小節介紹)是一種規範化的局部代理模型建模方法。固然,咱們能夠把全局代理模型和局部代理模型一塊兒使用,來同時得到全局和局部的解釋性。機器學習
代理模型可以幫助咱們解釋何種複雜程度的響應函數?函數
代理模型可以有助於解釋任何複雜程度的機器學習模型,不過可能它們最有助於解釋非線性、非單調的模型。工具
代理模型如何幫咱們提升對數據的理解?學習
代理模型能夠針對複雜模型的內部機制向咱們提供一些洞見,所以能提升咱們對數據的理解。人工智能
代理模型如何讓模型更可信賴?spa
當代理模型的係數、變量重要性、趨勢效應和交叉效應都符合人類的領域知識,被建模的數據模式符合合理預期時,模型的可信度會得以提高。當數據中存在輕微的或者人爲的擾動時,或者數據來自於咱們感興趣領域的數據模擬,又或者數據隨着時間改變時,若是結合敏感性分析進行檢驗發現,對於模型的解釋是穩定的,而且貼合人類領域經驗,符合合理預期,那麼模型的可信度會得以提高。
圖15. 對LIME流程的一個描述,其中使用了加權線性模型幫助咱們解釋一個複雜的神經網絡是如何作出某個預測的
LIME是圍繞單個樣本創建局部代理模型的一種方法。它的主旨在於釐清對於特定的幾個樣本,分類器是如何工做的。LIME須要找到、模擬或者產生一組可解釋的樣本集。使用這組已經被詳細研究過的樣本,咱們可以解釋機器學習算法獲得的分類器是如何對那些沒有被仔細研究過的樣本進行分類的。一個LIME的實現能夠遵循以下流程:首先,使用模型對這組可解釋的數據集進行打分;其次,當模型對另外的數據進行分類時,使用解釋性數據集與另外的數據點的距離進行加權,以加權後的解釋性數據集做爲自變量作L1正則化線性迴歸。這個線性模型的參數能夠用來解釋,另外的數據是如何被分類/預測的。
LIME方法一開始是針對圖像、文本分類任務提出的,固然它也適用於商業數據或者客戶數據的分析,好比對預測客戶羣違約或者流失機率的百分位點進行解釋,或者對已知的成熟細分市場中的表明性客戶行爲進行解釋,等等。LIME有多種實現,我最多見的兩個,一個是LIME的原做者的實現,一個是實現了不少機器學習解釋工具的eli5包。
LIME提供的可解釋性的尺度如何?
LIME是一種提供局部可解釋性的技術。
LIME能幫助咱們解釋何種複雜程度的響應函數?
LIME有助於解釋各類複雜程度的機器學習模型,不過它可能最適合解釋非線性、非單調的模型。
LIME如何幫咱們提升對模型的理解?
LIME提供了咱們對重要變量的洞察力,釐清這些變量對特定重要樣本點的影響以及呈現出的線性趨勢。對極端複雜的響應函數更是如此。
LIME如何讓模型更加可信?
當LIME發現的重要變量及其對重要觀測點的影響貼合人類已有的領域知識,或者模型中體現的數據模式符合人類的預期時,咱們對模型的信心會獲得加強。結合下文將會提到的最大激發分析,當咱們能明顯地看到,類似的數據被類似的內部機制處理,全然不一樣的數據被不一樣的內部機制處理,在對多個不一樣的樣本使用不一樣處理方式上,可以保持一向性。同時,在數據存在輕微擾動時,數據是由咱們感興趣的場景模擬得出時,或者數據隨時間改變時,LIME能夠被視爲是敏感性分析的一種,幫助咱們檢查模型是否依然可以保持穩定,是否依然貼合人類的領域知識,以及數據模式是否依然符合預期。
圖16. 不一樣輸入數據激發神經網絡中不一樣神經元的示意圖
在最大激發分析中,能夠找到或者模擬出這樣的例子,它們老是會對特定的神經元、網絡層、濾波器(filter)、決策樹集成模型中的某棵樹進行大量激發。像第二部分所提到的單調性約束同樣,最大激發分析在實戰中,是一種很常見的與模型相關的解釋性分析技術。
對於特定的一組樣本或者一類類似的樣本,觀察它們可以對響應函數的哪一部分進行最大程度的激發(對於神經元而言是激發強度最大,對於樹模型而言是殘差最低,兩者均可以算最大激發),這種最大分析釐清了複雜模型的內部工做機制。同時,若是不一樣類型的樣本持續激發模型中相同的部分,那麼這種分析也能夠發現交叉效應。
圖16描繪了一種比較理想化的狀況:一個好的客戶和一個欺詐型客戶分別以高強度激發了兩組不一樣的神經元。紅圈表示兩類輸入數據所激發的強度排名前三的神經元。對於這兩類數據而言,最大激發的神經元不一樣,表示着對於不一樣類型的樣本,神經網絡的內部結構會以不一樣的方式對其進行處理。若是對不少不一樣子類型的好客戶和欺詐型客戶而言這種模式依然存在,那麼這就是一種很強烈的信號,意味着模型內部結構是穩定的、可靠的。
最大激發分析適用於哪一種尺度的可解釋性?
最大激發分析在尺度上是局部性的,由於它刻畫了一個複雜響應函數的不一樣部分是如何處理特定的一個或者一組觀測樣本的。
最大激發分析可以幫助咱們解釋何種複雜程度的響應函數?
最大激發分析可以解釋任意複雜的響應函數,不過它可能最適合於解釋非線性、非單調的模型。
最大激發分析如何讓咱們更好的理解數據和模型?
最大激發函數經過像咱們展現複雜模型的內部結構,提升咱們對數據、模型的理解。
最大激發分析如何讓模型變的更加可信?
上文討論過的LIME有助於解釋在一個模型中對條件分佈的局部進行建模並預測。最大激發分析能夠強化咱們對模型局部內在機制的信心。兩者的組合能夠爲複雜的響應函數創建詳細的局部解釋,它們是很棒的搭配。使用最大激發分析,當咱們能明顯地看到,類似的數據被類似的內部機制處理,全然不一樣的數據被不一樣的內部機制處理,對多個不一樣的樣本使用不一樣處理方式這一點保持一向性,模型中發現的交互做用貼合人類已有的領域知識,或者符合人類的預期,甚至把最大激發分析當作一種敏感性分析來用,以上的種種都會讓咱們對模型的信心得以提升。同時,在數據存在輕微擾動時,數據是由咱們感興趣的場景模擬得出時,或者數據隨時間改變時,最大激發分析能夠幫咱們檢查模型對於樣本的處理是否依然保持穩定。
圖17. 一個變量的分佈隨着時間而改變的示意圖
敏感性分析考察的是這樣一種特性:給數據加上人爲的擾動,或者加上模擬出的變化時,模型的行爲以及預測結果是否仍然保持穩定。在傳統模型評估之外,對機器學習模型預測進行敏感性分析多是最有力的機器學習模型驗證技術。微小地改變變量的輸入值,機器學習模型可能會給出全然不一樣的預測結論。在實戰中,由於自變量之間、因變量與自變量之間都存在相關性,有很多線性模型的驗證技巧是針對迴歸係數的數值穩定性的。 對從線性建模技術轉向機器學習建模技術的人而言,少關注一些模型參數數值不穩定性的狀況,多關心一些模型預測的不穩定性,這種作法可能還算是比較謹慎。
若是咱們能針對有趣的狀況或者已知的極端狀況作一些數據模擬,敏感性分析也能夠基於這些數據對模型的行爲以及預測結果作一些驗證。在整篇文章中說起或者未曾說起的很多技巧,均可以用來進行敏感性分析。預測的分佈、錯誤比率度量、圖標、解釋性技巧,這些方法均可以用來檢查模型在處理重要場景中的數據時表現如何,表現如何隨着時間變化,以及在數據包含人爲損壞的時候模型是否還能保持穩定。
敏感性分析適用於什麼尺度的可解釋性?
敏感性分析能夠是一種全局性的解釋技術。當使用單個的像代理模型這種全局性解釋技術時,使用敏感性分析能夠保證,就算數據中存在輕微擾動或者有人爲形成的數據缺失,代理模型中所存在的主要交叉效應依然穩定存在。
敏感性分析也能夠是一種局部性的解釋技術。例如,當使用LIME這種局部性解釋技術時,它能夠判斷在宏觀經濟承壓的條件下,爲某個細分市場的客戶進行授信時,模型中使用的重要變量是否依然重要。
敏感性分析可以幫咱們解釋何種複雜程度的響應函數?
敏感性分析能夠解釋任何複雜程度的響應函數。不過它可能最適合於解釋非線性的,或者表徵高階變量交叉特徵的響應函數。在這兩種狀況下,對自變量輸入值的輕微改變均可能引發預測值的大幅變更。
敏感性分析如何幫助咱們更好的理解模型?
敏感性分析經過向咱們展示在重要的場景下,模型及其預測值傾向於如何表現,以及這種表現隨時間會如何變化。所以敏感性分析能夠增強咱們對模型的理解。
敏感性分析如何提升模型的可信可信度?
若是在數據輕微改變或者故意受損時,模型的表現以及預測輸出仍然能表現穩定,那麼穩定性分析就能夠提升咱們對模型的信任。除此之外,若是數據場景受到外來影響,或者數據模式隨時間發生變化時,模型仍然可以符合人類的領域知識或者預期的話,模型的可信度也會上升。
對於非線性、非單調的響應函數,爲了量化衡量模型中自變量和因變量的關係,每每只能度量變量重要性這一種方法能夠選。變量重要性度量難以說明自變量大概是往哪一個方向影響因變量的。這種方法只能說明,一個自變量跟其餘自變量相比,對模型影響的相對強弱。
圖18. 在決策樹集成模型中,對變量重要性的描繪
在基於樹的模型中使用變量重要性度量是一種常見作法。如圖18所示,一種拍腦殼的變量重要性規則是,同時考慮樹模型中一個變量用於分叉的所在深度和出現的頻率:自變量所在分叉位置越高(譯者注:在越淺的層數出現),或者自變量在樹中出現的頻率越高,那麼它就越重要。對於單棵決策樹來講,每次這個自變量在某個節點成爲最佳分叉使用的變量時,把對應的分支準則(Splitting Criterion)收益累加起來,就能夠量化地判斷這個變量究竟有多重要。對於梯度提高樹的集成(譯者注:Gradient boosted tree ensemble, 每每也稱做GBDT)而言,能夠先對單棵樹計算變量重要性,而後再作聚合加總;咱們還有一種額外的度量,若是把單個自變量排除掉以後致使了模型精度的下降,那麼這個精度差別能夠表明自變量在模型中有多重要(Shuffling,洗牌法能夠視做考察排除一個/一部分變量的效應,由於其餘變量並無被洗掉)。對於神經網絡而言,對咱們感興趣的特定自變量的重要性度量,通常來講是它所對應的模型參數絕對值的加總。全局性的變量重要性度量技術每每因模型而異,實踐者們要特別注意,變量重要性的簡單度量可能會偏向於那些取值範圍較大,包含類別數目較多的那些變量。
圖19. LOCO方法的示意圖
最近某篇文章的預印版本給出一種局部性的、模型無關的、經過模型平均精度降低的方式來考察變量重要性的度量,稱爲『去除某一自變量的分析法』(Leave-One-Covariate-Out),簡稱LOCO。最開始LOCO是用於迴歸模型的,不過LOCO的大致思想是無關於模型的,並且能夠有多重不一樣的實現。能夠按照以下流程實現LOCO:對訓練集或驗證集中的每一行以及每個變量(自變量)進行局部性的重要性評分。在此以外,每個變量被設置爲缺失值、零值、平均值或者其餘值域中的值,來把它在預測時起到的效果消除掉。對預測精度有最大絕對影響的自變量就是對那一行預測時的最重要變量,同時,能夠對每一行中全部變量對預測的影響大小進行排序。LOCO還能爲每個變量計算它們對整個數據集精度的平均影響,給出全局性的變量重要性度量,甚至還能給出這些全局變量重要性度量的置信區間。
變量重要性度量適用於哪一種尺度的可解釋性?
通常來講變量重要性度量方法提供的解釋性是全局的;不過LOCO方法能夠爲數據集中的每一行或者新來的數據提供局部的變量重要性度量。
變量重要性度量可以幫咱們解釋何種複雜程度的響應函數?
變量重要性度量對於非線性、非單調的響應函數而言是最有效的;不過它們能夠普遍應用於各類機器學習習得的響應函數上。
變量重要性度量如何幫咱們更好的理解模型?
變量重要性度量讓咱們對模型中最具影響力的變量及其影響力順序有所瞭解,於是提升了咱們對模型的理解。
變量重要性度量如何讓模型更加可信?
若是變量重要性度量的結果可以貼合人類領域知識、符合人類預期,在數據存在輕微擾動或人爲干擾的狀況下仍然保持穩定,在數據隨時間變化或者經由模擬獲得時變更幅度能夠接受的話,那麼它就可以讓模型更加值得采信。
圖20. 單棵決策樹中,對於某同樣本點的預測,以高亮的決策路徑顯示
幾種『平均樹』的解釋方法已經提出了幾年了,不過名爲『決策樹模型解釋器』的簡單開源工具最近幾個月纔開始流行起來。決策樹模型解釋器把決策樹、隨機森林給出的預測進行分解,表示成爲全局平均值(bias)和各個自變量帶來的貢獻之和。決策樹模型解釋器是專門爲決策樹設計的算法。圖20顯示瞭如何將決策樹中的決策路徑分解成爲全局平均值以及各個自變量的貢獻。圖中給出了某個特定的樣本的決策路徑(決策樹模型不只能夠輸出模型中的平均值和自變量的貢獻值,也能輸出對於某個樣本而言的平均值以及自變量的貢獻值)eli5包中也有一個決策樹解釋器的實現。
決策樹解釋器適用於哪一種尺度的模型可解釋性?
當決策樹解釋器給出在整棵決策樹或者整個隨機森林中各個自變量的平均貢獻時,它的解釋性就是全局的。當它用於解釋某些特定的預測時,它的解釋性就是局部的。
決策樹解釋器可以解釋何種複雜程度的響應函數?
決策樹解釋器每每是用於解釋由決策樹、隨機森林模型構建的非線性、非單調響應函數的。
決策樹解釋器如何提升咱們對於模型的理解?
對於決策樹以及隨機森林模型中的自變量,決策樹解釋器經過展現它們平均的貢獻,並對它們進行排序,來增進咱們對模型的理解。
決策樹解釋器如何讓模型變得更加可信?
若是決策樹解釋器所展示的結果可以貼合人類領域知識、符合人類預期,在數據存在輕微擾動或人爲干擾的狀況下仍然保持穩定,在數據隨時間變化或者經由模擬獲得時變更幅度能夠接受的話,那麼它就可以讓模型更加值得采信。
在最近幾個月裏,當個人朋友和同事們據說我要寫這篇文章後,他們用郵件、短信、推特、Slack提醒我這方面新工做的速度簡直是有增無減。如今,我極可能一天要看兩個新的算法庫、算法或者論文,我幾乎不可能跟上這樣一種節奏,把這些東西一股腦塞進這篇綜述性的文章中。實際上,這篇文檔總要有個盡頭,必需要在某個地方戛然而止。因此咱們就在這裏停下吧!我相信,爲了讓理解機器學習的可解釋性更上一層樓,這篇文章提供了有效的總結,把這些解釋性技巧從四個標準上進行分類:它們的尺度(局部性的,或者全局性的),它們所能解釋響應函數的複雜程度,它們的應用領域(跟特定模型相關,或者跟特定模型無關),以及它們如何可以更易於理解、更容易受信任。同時,我相信,這篇文章涵蓋了主流類型的技巧,尤爲是那些領域應用型的或者是商業應用型的技巧。若是我有更充裕的時間可以無止盡的向本文添磚加瓦的話,我想要立刻給讀者展示的是兩個課題:一個課題是RuleFit(譯者注:基於規則的集成模型工具,RuleFit3是R語言中的一個包),另外一個課題則是讓深度學習更具可解釋性的諸多工做,好比論文『學習深度k近鄰表達』便是其中之一。針對這兩個課題我本身固然是要深刻鑽研下去的。
如此多的新進展紛至沓來,對於在這個課題(即機器學習可解釋性)上作研究的人而言,這是個使人激動的時代。我但願大家可以在這篇文章中發現有用的信息。由於這個領域能夠把機器學習和人工智能以更有效、更透明的方式傳達給用戶和客戶,我但願那些跟我處於統一領域的工做者們可以像我同樣,受到這些具備光明將來的革命性技術的鼓舞。