作者:林夕
本文長度為10000字眨唬,建議閱讀10+分鐘
對于信任和管理我們的人工智能“合作伙伴”照弥,可解釋AI則至關重要春弥。
目錄
1.1 可解釋的重要性
1.2 可解釋性的范圍
1.2.1. 算法透明度(Algorithm Transparency)
1.2.2 全局可解釋(Global Interpretability)
1.2.3 局部可解釋(Local Interpretability)
2.1 Permutation Feature Importance
2.1.1 實例
2.2 Partial Dependency Plots
2.2.1 優(yōu)缺點
2.2.2 實例
2.3 ICE(Individual Conditional Expectation)
2.4 LIME
2.4.1 可解釋性和性能的平衡
2.4.2 LIME分析步驟
2.4.3 優(yōu)缺點
2.4.4 實例
2.5 SHAP(SHapley Additive exPlanation)
2.5.1 shapley值
2.5.2 優(yōu)缺點
2.5.3 實例
3.1 Interpret
3.1.1 GAMS
3.2 非事實解釋(Counterfactual Explanations)
一器赞、可解釋的特性
目前人工智能應用已經(jīng)滲透到我們生活的方方面面陈瘦,成為我們生活中重要的一部分。我們相信窖式,隨著機器學習技術的不斷進步蚁飒,未來有望產(chǎn)生一個能夠感知、學習萝喘、做出決策和采取獨立行動自主系統(tǒng)淮逻。但是,如果這些系統(tǒng)無法向人類解釋為何作出這樣的決策阁簸,那么它們的有效性將會受到限制爬早。用戶要理解,信任和管理這些人工智能“合作伙伴”启妹,可解釋AI則至關重要筛严。
1.1 可解釋的重要性
模型改進
通過可解釋分析,可以指導特征工程翅溺。一般我們會根據(jù)一些專業(yè)知識和經(jīng)驗來做特征脑漫,同構分析特征重要性,可以挖掘更多有用的特征咙崎,尤其是在交互特征方面优幸。當原始特征眾多時,可解釋性分析將特別重要褪猛。在做機器學習任務時网杆,我們一般會選擇一個指標,比如準確率伊滋,然后盡可能優(yōu)化碳却。假設在一個文本分類任務中,判斷文章是與“基督教”(Christianity)有關還是“無神論教”(Atheism)”笑旺,模型準確率昼浦,90%多,很高了筒主。但是用LIME進行可解釋分析發(fā)現(xiàn)关噪,Posting(郵件標頭的一部分)這個詞重要性很高,但這個詞匯與無神論本身并沒有太多的聯(lián)系乌妙,只是因為在無神論文章中出現(xiàn)的頻次很高使兔。這意味著盡管模型準確率很高,但所使用的原因是錯誤的藤韵。我們可以借此來改進模型虐沥,是否捕捉到了有意義的特征,以提高泛化性泽艘。
模型的可信和透明度
在我們做型的時候欲险,需要在兩個方面之間進行權衡,僅僅想要知道預測是什么匹涮,還是要知道模型為什么要給出這樣的預測盯荤。在一些低風險的情況下,不一定要知道決策是如何做出的焕盟,比如推薦系統(tǒng)秋秤,廣告、視頻或者商品推薦等脚翘。但是在其他領域灼卢,比如在金融和醫(yī)療領域,模型的預測結果將會對相關的人產(chǎn)生巨大的影響来农,有時候我們依然需要專家對結果進行解釋鞋真。解釋為什么一個機器學習模型將某個患者的腫瘤歸類為良性或惡性,解釋為什么模型會拒絕一個人的貸款申請沃于,這樣涩咖,專家更有可能信任機器學習模型給出的預測結果海诲。長久來看,更好地理解機器學習模型可以節(jié)省大量時間檩互、防止收入損失特幔。如果一個模型沒有做出合理的決定隐轩,在應用這個模型并造成不良影響之前弯汰,我們就可以發(fā)現(xiàn)這一點父款。我們在面對客戶的時候厢塘,他們會問”我為什么要相信你的模型“川尖。如果客戶不相信模型和預測結果幼衰,就無法使用這個模型输拇,將其部署在產(chǎn)品中潜索。
識別和防止偏差
方差和偏差是機器學習中廣泛討論的話題循诉。有偏差的模型經(jīng)常由有偏見的事實導致横辆,如果數(shù)據(jù)包含微妙的偏差,模型就會學習下來并認為擬合很好茄猫。一個有名的例子是龄糊,用機器學習模型來為囚犯建議定罪量刑,這顯然反映了司法體系在種族不平等上的內在偏差募疮。其他例子比如用于招聘的機器學習模型炫惩,揭示了在特定職位上的性別偏差,比如男性軟件工程師和女性護士阿浓。機器學習模型在我們生活的各個層面上都是強有力的工具他嚷,而且它也會變得越來越流行。所以作為數(shù)據(jù)科學家和決策制定者來說芭毙,理解我們訓練和發(fā)布的模型如何做出決策筋蓖,讓我們可以事先預防偏差的增大以及消除他們,是我們的責任退敦。
1.2 可解釋性的范圍
1.2.1. 算法透明度(Algorithm Transparency)
How does the algorithm create the model?
算法透明度指的是粘咖,如何從數(shù)據(jù)中學習一個模型,更加強調模型的構建方式以及影響決策的技術細節(jié)侈百。比如CNN來對圖片進行分類時瓮下,模型做出預測,是因為算法學習到了邊或者其他紋理钝域。算法透明度需要弄懂算法知識而不是數(shù)據(jù)以及學到的模型讽坏。對于簡單的算法,比如線性模型例证,具有非常高的算法透明度路呜。復雜的模型如深度學習,人們對模型內部了解較少,透明度較差胀葱,這將非常重要的一個研究方向漠秋。由于業(yè)務可能不太精通這些技術細節(jié),本文集中于模型的全局和局部可解釋性抵屿,而不是算法的可解釋性(透明度)庆锦。
1.2.2 全局可解釋(Global Interpretability)
How does the trained model make predictions?
為了解釋模型的全局輸出,需要訓練模型了解算法和數(shù)據(jù)晌该。這個層級的可解釋性指的是肥荔,模型如何基于整個特征空間和模型結構绿渣、參數(shù)等作出決策的朝群。什么特征是重要的,特征交互會發(fā)生什么中符。模型的全局可解釋性可以幫助理解姜胖,針對不同特征,目標變量的分布是什么淀散。實際在右莱,模型具有大量參數(shù)的情況下,人們很難想象 特征之間是如何相互作用的档插,以得到這樣的預測結果慢蜓。
某些模型在這個層級是可以解釋的。例如線性模型的權重是可以解釋的郭膛,樹模型如何劃分分支和如何得到結點預測值是可以解釋的晨抡。
1.2.3 局部可解釋(Local Interpretability)
Why did the model make a certain prediction for an/a group of instance?
局部可解釋性更加關注單條樣本或一組樣本。這種情況下我們可以將模型看做是一個黑盒则剃,不再考慮模型的復雜情況耘柱。單條樣本來看,模型給出的預測值和某些特征可能是線性關系棍现,甚至是單調關系调煎。因此局部可解釋性可能相比全局可解釋,更加準確點己肮。
二士袄、與模型無關的方法
獲得可解釋性的一個非常容易的方法是使用一系列可解釋的模型,比如線性回歸谎僻、邏輯回歸窖剑、決策樹等。這些模型已經(jīng)有很多文章詳細解釋戈稿,本文不再介紹西土,以與模型無關的方法為主。與模型無關也就是可以適用于任何模型鞍盗,和模型的內部結構無關需了。
2.1 Permutation Feature Importance
Permutation Importance是一種計算模型特征重要性的算法跳昼。特征重要性是指,一個特征對預測的貢獻有多大肋乍。某些模型鹅颊,例如LR、決策樹墓造,lightgbm等模型可以直接計算特征重要性堪伍。
基本思想:假設要研究特征的重要性,那么將這列數(shù)據(jù)打亂觅闽,其他列的數(shù)據(jù)保持不變帝雇,然后觀察預測的metric(eg.準確率)或者loss變化了多少,根據(jù)變化量來決定特征重要性蛉拙。如果打亂以后對準確率沒什么影響的話尸闸,可以認為這個特征沒什么作用,特征重要性很低孕锄。
2.1.1 實例
1. 讀取數(shù)據(jù)預測每個人的年收入使用的數(shù)據(jù)集從1994年的人口普查局數(shù)據(jù)庫中提取吮廉。根據(jù)人的一些基本信息來預測一個人每年的收入是否超過5萬美元。
數(shù)據(jù)的下載鏈接:
https://www.kaggle.com/uciml/adult-census-income#adult.csv
feature_names=["Age","Workclass","fnlwgt","Education","Education-Num","Marital Status","Occupation","Relationship","Race","Sex","Capital Gain","Capital Loss","Hours per week","Country"]data=np.genfromtxt('adult.data',delimiter=', ',dtype=str)data=pd.DataFrame(data,columns=feature_names+['label'])
2. 數(shù)據(jù)預處理
labels=data.iloc[:,14]le=LabelEncoder()le.fit(labels)labels=le.transform(labels)class_names=le.classes_# data=data[:,:-1]categorical_features=[1,3,5,6,7,8,9,13]categorical_names={}forfeatureincategorical_features:le=LabelEncoder()le.fit(data.iloc[:,feature])data.iloc[:,feature]=le.transform(data.iloc[:,feature])categorical_names[feature]=le.classes_data[feature_names]=data[feature_names].astype(float)encoder=OneHotEncoder(categorical_features=categorical_features)
3. 訓練XGBoost模型以及XGB的特征重要性
np.random.seed(1)train,test,labels_train,labels_test=sklearn.model_selection.train_test_split(data[feature_names],labels,train_size=0.80)# encoder.fit(data)# encoded_train=encoder.transform(train)# encoded_test=encoder.transform(test)gbtree=xgb.XGBClassifier(n_estimators=2000,max_depth=4,learning_rate=0.05,n_jobs=8)gbtree.fit(train,labels_train,eval_set=[(test,labels_test)],eval_metric='auc',verbose=100,early_stopping_rounds=100)
4. Permutation Feature Importance-slearn
fromsklearn.inspectionimportpermutation_importanceresult=permutation_importance(clf,train_x,train_y,n_repeats=10,random_state=42)featImp=pd.DataFrame()featImp['feat']=feature_namesfeatImp['importance']=result.importances_meanfeatImp=featImp.sort_values('importance',ascending=False)plt.figure(figsize=[20,10])sns.barplot(x='importance',y='feat',data=featImp[:20],orient='h')plt.show
從上述兩個重要性可以看出畸肆,xgb自帶的特征重要性和Permutation Importance求出的有所差異宦芦,可以綜合的生成特征重要性,輔助特征選擇轴脐。如果Permutation Feature Importance是負的调卑,說明擾亂以后預測效果反而提升了,這種特征應該刪除豁辉,其他較小的可以刪除令野。
5. Permutation Feature Importance-eli5
importeli5fromeli5.sklearnimportPermutationImportanceperm=PermutationImportance(clf,n_iter=10)perm.fit(train_x,train_y)eli5.show_weights(perm,feature_names=train_x.columns.tolist())
eli5求出的結果和sklearn給出的實現(xiàn)基本一樣,后面的幾個特征的重要性稍微有些差異徽级,說明這種方法的穩(wěn)定性還是可靠的气破。
2.2 Partial Dependency Plots
通過permutation importance可以得到特征的重要性,但是不知道不同的特征值如何影響預測結果的餐抢。PDP可以求得特征和預測結果的關系现使。
部分依賴圖(Partial Dependency Plots-PDP)展示的是,對一個機器學習模型旷痕,一個或者兩個特征的邊際效應碳锈。由PDP我們可以得到目標值(target)和特征的關系,是線性欺抗、單調還是更復雜的關系售碳。如果線性模型,特征和目標值之間則是線性關系。PDP的計算需要滿足一個假設贸人,所有的特征间景,是兩兩不相關的,如果相關就會出現(xiàn)問題艺智,見PDP的缺點部分倘要。
回歸問題的部分依賴函數(shù):
^fxS(xS)=ExC[^f(xS,xC)]=∫^f(xS,xC)dP(xC)
:PDP所需要繪制的特征;
:模型中使用的其他特征十拣;
其實上述式子封拧,便是一個連續(xù)分布邊際概率的求解公式。我們可以通過Monte Carlo方法在訓練集上得到估計值夭问,求特征對預測的影響:
^fxS(xS)=1nn∑i=1^f(xS,x(i)C)
PDP分析步驟:
訓練一個機器學習模型(假設特征是泽西,是目標變量,是最重要的特征)甲喝;
我們想探索探索和的直接關系尝苇,的取值是铛只;
用代替列埠胖,利用訓練的模型對這些數(shù)據(jù)進行預測,求所有樣本的預測的平均值淳玩;
對重復步驟3直撤,即遍歷特征的所有不同值;
PDP的X軸為特征的各個值蜕着,而Y軸是對應不同值的平均預測平均值谋竖。
例如我們的數(shù)據(jù)集包含三個樣本,每個樣本有三個特征承匣,A蓖乘,B,C韧骗。
我們想要知道特征A是如何影響預測結果的嘉抒。假設特征A一共有三種類型:。訓練數(shù)據(jù)其他特征保持不變袍暴,特征A依次修改為各個特征值些侍,然后對預測求平均值。
最后PDP需要的是我針對不同特征值的平均預測值政模。
2.2.1 優(yōu)缺點
優(yōu)點:
計算直觀:在某個特征取特定值時岗宣,對預測取平均值;
解釋清晰:PDP展示了隨著特征值的改變淋样,預測值的改變情況耗式;
容易實現(xiàn)。
缺點:
最多考慮兩個特征:空間維度的限制,超過三維我們無法想象刊咳。如果不用圖像顯示特征分布措嵌,很難解釋規(guī)律性;
獨立性假設:需要滿足特征兩兩獨立芦缰,如果特征之間存在相關性企巢,所求結果不合理;
異步效應可能被隱藏:特征變化對整個數(shù)據(jù)集帶來的影響让蕾,也許一半數(shù)據(jù)集預測增加浪规,一半介紹,取平均將是不變探孝。
2.2.2 實例
和上述一樣笋婿,仍然選擇預測每個人的年收入是否會超過50k這個數(shù)據(jù)集,使用XGBoost模型顿颅。
1. Age的PDP
pdp_fare=pdp.pdp_isolate(model=gbtree,dataset=data,model_features=feature_names,feature='Age')fig,axes=pdp.pdp_plot(pdp_fare,'Age')
y軸是預測值的變化量缸濒,藍色區(qū)域是置信區(qū)間。從圖中可以看出粱腻,中年人庇配,30多歲到60歲,有更高的PDP值绍些,有更高的可能收入大于50K捞慌,相比少年和年老的 人,這和我們的常識是相統(tǒng)一的柬批。
2.不同Age的收入大于50k的比率
fig,axes,summary_df=info_plots.target_plot(df=data,feature='Age',feature_name='age',target='label',show_percentile=True)
從圖中發(fā)現(xiàn)啸澡,隨著年齡的上升,收入大于50k的概率越來越高氮帐,超過一定年齡后會下降嗅虏,這和PDP得出的結果是對應的。
3. Education-Num和Age的交互PDP(交叉特征)
plots_list=interpreter.partial_dependence.plot_partial_dependence([('Age','Education-Num')],im_model,grid_range=(0,1),figsize=(12,5),grid_resolution=100)
從圖中發(fā)現(xiàn)上沐,教育水平低的話皮服,中年人收入大于50k的可能性仍然不高。隨著接受教育時間的增加奄容,同等年齡收入大的可能性更大一些冰更。
4. Education-Num和Age交叉特征
fig,axes,summary_df=info_plots.target_plot_interact(df=data,features=['Age','Education-Num'],feature_names=['Age','Education-Num'],target='label')
從圖中可以看出,真實的收入水平和Age&Education-Num的關系和剛才求得的PDP值非常接近昂勒,
2.3 ICE(Individual Conditional Expectation)
PDP有一個缺點蜀细,它描述的是特征變化對整個數(shù)據(jù)集的影響,ICE能深入到單個樣本戈盈,分析特征變化對單個樣本的影響奠衔。求解過程和上述PDP類似谆刨,但是ICE會給出每一個樣本的預測值。
ICE的作者[2]認為归斤,至少通過這種方式痊夭,任何有興趣的點將不會因為求平均值而難以發(fā)現(xiàn),論文中給出的例子如下圖所示:
如上述例子脏里,如果僅看圖b的PDP她我,會認為特征x_2和預測值無關 ,實際上如果看圖a迫横,會發(fā)現(xiàn)結論是錯誤的番舆。這樣通過繪制individual? conditional expectation(ICE)曲線,一切將會變得顯而易見矾踱。在求解Fare的PDP時恨狈,我們會得到一個藍色的置信區(qū)間,而置信區(qū)間便是由一條條的ICE曲線匯合得到的呛讲。
2.4 LIME
Local Interpretable Model-Agnostic Explanation(LIME) 禾怠,通過名字便可以看出,該模型是一個局部可解釋模型贝搁,并且是一個與模型自身的無關的可解釋方法吗氏。通過擾動輸入樣本(perturb the input),來對模型的預測結果進行解釋徘公。該算法不止適用于表格型(tabular)數(shù)據(jù)牲证,而且適用于文本和圖片任務哮针。
論文作者提出了解釋器需要滿足的四個條件:
可解釋性:對模型和特征兩個方面都有要求关面。決策樹、線性回歸和樸素貝葉斯都是具有可解釋的模型十厢,前提是特征也要容易解釋才行等太。否則像是詞嵌入(Word Embedding)的方式,即使是簡單的線性回歸也無法做到可解釋性蛮放。而且解釋性還要取決于目標群體缩抡,比如向不了解模型的業(yè)務人員去解釋這些模型。相比之下包颁,線性模型也要比簡單的貝葉斯更容易理解瞻想。
局部忠誠( local fidelity):既然我們已經(jīng)使用了可解釋的模型與特征,就不可能期望簡單的可解釋模型在效果上等同于復雜模型(比如原始CNN分類器)娩嚼。所以解釋器不需要在全局上達到復雜模型的效果蘑险,但至少在局部上效果要很接近,而此處的局部代表我們想觀察的那個樣本的周圍岳悟。
與模型無關:任何其他模型佃迄,像是SVM或神經(jīng)網(wǎng)絡泼差,該解釋器都可以工作。
全局視角:準確度呵俏,AUC等有時并不是一個很好的指標堆缘,我們需要去解釋模型。解釋器的工作在于提供對樣本的解釋普碎,來幫助人們對模型產(chǎn)生信任吼肥。
2.4.1 可解釋性和性能的平衡
ξ(x)=argming∈GL(f,g,πx)+Ω(g)
ξ(x)=argming∈GL(f,g,πx)+Ω(g)
:分類器(復雜模型)
:可解釋模型(簡單模型,eg.LR)
:可解釋模型集合
:可解釋模型的復雜度度量
:特征
:目標函數(shù)
:相似度度量函數(shù)
:損失函數(shù)
2.4.2 LIME分析步驟
對整個數(shù)據(jù)進行訓練麻车,模型可以是Lightgbm潜沦,XGBoost等;
選擇一個樣例绪氛,進行可解釋的N次擾動唆鸡,生成局部樣本;
定義一個相似度度量的函數(shù)枣察,選取最能描述復雜模型輸出結果的K個特征争占,
使用復雜模型對和進行預測;
對采樣后的樣本序目,擬合一個簡單的模型臂痕,比如Lasso Regression得到模型的權重。
我們人為的選擇K個特征猿涨,特征越少握童,可解釋性越好,特征越多簡單模型也將具有更好的忠誠度叛赚。對數(shù)據(jù)進行擾動的時候澡绩,不可以進行隨機、完全無意義的擾動俺附。對于圖像肥卡,按照超像素(可理解的圖像塊);文本事镣,隨機的對單個詞進行篩選步鉴;表格型數(shù)據(jù),每次單獨改變一個特征璃哟。
2.4.3 優(yōu)缺點
優(yōu)點:
表格型數(shù)據(jù)氛琢、文本和圖片均適用;
解釋對人友好随闪,容易明白阳似;
給出一個忠誠性度量,判斷可解釋模型是否可靠蕴掏;
LIME可以使用原模型所用不到的一些特征數(shù)據(jù)障般,比如文本中一個詞是否出現(xiàn)调鲸。
缺點:
表格型數(shù)據(jù)中,相鄰點很難定義挽荡,需要嘗試不同的kernel來看LIME給出的可解釋是否合理藐石;
擾動時,樣本服從高斯分布定拟,忽視了特征之間的相關性于微;
穩(wěn)定性不夠好,重復同樣的操作青自,擾動生成的樣本不同株依,給出的解釋可能會差別很大。
2.4.4 實例
和上述一樣延窜,仍然選擇預測每個人的年收入是否會超過50k這個數(shù)據(jù)集恋腕,使用XGBoost模型。
選擇一個樣本逆瑞,重要性最高的5個特征荠藤,進行可解釋分析:
np.random.seed(1)i=16explainer=lime.lime_tabular.LimeTabularExplainer(train,feature_names=feature_names,class_names=class_names,categorical_features=categorical_features,categorical_names=categorical_names,kernel_width=3)exp=explainer.explain_instance(test[i],predict_fn,num_features=5)exp.show_in_notebook(show_all=False)
我們發(fā)現(xiàn)預測收入大于50k的概率是0.9。LIME給出解釋获高,做出這樣的預測是考慮到哈肖,婚姻狀態(tài),教育念秧,每小時工作時間和年齡淤井,而資本收益帶來的是負的影響。
另一個例子:
i=10exp=explainer.explain_instance(test[i],predict_fn,num_features=5)exp.show_in_notebook(show_all=True)
2.5 SHAP(SHapley Additive exPlanation)
2.5.1 shapley值
shapley由伊德·夏普利(Lloyd Shapley)教授提出摊趾,用于解決合作博弈的貢獻和收益分配問題币狠。N人合作中,單個成員的貢獻不一樣严就,收益分配也應該不一樣总寻。理想的分配方式是:收益=貢獻;目標問題:個人合作梢为,創(chuàng)造了的價值,如何對所創(chuàng)造的價值進行分配轰坊。
基本條件:全集有N個元素铸董,任意多個人形成的子集,有表示S子集中所包括的元素共同合作所產(chǎn)生的價值肴沫。最終分配的價值(Shapley Value)粟害。
需滿足分配四原則:
有效性(Efficiency):所有價值均被分配
對稱性(Symmetry):假設x_i和x_j可以互相替代,那他們收益應該一樣颤芬;
Dummy:未做貢獻的話收益為0悲幅;
可加性(Additivity):如果同一批人完成兩項任務套鹅,那么兩項任務的收益一起分配應該和分開分配的結果一致。
假設有500個題目汰具,三個人去做卓鹿,一天內完成。一天留荔,A單獨能完成100道吟孙,B完成125道,C完成50道聚蝶。
兩個人合作的話杰妓,會快一些,碘勉。三個人合作巷挥,一天可以完成。分別考慮6種不同的分組情況验靡,然后計算三個人分別對應的邊際收益句各。
第i個人加入到組織S的邊際收益是:
借鑒上述博弈論中Shapley值的計算方法,在機器學習訓練任務中晴叨,一個特征的貢獻值可由下面的公式計算:
?j(val)=∑S?{x1,…,xp}?{xj}|S|!(p?|S|?1)!p!(val(S∪{xj})?val(S))
?j(val)=∑S?{x1,…,xp}?{xj}|S|!(p?|S|?1)!p!(val(S∪{xj})?val(S))
:特征的子集
:樣本特征值
:針對集合S特征值的預測
:總的特征數(shù)
和上述例子是類似的凿宾,但是增加了一個權重。
計算Shapley值兼蕊,要考慮每個特征是否在集合S中初厚,隨著特征數(shù)的增加,計算復雜度會呈指數(shù)上升孙技,所以Strumbelj等人提出了一種通過Monte-Carlo采樣實現(xiàn)的近似算法:
^?j=1MM∑m=1(^f(xm+j)?^f(xm?j))
^?j=1MM∑m=1(^f(xm+j)?^f(xm?j))
:特征不變产禾,其他特征被隨機數(shù)據(jù)點替換,得到的預測結果
:和上述類似牵啦,特征同樣被替換
M:迭代M次
特征的近似Shapley值求解步驟:
輸出:第個特征的Shapley值輸入:迭代次數(shù) M亚情,樣本點 x, 特征索引 哈雏,訓練數(shù)據(jù) 楞件, 訓練模型
for m = 1,...M:
從訓練數(shù)據(jù)中隨機采樣,樣本
假設樣本待預測樣本為
將樣本x中的特征隨機替換為z中的特征裳瘪,得到兩個新的向量:
x+j=(x(1),…,x(j?1),x(j),z(j+1),…,z(p))
x?j=(x(1),…,x(j?1),z(j),z(j+1),…,z(p))
計算每次的邊際收益
?mj=^f(x+j)?^f(x?j)
取平均土浸,計算特征的Shape值:
2.5.2 優(yōu)缺點
優(yōu)點:
SHAP值的計算是公平分配到不同的特征的,而LIME是選擇一部分特征進行解釋彭羹;
可以進行對比分析黄伊,同一個特征在不同樣本之間的SHAP值進行比較,但是LIME不能派殷;
具有堅實的理論基礎还最,LIME使用LR等簡單模型進行擬合墓阀,但是并不清楚為什么這樣是work的。
缺點:
計算非常耗時拓轻,指數(shù)級別的復雜度
SHAP可能存在誤導斯撮,他計算的并不是將這個特征去掉以后訓練模型得到的結果
計算某個樣本的SHAP值時,需要獲取整個訓練數(shù)據(jù)集
如果特征之間存在相關性悦即,這種基于擾動的方法吮成,可能會出現(xiàn)不切實際的數(shù)據(jù)。
2.5.3 實例
為了方便對比辜梳,選擇和LIME同樣的數(shù)據(jù)集粱甫,預測用戶的收入。讀取數(shù)據(jù)作瞄,數(shù)據(jù)預處理和模型訓練部分和前面相同茶宵,不再贅述。
1. 選擇和LIME同樣的一條樣本進行可解釋分析
# explain the model's predictions using SHAP valuesexplainer=shap.TreeExplainer(gbtree)shap_values=explainer.shap_values(test)# 對一個樣本求shap值宗挥,各個特征對output所帶來的變化shap.force_plot(explainer.expected_value,shap_values[16,:],test.iloc[16,:])
圖解:
base value:全體樣本Shap平均值
output value:當前樣本的Shap輸出值
正向作用特征:Education-num, Relationship, Age
反向作用的特征:Country乌庶, Capital Gain
這個圖說明了,對于單個樣本契耿,預測值的高低是如何造成的瞒大,由哪些特征造成的。和LIME的解釋對比可以發(fā)現(xiàn)搪桂,基本是一致的透敌,均是因為Age,Education踢械,Capital Gain等做出的決策酗电。
2. 另一個樣例
shap.force_plot(explainer.expected_value,shap_values[10,:],test.iloc[10,:])
從圖中發(fā)現(xiàn),大部分特征都是呈現(xiàn)反向作用内列,所以預測的值較低撵术。
3. 將上圖旋轉90°,然后將所有的test拼接在一起话瞧,可以看到在整個數(shù)據(jù)集上Shap分布
shap.force_plot(explainer.expected_value,shap_values,test)
4. 從特征維度嫩与,觀察特征對Shap的影響
shap.summary_plot(shap_values,test)
圖解:
橫坐標是SHAP值(對模型輸出的影響)
縱坐標是不同的特征
顏色越紅,特征值越大移稳,越藍特征值越小
從圖中可以看出蕴纳,年齡(Age)越大,對收入的正向作用越大个粱,但是到達一定年齡,對收入的貢獻將不變翻翩,同時發(fā)現(xiàn)都许,存在年齡小但收入高的群體稻薇。同樣,隨著接受教育時間(Education-Num)變大胶征,收入隨之提高塞椎。同時,資本收益(Capital Gain)對收入的影響最大睛低。
5. 特征重要性
對所有樣本的SHAP絕對值取平均案狠,得到類似lgb、xgb特征重要性的數(shù)據(jù)钱雷。
6. 觀察某個特征的SHAP分布
數(shù)值型特征:Age
從圖中骂铁,我們可以發(fā)現(xiàn),隨著年齡的增加SHAP值不斷增加罩抗,但是超過一定年齡后拉庵,SHAP值反而會下降。同時套蒂,高資本收益的人群分布在30歲往后钞支,同樣年齡,高資本收益的人群操刀,收入更高烁挟,十分合理(hhhh)。
類別型特征:Relationship
每一個用戶在家庭中所處的關系骨坑,從左到右分別是【'Husband',? 'Not-in-family',? 'Other-relative',? 'Own-child',? 'Unmarried', 'Wife'】撼嗓,已婚的SHAP值更高,小孩和未婚的更低卡啰,符合常識静稻。
三、其他方法
3.1 Interpret
微軟新提出了一個可以訓練可解釋機器學習模型和解釋模型的開源框架匈辱。一方面這個框架振湾,實現(xiàn)了可解釋提升模型(Explainable Boosting Machine-EBM)。EBM是的一種實現(xiàn)亡脸,在基礎上添加了一些諸如bagging和boosting等模型融合的方法押搪。微軟表示,EMB的性能媲美XGBoost和Lightgbm等集成樹模型浅碾,同時保持模型的可解釋性大州。
接下來看GAMs。
3.1.1 GAMS
線性模型具有非常好的可解釋性垂谢,通過權重可以分析每個特征是如何影響預測結果的厦画。但是線性模型過于簡單。線性模型非常嚴重的缺陷是無法擬合交叉特征和非線性關系。非線性關系可以通過以下幾種方式解決根暑,對特征進行轉換(log力试,exp等),將特征分箱然后onehot排嫌,另一種便是GAMs畸裳。
標準線性模型:
GAM:
GAMs和標準線性模型非常相似,只不過是將用一個靈活的函數(shù)表示淳地。本質上依然是對特征的影響進行求和怖糊。
同時線性模型無法學習到交叉特征,在GAM的基礎上添加了交叉項:
g(E[y])=β0+∑fj(xj)+∑fij(xi,xj)
實際使用了下颇象,微軟把沒弄好的東西丟了出來伍伤,訓練時間非常長,在小數(shù)據(jù)集上效果尚可夯到,不排除是隨機數(shù)的影響嚷缭,而且XGBoost是默認參數(shù)。在大數(shù)據(jù)集上耍贾,訓練時間相當長阅爽,指標(AUC)和lgb有差距。還是有待改善吧荐开,還需要在更多的數(shù)據(jù)集上進行嘗試付翁。
實驗結果:
Model
heart-disease(303,13)breast-cancer(569,30)adult-data(32561,19)credit-fraud(284807,30)
SGD0.8850.9930.8910.980
LR0.9150.9960.9070.974
RandomForest0.9080.9910.9030.942
XGBoost0.8790.9950.9220.979
Lightgbm0.8690.9940.9290.984
EBM0.9250.9950.9290.969
3.2 非事實解釋(Counterfactual Explanations)
講一個有意思的場景。假設我想去貸款晃听,然后被銀行的機器學習模型拒絕了百侧。我會想,為什么我會被拒絕能扒,以及如何能提高我被接受的概率佣渴。機器學習模型用到的特征包括,我自身的屬性初斑,包括收入辛润、銀行卡數(shù)量、年齡等见秤。如何對這些特征做出最小的改變砂竖,使得模型的預測從拒絕變成接受呢?通過構建違反常規(guī)的樣本鹃答,來改變模型的預測乎澄,從而達到對模型進行可解釋的目的。
類似在風控任務中测摔,為什么這個人違約率高置济?如果,對其修改某個特征后,概率會降低舟肉。這樣可以解釋修噪,是因為某個特征值查库,模型預測的概率比較高路媚。
如何定義一個好的非事實解釋:
盡可能和想要的預測更接近;
對于特征值進行盡可能少的改變樊销;
修改后的特征值盡可能符合實際情況整慎。
參考資料
文章:
[1] Interpretable Machine Learning A Guide for Making Black Box Models Explainable.:
https://christophm.github.io/interpretable-ml-book/
[2] 可解釋的機器學習:
https://zhuanlan.zhihu.com/p/71907204
[3] Kaggle課程-Machine Learning Explainability:
https://www.kaggle.com/learn/machine-learning-explainability
[4] 機器學習模型可解釋性的詳盡介紹:
https://www.jiqizhixin.com/articles/2019-10-30-9
[5] A Brief History of Machine Learning Models Explainability:
https://medium.com/@Zelros/a-brief-history-of-machine-learning-models-explainability-f1c3301be9dc
[6] Shapley, LIME and SHAP:
https://ypei.me/posts/2018-12-02-lime-shapley.html
[7] Interpreting machine learning models:
https://towardsdatascience.com/interpretability-in-machine-learning-70c30694a05f
[8] What If... you could inspect a machine learning model, with minimal coding required?:
https://pair-code.github.io/what-if-tool/
[9] Papers on Explainable Artificial Intelligence:
https://github.com/anguyen8/XAI-papers
[10] Limitations of Interpretable Machine Learning Methods:
https://compstat-lmu.github.io/iml_methods_limitations/
[11] Comparison between SHAP (Shapley Additive Explanation) and LIME (Local Interpretable Model-Agnostic Explanations):
https://stats.stackexchange.com/questions/379744/comparison-between-shap-shapley-additive-explanation-and-lime-local-interpret
[12] One Feature Attribution Method to (Supposedly) Rule Them All:
Shapley Values: https://towardsdatascience.com/one-feature-attribution-method-to-supposedly-rule-them-all-shapley-values-f3e04534983d
[13] Introduction to AI Explanations for AI Platform:
https://cloud.google.com/ml-engine/docs/ai-explanations/overview
[14] Hands-on Machine Learning Model Interpretation:
https://towardsdatascience.com/explainable-artificial-intelligence-part-3-hands-on-machine-learning-model-interpretation-e8ebe5afc608
論文:
[15] Friedman, J. (2001). Greedy Function Approximation: A Gradient Boosting Machine. The Annals of Statistics, 29(5):1189–1232. :
https://statweb.stanford.edu/~jhf/ftp/trebst.pdf
[16] Goldstein, A., Kapelner, A., Bleich, J., and Pitkin, E., Peeking Inside the Black Box: Visualizing Statistical Learning With Plots of Individual Conditional Expectation. (2015) Journal of Computational and Graphical Statistics, 24(1): 44-65:
https://arxiv.org/abs/1309.6392
[17] Lundberg S M, Erion G G, Lee S I. Consistent individualized feature attribution for tree ensembles[J]. arXiv preprint arXiv:1802.03888, 2018.:
https://arxiv.xilesou.top/abs/1802.03888
[18] Ribeiro M T, Singh S, Guestrin C. Why should i trust you?: Explaining the predictions of any classifier[C]//Proceedings of the 22nd ACM SIGKDD international conference on knowledge discovery and data mining. ACM, 2016: 1135-1144.:
https://dl_acm.xilesou.top/citation.cfm?Id=2939778
[19]? Lundberg S M, Lee S I. A unified approach to interpreting model predictions[C]//Advances in Neural Information Processing Systems. 2017: 4765-4774.:
http://papers.nips.cc/paper/7062-a-unified-approach-to-interpreting-model-predicti
[20] Nori H, Jenkins S, Koch P, et al. InterpretML: A Unified Framework for Machine Learning Interpretability[J]. arXiv preprint arXiv:1909.09223, 2019.:
https://arxiv.org/pdf/1909.09223.pdf
[21]? AI Explainability Whitepaper-Google:
https://storage.googleapis.com/cloud-ai-whitepapers/AI%20Explainability%20Whitepaper.pdf
開源庫:
[22] eli5:
https://github.com/TeamHG-Memex/eli5
[23] pdpbox:
https://github.com/SauceCat/PDPbox
[24] shap:
https://github.com/slundberg/shap
[25] lime:
https://github.com/marcotcr/lime
[26] interpret:
https://github.com/interpretml/interpret
[27] skater:
https://github.com/oracle/Skater
本文分享自微信公眾號 -?數(shù)據(jù)派THU(DatapiTHU),作者:林夕