# 5.5 Permutation Feature Importance ###### tags: `重點摘要` ### Permutation feature importance是計算當某個feature的值被重新排列後,模型誤差增加多少 ## 5.5.1 theory (直接看怎麼計算吧) 取自[如何跟我妈解释机器学习模型 - (1) 特征重要性](https://zhuanlan.zhihu.com/p/45261366) Permutation importance的计算很简单:首先我们有一个已经训练好的模型以及该模型的预测表现(如RMSE),比如说我妈的房价预测模型本来在validation数据上的RMSE是200。然后针对其中的变量(如面积),我们把这个变量的值全部打乱重新排序,用这个重新排序过的数据来做预测,得到一个预测表现。比如说这下RMSE变成了500,那么面积这个变量的重要性就可以记为300(=500-200)。 调包计算permutation importance只需要4行,举个栗子: ```python import eli5 from eli5.sklearn import PermutationImportance # first_model是已经训练好的模型 perm = PermutationImportance(first_model, random_state=1).fit(val_X, val_y) # 显示结果 eli5.show_weights(perm, feature_names = val_X.columns.tolist()) ``` 结果会是下图这样的一个排序好了的表格,很好解释,可以马上发给领导说绿色深浅代表重要性大小,红色代表没啥卵用。 The first number in each row shows how much model performance decreased with a random shuffling. The number after the ± measures how performance varied from one-reshuffling to the next. - 除了model error相減外,也可相除,e.g., 300/500 = 0.6 - 除permutate外,也可將資料集切半,對調兩者的資料值 其他worth of reading: 作者推薦paper (81 pages): [All Models are Wrong, but Many are Useful: Learning a Variable's Importance by Studying an Entire Class of Prediction Models Simultaneously](https://arxiv.org/abs/1801.01489) ## 5.5.2 要用train or test 哪個 data 來計算呢? 作者結論:沒有標準答案,純看需求。 * 使用train data 時機:想看模型有多依賴該feature > 當模型是個嚴重 overfitted model 時,看training data 就沒什麼意義。 * 使用testing data 時機:確認該 feature 在未知資料的表現 #### 疑問:PDP 也有這樣的疑問嗎? * 差在 PDP 是看 feature 與對於Y的影響,而非預測力 ## 5.5.3 Example FIGURE 5.29 X軸: permuted 的 1-AUC 與 原始 1-AUC 的差距倍數 https://zhuanlan.zhihu.com/p/45261366 (紅紅綠綠的圖) ## 5.5.4 優點 * 特徵重要性是因子被破壞時模型誤差的增加,好理解且可綜觀全面觀察 * error ratio 具有比較性(相較於絕對的 error difference ) * 考量到所有 feature 的影響 * 不需要 retrain model 省時省資源(其他selection 方式如 forward selection 需要 retrain) ## 5.5.5 缺點 * 不知道該看 training data 還是 testing data * 雖考量到所有feature 的影響且破壞了feature 的交互作用(因 fearture 的交互作用帶來的正向幫助同樣不會被計入) * 只看error 得知預測力,無法確定 feature 對於 Y值影響為何 * Permutation Feature Importance 是看 feature 對模型預測能力的影響,而不是與Y變量的關係與影響(對比:如 PDP、lightGBM gain) * permutation feature 含有 random 的概念,會有隨機誤差 * 同 PDP,在有相關變數的情況下,可能會出現極端組合(e.g. 200公分30KG) * 當一個變數失效,可能會有另一個相似變數補上,導致結果不易解釋 ## 程式 1. [sklearn.inspection.permutation_importance](https://scikit-learn.org/stable/modules/generated/sklearn.inspection.permutation_importance.html#sklearn.inspection.permutation_importance) 2. [Machine Learning Interpretability for Heart Disease Prediction](https://medium.com/@sid321axn/machine-learning-interpretability-for-heart-disease-prediction-23d8d95a307b): 這篇不錯,使用permutation importance外,還有PDP、SHAP、LOFO importance、Alibi、LIME、pyBreakdown 3. Feature importance https://medium.com/bigdatarepublic/feature-importance-whats-in-a-name-79532e59eea3 ## FAQ 1. Q: no retrain needed? A: 不需要,只是重新訓練係數。 2. Q: 適用於categorical feature嗎? A: category少時不適合使用。 3. Q: permutation feature importance看的是什麼? A: 對模型預測能力的影響,而非與Y變量的關係或影響 (後者如lightGBM gain)。