模型可解釋性方面的研究,在近兩年的科研會議上成為關(guān)注熱點(diǎn),因?yàn)榇蠹也粌H僅滿足于模型的效果,更對模型效果的原因產(chǎn)生更多的思考,這樣的思考有助于模型和特征的優(yōu)化,更能夠幫助更好的理解模型本身和提升模型服務(wù)質(zhì)量。本文對機(jī)器學(xué)習(xí)模型可解釋性相關(guān)資料匯總survey。
來源:騰訊技術(shù)工程微信號
綜述
機(jī)器學(xué)習(xí)業(yè)務(wù)應(yīng)用以輸出決策判斷為目標(biāo)。可解釋性是指人類能夠理解決策原因的程度。機(jī)器學(xué)習(xí)模型的可解釋性越高,人們就越容易理解為什么做出某些決定或預(yù)測。模型可解釋性指對模型內(nèi)部機(jī)制的理解以及對模型結(jié)果的理解。其重要性體現(xiàn)在:建模階段,輔助開發(fā)人員理解模型,進(jìn)行模型的對比選擇,必要時優(yōu)化調(diào)整模型;在投入運(yùn)行階段,向業(yè)務(wù)方解釋模型的內(nèi)部機(jī)制,對模型結(jié)果進(jìn)行解釋。比如基金推薦模型,需要解釋:為何為這個用戶推薦某支基金。
機(jī)器學(xué)習(xí)流程步驟:收集數(shù)據(jù)、清洗數(shù)據(jù)、訓(xùn)練模型、基于驗(yàn)證或測試錯誤或其他評價(jià)指標(biāo)選擇最好的模型。第一步,選擇比較小的錯誤率和比較高的準(zhǔn)確率的高精度的模型。第二步,面臨準(zhǔn)確率和模型復(fù)雜度之間的權(quán)衡,但一個模型越復(fù)雜就越難以解釋。一個簡單的線性回歸非常好解釋,因?yàn)樗豢紤]了自變量與因變量之間的線性相關(guān)關(guān)系,但是也正因?yàn)槿绱耍鼰o法處理更復(fù)雜的關(guān)系,模型在測試集上的預(yù)測精度也更有可能比較低。而深度神經(jīng)網(wǎng)絡(luò)處于另一個極端,因?yàn)樗鼈兡軌蛟诙鄠€層次進(jìn)行抽象推斷,所以他們可以處理因變量與自變量之間非常復(fù)雜的關(guān)系,并且達(dá)到非常高的精度。但是這種復(fù)雜性也使模型成為黑箱,我們無法獲知所有產(chǎn)生模型預(yù)測結(jié)果的這些特征之間的關(guān)系,所以我們只能用準(zhǔn)確率、錯誤率這樣的評價(jià)標(biāo)準(zhǔn)來代替,來評估模型的可信性。
事實(shí)上,每個分類問題的機(jī)器學(xué)習(xí)流程中都應(yīng)該包括模型理解和模型解釋,下面是幾個原因:
- 模型改進(jìn):理解指標(biāo)特征、分類、預(yù)測,進(jìn)而理解為什么一個機(jī)器學(xué)習(xí)模型會做出這樣的決定、什么特征在決定中起最重要作用,能讓我們判斷模型是否符合常理。一個深度的神經(jīng)網(wǎng)絡(luò)來學(xué)習(xí)區(qū)分狼和哈士奇的圖像。模型使用大量圖像訓(xùn)練,并使用另外的一些圖像進(jìn)行測試。90%的圖像被準(zhǔn)確預(yù)測,這值得我們高興。但是在沒有計(jì)算解釋函數(shù)(explainer function)時,我們不知道該模型主要基于背景:狼圖像通常有一個下雪的背景,而哈士奇的圖像很少有。所以我們不知不覺地做了一個雪地探測器,如果只看準(zhǔn)確率這樣的指標(biāo),我們就不會看到這一點(diǎn)。知道了模型是如何使用特征進(jìn)行預(yù)測的,我們就能直覺地判斷我們的模型是否抓住了有意義的特征,模型是或否能泛化到其他樣本的預(yù)測上。
- 模型可信性與透明度:理解機(jī)器學(xué)習(xí)模型在提高模型可信度和提供審視預(yù)測結(jié)果透明度上是非常必要的,讓黑箱模型來決定人們的生活是不現(xiàn)實(shí)的,比如貸款和監(jiān)獄刑法。另一個對機(jī)器學(xué)習(xí)結(jié)果可信度提出質(zhì)疑的領(lǐng)域是藥品,模型結(jié)果會直接決定病人的生與死。機(jī)器學(xué)習(xí)模型在區(qū)分惡性腫瘤和不同類型的良性腫瘤方面是非常準(zhǔn)確的,但是我們依然需要專家對診斷結(jié)果進(jìn)行解釋,解釋為什么一個機(jī)器學(xué)習(xí)模型將某個患者的腫瘤歸類為良性或惡性將大大幫助醫(yī)生信任和使用機(jī)器學(xué)習(xí)模型來支持他們工作。長久來看,更好地理解機(jī)器學(xué)習(xí)模型可以節(jié)省大量時間、防止收入損失。如果一個模型沒有做出合理的決定,在應(yīng)用這個模型并造成不良影響之前,我們就可以發(fā)現(xiàn)這一點(diǎn)。
- 識別和防止偏差:方差和偏差是機(jī)器學(xué)習(xí)中廣泛討論的話題。有偏差的模型經(jīng)常由有偏見的事實(shí)導(dǎo)致,如果數(shù)據(jù)包含微妙的偏差,模型就會學(xué)習(xí)下來并認(rèn)為擬合很好。一個有名的例子是,用機(jī)器學(xué)習(xí)模型來為囚犯建議定罪量刑,這顯然反映了司法體系在種族不平等上的內(nèi)在偏差。其他例子比如用于招聘的機(jī)器學(xué)習(xí)模型,揭示了在特定職位上的性別偏差,比如男性軟件工程師和女性護(hù)士。機(jī)器學(xué)習(xí)模型在我們生活的各個層面上都是強(qiáng)有力的工具,而且它也會變得越來越流行。所以作為數(shù)據(jù)科學(xué)家和決策制定者來說,理解我們訓(xùn)練和發(fā)布的模型如何做出決策,讓我們可以事先預(yù)防偏差的增大以及消除他們,是我們的責(zé)任。
可解釋性特質(zhì):
- 重要性:了解“為什么”可以幫助更深入地了解問題,數(shù)據(jù)以及模型可能失敗的原因。
- 分類:建模前數(shù)據(jù)的可解釋性、建模階段模型可解釋性、運(yùn)行階段結(jié)果可解釋性。
- 范圍:全局解釋性、局部解釋性、模型透明度、模型公平性、模型可靠性。
- 評估:內(nèi)在還是事后?模型特定或模型不可知?本地還是全局?
- 特性:準(zhǔn)確性、保真性、可用性、可靠性,魯棒性、通用性等。
- 人性化解釋:人類能夠理解決策原因的程度,人們可以持續(xù)預(yù)測模型結(jié)果的程度標(biāo)示。
動機(jī)
在工業(yè)界中,數(shù)據(jù)科學(xué)或機(jī)器學(xué)習(xí)的主要焦點(diǎn)是更偏“應(yīng)用”的解決復(fù)雜的現(xiàn)實(shí)世界至關(guān)重要的問題,而不是理論上有效地應(yīng)用這些模型于正確的數(shù)據(jù)。機(jī)器學(xué)習(xí)模型本身由算法組成,該算法試圖從數(shù)據(jù)中學(xué)習(xí)潛在模式和關(guān)系,而無需硬編碼固定規(guī)則。因此,解釋模型如何對業(yè)務(wù)起作用總是會帶來一系列挑戰(zhàn)。有一些領(lǐng)域的行業(yè),特別是在保險(xiǎn)或銀行等金融領(lǐng)域,數(shù)據(jù)科學(xué)家通常最終不得不使用更傳統(tǒng)的機(jī)器學(xué)習(xí)模型(線性或基于樹的)。原因是模型可解釋性對于企業(yè)解釋模型所采取的每個決策非常重要。
殘酷的現(xiàn)實(shí)是,如果沒有對機(jī)器學(xué)習(xí)模型或數(shù)據(jù)科學(xué)pipeline如何運(yùn)作的合理理解,現(xiàn)實(shí)中的項(xiàng)目很少成功。現(xiàn)實(shí)中的數(shù)據(jù)科學(xué)項(xiàng)目,通常會有業(yè)務(wù)和技術(shù)兩方面。數(shù)據(jù)科學(xué)家通常致力于構(gòu)建模型并為業(yè)務(wù)提供解決方案。但是,企業(yè)可能不知道模型如何工作的復(fù)雜細(xì)節(jié)。
數(shù)據(jù)科學(xué)從業(yè)者將知道存在典型的模型可解釋性與模型性能權(quán)衡。這里需要記住的一點(diǎn)是,模型性能不是運(yùn)行時或執(zhí)行性能,而是模型在決策中的準(zhǔn)確程度。有幾種模型,包括簡單的線性模型甚至是基于樹的模型,它們可以很容易地解釋模型為獲得特定的洞察力或預(yù)測而做出的決策,但是你可能需要犧牲模型性能,因?yàn)樗鼈兛偸遣荒墚a(chǎn)生最好的結(jié)果是由于高偏差(線性模型)或高方差的固有問題,導(dǎo)致過度擬合(完全成長的樹模型)。更復(fù)雜的模型,如集合模型和最近的深度學(xué)習(xí)模型系列通常會產(chǎn)生更好的性能,但被認(rèn)為是黑盒模型,因?yàn)楹茈y解釋模型如何真正做出決定。
理解模型可解釋性
模型解釋作為一個概念仍然主要是理論和主觀的。任何機(jī)器學(xué)習(xí)模型的核心都有一個響應(yīng)函數(shù),它試圖映射和解釋獨(dú)立(輸入)自變量和(目標(biāo)或響應(yīng))因變量之間的關(guān)系和模式。當(dāng)模型預(yù)測或?qū)ふ乙娊鈺r,需要做出某些決定和選擇。模型解釋試圖理解和解釋響應(yīng)函數(shù)所做出的這些決定,即what,why以及how。模型解釋的關(guān)鍵是透明度,質(zhì)疑能力以及人類理解模型決策的難易程度。模型解釋的三個最重要的方面解釋如下。
1.是什么驅(qū)動了模型的預(yù)測? 我們應(yīng)該能夠查詢我們的模型并找出潛在的特征交互,以了解哪些特征在模型的決策策略中可能是重要的。這確保了模型的公平性。
2.為什么模型會做出某個決定? 我們還應(yīng)該能夠驗(yàn)證并證明為什么某些關(guān)鍵特征在預(yù)測期間驅(qū)動模型所做出的某些決策時負(fù)有責(zé)任。這確保了模型的可靠性。
- 我們?nèi)绾涡湃文P皖A(yù)測? 我們應(yīng)該能夠評估和驗(yàn)證任何數(shù)據(jù)點(diǎn)以及模型如何對其進(jìn)行決策。對于模型按預(yù)期工作的關(guān)鍵利益相關(guān)者而言,這應(yīng)該是可證明且易于理解的。這確保了模型的透明度。
在比較模型時,除了模型性能之外,如果模型的決策比其他模型的決策更容易理解,那么模型被認(rèn)為比其他模型具有更好的可解釋性。
可解釋性的重要性
在解決機(jī)器學(xué)習(xí)問題時,數(shù)據(jù)科學(xué)家往往傾向于關(guān)注模型性能指標(biāo),如準(zhǔn)確性,精確度和召回等等(毫無疑問,這很重要!)。這在大多數(shù)圍繞數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)的在線競賽中也很普遍。但是,指標(biāo)只能說明模型預(yù)測決策的部分故事。隨著時間的推移,由于環(huán)境中的各種因素導(dǎo)致的模型概念漂移,性能可能會發(fā)生變化。因此,了解推動模型采取某些決策的因素至關(guān)重要。
如果一個模型工作得很好,為什么還要深入挖掘呢?在解決現(xiàn)實(shí)世界中的數(shù)據(jù)科學(xué)問題時,為了讓企業(yè)信任您的模型預(yù)測和決策,他們會不斷提出“我為什么要相信您的模型?”這一問題,這一點(diǎn)非常有意義。如果一個人患有癌癥或糖尿病,一個人可能對社會構(gòu)成風(fēng)險(xiǎn),或者即使客戶會流失,您是否會對預(yù)測和做出決策(如果有的話)感到滿意?也許不是,如果我們能夠更多地了解模型的決策過程(原因和方式),我們可能會更喜歡它。這使我們更加透明地了解模型為何做出某些決策,在某些情況下可能出現(xiàn)的問題,并且隨著時間的推移它有助于我們在這些機(jī)器學(xué)習(xí)模型上建立一定程度的信任。
- 了解預(yù)測背后的原因在評估信任方面非常重要,如果計(jì)劃基于預(yù)測采取行動,或者選擇是否部署新模型,那么這是至關(guān)重要的。
- 無論人類是直接使用機(jī)器學(xué)習(xí)分類器作為工具,還是在其他產(chǎn)品中部署模型,仍然存在一個至關(guān)重要的問題:如果用戶不信任模型或預(yù)測,他們就不會使用它。
這是我們在本文中多次討論的內(nèi)容,也是決定數(shù)據(jù)科學(xué)項(xiàng)目在行業(yè)中取得成功的關(guān)鍵區(qū)別之一。這推動了模型解釋的必要性和重要性的緊迫性。
可解釋性的標(biāo)準(zhǔn)
有一些特定的標(biāo)準(zhǔn)可用于分類模型解釋方法。Christoph Molnar,2018年“可解釋的機(jī)器學(xué)習(xí),制作黑箱模型可解釋指南”中提到了一個很好的指南。
- 內(nèi)在還是事后? 內(nèi)在可解釋性就是利用機(jī)器學(xué)習(xí)模型,該模型本質(zhì)上是可解釋的(如線性模型,參數(shù)模型或基于樹的模型)。事后可解釋性意味著選擇和訓(xùn)練黑匣子模型(集合方法或神經(jīng)網(wǎng)絡(luò))并在訓(xùn)練后應(yīng)用可解釋性方法(特征重要性,部分依賴性圖)。我們將更多地關(guān)注我們系列文章中的事后模型可解釋方法。
- 模型特定或模型不可知? 特定于模型的解釋工具非常特定于內(nèi)在模型解釋方法,這些方法完全依賴于每個模型的功能和特征。這可以是系數(shù),p值,與回歸模型有關(guān)的AIC分?jǐn)?shù),來自決策樹的規(guī)則等等。與模型無關(guān)的工具與事后方法更相關(guān),可用于任何機(jī)器學(xué)習(xí)模型。這些不可知方法通常通過分析(和輸入的擾動)特征輸入和輸出對來操作。根據(jù)定義,這些方法無法訪問任何模型內(nèi)部,如權(quán)重,約束或假設(shè)。
- 本地還是全局? 這種解釋分類討論了解釋方法是解釋單個預(yù)測還是整個模型行為?或者如果范圍介于兩者之間?我們將很快談?wù)撊蚝偷胤降慕忉尅?/li>
可解釋性的范圍
如何定義可解釋性的范圍和界限?一些有用的方面可以是模型的透明度,公平性和責(zé)任性。全局和局部模型解釋是定義模型解釋范圍的明確方法。
全局可解釋:就是試圖理解“模型如何進(jìn)行預(yù)測?”和“模型的子集如何影響模型決策?”。要立即理解和解釋整個模型,我們需要全局可解釋性。全局可解釋性是指能夠基于完整數(shù)據(jù)集上的依賴(響應(yīng))變量和獨(dú)立(預(yù)測變量)特征之間的條件交互來解釋和理解模型決策。嘗試?yán)斫馓卣鹘换ズ椭匾允冀K是理解全球解釋的一個很好的一步。當(dāng)然,在嘗試分析交互時,在超過兩維或三維之后可視化特征變得非常困難。因此,經(jīng)常查看可能影響全局知識模型預(yù)測的模塊化部分和特征子集會有所幫助。全局解釋需要完整的模型結(jié)構(gòu),假設(shè)和約束知識。
局部解釋:試圖理解“為什么模型為單個實(shí)例做出具體決策?”和“為什么模型為一組實(shí)例做出具體決策?”。對于本地可解釋性,我們不關(guān)心模型的固有結(jié)構(gòu)或假設(shè),我們將其視為黑盒子。為了理解單個數(shù)據(jù)點(diǎn)的預(yù)測決策,我們專注于該數(shù)據(jù)點(diǎn)并查看該點(diǎn)周圍的特征空間中的局部子區(qū)域,并嘗試基于該局部區(qū)域理解該點(diǎn)的模型決策。本地?cái)?shù)據(jù)分布和特征空間可能表現(xiàn)完全不同,并提供更準(zhǔn)確的解釋而不是全局解釋。局部可解釋模型 - 不可知解釋(LIME)框架是一種很好的方法,可用于模型不可知的局部解釋。我們可以結(jié)合使用全局和局部解釋來解釋一組實(shí)例的模型決策。
模型透明度:為試圖理解“如何根據(jù)算法和特征創(chuàng)建模型?”。我們知道,通常機(jī)器學(xué)習(xí)模型都是在數(shù)據(jù)特征之上利用算法來構(gòu)建將輸入映射到潛在輸出(響應(yīng))的表示。模型的透明度可能試圖了解模型的構(gòu)建方式以及可能影響其決策的更多技術(shù)細(xì)節(jié)。這可以是神經(jīng)網(wǎng)絡(luò)的權(quán)重,CNN濾波器的權(quán)重,線性模型系數(shù),決策樹的節(jié)點(diǎn)和分裂。但是,由于業(yè)務(wù)可能不太精通這些技術(shù)細(xì)節(jié),因此嘗試使用不可知的局部和全局解釋方法來解釋模型決策有助于展示模型透明度。
可解釋性的作用
對于想要了解模型如何工作的數(shù)據(jù)科學(xué)家來說,評估模型的準(zhǔn)確性通常是不夠的。數(shù)據(jù)科學(xué)家通常想知道模型輸入變量如何工作以及模型的預(yù)測如何根據(jù)輸入變量的值而變化。
機(jī)器學(xué)習(xí)算法和模型的工程應(yīng)用中用到最多的主要是樹類模型(lgb,xgb)和神經(jīng)網(wǎng)絡(luò)(cnn, rnn),使用者往往習(xí)慣于很少去思考其中的含義和解釋性。需要思考一個模型的哪些東西是可解釋的?
所以有幾個問題值得討論:
- 哪些特征在模型看到是最重要的?
- 關(guān)于某一條記錄的預(yù)測,每一個特征是如何影響到最終的預(yù)測結(jié)果的?
- 從大量的記錄整體來考慮,每一個特征如何影響模型的預(yù)測的?
為什么這些解釋信息是有價(jià)值的呢:
- 調(diào)試模型用
一般的真實(shí)業(yè)務(wù)場景會有很多不可信賴的,沒有組織好的臟數(shù)據(jù)。你在預(yù)處理數(shù)據(jù)時就有可能加進(jìn)來了潛在的錯誤,或者不小心泄露了預(yù)測目標(biāo)的信息等,考慮各種潛在的災(zāi)難性后果,debug的思路就尤其重要了。當(dāng)你遇到了用現(xiàn)有業(yè)務(wù)知識無法解釋的數(shù)據(jù)的時候,了解模型預(yù)測的模式,可以幫助你快速定位問題。
- 指導(dǎo)工程師做特征工程
特征工程通常是提升模型準(zhǔn)確率最有效的方法。特征工程通常涉及到到反復(fù)的操作原始數(shù)據(jù)(或者之前的簡單特征),用不同的方法來得到新的特征。有時候你完成FE的過程只用到了自己的直覺。這其實(shí)還不夠,當(dāng)你有上百個原始特征的時候,或者當(dāng)你缺乏業(yè)務(wù)背景知識的時候,你將會需要更多的指導(dǎo)方向。如何創(chuàng)造出這樣優(yōu)秀的特征呢?如何找到最重要的特征的方法,并且可以發(fā)現(xiàn)兩個特別相關(guān)的特征,當(dāng)面對越來越多的特征的時候,這些方法就會很重要啦。
- 指導(dǎo)數(shù)據(jù)采集的方向
對于網(wǎng)上下載的數(shù)據(jù)集你完全控制不了。不過很多公司和機(jī)構(gòu)用數(shù)據(jù)科學(xué)來指導(dǎo)他們從更多方面收集數(shù)據(jù)。一般來說,收集新數(shù)據(jù)很可能花費(fèi)比較高或者不是很容易,所以大家很想要知道哪些數(shù)據(jù)是值得收集的。基于模型的洞察力分析可以教你很好的理解已有的特征,這將會幫助你推斷什么樣子的新特征是有用的。
- 指導(dǎo)人們做決策
一些決策是模型自動做出來的,雖然亞馬遜不會用人工來決定展示給你網(wǎng)頁上的商品,但是很多重要的決策是由人來做出的,而對于這些決定,模型的洞察力會比模型的預(yù)測結(jié)果更有價(jià)值。
- 建立模型和人之間的信任
很多人在做重要決策的時候不會輕易的相信模型,除非他們驗(yàn)證過模型的一些基本特性,這當(dāng)然是合理的。實(shí)際上,把模型的可解釋性展示出來,如果可以匹配上人們對問題的理解,那么這將會建立起大家對模型的信任,即使是在那些沒有數(shù)據(jù)科學(xué)知識的人群中。
方法
Confusion Matrix
一個完美的分類模型就是,如果一個客戶實(shí)際上屬于類別 good,也預(yù)測成good,處于類別 bad,也就預(yù)測成 bad。實(shí)際上一些是 good 的客戶,根據(jù)我們的模型,卻預(yù)測他為 bad,對一些原本是 bad 的客戶,卻預(yù)測他為 good。我們需要知道,這個模型到底預(yù)測對了多少,預(yù)測錯了多少,混淆矩陣就把所有這些信息,都?xì)w到一個表里:
Sensitivity(覆蓋率,True Positive Rate)= 正確預(yù)測到的正例數(shù) / 實(shí)際正例總數(shù);Recall (True Positive Rate,or Sensitivity) =true positive/total actual positive=d/c+d;
PV+ (命中率,Precision, Positive Predicted Value) = 正確預(yù)測到的正例數(shù) / 預(yù)測正例總數(shù);Precision (Positive Predicted Value, PV+) =true positive/ total predicted positive=d/b+d;
Specificity (負(fù)例的覆蓋率,True Negative Rate) = 正確預(yù)測到的負(fù)例個數(shù) / 實(shí)際負(fù)例總數(shù);Specificity (True Negative Rate) =true negative/total actual negative=a/a+b;
圖中關(guān)于混淆矩陣結(jié)果理解:recall:0.54;precision:0.915;specificity:0.95;
Lift
它衡量的是,與不利用模型相比,模型的預(yù)測能力 “變好” 了多少。實(shí)質(zhì)上它強(qiáng)調(diào)的是投入與產(chǎn)出比。不利用模型,我們只能利用 “正例的比例是 c+d/a+b+c+d” 這個樣本信息來估計(jì)正例的比例(baseline model),而利用模型之后,我們不需要從整個樣本中來挑選正例,只需要從我們預(yù)測為正例的那個樣本的子集(b+d)中挑選正例,這時預(yù)測的準(zhǔn)確率為 d/b+d。
顯然,lift(提升指數(shù))越大,模型的運(yùn)行效果越好。如果這個模型的預(yù)測能力跟 baseline model 一樣,那么 d/b+d 就等于 c+d/a+b+c+d(lift 等于 1),這個模型就沒有任何 “提升” 了(套一句金融市場的話,它的業(yè)績沒有跑過市場)。
ROC曲線 & PR曲線 & KS曲線
實(shí)際應(yīng)用中,通常是先基于訓(xùn)練好的分類器得出測試樣本的預(yù)測概率,然后將該測試樣本的預(yù)測概率與給定的閾值進(jìn)行比較,若該預(yù)測概率大于給定閾值,則將該測試樣本劃分為正類,反之則將其劃分為反類。對于不同的分類任務(wù),該分類閾值的取值也是不一樣的。
- ROC曲線(The Receiver Operating Characteristic Curve)給出的是不同分類閾值情況下真正率(TPr)和假正率(FPr)的變化曲線。PR曲線(Precision-Recall Curve)給出的是不同分類閾值情況下查準(zhǔn)率(Precision)和查全率(Recall)的變化曲線。有文獻(xiàn)指出,ROC曲線相比PR曲線有一個非常好的特性:就是當(dāng)正負(fù)樣本分布發(fā)生變化的時候,ROC曲線的形狀能夠基本保持不變,而PR曲線的形狀會發(fā)生較劇烈的變化。為了使得ROC曲線之間能更好的進(jìn)行比較,通常采用AUC,即ROC曲線下的面積來衡量一個分類算法的性能。其中,AUC的值越大,表明分類性能越好。
- KS(Kolmogorov-Smirnov Curve)曲線橫軸為不同的分類閾值,縱軸為真正率(TPr)和假正率(FPr)的變化曲線。KS值=max|TPr-FPr|,等價(jià)于ΔTPr=ΔFPr,這和ROC曲線上找最優(yōu)閾值的條件一致。KS值常在征信評分模型中用于衡量區(qū)分預(yù)測正負(fù)樣本的分隔程度。一般來說,KS值越大,表明正負(fù)樣本區(qū)分的程度越好,說明模型區(qū)分度越高。但并非所有的情況KS值都是越高越好的,尤其在征信模型中,如正負(fù)樣本完全分錯的情況下,KS值依舊可以很高。征信模型最期望得到的信用分?jǐn)?shù)分布為正態(tài)分布,如果KS值過大,如0.9,就可以認(rèn)為正負(fù)樣本分得過開了,不太可能是正態(tài)分布,反而比較可能是極端化的分布狀態(tài)(如U字型),這樣的分?jǐn)?shù)就很不好,基本可以認(rèn)為不可用。
Cumulative gains chart
橫坐標(biāo)表示:代表我們樣本的百分比,假設(shè)有10000個樣本,0.1代表1000個,1代表10000個樣本。
縱坐標(biāo)表示:代表橫軸所代表的那么多樣本中,判斷正確的比率。
baseline表示:如果我們不用模型,那我們對每一個人的打分都是一樣的,正率在所有樣本空間都是一樣的,連接起來就成為一條直線。
曲線含義:采用模型進(jìn)行預(yù)測。y值的分子代表模型預(yù)測且預(yù)測為正例的人數(shù),分母是整個群體正例人數(shù)。
Silhouette Analysis
Silhouette指的是一種解釋和驗(yàn)證數(shù)據(jù)集群內(nèi)一致性的方法。該技術(shù)提供了每個對象分類的簡潔圖形表示。
輪廓值是對象與其自身群集(內(nèi)聚)相比與其他群集(分離)相似程度的度量。輪廓范圍從-1到+1,其中高值表示對象與其自己的簇很好地匹配并且與相鄰簇很不匹配。如果大多數(shù)對象具有高值,則群集配置是合適的。如果許多點(diǎn)具有低值或負(fù)值,則群集配置可能具有太多或太少的群集。
圖中通過Silhouette方法大致對數(shù)據(jù)集樣本分類有了掌握,可以看到0/1類別大致比例。
Learning Curve
概念:學(xué)習(xí)曲線就是通過畫出不同訓(xùn)練集大小時訓(xùn)練集和交叉驗(yàn)證的準(zhǔn)確率,可以看到模型在新數(shù)據(jù)上的表現(xiàn),進(jìn)而來判斷模型是否方差偏高或偏差過高,以及增大訓(xùn)練集是否可以減小過擬合。
Bias是用所有可能的訓(xùn)練數(shù)據(jù)集訓(xùn)練出的所有模型的輸出的平均值與真實(shí)模型的輸出值之間的差異。
Variance是不同的訓(xùn)練數(shù)據(jù)集訓(xùn)練出的模型輸出值之間的差異。
解讀:當(dāng)訓(xùn)練集和測試集的誤差收斂但卻很高時,為高偏差。左上角的偏差很高,訓(xùn)練集和驗(yàn)證集的準(zhǔn)確率都很低,很可能是欠擬合。我們可以增加模型參數(shù),比如,構(gòu)建更多的特征,減小正則項(xiàng)。此時通過增加數(shù)據(jù)量是不起作用的。當(dāng)訓(xùn)練集和測試集的誤差之間有大的差距時,為高方差。當(dāng)訓(xùn)練集的準(zhǔn)確率比其他獨(dú)立數(shù)據(jù)集上的測試結(jié)果的準(zhǔn)確率要高時,一般都是過擬合。右上角方差很高,訓(xùn)練集和驗(yàn)證集的準(zhǔn)確率相差太多,應(yīng)該是過擬合。我們可以增大訓(xùn)練集,降低模型復(fù)雜度,增大正則項(xiàng),或者通過特征選擇減少特征數(shù)。理想情況是是找到偏差和方差都很小的情況,即收斂且誤差較小。
Permutation Importance
一個最基本的問題大概會是什么特征對我模型預(yù)測的影響最大呢?這個東西就叫做“feature importance”即特征重要性。anyway,字面意思看著就很重要啦。我們有很多方法來衡量特征的重要性,這里呢,將會介紹一種方法:排列重要性。這種方法和其他方法比起來,優(yōu)勢有:
- 計(jì)算速度快
- 廣泛使用和理解
- 我們希望特征重要性與屬性具有一致性
工作原理:排列重要性,一定是在model訓(xùn)練完成后,才可以計(jì)算的。簡單來說,就是改變數(shù)據(jù)表格中某一列的數(shù)據(jù)的排列,保持其余特征不動,看其對預(yù)測精度的影響有多大。大概三個步驟:
- 訓(xùn)練好模型
- 拿某一個feature column, 然后隨機(jī)打亂順序。然后用模型來重新預(yù)測一遍,看看自己的metric或者loss 。function變化了多少。
- 把上一個步驟中打亂的column復(fù)原,換下一個column重復(fù)上一個步驟,直到所有column都算一遍。
代碼示例:
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
import eli5 # python計(jì)算permutation importance工具包
from eli5.sklearn import PermutationImportance
path = './census_income_dataset.csv'
data = pd.read_csv(path)
#...省略數(shù)據(jù)預(yù)處理過程
X_train, X_test, y_train, y_test = train_test_split(df, y, test_size=0.2, random_state = 400)
# 訓(xùn)練XGBoost模型
model = xgb.XGBClassifier(
learning_rate =0.05,
n_estimators=100,
max_depth=3,
min_child_weight=1,
gamma=0.3,
subsample=0.8,
colsample_bytree=0.8,
objective= 'multi:softprob',
nthread=4,
scale_pos_weight=1,
num_class=2,
seed=27
).fit(X_train, y_train)
perm = PermutationImportance(model, random_state = 1).fit(X_test, y_test) # 實(shí)例化
eli5.show_weights(perm, feature_names = X_test.columns.tolist())
結(jié)果分析:
靠近上方的綠色特征,表示對模型預(yù)測較為重要的特征;
為了排除隨機(jī)性,每一次 shuffle 都會進(jìn)行多次,然后取結(jié)果的均值和標(biāo)準(zhǔn)差;
部分特征出現(xiàn)負(fù)值,表示其 shuffle 之后,對精度反而有所提升。這通常出現(xiàn)在特征不那么重要的時候。當(dāng)數(shù)據(jù)集較小的時候,這種情況更為常見;
“+ - ”之后的數(shù)字衡量的是一次重新洗牌后的表現(xiàn)如何變化;
這個數(shù)據(jù)集是收入水平數(shù)據(jù)集,這個例子里,最重要的特征是“capital_gain”, 這看起來是合理的。
PDP
部分依賴圖(PDP或PD圖)顯示特征對機(jī)器學(xué)習(xí)模型的預(yù)測結(jié)果的邊際效應(yīng),可以展示一個特征是如何影響預(yù)測的。部分依賴圖可以顯示目標(biāo)與特征之間的關(guān)系是線性的,單調(diào)的還是更復(fù)雜的。例如,當(dāng)應(yīng)用于線性回歸模型時,部分依賴圖總是顯示線性關(guān)系。
回歸的部分依賴函數(shù)定義為:
- xSxS是部分依賴圖要畫的特征集合
- xCxC是其他特征
通常,集合SS中有一到兩個特征,這個集合中的特征我們想知道他們對預(yù)測的影響。在集合SS和集合CC中的特征并集組成了全部特征空間x。邊際化機(jī)器學(xué)習(xí)模型輸出在集合C的特征分布上。PDP的一個假設(shè)是,C中的特征與s中的特征不相關(guān)。如果違反這個假設(shè),部分依賴圖的平均值將包括非常不可能甚至不可能的數(shù)據(jù)點(diǎn)。
邊緣化概念
邊緣化是一種通過累加一個變量的可能值以判定另一個變量的邊緣分布的方法。這聽起來有點(diǎn)抽象,讓我們看一個例子:
假設(shè)我們想知道天氣是如何影響英國人的幸福感的,也就是P(幸福感|天氣)。假定我們具有衡量某人的幸福感所需的定義和設(shè)備,同時記錄了某個英格蘭人和某個蘇格蘭人所處位置的天氣。可能蘇格蘭人通常而言要比英格蘭人幸福。所以我們其實(shí)在衡量的是P(幸福感, 國|天氣),即,我們同時考察幸福感和國。
邊緣化告訴我們,我們可以通過累加國家的所有可能值(英國由3國組成:英格蘭、蘇格蘭、威爾士),得到想要計(jì)算的數(shù)字,即P(幸福感|天氣) = P(幸福感, 國=英格蘭|天氣) + P(幸福感, 國=蘇格蘭|天氣) + P(幸福感, 國=威爾士|天氣)。
部分函數(shù)f^xSf^xS通過計(jì)算在訓(xùn)練數(shù)據(jù)的平均值,即Monte Carlo方法:
- x(i)CxC(i)是數(shù)據(jù)集中的真實(shí)特征值,這些特征是不關(guān)注的特征。
特征重要性可以告訴你哪些特征是最重要的或者是不重要的。
partial dependence圖可以告訴你一個特征是如何影響預(yù)測的。
PDP分析步驟如下:
- 訓(xùn)練一個Xgboost模型(假設(shè)F1 … F4是我們的特征,Y是目標(biāo)變量,假設(shè)F1是最重要的特征)。
- 我們有興趣探索Y和F1的直接關(guān)系。
- 用F1(A)代替F1列,并為所有的觀察找到新的預(yù)測值。采取預(yù)測的平均值。(稱之為基準(zhǔn)值)
- 對F1(B)… F1(E)重復(fù)步驟3,即針對特征F1的所有不同值。
- PDP的X軸具有不同的F1值,而Y軸是雖該基準(zhǔn)值F1值的平均預(yù)測而變化。
PDP特別適合用來回答類似這樣的問題:
- 在所有的收入水平的特征中,年齡和學(xué)歷是如何影響收入的?或者說,在不同的國家相同年齡的人群收入水平有多少相似呢?
- 預(yù)測推薦基金時,投資偏好的不同會帶來多大的影響?還是有其他更重要的影響因素?
如果你對線性回歸或者邏輯回歸比較熟悉,那么partial dependence可以被類比為這兩類模型中的“系數(shù)”。并且partial dependence在復(fù)雜模型中的作用比在簡單模型中更大,抓出更復(fù)雜的特性。
同樣還是用census_income的數(shù)據(jù)集,不同的個體在各個方面都是不一樣的。比如種族,年齡,受教育程度等等。一眼看過去,很難區(qū)分這些特征對結(jié)果的影響有多大。為了清晰的分析,我們還是先只拿出某一行數(shù)據(jù),比如說這一行數(shù)據(jù)里,有種族White,45歲,Bachelors。我們將會用已有模型來預(yù)測結(jié)果,將這一行的某一個變量,反復(fù)的進(jìn)行修改和重新預(yù)測,比如將年齡修改從45修改為60,等等。持續(xù)觀察預(yù)測結(jié)果,在不同的年齡時有什么樣的變化。
這里的例子,只用到了一行數(shù)據(jù)。特征之間的相互作用關(guān)系通過這一行來觀察可能不太妥當(dāng),那么考慮用多行數(shù)據(jù)來進(jìn)行試驗(yàn),然后根據(jù)平均值畫出圖像來。
from pdpbox import pdp
feature = 'age'
# 創(chuàng)建好畫圖所需的數(shù)據(jù)
pdp_goals = pdp.pdp_isolate(model, X_train, df.columns, feature)
# 畫出“age”這一特征的partial dependence plot
pdp.pdp_plot(pdp_goals, feature)
plt.show()
第一:y軸是預(yù)測結(jié)果的變化量。
第二:藍(lán)色陰影區(qū)域代表了置信的大小。
從這幅圖可以看出,age的增加肯定可以增加高收入概率,但是增加到一定的時候,對這個概率影響不大了。
置信區(qū)間概念
給定置信水平,根據(jù)估計(jì)值確定真實(shí)值可能出現(xiàn)的區(qū)間范圍,該區(qū)間通常以估計(jì)值為中心,該區(qū)間則為置信區(qū)間。
feature = 'education_num'
pdp_goals = pdp.pdp_isolate(model, X_train, df.columns, feature)
pdp.pdp_plot(pdp_goals, feature)
plt.show()
從這副圖可以看出,受教育程度對收入起積極作用,隨著受的教育越多,收入越高,也符合常人理解。
fig, axes, summary_df_1 = info_plots.target_plot_interact(
df=dataset, features=['age', 'education_num'], feature_names=['age', 'education_num'], target='income_level'
)
在此圖表中,氣泡大小不太重要,因?yàn)樗c觀測數(shù)量(事件發(fā)生的次數(shù))有關(guān)。最重要的見解來自氣泡的顏色,較暗的氣泡意味著更高的默認(rèn)概率。這是一個強(qiáng)大的工具,因?yàn)樗梢陨钊肓私馕覀冞x擇的兩個變量對因變量的影響。
features_to_plot = ['age', 'education_num']
inter1 = pdp.pdp_interact(model, df, df.columns, features_to_plot)
pdp.pdp_interact_plot(inter1, features_to_plot, plot_type='grid', x_quantile=True, ncols = 2, plot_pdp=True)
plt.show()
上圖可以看出,受教育程度和年齡對收入水平有著正相關(guān)作用,且隨著受教育程度增加,年齡從35-90,高收入的概率越來越大。
fig, axes = pdp.pdp_interact_plot(
inter1, ['age', 'education_num'], plot_type='contour', x_quantile=True, ncols=2,
plot_pdp=True
)
重要的是要記住,在該圖中,較暗的顏色并不一定意味著較高的默認(rèn)概率。在這里,我們繪制了受教育等級和年齡與收入等級概率。我們可以推斷,在這兩個自變量中,education_num起著更重要的作用,因?yàn)榈雀呔€圖主要是垂直的,遵循x軸刻度標(biāo)記(至少達(dá)到一個點(diǎn))。
ICE
部分依賴圖(PDP)和個體條件期望圖(ICE)說明了一個或多個輸入變量與黑盒模型的預(yù)測結(jié)果之間的關(guān)系。它們都基于可視化,模型不可知的技術(shù)。ICE圖可以更深入地探索個體差異并識別模型輸入之間的子組和相互作用。
另一方面,ICE圖使得可以深入到單個觀察的水平。它們可以幫助探索個體差異,并確定模型輸入之間的子組和交互。可以將每個ICE曲線視為一種模擬,顯示如果改變特定觀察的一個特征,模型預(yù)測會發(fā)生什么。為避免可視化過載,ICE圖一次只顯示一個模型變量。
可以將每個ICE曲線視為一種模擬,顯示如果您改變特定觀察的一個特征,模型預(yù)測會發(fā)生什么。如圖9所示,通過在曲線變量的唯一值上復(fù)制個體觀察并對每個重復(fù)進(jìn)行評分,獲得一個觀察的ICE曲線。
下圖中的PD圖結(jié)果基本上是平坦的,給人的印象是X1與模型的預(yù)測之間沒有關(guān)系。
當(dāng)我們觀察ICE圖時,它們呈現(xiàn)出一幅截然不同的圖:這種關(guān)系對于一次觀察非常正面,但對另一次觀察則非常負(fù)面。因此,與PD圖告訴我們的情況相反,ICE圖顯示X1實(shí)際上與目標(biāo)有關(guān);。基本上,ICE圖分離PD功能(畢竟是平均值)以揭示相互作用和個體差異。
當(dāng)對大數(shù)據(jù)集分析時,則可能需要進(jìn)行一些調(diào)整。例如,可以對選定的變量進(jìn)行分箱,也可以對數(shù)據(jù)集進(jìn)行采樣或分組。這些技術(shù)可以更快地提供實(shí)際圖的合理近似值。
如果想進(jìn)一步了解PD和ICE圖,Ray Wright寫了一篇很好的論文,展示了PD和ICE圖如何用于比較和獲得機(jī)器學(xué)習(xí)模型的洞察力,特別是所謂的“黑盒”算法,如隨機(jī)森林,神經(jīng)網(wǎng)絡(luò)和梯度增強(qiáng)。在他的論文中,他還討論了PD圖的局限性,并提供了有關(guān)如何為大數(shù)據(jù)生成可縮放圖的建議。
LIME
局部可解釋不可知模型(LIME)是一種算法,它提供了一種新穎的技術(shù),以可解釋和可信任的方式解釋任何預(yù)測模型的結(jié)果。它的工作原理是圍繞想要解釋的預(yù)測在本地訓(xùn)練可解釋的模型。這個工作發(fā)表于2016年KDD的論文。工具學(xué)習(xí)地址。
流程:
- 訓(xùn)練模型,模型(記作 ff)可以是LR、NN、Wide and deep、C4.5 Decision tree、Random forest、GBDT等任意模型。
- 訓(xùn)練結(jié)束后我們需要解析模型,先選擇一個待解析的樣本,樣本通過模型計(jì)算可以得到一個prediction(包含預(yù)測的label以及預(yù)測為1的probability),這時我們在這個樣本的附近選擇新的樣本并用模型計(jì)算出多個prediction,這樣樣本組合新的樣本集。
- 然后使用新的可解析的特征和prediction作為label來訓(xùn)練新的簡單模型(例如LR),然后使用簡單模型的權(quán)重作為這些特征的重要性作為輸出。
通俗來說:
就是選擇一個樣本以及樣本附近的點(diǎn),然后訓(xùn)練一個簡單模型來擬合,雖然簡單模型不能在完整數(shù)據(jù)集上有效,但至少在這個點(diǎn)附近都是有效的,這個簡單模型的特征是人類可解析的,而訓(xùn)練出的權(quán)重也可以表示特征重要性。
論文中算法描述:
為了更好地理解LIME的工作原理,讓我們考慮兩種不同類型的可解釋性:
- 全局可解釋性:全局解釋有助于我們理解由訓(xùn)練的響應(yīng)函數(shù)建模的整個條件分布,但全局解釋可以是近似的或基于平均值。
- 局部可解釋性:局部解釋促進(jìn)對單個數(shù)據(jù)點(diǎn)或分布的小范圍的理解,例如一組輸入記錄及其相應(yīng)的預(yù)測。由于小范圍的條件分布很可能是線性的,因此局部解釋可能比全局解釋更準(zhǔn)確。LIME旨在提供局部可解釋性,因此對于特定決策或結(jié)果最為準(zhǔn)確。
我們希望解釋器與模型無關(guān),并且在局部可靠。局部可靠的解釋捕獲要解釋的實(shí)例鄰域中的分類器行為。為了學(xué)習(xí)局部解釋,LIME使用可解釋的模型近似分類器圍繞特定實(shí)例的決策邊界。LIME與模型無關(guān),這意味著它將模型視為黑盒子,并且不對模型行為做出任何假設(shè)。這使得LIME適用于任何預(yù)測模型。
LIME的核心在于三個方面:
- 這里不對模型整體提供解釋,而是局部對每一個樣本單獨(dú)進(jìn)行解釋
- 即使機(jī)器學(xué)習(xí)模型訓(xùn)練過程會產(chǎn)生一些抽象的特征,但是解釋基于當(dāng)前輸入數(shù)據(jù)的變量特征
- 通過局部建立簡單模型進(jìn)行預(yù)測來對大多數(shù)重要特征進(jìn)行解釋
LIME作用在單個樣本上。
首先,我們?nèi)〕鲆粋€樣本,并(permute)重復(fù)這個數(shù)據(jù)同時增加一些微小擾動,這樣就得到了一個新的數(shù)據(jù)集,數(shù)據(jù)集中包含相似的樣本,都基于取出來的那個樣本。對于這個新數(shù)據(jù)集中的每一個樣本,我們可以計(jì)算它跟取出的樣本之間的相似性,即在permutation中它被調(diào)整了多大,所有的統(tǒng)計(jì)距離、相似性矩陣都可以用在這里,比如用指定寬度的指數(shù)內(nèi)核將歐式距離轉(zhuǎn)化為相似度。
下一步,使用最初訓(xùn)練的復(fù)雜模型,在新數(shù)據(jù)上進(jìn)行預(yù)測。正因?yàn)樾聰?shù)據(jù)樣本間的細(xì)微差別,我們可以跟蹤那些微小擾動對預(yù)測結(jié)果的影響。
最后,我們在新數(shù)據(jù)上訓(xùn)練出一個簡單模型(通常是線性模型),并使用最重要的特征進(jìn)行預(yù)測。最重要的特征有不同的決定方法,在指定加入模型解釋中的特征數(shù)量(通常在5到10附近)的前提下,可以
- 選擇在使用復(fù)雜模型進(jìn)行預(yù)測時回歸擬合上具有最高權(quán)重的特征
- 運(yùn)用正向選擇,選擇可以提高復(fù)雜模型的預(yù)測的回歸擬合的變量
- 在復(fù)雜的機(jī)器學(xué)習(xí)模型預(yù)測的基礎(chǔ)上,選擇正則化的收縮率最小的lasso預(yù)測擬合的特征
- 使用不多于我們已經(jīng)選擇了的特征的節(jié)點(diǎn)數(shù)量來構(gòu)建決策樹
## 創(chuàng)建LIME解釋器
explainer = lime.lime_tabular.LimeTabularExplainer(X_train ,feature_names = features_name, class_names=['0','1'], categorical_features=data_cat_features,
categorical_names=cat_columns, kernel_width=3)
predict_fn_xgb = lambda x: xgb.predict_proba(x).astype(float)
exp = explainer.explain_instance(X_test[2], predict_fn_xgb, num_features=6)
exp.show_in_notebook(show_all=False)
上圖給我們解釋了對于一個樣本的預(yù)測結(jié)果,是哪些特征決定樣本被分類到類別0,哪些特征決定樣本被分類到類別1,且具體列出樣本在這些特征的數(shù)值大小。很直觀和明確的解釋為什么模型做這個決定。
SHAP
Shaply值由美國洛杉磯加州大學(xué)教授羅伊德·夏普利(Lloyd Shapley)提出,用于解決合作博弈的貢獻(xiàn)和收益分配問題。N人合作中,單個成員的貢獻(xiàn)不一樣,收益分配也應(yīng)該不一樣。理想的分配方式是:貢獻(xiàn)=收益;
貢獻(xiàn)和收益分配是否有可以量化的方法呢?
Shapley方法就是這樣一種方法:Shapley值:單個成員所得與自己的貢獻(xiàn)相等。
基于Shap值的模型解釋是一種和模型無關(guān)的方法。如上圖,模型預(yù)測和Shap值解釋是兩個并行流程,Shap對模型預(yù)測的結(jié)果進(jìn)行解釋。NIPS 論文地址:A Unified Approach to Interpreting Model Predictions,也可以參考這篇博客:One Feature Attribution Method to (Supposedly) Rule Them All: Shapley Values。
原理:一個特征的shapley value是該特征在所有的特征序列中的平均邊際貢獻(xiàn)。
優(yōu)點(diǎn):
- 解決了多重共線性問題;
- 不僅考慮單個變量的影響,而且考慮變量組的影響,變量之間可能存在協(xié)同效應(yīng);
缺點(diǎn):計(jì)算效率低。
適用范圍:
- 計(jì)算個體的特征shapley value;
- 所有個體的每個特征的shapley value的絕對值求和或求平均即為整體的特征重要性;
Shap方法的兩大特性
- 特征歸因(收益)一致性:
定義
- 模型改變(A->B),特征x的貢獻(xiàn)不遞減(增加或者保持現(xiàn)狀),則歸因(收益)也不遞減;
特點(diǎn)
- 特征作用越大(小),重要度越高(低),和模型變化無關(guān);
全局特征一致性
- mean(|Tree SHAP|): Shap值;
- Gain : 特征用于劃分時所帶來的訓(xùn)練損失減益的平均值;
- Split Count: 根據(jù)特征用于劃分的次數(shù)計(jì)算重要性;
- Permutation: 將特征的值隨機(jī)排列,用排列前后的模型誤差來計(jì)算重要性;
局部樣本(Fever=yes,cough=yes的樣本)一致性
- Saabas[5] : 樹創(chuàng)建完成后,根據(jù)樣本預(yù)測值,將父節(jié)點(diǎn)和子節(jié)點(diǎn)value的差異,作為父節(jié)點(diǎn)的特征重要性;
- Tree SHAP : 基于Shap值矩陣(樣本數(shù)*特征數(shù)),計(jì)算出Fever和Cough的重要性;
- 特征歸因(收益)可加性:
解釋性方法如果具有特征歸因可加性,特征重要性和模型預(yù)測值可以通過特征貢獻(xiàn)的線性組合來表示。簡單模型最好的解釋是它本身;復(fù)雜模型,直接進(jìn)行解釋并不容易,需要通過代理模型來解釋。接下來引入代理模型(解釋模型)來描述特征歸因可加性。
樹模型Shap值的解
- N為全體特征集合,S為N的一個排列子集(順序相關(guān))
- 求和第一項(xiàng):排列數(shù)
- 求和第二項(xiàng):對于任意子集S,特征i的貢獻(xiàn)
- 特征i的shap值可以理解為i的貢獻(xiàn)歸因
詳細(xì)內(nèi)容參考論文。
用Shap值識別特征交叉
Shap方法計(jì)算兩兩特征交叉影響:
通俗理解:交叉影響=兩個人合作貢獻(xiàn)增益,減去各自單干的貢獻(xiàn);
單個特征的貢獻(xiàn)
Shap方法計(jì)算單個特征的貢獻(xiàn)(剔除交叉影響):
通俗理解:個人影響=個人合作貢獻(xiàn),減去其它N-1個人的貢獻(xiàn);下面還是以收入水平數(shù)據(jù)集進(jìn)行案例分析:
row_to_show = 5
data_for_prediction = X_test.iloc[row_to_show] # use 5 row of data here. Could use multiple rows if desired
data_for_prediction_array = data_for_prediction.values.reshape(1, -1)
# 計(jì)算model的shap值
explainer = shap.TreeExplainer(model)
# 計(jì)算樣本數(shù)據(jù)的shap值
shap_values = explainer.shap_values(data_for_prediction)
shap.initjs()
shap.force_plot(explainer.expected_value[1], shap_values[1], data_for_prediction)
圖形解釋
- Base value :模型在數(shù)據(jù)集上的輸出均值:-0.1524
- Output value:模型在單個樣本的輸出值:0.68
- 起正向作用的特征:marital_status2、occupation3
- 起負(fù)向作用的特征:capital_gain、education_num
特征解釋
- 解釋Output value(單個樣本)和Base value(全體樣本Shap平均值)的差異,以及差異是由哪些特征造成的
- 紅色是起正向作用的特征,藍(lán)色是起負(fù)向作用的特征
shap_values_b = explainer.shap_values(X_test)
shap.force_plot(explainer.expected_value[0], shap_values_b[0], X_test, lin)
特征解釋
- 解釋Output value和Base value的差異,以及差異是由哪些特征造成的
Summary Plots:
shap_values = explainer.shap_values(X_test)
shap.summary_plot(shap_values[1], X_test)
圖形解釋
- 每個點(diǎn)是一個樣本(人),圖片中包含所有樣本
- X軸:樣本按Shap值排序-
- Y軸:特征按Shap值排序
- 顏色:特征的數(shù)值越大,越紅
特征解釋:
- martial_status2這個特征最重要,且值越大,收入會相對更高,到達(dá)一定峰值,會明顯下降
- 年齡也是影響結(jié)果的重要特征,年齡小收入普遍低,但年齡到達(dá)一定程度,并不會增加收入,存在年齡小,收入高的人群。
- 收入水平和capital_gain大致呈正相關(guān)。
shap.summary_plot(shap_values[1],X_test, plot_typ)
上圖是特征重要性圖譜,由上向下重要性依次減弱。
shap_values = explainer.shap_values(df)
shap.dependence_plot('age', shap_values[1], df, interaction_inde)
圖形解釋:
- X軸:age
- Y軸(左):一個樣本的age對應(yīng)的Shap值
- 顏色:capital_gain越大越紅
特征解釋:
- 排除所有特征的影響,描述age和capital_gain的關(guān)系。
- 年齡大的人更趨向于有大的資本收益,小部分年輕人有大的資本收益。
RETAIN
概述
論文使用稱為RETAIN的建模策略解決了這個限制,這是一種兩級神經(jīng)網(wǎng)絡(luò)順序數(shù)據(jù)的注意模型,提供對預(yù)測結(jié)果的詳細(xì)解釋保持與RNN相當(dāng)?shù)念A(yù)測精度。為此,RETAIN依賴于關(guān)注機(jī)制被建模以表示在遭遇期間醫(yī)生的行為。一個區(qū)別RETAIN的功能(參見圖1)是利用注意力生成來利用序列信息機(jī)制,同時學(xué)習(xí)可解釋的表示。并模仿醫(yī)生的行為,RETAIN以相反的時間順序檢查患者的過去訪問,從而促進(jìn)更穩(wěn)定的注意后代。因此,RETAIN會識別最有意義的訪問次數(shù)并量化訪問量有助于預(yù)測的功能。
模型使用兩套權(quán)重,一套是visit-level attention ,另外一套是variable-level attention。使用兩個RNN網(wǎng)絡(luò)分別產(chǎn)生。
Step1:使用線性embedding
Step2:產(chǎn)生visit-level attention。其中輸入RNN中的數(shù)據(jù)采用時間逆序輸入。對于稀疏的attention,使用Sparsemax而不是Softmax。
Step3:產(chǎn)生variable-levelattention,其中輸入RNN中的數(shù)據(jù)采用時間逆序輸入。
Step4:根據(jù)以上兩步生成的attentionweight,生成context vector。Ci表示病人第i次visit。
Step5:根據(jù)Context Vector生成預(yù)測結(jié)果。
LRP
逐層相關(guān)性傳播(LRP)是一種通過在神經(jīng)網(wǎng)絡(luò)中運(yùn)行反向傳遞來識別重要像素的方法。向后傳遞是保守的相關(guān)再分配過程,其中對較高層貢獻(xiàn)最大的神經(jīng)元從其獲得最大相關(guān)性。LRP程序如下圖所示。
該方法可以在大多數(shù)編程語言中容易地實(shí)現(xiàn)并且集成到現(xiàn)有的神經(jīng)網(wǎng)絡(luò)框架中。當(dāng)應(yīng)用于深度ReLU網(wǎng)絡(luò)時,LRP可以被理解為預(yù)測的深度泰勒分解。
這里有如何實(shí)現(xiàn)LRP用于解釋深度模型的代碼教程,有興趣可以動手實(shí)現(xiàn),用于解釋自己的深度模型。
更多騰訊AI相關(guān)技術(shù)干貨,請關(guān)注專欄騰訊技術(shù)工程
審核編輯 黃昊宇
-
模型
+關(guān)注
關(guān)注
1文章
3226瀏覽量
48809 -
機(jī)器學(xué)習(xí)
+關(guān)注
關(guān)注
66文章
8406瀏覽量
132565
發(fā)布評論請先 登錄
相關(guān)推薦
評論