为什么要停止过度使用置换重要性来寻找影响特征
數(shù)據(jù)分析師通常為了某些任務(wù)需要計(jì)算特征重要度。特征重要度可以幫助使用者了解數(shù)據(jù)中是否存在偏差或者模型中是否存在缺陷。并且特征重要度可用于理解底層流程和做出業(yè)務(wù)決策。模型最重要的特性可能會(huì)給我們進(jìn)一步的特征工程提供靈感。
目前計(jì)算特征重要性的方法有很多種。其中一些方法基于特定的模型,例如線性回歸模型中的回歸系數(shù)、基于樹的模型中的增益重要性或神經(jīng)網(wǎng)絡(luò)中的批處理范數(shù)參數(shù)(批處理參數(shù)通常用于NN pruning,即神經(jīng)網(wǎng)絡(luò)剪枝壓縮)。其他一些方法是“通用的”,它們幾乎可以應(yīng)用于任何模型: SHAP 值、置換重要性(permutaion importance)、刪除和重新學(xué)習(xí)方法(drop-and-relearn approach)等。
盡管機(jī)器學(xué)習(xí)模型的黑箱可解釋性是模型開發(fā)研究的一個(gè)重要組成部分,但是Harmanpreet等人的一項(xiàng)研究顯示,并非所有的數(shù)據(jù)分析師和科學(xué)家都知道如何正確地解釋模型。這些方法的有效性和易用性使得它們幾乎成為不二選擇。實(shí)際上,如果可以通過(guò)運(yùn)行pip install lib, lib.explain(model)來(lái)解決問(wèn)題,為什么還要費(fèi)心具體的理論呢。
在這篇文章中,主要想要說(shuō)明一個(gè)認(rèn)知偏差,即過(guò)度使用置換重要性來(lái)尋找影響特征。本文將說(shuō)明在某些情況下,置換重要性給出了錯(cuò)誤的、誤導(dǎo)性的結(jié)果。
置換重要性(Permutation Importance)
置換重要性是一種常用的特征重要性類型。其核心思想在于:如果用隨機(jī)排列的值替換特征,會(huì)導(dǎo)致模型分?jǐn)?shù)的下降。它是通過(guò)幾個(gè)簡(jiǎn)單的步驟來(lái)計(jì)算的:
- (1) 置換訓(xùn)練數(shù)據(jù)集中的第i個(gè)特征的值(feature_i),保持其它特征不變。生成置換后的訓(xùn)練數(shù)據(jù)集(X_train_permuted);
- (2) 用第2步訓(xùn)練好的模型以及X_train_permuted數(shù)據(jù)集進(jìn)行預(yù)測(cè)(y_hat_permuted);
- (3)計(jì)算對(duì)應(yīng)的準(zhǔn)確度得分(score_permuted);
- (4)每個(gè)特征的置換重要性即為對(duì)應(yīng)的差異系數(shù)(score_permuted - score)。
用于說(shuō)明計(jì)算的代碼如下:
def calculate_permutation_importance(model,X: pd.DataFrame,y: pd.Series,scoring_function: Callable = sklearn.metrics.roc_auc_score,n_repeats: int = 3,seed: int = 42, ) -> Tuple[any, float, Dict[str, float], np.array]:"""Example of permutation importance calculation :param model: sklearn model, or any model with `fit` and `predict` methods:param X: input features:param y: input target:param scoring_function: function to use for scoring, should output single float value:param n_repeats: how many times make permutation:param seed: random state for experiment reproducibility:return:"""# step 1 - train modelmodel.fit(X, y)# step 2 - make predictions for train data and score (higher score - better)y_hat_no_shuffle = model.predict(X)score = scoring_function(*(y, y_hat_no_shuffle))# step 3 - calculate permutation importancefeatures = X.columnsitems = [(key, 0) for key in features]importances = collections.OrderedDict(items)for n in range(n_repeats):for col in features:# copy data to avoid using previously shuffled versionsX_temp = X.copy()# shuffle feature_i valuesX_temp[col] = X[col].sample(X.shape[0], replace=True, random_state=seed+n).values# make prediction for shuffled datasety_hat = model.predict(X_temp)# calculate scorescore_permuted = scoring_function(*(y, y_hat))# calculate delta score# better model <-> higher score# lower the delta -> more important the featuredelta_score = score_permuted - score# save resultimportances[col] += delta_score / n_repeatsimportances_values = np.array(list(importances.values()))importance_ranks = rank_array(importances_values)return model, score, importances, importance_ranks置換重要性很容易解釋、實(shí)現(xiàn)和使用。雖然計(jì)算需要對(duì)訓(xùn)練數(shù)據(jù)進(jìn)行n_features次預(yù)測(cè),但與模型再訓(xùn)練或精確SHAP值計(jì)算相比,置換重要性不需要大量的重新計(jì)算。此外,置換重要性允許選擇特征:如果置換數(shù)據(jù)集上的分?jǐn)?shù)高于正常數(shù)據(jù)集,那么就表明應(yīng)該刪除該特征并重新訓(xùn)練模型。基于這些原因,置換重要性在許多機(jī)器學(xué)習(xí)項(xiàng)目中得到了廣泛的應(yīng)用。
存在的問(wèn)題
雖然置換重要性是一個(gè)非常有吸引力的模型解釋選擇,但它有幾個(gè)問(wèn)題,特別是在特征具有一定相關(guān)性關(guān)系時(shí)。Giles Hooker和Lucas Mentch在他們的論文https://arxiv.org/abs/1905.03151中闡述如下:
對(duì)這一問(wèn)題可能的解釋是模型的外推性能。假設(shè)模型是使用兩個(gè)高度正相關(guān)的特征x1和x2(下圖中的左圖)進(jìn)行訓(xùn)練的。為了計(jì)算特征x1的重要性,我們對(duì)特征進(jìn)行隨機(jī)化處理,并對(duì)“隨機(jī)”點(diǎn)(中心圖上的紅色點(diǎn))進(jìn)行預(yù)測(cè)。但這個(gè)模型在左上角和右下角都沒(méi)有看到x1的任何訓(xùn)練例子。因此,要做出預(yù)測(cè),它必須外推到以前看不見(jiàn)的區(qū)域(右圖)。我們知道,所有模型的外推性能都很糟糕,因此做出了出乎意料的預(yù)測(cè)。這些“來(lái)自新區(qū)域的分?jǐn)?shù)”強(qiáng)烈影響最終分?jǐn)?shù),當(dāng)然也影響置換重要性。
圖1 置換重要性問(wèn)題的一個(gè)直觀說(shuō)明-未知區(qū)域Giles Hooker和Lucas Mentch提出了幾種替代方法來(lái)代替置換重要性:
測(cè)試
為了了解特征相關(guān)性對(duì)置換重要性和其他特征重要性方法的影響程度,本文進(jìn)行了以下實(shí)驗(yàn)。
測(cè)試方法
首先,生成一個(gè)具有指定數(shù)量的特性和樣本的正態(tài)分布數(shù)據(jù)集(n_features=50,n_samples=10000)。所有特征的平均值為0,標(biāo)準(zhǔn)差為1。所有的數(shù)據(jù)集特征通過(guò)最大相關(guān)度(max_correlation)相互關(guān)聯(lián)。
生成數(shù)據(jù)集后,為每個(gè)特征添加了均勻分布的噪聲。每個(gè)特征的噪聲量是從([-0.5noise_magnitude_max,0.5noise_magnitude_max],noise_magnitude_max=var)的均勻分布中隨機(jī)選擇的。這樣做是為了降低特征相關(guān)性。至此,特征就生成完畢了。
現(xiàn)在我們需要?jiǎng)?chuàng)建一個(gè)指標(biāo)。對(duì)于每個(gè)特征,生成了一個(gè)權(quán)重,它是從具有指定gamma和scale參數(shù)(gamma=1,scale=1)的gamma分布中采樣的。選擇Gamma分布是因?yàn)樗雌饋?lái)非常類似于典型的特征重要性分布。然后將每個(gè)特征權(quán)重除以權(quán)重之和,使權(quán)重之和等于1。這樣做是為了減少隨機(jī)權(quán)重生成對(duì)最終結(jié)果的影響。
然后將指標(biāo)設(shè)置為特征與相應(yīng)特征權(quán)重的線性組合。
對(duì)于生成的數(shù)據(jù)集和目標(biāo),本文使用以下參數(shù)訓(xùn)練了一個(gè)LightGBM模型:
learning_rate: 0.01 n_estimators: 100 random_state: 42所有其他參數(shù)均為默認(rèn)值。并且使用內(nèi)置的增益重要性、SHAP重要性和置換重要性算法來(lái)計(jì)算每個(gè)特征的重要性等級(jí)(置換重復(fù)五次,得分取平均值)。
然后計(jì)算特征的重要性與實(shí)際重要性之間的Spearman秩相關(guān)系數(shù)。實(shí)際重要性等于秩(-weights)。最佳可能的相關(guān)性系數(shù)為1.0,即特征重要性與實(shí)際重要性(特征權(quán)重)的順序相同。
每個(gè)實(shí)驗(yàn)的數(shù)據(jù)(數(shù)據(jù)集統(tǒng)計(jì)相關(guān)性,模型重要性與內(nèi)置增益重要性、SHAP重要性和置換重要性之間的Spearman秩相關(guān)系數(shù))被保存以供進(jìn)一步分析。這個(gè)實(shí)驗(yàn)用不同的初始值,用不同的最大相關(guān)系數(shù)和噪聲幅值最大值組合(max_correlation,noise_magnitude_max)進(jìn)行了50次試驗(yàn)。也用“舍棄置換重要度”和“置換再訓(xùn)練重要度”方法進(jìn)行了同樣的實(shí)驗(yàn),但由于需要大量的計(jì)算,只進(jìn)行了5次。
示例分析
為了直觀理解,接下來(lái)將拿一個(gè)實(shí)驗(yàn)舉例說(shuō)明。實(shí)驗(yàn)的具體代碼可以在這里找到:示例實(shí)驗(yàn)。實(shí)驗(yàn)參數(shù)為:
TASK = "classification" OBJECTIVE = "binary" METRIC = roc_auc_score MU = 0 VAR = 1 N_FEATUES = 50 N_SAMPLES = 10_000 NOISE_MAGNITUDE_MAX = 1 SEED = 42生成數(shù)據(jù)集的相關(guān)矩陣的一部分:
圖3 部分特征數(shù)據(jù)集R2相關(guān)矩陣我們可以看到這些特征之間高度相關(guān)(平均絕對(duì)相關(guān)約為0.96)。相關(guān)統(tǒng)計(jì):
圖4 特征數(shù)據(jù)集相關(guān)性的統(tǒng)計(jì)。abs_*前綴代表相關(guān)性的絕對(duì)值(注:數(shù)據(jù)集中的特征可以相互負(fù)相關(guān)和正相關(guān))生成特征權(quán)重的分布:
圖5 實(shí)際特征權(quán)重分布。只有幾個(gè)特性是重要的計(jì)算的特征重要性和實(shí)際重要性之間的Spearman rank相關(guān)性:
Model's score [train data]: 0.9998 Permutation spearman corr: 0.5724 SHAP spearman corr: 0.4721 LGB gain spearman corr: 0.4567以及實(shí)際和計(jì)算特征重要性的圖示如下:
圖6 實(shí)際重要性和計(jì)算重要性,noise_magnitude_max=1我們可以在這里看到幾個(gè)問(wèn)題(用綠色圓圈標(biāo)記):
以下是對(duì)相同實(shí)驗(yàn)參數(shù)的實(shí)際和計(jì)算的特征重要性排序的說(shuō)明,noise_magnitude_max=10(abs_correlation_mean從0.96下降到0.36):
Model's score [train data]: 0.9663 Permutation spearman corr: 0.6430 SHAP spearman corr: 0.7139 LGB gain spearman corr: 0.6978 圖7 實(shí)際重要性和計(jì)算重要性,noise_magnitude_max=10仍然不是完美的,但是對(duì)于前十位重要特征排序效果良好。
實(shí)驗(yàn)結(jié)果
本節(jié)介紹實(shí)驗(yàn)以及對(duì)應(yīng)結(jié)果。“permutaions vs SHAP vs Gain”實(shí)驗(yàn)總共進(jìn)行了1200次,而“permutaions vs Relearning”實(shí)驗(yàn)則進(jìn)行了120次。
permutaions vs SHAP vs Gain
在本小節(jié)中,將比較使用置換重要性、SHAP值和內(nèi)置增益計(jì)算的特征重要性排序。
從下面的圖中,我們可以看到實(shí)際特征重要性與計(jì)算特征重要性(置換重要性、SHAP值、內(nèi)置增益重要性)之間的相關(guān)性,正如預(yù)期的那樣,與特征相關(guān)性的平均值和最大值呈負(fù)相關(guān)。置換重要性受高度相關(guān)特征的影響最大。內(nèi)置增益和SHAP計(jì)算的重要性沒(méi)有區(qū)別。
圖8 Spearman特征排序相關(guān)性=f(特征相關(guān)性平均值) 圖9 Spearman特征排序相關(guān)性=f(特征相關(guān)性最大值) 圖10 Spearman特征排序相關(guān)性=f(模型得分) 圖11 模型得分=f(特征相關(guān)性均值)此外,我們可以看到實(shí)際特征重要性和計(jì)算結(jié)果之間的相關(guān)性取決于模型的得分:得分越高,相關(guān)性越低(圖10)。目前還不清楚為什么會(huì)發(fā)生這種情況,但可以假設(shè),更多的相關(guān)特征會(huì)導(dǎo)致更精確的模型(從圖11中可以看出),因?yàn)樘卣骺臻g更密集,“未知”區(qū)域更少。
Permutations vs Relearning
在本小節(jié)中,將置換重要性與再學(xué)習(xí)方法進(jìn)行比較。
令人驚訝的是,再學(xué)習(xí)方法在所有相關(guān)關(guān)系中的表現(xiàn)明顯比置換差,這可以從下面的圖中看出。另外,再學(xué)習(xí)方法花費(fèi)了大約n_features數(shù)倍的時(shí)間來(lái)運(yùn)行。
圖12 Spearman特征排序相關(guān)性=f(特征相關(guān)性均值) 圖13 Spearman特征排序相關(guān)性=f(特征相關(guān)性最大值)結(jié)論
總結(jié)
在這篇文章中,描述了置換重要性方法以及與之相關(guān)的問(wèn)題。展示了高度相關(guān)的特征如何以及為什么會(huì)影響置換重要性,這將導(dǎo)致誤導(dǎo)性的結(jié)果。做了一個(gè)實(shí)驗(yàn),結(jié)果表明置換重要性受高度相關(guān)特征的影響最大。還展示了,盡管重新學(xué)習(xí)方法被認(rèn)為是有希望的,但是它們的表現(xiàn)比置換的重要性更差,并且需要更多的時(shí)間來(lái)運(yùn)行。
這篇文章的主題和實(shí)驗(yàn)都是受到了Giles Hooker 和Lucas Mentch.的作品Please Stop Permuting Features An Explanation and Alternatives (https://arxiv.org/abs/1905.03151) 的啟發(fā)。
作者:Denis Vorotyntsev
本文代碼:https://github.com/DenisVorotyntsev/StopPermutingFeatures
deephub翻譯組
總結(jié)
以上是生活随笔為你收集整理的为什么要停止过度使用置换重要性来寻找影响特征的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在不更改word行距的情况下,完全显示公
- 下一篇: 双千兆和全千兆有什么区别?_千兆字节,太