XGBoost是一種高效的集成學習模型框架,利用樹型分類器可以得到強大的分類結(jié)果和十分高效的運算效率。這篇文章主要探討如何解釋這種高效算法的方法,以及正確解釋模型的價值。如果你也被集成樹模型(如梯度提升樹)的可靠性和準確率所吸引,并且需要對他們作出解釋,那么這篇文章會為你帶來很多有益的思考。
假設我們的任務是為銀行預測個人的金融狀況。模型準確率越高,銀行收入就越多。但是因為模型的預測會用于借貸業(yè)務,因此我們也要能對模型為什么做出這樣的預測給出合理解釋。在嘗試了各種各樣的模型后,我們發(fā)現(xiàn)XGBoost所實現(xiàn)的梯度提升樹模型能給出最好的準確率。然而要解釋為什么XGBoost做出某個預測是困難的,所以我們面前有兩個選擇:1. 轉(zhuǎn)而使用更容易解釋的線性模型。2. 找出如何解釋XGBoost模型的方法。數(shù)據(jù)科學家們往往都不想犧牲準確率,所以我們也決定嘗試后者,即對復雜XGBoost模型(1247個深度為6的決策樹)作出解釋。
經(jīng)典全局特征重要性度量
最直接的選擇就是使用XGBoost Python接口中的plot_importance()方法。它能給出一個簡單的柱狀圖來表示我們數(shù)據(jù)集中每一個特征的重要性。
在一個用來預測人們是否會上報$50k以上收入的模型上運行xgboost.plot_importance方法的結(jié)果
通過觀察XGBoost所返回的特征重要性結(jié)果,我們可以看到年齡毫無疑問比其他特征都要重要。我們可以就此打住,并得出年齡就是我們模型最重要特征的結(jié)論,其次是每周的工作時長和受教育水平。但是身為優(yōu)秀的數(shù)據(jù)科學家,我們從文檔中得知在XGBoost中對特征重要性的度量共有三個選項:
Weight:一個特征在所有決策樹中被用來劃分數(shù)據(jù)的次數(shù)。
Cover:一個特征在所有決策樹中被用來劃分數(shù)據(jù)的次數(shù)和每次劃分涉及的樣本個數(shù)得到的加權(quán)結(jié)果。
Gain:一個特征被用于劃分數(shù)據(jù)時所帶來的訓練損失減益的平均值。
這些都是幾乎在任何樹模型的包里都能見到的典型重要性度量。Weight是默認選項,所以我們決定試一下另外兩個選項,看結(jié)果是否有所差別。
用cover和gain作為選項來運行xgboost.plot_importatnce的結(jié)果
我們很驚訝地看到特征重要性的順序較之前有很大不同。以cover為度量時,capital gain這一特征最能用于預測,而當用gain作為度量時,relationship status比其他特征都重要。在搞清哪一種度量最好之前,我們很難直接用這些度量來解釋模型的重要性。
如何判斷特征重要性的度量是好是壞?
比較不同特征歸因方法(feature attribution method)的優(yōu)劣并不容易。為了方便比較,我們定義如下兩個指標:
一致性:如果我們對一個模型作出修改,使得它更依賴于某一個特征的話,那么由特征歸因方法所得到的該特征的重要性(attributed importance)不應當降低。
準確性:所有特征重要性的和應等于模型的總重要性。例如,如果重要性是由R2值計算得到的,那么各個特征的R2值相加應等于模型的R2值。
如果某種特征歸因方法不滿足一致性,我們就很難用這種方法來比較兩個模型。因為即便我們算得一個特征在一個模型的重要性更高,也不意味著這個模型更依賴于該特征。
而當一個方法不滿足準確性時,我們不知道每個特征的重要性跟模型重要性間的關(guān)系是怎么樣的。所以我們就不能對歸因方法的結(jié)果直接歸一化,因為歸一化可能會打破一致性。
目前的歸因方法是一致和準確的嗎?
如上所述,一個歸因方法應當滿足一致性和準確性,當一個方法不滿足一致性,我們不能保證具有最高歸因的特征是實際上最重要的。下面我們來使用兩個非常簡單的樹模型來檢查歸因方法的一致性:
基于兩個特征的簡單樹模型,模型B中的咳嗽這一個特征顯然比模型A中的更重要。
模型的輸出是基于不同癥狀對生病的風險所做出的評分。當發(fā)燒和咳嗽兩個癥狀同時出現(xiàn)時,模型A會給出一個非零的風險分數(shù)。模型B跟模型A類似,但在咳嗽癥狀出現(xiàn)時,模型B會在模型A的基礎上加10分。為了檢查一個歸因方法是否滿足一致性,我們要先定義“重要性”。在這里我們將用兩種方法來定義重要性:1)當我們移除一組特征時,模型預期準確率(accuracy)的變化。 2)當我們移除一組特征時,模型預期輸出(output)的變化。
第一個定義可以衡量特征對模型的全局影響,而第二個定義則是衡量特征對單一預測的局部影響。在A和B兩個簡單樹模型中,無論從哪個定義出發(fā),咳嗽特征在模型B中都更重要。
上文中提到的weight,cover和gain三種方法都是全局特征歸因方法。但是對銀行部署的模型來說,模型需要對每個客戶的預測提供解釋。為了驗證不同方法是否滿足一致性,我們在簡單樹模型上運行五種不同的特征歸因方法:
1.Tree SHAP.我們提出的一種新穎的局部方法。
2.Saabas.一種啟發(fā)式的局部方法。
3.mean(|Tree SHAP|).一種基于Tree SHAP的局部結(jié)果取均值的全局方法。
4.Gain.與上文中的XGBoost中的Gain方法相同。
5.Split count.與上文中XGBoost中的weight方法相同。
6.Permutation. 當隨機擾動某個特征時,模型在測試集上的準確率的下降。
使用六種不同的方法對模型A和模型B進行特征歸因。這六種方法是已知文獻中所有針對樹模型的特征歸因方法。
但前述的方法都是不一致的,這是由于他們認為在模型B中咳嗽的重要性小于模型A。不一致的模型不能將影響最大的特征視為最重要的特征。細心的讀者可能已經(jīng)發(fā)現(xiàn)我們已經(jīng)在前文中的經(jīng)典特征歸因方法中提出過不一致特征了。同時對于精確性來說,Tree SHAP、Sabaas和Gain三種方法是精確的而分裂計數(shù)和特征置換是不準確的。
令人驚訝的是,被廣泛使用的基于gain的方法會引起如此多的不一致的結(jié)果。為了更好的理解其中的原因,讓我們來看看gain是如何計算模型A和B的。讓我們簡單的假設25%的數(shù)據(jù)落到了每一個的葉子節(jié)點并被精確的標記(每個葉子1/4)。
如果將均方根誤差作為損失函數(shù),首先從模型A的1200開始計量。在第一次分裂的過程中,損失從1200降到了800,那么意味著gain利用fever特征貢獻了400提升;進一步利用cough特征分裂得到了0的損失,意味著cough貢獻了800的提升;在模型B中,Cough和Fever分別貢獻了625和800的提升。如下圖所示:
模型A和模型B的分數(shù)計算
通常情況下距離根比較近的節(jié)點擁有比靠近葉子節(jié)點更重要的特征。那么對于gain方法來說,它對于gain方法來說低層級靠近葉子節(jié)點的特征卻貢獻了更多的重要性。正是這種偏差導致了不一致性。隨著樹的加深,這樣的偏差也在不斷增長。但對于Tree SHAP方法來說,在數(shù)學上對不同層次的特征進行了平均。
模型解釋
結(jié)合了堅實的理論和快速的算法實現(xiàn)讓SHAP值成為了解釋樹形模型的有力工具。利用這種新方法,我們重新解釋了上文中個性化銀行模型中的特征。
基于SHAP的全局均值方法用于收入預測模型
我們可以看到關(guān)系是最重要的特征,其次是年齡特征。SHAP度量保證了一致使得我們的分析更加容易。接下來我們需要對每一個客戶繪制響應的特征:
圖中每個點代表一個客戶,x坐標是特征的重要性,顏色代表特征的取值
上圖中特征根據(jù)均值排列,從中我們可以看到關(guān)系特征在收入達到50k$上的預測十分強烈。同時我們可以從上圖中看到局外點的影響。圖中的的顏色同時還顯示了年輕人一般收入較低、受教育程度會提高收入。
做了這么多,結(jié)果已經(jīng)很棒了。但是我們還可以從中發(fā)現(xiàn)更多的信息。我們可以繪制出度量隨特征的變化如下圖所示:
y軸表示了年齡對于年收入超過50k$的影響程度。
從中可以清晰的看到XGBoost模型抽取的特征,及其相互影響。對于20多歲的年輕人來說,年齡對于他們的影響十分小甚至有副作用,這意味著其他特征影響著年齡的重要性。為了了解這種相互影響,我們將受教育年限作為帶顏色的點繪制到了同一副圖中。高等教育在20多歲的年紀里對于收入影響不大,但在30多歲時候卻有著至關(guān)重要的影響。
上圖中可以清楚的看出受教育程度和年齡的關(guān)系。同樣我們還可以做出每周工作時間及其重要性的關(guān)系。
如果我們對于數(shù)據(jù)中的另一個變量工作時間進性相同的分析的話,我們會發(fā)現(xiàn)沒有工作50小時是比較好的選擇,而如果對對于已婚人士來說的話超出的工作時間并不能為他們帶來更多的收入。
解讀你的模型
我們大概瀏覽了一遍在構(gòu)建和部署模型的時候如何思考和理解模型。我們可以通過SHAP值作為度量來分析并利用shape工具包來可視化分析結(jié)果。從而尋找出最重要的變量。如果你對XGBoost感興趣,你還可以嘗試下Apache的XGBoost和微軟的LightGBM這兩個工具包,相信會給你帶來不錯的結(jié)果。
-
算法
+關(guān)注
關(guān)注
23文章
4629瀏覽量
93200 -
決策樹
+關(guān)注
關(guān)注
3文章
96瀏覽量
13575
原文標題:從XGBoost算法開始,更好地理解和改進你的模型
文章出處:【微信號:thejiangmen,微信公眾號:將門創(chuàng)投】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論