为什么要停止过度使用置换重要性来寻找影响特征
數(shù)據(jù)分析師通常為了某些任務(wù)需要計算特征重要度。特征重要度可以幫助使用者了解數(shù)據(jù)中是否存在偏差或者模型中是否存在缺陷。并且特征重要度可用于理解底層流程和做出業(yè)務(wù)決策。模型最重要的特性可能會給我們進一步的特征工程提供靈感。
目前計算特征重要性的方法有很多種。其中一些方法基于特定的模型,例如線性回歸模型中的回歸系數(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)等。
盡管機器學(xué)習(xí)模型的黑箱可解釋性是模型開發(fā)研究的一個重要組成部分,但是Harmanpreet等人的一項研究顯示,并非所有的數(shù)據(jù)分析師和科學(xué)家都知道如何正確地解釋模型。這些方法的有效性和易用性使得它們幾乎成為不二選擇。實際上,如果可以通過運行pip install lib, lib.explain(model)來解決問題,為什么還要費心具體的理論呢。
在這篇文章中,主要想要說明一個認(rèn)知偏差,即過度使用置換重要性來尋找影響特征。本文將說明在某些情況下,置換重要性給出了錯誤的、誤導(dǎo)性的結(jié)果。
置換重要性(Permutation Importance)
置換重要性是一種常用的特征重要性類型。其核心思想在于:如果用隨機排列的值替換特征,會導(dǎo)致模型分?jǐn)?shù)的下降。它是通過幾個簡單的步驟來計算的:
- (1) 置換訓(xùn)練數(shù)據(jù)集中的第i個特征的值(feature_i),保持其它特征不變。生成置換后的訓(xùn)練數(shù)據(jù)集(X_train_permuted);
- (2) 用第2步訓(xùn)練好的模型以及X_train_permuted數(shù)據(jù)集進行預(yù)測(y_hat_permuted);
- (3)計算對應(yīng)的準(zhǔn)確度得分(score_permuted);
- (4)每個特征的置換重要性即為對應(yīng)的差異系數(shù)(score_permuted - score)。
用于說明計算的代碼如下:
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置換重要性很容易解釋、實現(xiàn)和使用。雖然計算需要對訓(xùn)練數(shù)據(jù)進行n_features次預(yù)測,但與模型再訓(xùn)練或精確SHAP值計算相比,置換重要性不需要大量的重新計算。此外,置換重要性允許選擇特征:如果置換數(shù)據(jù)集上的分?jǐn)?shù)高于正常數(shù)據(jù)集,那么就表明應(yīng)該刪除該特征并重新訓(xùn)練模型。基于這些原因,置換重要性在許多機器學(xué)習(xí)項目中得到了廣泛的應(yīng)用。
存在的問題
雖然置換重要性是一個非常有吸引力的模型解釋選擇,但它有幾個問題,特別是在特征具有一定相關(guān)性關(guān)系時。Giles Hooker和Lucas Mentch在他們的論文https://arxiv.org/abs/1905.03151中闡述如下:
對這一問題可能的解釋是模型的外推性能。假設(shè)模型是使用兩個高度正相關(guān)的特征x1和x2(下圖中的左圖)進行訓(xùn)練的。為了計算特征x1的重要性,我們對特征進行隨機化處理,并對“隨機”點(中心圖上的紅色點)進行預(yù)測。但這個模型在左上角和右下角都沒有看到x1的任何訓(xùn)練例子。因此,要做出預(yù)測,它必須外推到以前看不見的區(qū)域(右圖)。我們知道,所有模型的外推性能都很糟糕,因此做出了出乎意料的預(yù)測。這些“來自新區(qū)域的分?jǐn)?shù)”強烈影響最終分?jǐn)?shù),當(dāng)然也影響置換重要性。
圖1 置換重要性問題的一個直觀說明-未知區(qū)域Giles Hooker和Lucas Mentch提出了幾種替代方法來代替置換重要性:
測試
為了了解特征相關(guān)性對置換重要性和其他特征重要性方法的影響程度,本文進行了以下實驗。
測試方法
首先,生成一個具有指定數(shù)量的特性和樣本的正態(tài)分布數(shù)據(jù)集(n_features=50,n_samples=10000)。所有特征的平均值為0,標(biāo)準(zhǔn)差為1。所有的數(shù)據(jù)集特征通過最大相關(guān)度(max_correlation)相互關(guān)聯(lián)。
生成數(shù)據(jù)集后,為每個特征添加了均勻分布的噪聲。每個特征的噪聲量是從([-0.5noise_magnitude_max,0.5noise_magnitude_max],noise_magnitude_max=var)的均勻分布中隨機選擇的。這樣做是為了降低特征相關(guān)性。至此,特征就生成完畢了。
現(xiàn)在我們需要創(chuàng)建一個指標(biāo)。對于每個特征,生成了一個權(quán)重,它是從具有指定gamma和scale參數(shù)(gamma=1,scale=1)的gamma分布中采樣的。選擇Gamma分布是因為它看起來非常類似于典型的特征重要性分布。然后將每個特征權(quán)重除以權(quán)重之和,使權(quán)重之和等于1。這樣做是為了減少隨機權(quán)重生成對最終結(jié)果的影響。
然后將指標(biāo)設(shè)置為特征與相應(yīng)特征權(quán)重的線性組合。
對于生成的數(shù)據(jù)集和目標(biāo),本文使用以下參數(shù)訓(xùn)練了一個LightGBM模型:
learning_rate: 0.01 n_estimators: 100 random_state: 42所有其他參數(shù)均為默認(rèn)值。并且使用內(nèi)置的增益重要性、SHAP重要性和置換重要性算法來計算每個特征的重要性等級(置換重復(fù)五次,得分取平均值)。
然后計算特征的重要性與實際重要性之間的Spearman秩相關(guān)系數(shù)。實際重要性等于秩(-weights)。最佳可能的相關(guān)性系數(shù)為1.0,即特征重要性與實際重要性(特征權(quán)重)的順序相同。
每個實驗的數(shù)據(jù)(數(shù)據(jù)集統(tǒng)計相關(guān)性,模型重要性與內(nèi)置增益重要性、SHAP重要性和置換重要性之間的Spearman秩相關(guān)系數(shù))被保存以供進一步分析。這個實驗用不同的初始值,用不同的最大相關(guān)系數(shù)和噪聲幅值最大值組合(max_correlation,noise_magnitude_max)進行了50次試驗。也用“舍棄置換重要度”和“置換再訓(xùn)練重要度”方法進行了同樣的實驗,但由于需要大量的計算,只進行了5次。
示例分析
為了直觀理解,接下來將拿一個實驗舉例說明。實驗的具體代碼可以在這里找到:示例實驗。實驗參數(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)(平均絕對相關(guān)約為0.96)。相關(guān)統(tǒng)計:
圖4 特征數(shù)據(jù)集相關(guān)性的統(tǒng)計。abs_*前綴代表相關(guān)性的絕對值(注:數(shù)據(jù)集中的特征可以相互負(fù)相關(guān)和正相關(guān))生成特征權(quán)重的分布:
圖5 實際特征權(quán)重分布。只有幾個特性是重要的計算的特征重要性和實際重要性之間的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以及實際和計算特征重要性的圖示如下:
圖6 實際重要性和計算重要性,noise_magnitude_max=1我們可以在這里看到幾個問題(用綠色圓圈標(biāo)記):
以下是對相同實驗參數(shù)的實際和計算的特征重要性排序的說明,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 實際重要性和計算重要性,noise_magnitude_max=10仍然不是完美的,但是對于前十位重要特征排序效果良好。
實驗結(jié)果
本節(jié)介紹實驗以及對應(yīng)結(jié)果。“permutaions vs SHAP vs Gain”實驗總共進行了1200次,而“permutaions vs Relearning”實驗則進行了120次。
permutaions vs SHAP vs Gain
在本小節(jié)中,將比較使用置換重要性、SHAP值和內(nèi)置增益計算的特征重要性排序。
從下面的圖中,我們可以看到實際特征重要性與計算特征重要性(置換重要性、SHAP值、內(nèi)置增益重要性)之間的相關(guān)性,正如預(yù)期的那樣,與特征相關(guān)性的平均值和最大值呈負(fù)相關(guān)。置換重要性受高度相關(guān)特征的影響最大。內(nèi)置增益和SHAP計算的重要性沒有區(qū)別。
圖8 Spearman特征排序相關(guān)性=f(特征相關(guān)性平均值) 圖9 Spearman特征排序相關(guān)性=f(特征相關(guān)性最大值) 圖10 Spearman特征排序相關(guān)性=f(模型得分) 圖11 模型得分=f(特征相關(guān)性均值)此外,我們可以看到實際特征重要性和計算結(jié)果之間的相關(guān)性取決于模型的得分:得分越高,相關(guān)性越低(圖10)。目前還不清楚為什么會發(fā)生這種情況,但可以假設(shè),更多的相關(guān)特征會導(dǎo)致更精確的模型(從圖11中可以看出),因為特征空間更密集,“未知”區(qū)域更少。
Permutations vs Relearning
在本小節(jié)中,將置換重要性與再學(xué)習(xí)方法進行比較。
令人驚訝的是,再學(xué)習(xí)方法在所有相關(guān)關(guān)系中的表現(xiàn)明顯比置換差,這可以從下面的圖中看出。另外,再學(xué)習(xí)方法花費了大約n_features數(shù)倍的時間來運行。
圖12 Spearman特征排序相關(guān)性=f(特征相關(guān)性均值) 圖13 Spearman特征排序相關(guān)性=f(特征相關(guān)性最大值)結(jié)論
總結(jié)
在這篇文章中,描述了置換重要性方法以及與之相關(guān)的問題。展示了高度相關(guān)的特征如何以及為什么會影響置換重要性,這將導(dǎo)致誤導(dǎo)性的結(jié)果。做了一個實驗,結(jié)果表明置換重要性受高度相關(guān)特征的影響最大。還展示了,盡管重新學(xué)習(xí)方法被認(rèn)為是有希望的,但是它們的表現(xià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é)
以上是生活随笔為你收集整理的为什么要停止过度使用置换重要性来寻找影响特征的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在不更改word行距的情况下,完全显示公
- 下一篇: 双千兆和全千兆有什么区别?_千兆字节,太