作者:林夕
本文長度為10000字,建議閱讀10+分鐘
對于信任和管理我們的人工智能“合作伙伴”,可解釋AI則至關(guān)重要。
目錄
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 實(shí)例
2.2 Partial Dependency Plots
2.2.1 優(yōu)缺點(diǎn)
2.2.2 實(shí)例
2.3 ICE(Individual Conditional Expectation)
2.4 LIME
2.4.1 可解釋性和性能的平衡
2.4.2 LIME分析步驟
2.4.3 優(yōu)缺點(diǎn)
2.4.4 實(shí)例
2.5 SHAP(SHapley Additive exPlanation)
2.5.1 shapley值
2.5.2 優(yōu)缺點(diǎn)
2.5.3 實(shí)例
3.1 Interpret
3.1.1 GAMS
3.2 非事實(shí)解釋(Counterfactual Explanations)
一、可解釋的特性
目前人工智能應(yīng)用已經(jīng)滲透到我們生活的方方面面,成為我們生活中重要的一部分。我們相信,隨著機(jī)器學(xué)習(xí)技術(shù)的不斷進(jìn)步,未來有望產(chǎn)生一個能夠感知、學(xué)習(xí)、做出決策和采取獨(dú)立行動自主系統(tǒng)。但是,如果這些系統(tǒng)無法向人類解釋為何作出這樣的決策,那么它們的有效性將會受到限制。用戶要理解,信任和管理這些人工智能“合作伙伴”,可解釋AI則至關(guān)重要。
1.1 可解釋的重要性
模型改進(jìn)
通過可解釋分析,可以指導(dǎo)特征工程。一般我們會根據(jù)一些專業(yè)知識和經(jīng)驗(yàn)來做特征,同構(gòu)分析特征重要性,可以挖掘更多有用的特征,尤其是在交互特征方面。當(dāng)原始特征眾多時,可解釋性分析將特別重要。在做機(jī)器學(xué)習(xí)任務(wù)時,我們一般會選擇一個指標(biāo),比如準(zhǔn)確率,然后盡可能優(yōu)化。假設(shè)在一個文本分類任務(wù)中,判斷文章是與“基督教”(Christianity)有關(guān)還是“無神論教”(Atheism)”,模型準(zhǔn)確率,90%多,很高了。但是用LIME進(jìn)行可解釋分析發(fā)現(xiàn),Posting(郵件標(biāo)頭的一部分)這個詞重要性很高,但這個詞匯與無神論本身并沒有太多的聯(lián)系,只是因?yàn)樵跓o神論文章中出現(xiàn)的頻次很高。這意味著盡管模型準(zhǔn)確率很高,但所使用的原因是錯誤的。我們可以借此來改進(jìn)模型,是否捕捉到了有意義的特征,以提高泛化性。
模型的可信和透明度
在我們做型的時候,需要在兩個方面之間進(jìn)行權(quán)衡,僅僅想要知道預(yù)測是什么,還是要知道模型為什么要給出這樣的預(yù)測。在一些低風(fēng)險的情況下,不一定要知道決策是如何做出的,比如推薦系統(tǒng),廣告、視頻或者商品推薦等。但是在其他領(lǐng)域,比如在金融和醫(yī)療領(lǐng)域,模型的預(yù)測結(jié)果將會對相關(guān)的人產(chǎn)生巨大的影響,有時候我們依然需要專家對結(jié)果進(jìn)行解釋。解釋為什么一個機(jī)器學(xué)習(xí)模型將某個患者的腫瘤歸類為良性或惡性,解釋為什么模型會拒絕一個人的貸款申請,這樣,專家更有可能信任機(jī)器學(xué)習(xí)模型給出的預(yù)測結(jié)果。長久來看,更好地理解機(jī)器學(xué)習(xí)模型可以節(jié)省大量時間、防止收入損失。如果一個模型沒有做出合理的決定,在應(yīng)用這個模型并造成不良影響之前,我們就可以發(fā)現(xiàn)這一點(diǎn)。我們在面對客戶的時候,他們會問”我為什么要相信你的模型“。如果客戶不相信模型和預(yù)測結(jié)果,就無法使用這個模型,將其部署在產(chǎ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é)任。
1.2 可解釋性的范圍
1.2.1. 算法透明度(Algorithm Transparency)
How does the algorithm create the model?
算法透明度指的是,如何從數(shù)據(jù)中學(xué)習(xí)一個模型,更加強(qiáng)調(diào)模型的構(gòu)建方式以及影響決策的技術(shù)細(xì)節(jié)。比如CNN來對圖片進(jìn)行分類時,模型做出預(yù)測,是因?yàn)樗惴▽W(xué)習(xí)到了邊或者其他紋理。算法透明度需要弄懂算法知識而不是數(shù)據(jù)以及學(xué)到的模型。對于簡單的算法,比如線性模型,具有非常高的算法透明度。復(fù)雜的模型如深度學(xué)習(xí),人們對模型內(nèi)部了解較少,透明度較差,這將非常重要的一個研究方向。由于業(yè)務(wù)可能不太精通這些技術(shù)細(xì)節(jié),本文集中于模型的全局和局部可解釋性,而不是算法的可解釋性(透明度)。
1.2.2 全局可解釋(Global Interpretability)
How does the trained model make predictions?
為了解釋模型的全局輸出,需要訓(xùn)練模型了解算法和數(shù)據(jù)。這個層級的可解釋性指的是,模型如何基于整個特征空間和模型結(jié)構(gòu)、參數(shù)等作出決策的。什么特征是重要的,特征交互會發(fā)生什么。模型的全局可解釋性可以幫助理解,針對不同特征,目標(biāo)變量的分布是什么。實(shí)際在,模型具有大量參數(shù)的情況下,人們很難想象 特征之間是如何相互作用的,以得到這樣的預(yù)測結(jié)果。
某些模型在這個層級是可以解釋的。例如線性模型的權(quán)重是可以解釋的,樹模型如何劃分分支和如何得到結(jié)點(diǎn)預(yù)測值是可以解釋的。
1.2.3 局部可解釋(Local Interpretability)
Why did the model make a certain prediction for an/a group of instance?
局部可解釋性更加關(guān)注單條樣本或一組樣本。這種情況下我們可以將模型看做是一個黑盒,不再考慮模型的復(fù)雜情況。單條樣本來看,模型給出的預(yù)測值和某些特征可能是線性關(guān)系,甚至是單調(diào)關(guān)系。因此局部可解釋性可能相比全局可解釋,更加準(zhǔn)確點(diǎn)。
二、與模型無關(guān)的方法
獲得可解釋性的一個非常容易的方法是使用一系列可解釋的模型,比如線性回歸、邏輯回歸、決策樹等。這些模型已經(jīng)有很多文章詳細(xì)解釋,本文不再介紹,以與模型無關(guān)的方法為主。與模型無關(guān)也就是可以適用于任何模型,和模型的內(nèi)部結(jié)構(gòu)無關(guān)。
2.1 Permutation Feature Importance
Permutation Importance是一種計算模型特征重要性的算法。特征重要性是指,一個特征對預(yù)測的貢獻(xiàn)有多大。某些模型,例如LR、決策樹,lightgbm等模型可以直接計算特征重要性。
基本思想:假設(shè)要研究特征的重要性,那么將這列數(shù)據(jù)打亂,其他列的數(shù)據(jù)保持不變,然后觀察預(yù)測的metric(eg.準(zhǔn)確率)或者loss變化了多少,根據(jù)變化量來決定特征重要性。如果打亂以后對準(zhǔn)確率沒什么影響的話,可以認(rèn)為這個特征沒什么作用,特征重要性很低。
2.1.1 實(shí)例
1. 讀取數(shù)據(jù)預(yù)測每個人的年收入使用的數(shù)據(jù)集從1994年的人口普查局?jǐn)?shù)據(jù)庫中提取。根據(jù)人的一些基本信息來預(yù)測一個人每年的收入是否超過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ù)預(yù)處理
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. 訓(xùn)練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是負(fù)的,說明擾亂以后預(yù)測效果反而提升了,這種特征應(yīng)該刪除,其他較小的可以刪除。
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求出的結(jié)果和sklearn給出的實(shí)現(xiàn)基本一樣,后面的幾個特征的重要性稍微有些差異,說明這種方法的穩(wěn)定性還是可靠的。
2.2 Partial Dependency Plots
通過permutation importance可以得到特征的重要性,但是不知道不同的特征值如何影響預(yù)測結(jié)果的。PDP可以求得特征和預(yù)測結(jié)果的關(guān)系。
部分依賴圖(Partial Dependency Plots-PDP)展示的是,對一個機(jī)器學(xué)習(xí)模型,一個或者兩個特征的邊際效應(yīng)。由PDP我們可以得到目標(biāo)值(target)和特征的關(guān)系,是線性、單調(diào)還是更復(fù)雜的關(guān)系。如果線性模型,特征和目標(biāo)值之間則是線性關(guān)系。PDP的計算需要滿足一個假設(shè),所有的特征,是兩兩不相關(guān)的,如果相關(guān)就會出現(xiàn)問題,見PDP的缺點(diǎn)部分。
回歸問題的部分依賴函數(shù):
^fxS(xS)=ExC[^f(xS,xC)]=∫^f(xS,xC)dP(xC)
:PDP所需要繪制的特征;
:模型中使用的其他特征;
其實(shí)上述式子,便是一個連續(xù)分布邊際概率的求解公式。我們可以通過Monte Carlo方法在訓(xùn)練集上得到估計值,求特征對預(yù)測的影響:
^fxS(xS)=1nn∑i=1^f(xS,x(i)C)
PDP分析步驟:
訓(xùn)練一個機(jī)器學(xué)習(xí)模型(假設(shè)特征是,是目標(biāo)變量,是最重要的特征);
我們想探索探索和的直接關(guān)系,的取值是;
用代替列,利用訓(xùn)練的模型對這些數(shù)據(jù)進(jìn)行預(yù)測,求所有樣本的預(yù)測的平均值;
對重復(fù)步驟3,即遍歷特征的所有不同值;
PDP的X軸為特征的各個值,而Y軸是對應(yīng)不同值的平均預(yù)測平均值。
例如我們的數(shù)據(jù)集包含三個樣本,每個樣本有三個特征,A,B,C。
我們想要知道特征A是如何影響預(yù)測結(jié)果的。假設(shè)特征A一共有三種類型:。訓(xùn)練數(shù)據(jù)其他特征保持不變,特征A依次修改為各個特征值,然后對預(yù)測求平均值。
最后PDP需要的是我針對不同特征值的平均預(yù)測值。
2.2.1 優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
計算直觀:在某個特征取特定值時,對預(yù)測取平均值;
解釋清晰:PDP展示了隨著特征值的改變,預(yù)測值的改變情況;
容易實(shí)現(xiàn)。
缺點(diǎn):
最多考慮兩個特征:空間維度的限制,超過三維我們無法想象。如果不用圖像顯示特征分布,很難解釋規(guī)律性;
獨(dú)立性假設(shè):需要滿足特征兩兩獨(dú)立,如果特征之間存在相關(guān)性,所求結(jié)果不合理;
異步效應(yīng)可能被隱藏:特征變化對整個數(shù)據(jù)集帶來的影響,也許一半數(shù)據(jù)集預(yù)測增加,一半介紹,取平均將是不變。
2.2.2 實(shí)例
和上述一樣,仍然選擇預(yù)測每個人的年收入是否會超過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軸是預(yù)測值的變化量,藍(lán)色區(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得出的結(jié)果是對應(yīng)的。
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')
從圖中可以看出,真實(shí)的收入水平和Age&Education-Num的關(guān)系和剛才求得的PDP值非常接近,
2.3 ICE(Individual Conditional Expectation)
PDP有一個缺點(diǎn),它描述的是特征變化對整個數(shù)據(jù)集的影響,ICE能深入到單個樣本,分析特征變化對單個樣本的影響。求解過程和上述PDP類似,但是ICE會給出每一個樣本的預(yù)測值。
ICE的作者[2]認(rèn)為,至少通過這種方式,任何有興趣的點(diǎn)將不會因?yàn)榍笃骄刀y以發(fā)現(xiàn),論文中給出的例子如下圖所示:
如上述例子,如果僅看圖b的PDP,會認(rèn)為特征x_2和預(yù)測值無關(guān) ,實(shí)際上如果看圖a,會發(fā)現(xiàn)結(jié)論是錯誤的。這樣通過繪制individual? conditional expectation(ICE)曲線,一切將會變得顯而易見。在求解Fare的PDP時,我們會得到一個藍(lán)色的置信區(qū)間,而置信區(qū)間便是由一條條的ICE曲線匯合得到的。
2.4 LIME
Local Interpretable Model-Agnostic Explanation(LIME) ,通過名字便可以看出,該模型是一個局部可解釋模型,并且是一個與模型自身的無關(guān)的可解釋方法。通過擾動輸入樣本(perturb the input),來對模型的預(yù)測結(jié)果進(jìn)行解釋。該算法不止適用于表格型(tabular)數(shù)據(jù),而且適用于文本和圖片任務(wù)。
論文作者提出了解釋器需要滿足的四個條件:
可解釋性:對模型和特征兩個方面都有要求。決策樹、線性回歸和樸素貝葉斯都是具有可解釋的模型,前提是特征也要容易解釋才行。否則像是詞嵌入(Word Embedding)的方式,即使是簡單的線性回歸也無法做到可解釋性。而且解釋性還要取決于目標(biāo)群體,比如向不了解模型的業(yè)務(wù)人員去解釋這些模型。相比之下,線性模型也要比簡單的貝葉斯更容易理解。
局部忠誠( local fidelity):既然我們已經(jīng)使用了可解釋的模型與特征,就不可能期望簡單的可解釋模型在效果上等同于復(fù)雜模型(比如原始CNN分類器)。所以解釋器不需要在全局上達(dá)到復(fù)雜模型的效果,但至少在局部上效果要很接近,而此處的局部代表我們想觀察的那個樣本的周圍。
與模型無關(guān):任何其他模型,像是SVM或神經(jīng)網(wǎng)絡(luò),該解釋器都可以工作。
全局視角:準(zhǔn)確度,AUC等有時并不是一個很好的指標(biāo),我們需要去解釋模型。解釋器的工作在于提供對樣本的解釋,來幫助人們對模型產(chǎn)生信任。
2.4.1 可解釋性和性能的平衡
ξ(x)=argming∈GL(f,g,πx)+Ω(g)
ξ(x)=argming∈GL(f,g,πx)+Ω(g)
:分類器(復(fù)雜模型)
:可解釋模型(簡單模型,eg.LR)
:可解釋模型集合
:可解釋模型的復(fù)雜度度量
:特征
:目標(biāo)函數(shù)
:相似度度量函數(shù)
:損失函數(shù)
2.4.2 LIME分析步驟
對整個數(shù)據(jù)進(jìn)行訓(xùn)練,模型可以是Lightgbm,XGBoost等;
選擇一個樣例,進(jìn)行可解釋的N次擾動,生成局部樣本;
定義一個相似度度量的函數(shù),選取最能描述復(fù)雜模型輸出結(jié)果的K個特征,
使用復(fù)雜模型對和進(jìn)行預(yù)測;
對采樣后的樣本,擬合一個簡單的模型,比如Lasso Regression得到模型的權(quán)重。
我們?nèi)藶榈倪x擇K個特征,特征越少,可解釋性越好,特征越多簡單模型也將具有更好的忠誠度。對數(shù)據(jù)進(jìn)行擾動的時候,不可以進(jìn)行隨機(jī)、完全無意義的擾動。對于圖像,按照超像素(可理解的圖像塊);文本,隨機(jī)的對單個詞進(jìn)行篩選;表格型數(shù)據(jù),每次單獨(dú)改變一個特征。
2.4.3 優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
表格型數(shù)據(jù)、文本和圖片均適用;
解釋對人友好,容易明白;
給出一個忠誠性度量,判斷可解釋模型是否可靠;
LIME可以使用原模型所用不到的一些特征數(shù)據(jù),比如文本中一個詞是否出現(xiàn)。
缺點(diǎn):
表格型數(shù)據(jù)中,相鄰點(diǎn)很難定義,需要嘗試不同的kernel來看LIME給出的可解釋是否合理;
擾動時,樣本服從高斯分布,忽視了特征之間的相關(guān)性;
穩(wěn)定性不夠好,重復(fù)同樣的操作,擾動生成的樣本不同,給出的解釋可能會差別很大。
2.4.4 實(shí)例
和上述一樣,仍然選擇預(yù)測每個人的年收入是否會超過50k這個數(shù)據(jù)集,使用XGBoost模型。
選擇一個樣本,重要性最高的5個特征,進(jìn)行可解釋分析:
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)預(yù)測收入大于50k的概率是0.9。LIME給出解釋,做出這樣的預(yù)測是考慮到,婚姻狀態(tài),教育,每小時工作時間和年齡,而資本收益帶來的是負(fù)的影響。
另一個例子:
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)教授提出,用于解決合作博弈的貢獻(xiàn)和收益分配問題。N人合作中,單個成員的貢獻(xiàn)不一樣,收益分配也應(yīng)該不一樣。理想的分配方式是:收益=貢獻(xiàn);目標(biāo)問題:個人合作,創(chuàng)造了的價值,如何對所創(chuàng)造的價值進(jìn)行分配。
基本條件:全集有N個元素,任意多個人形成的子集,有表示S子集中所包括的元素共同合作所產(chǎn)生的價值。最終分配的價值(Shapley Value)。
需滿足分配四原則:
有效性(Efficiency):所有價值均被分配
對稱性(Symmetry):假設(shè)x_i和x_j可以互相替代,那他們收益應(yīng)該一樣;
Dummy:未做貢獻(xiàn)的話收益為0;
可加性(Additivity):如果同一批人完成兩項(xiàng)任務(wù),那么兩項(xiàng)任務(wù)的收益一起分配應(yīng)該和分開分配的結(jié)果一致。
假設(shè)有500個題目,三個人去做,一天內(nèi)完成。一天,A單獨(dú)能完成100道,B完成125道,C完成50道。
兩個人合作的話,會快一些,。三個人合作,一天可以完成。分別考慮6種不同的分組情況,然后計算三個人分別對應(yīng)的邊際收益。
第i個人加入到組織S的邊際收益是:
借鑒上述博弈論中Shapley值的計算方法,在機(jī)器學(xué)習(xí)訓(xùn)練任務(wù)中,一個特征的貢獻(xiàn)值可由下面的公式計算:
?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特征值的預(yù)測
:總的特征數(shù)
和上述例子是類似的,但是增加了一個權(quán)重。
計算Shapley值,要考慮每個特征是否在集合S中,隨著特征數(shù)的增加,計算復(fù)雜度會呈指數(shù)上升,所以Strumbelj等人提出了一種通過Monte-Carlo采樣實(shí)現(xiàn)的近似算法:
^?j=1MM∑m=1(^f(xm+j)?^f(xm?j))
^?j=1MM∑m=1(^f(xm+j)?^f(xm?j))
:特征不變,其他特征被隨機(jī)數(shù)據(jù)點(diǎn)替換,得到的預(yù)測結(jié)果
:和上述類似,特征同樣被替換
M:迭代M次
特征的近似Shapley值求解步驟:
輸出:第個特征的Shapley值輸入:迭代次數(shù) M,樣本點(diǎn) x, 特征索引 ,訓(xùn)練數(shù)據(jù) , 訓(xùn)練模型
for m = 1,...M:
從訓(xùn)練數(shù)據(jù)中隨機(jī)采樣,樣本
假設(shè)樣本待預(yù)測樣本為
將樣本x中的特征隨機(jī)替換為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)缺點(diǎn)
優(yōu)點(diǎn):
SHAP值的計算是公平分配到不同的特征的,而LIME是選擇一部分特征進(jìn)行解釋;
可以進(jìn)行對比分析,同一個特征在不同樣本之間的SHAP值進(jìn)行比較,但是LIME不能;
具有堅(jiān)實(shí)的理論基礎(chǔ),LIME使用LR等簡單模型進(jìn)行擬合,但是并不清楚為什么這樣是work的。
缺點(diǎn):
計算非常耗時,指數(shù)級別的復(fù)雜度
SHAP可能存在誤導(dǎo),他計算的并不是將這個特征去掉以后訓(xùn)練模型得到的結(jié)果
計算某個樣本的SHAP值時,需要獲取整個訓(xùn)練數(shù)據(jù)集
如果特征之間存在相關(guān)性,這種基于擾動的方法,可能會出現(xiàn)不切實(shí)際的數(shù)據(jù)。
2.5.3 實(shí)例
為了方便對比,選擇和LIME同樣的數(shù)據(jù)集,預(yù)測用戶的收入。讀取數(shù)據(jù),數(shù)據(jù)預(yù)處理和模型訓(xùn)練部分和前面相同,不再贅述。
1. 選擇和LIME同樣的一條樣本進(jìn)行可解釋分析
# 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:當(dāng)前樣本的Shap輸出值
正向作用特征:Education-num, Relationship, Age
反向作用的特征:Country, Capital Gain
這個圖說明了,對于單個樣本,預(yù)測值的高低是如何造成的,由哪些特征造成的。和LIME的解釋對比可以發(fā)現(xiàn),基本是一致的,均是因?yàn)锳ge,Education,Capital Gain等做出的決策。
2. 另一個樣例
shap.force_plot(explainer.expected_value,shap_values[10,:],test.iloc[10,:])
從圖中發(fā)現(xiàn),大部分特征都是呈現(xiàn)反向作用,所以預(yù)測的值較低。
3. 將上圖旋轉(zhuǎn)90°,然后將所有的test拼接在一起,可以看到在整個數(shù)據(jù)集上Shap分布
shap.force_plot(explainer.expected_value,shap_values,test)
4. 從特征維度,觀察特征對Shap的影響
shap.summary_plot(shap_values,test)
圖解:
橫坐標(biāo)是SHAP值(對模型輸出的影響)
縱坐標(biāo)是不同的特征
顏色越紅,特征值越大,越藍(lán)特征值越小
從圖中可以看出,年齡(Age)越大,對收入的正向作用越大,但是到達(dá)一定年齡,對收入的貢獻(xiàn)將不變,同時發(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
每一個用戶在家庭中所處的關(guān)系,從左到右分別是【'Husband',? 'Not-in-family',? 'Other-relative',? 'Own-child',? 'Unmarried', 'Wife'】,已婚的SHAP值更高,小孩和未婚的更低,符合常識。
三、其他方法
3.1 Interpret
微軟新提出了一個可以訓(xùn)練可解釋機(jī)器學(xué)習(xí)模型和解釋模型的開源框架。一方面這個框架,實(shí)現(xiàn)了可解釋提升模型(Explainable Boosting Machine-EBM)。EBM是的一種實(shí)現(xiàn),在基礎(chǔ)上添加了一些諸如bagging和boosting等模型融合的方法。微軟表示,EMB的性能媲美XGBoost和Lightgbm等集成樹模型,同時保持模型的可解釋性。
接下來看GAMs。
3.1.1 GAMS
線性模型具有非常好的可解釋性,通過權(quán)重可以分析每個特征是如何影響預(yù)測結(jié)果的。但是線性模型過于簡單。線性模型非常嚴(yán)重的缺陷是無法擬合交叉特征和非線性關(guān)系。非線性關(guān)系可以通過以下幾種方式解決,對特征進(jìn)行轉(zhuǎn)換(log,exp等),將特征分箱然后onehot,另一種便是GAMs。
標(biāo)準(zhǔn)線性模型:
GAM:
GAMs和標(biāo)準(zhǔn)線性模型非常相似,只不過是將用一個靈活的函數(shù)表示。本質(zhì)上依然是對特征的影響進(jìn)行求和。
同時線性模型無法學(xué)習(xí)到交叉特征,在GAM的基礎(chǔ)上添加了交叉項(xiàng):
g(E[y])=β0+∑fj(xj)+∑fij(xi,xj)
實(shí)際使用了下,微軟把沒弄好的東西丟了出來,訓(xùn)練時間非常長,在小數(shù)據(jù)集上效果尚可,不排除是隨機(jī)數(shù)的影響,而且XGBoost是默認(rèn)參數(shù)。在大數(shù)據(jù)集上,訓(xùn)練時間相當(dāng)長,指標(biāo)(AUC)和lgb有差距。還是有待改善吧,還需要在更多的數(shù)據(jù)集上進(jìn)行嘗試。
實(shí)驗(yàn)結(jié)果:
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 非事實(shí)解釋(Counterfactual Explanations)
講一個有意思的場景。假設(shè)我想去貸款,然后被銀行的機(jī)器學(xué)習(xí)模型拒絕了。我會想,為什么我會被拒絕,以及如何能提高我被接受的概率。機(jī)器學(xué)習(xí)模型用到的特征包括,我自身的屬性,包括收入、銀行卡數(shù)量、年齡等。如何對這些特征做出最小的改變,使得模型的預(yù)測從拒絕變成接受呢?通過構(gòu)建違反常規(guī)的樣本,來改變模型的預(yù)測,從而達(dá)到對模型進(jìn)行可解釋的目的。
類似在風(fēng)控任務(wù)中,為什么這個人違約率高?如果,對其修改某個特征后,概率會降低。這樣可以解釋,是因?yàn)槟硞€特征值,模型預(yù)測的概率比較高。
如何定義一個好的非事實(shí)解釋:
盡可能和想要的預(yù)測更接近;
對于特征值進(jìn)行盡可能少的改變;
修改后的特征值盡可能符合實(shí)際情況。
參考資料
文章:
[1] Interpretable Machine Learning A Guide for Making Black Box Models Explainable.:
https://christophm.github.io/interpretable-ml-book/
[2] 可解釋的機(jī)器學(xué)習(xí):
https://zhuanlan.zhihu.com/p/71907204
[3] Kaggle課程-Machine Learning Explainability:
https://www.kaggle.com/learn/machine-learning-explainability
[4] 機(jī)器學(xué)習(xí)模型可解釋性的詳盡介紹:
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),作者:林夕