特征重要性计算方法及神经网络的特征重要性

这是我第63篇文章。这篇文章主要简单讲一些常用特征重要性计算方法及神经网络的特征重要性计算方法。

1 几种常用的特征重要性计算方法

1.1 树模型特征重要性

像xgboost、lightgbm等树模型都有自己计算特征重要性的方法,其特征重要性与特征使用次数和使用特征时带来的增益有关系。增益可以理解为对Loss带来的提升,或与之相类似的指标。基本上特征被用来分裂的次数越多,分裂后带来的增益越大该特征也就越重要。具体特征重要细节大家可以自行网上搜索,或者看这篇文章:
https://zhuanlan.zhihu.com/p/64759172

1.2 SHAP

SHAP一种来自于博弈论的方法,适合黑箱和非黑箱模型计算特征重要性。对于一些非线性的模型来说,特征与特征之间往往会相互作用,所以评价单个特征的重要性时需要要结合其他特征进行判断。而SHAP就是这样一种方法,其会计算特征的边际效应。比如ABCD四个特征,计算A特征的特征重要性时,它会计算AB、AC、AD、ABC、ABD和ABCD等特征组合的预测值(未在特征组合里的特征会被填充均值或进行其他操作);然后再计算不包含A特征的不同组合预测值,即会计算B、C、D、BC、BD和BCD等组合的预测值;最后整合多个边际效应来确定A特征的重要性,即整合val(AB)- val(B)、val(AC)- val©、val(AD)- val(D)、val(ABC)- val(BC)、val(ABD)- val(BD)和val(ABCD)- val(BCD)等边际提升为A特征的重要性。

但SHAP有个缺点,其计算复杂度极高,其计算复杂度是关于特征数量的指数阶复杂度,即使简化版本的SHAP也有极高的计算复杂度。有关SHAP的理论和实践文章如下。
https://zhuanlan.zhihu.com/p/85791430
https://zhuanlan.zhihu.com/p/103370775

1.3 Permutation

Permutation计算特征重要性较为简单,即打乱某一特征后,观察指标的变化情况,指标变化得越大表示该特征越重要。更详细的介绍可以看下述文章。
https://zhuanlan.zhihu.com/p/460783657

1.4 Boruta

Boruta的核心思路就是将特征矩阵进行shuffle,接着将shuffle后的特征(shadow features)与原特征(real features)拼接构成新的特征矩阵,然后判断打乱后特征重要性和原特征重要性的差距,如果这个差距越大表示该特征越重要。通常来说Boruta计算特征重要性会用到树模型。Boruta更详细介绍可见看下述文章。
https://www.zhihu.com/question/37318254

2 神经网络的特征重要性计算

神经网络的特征重要性主要以下几种方法。第一种是基于SHAP的方法,但该方法复杂度非常高,不推荐。第二种是基于permutation的方法,该方法相对简单,且效果还不错。第三种方法是基于蒸馏学习的方法,即训练一个线性回归模型拟和神经网络预测出来的预测值,最后通过结合特征的标准差和线性回归模型的权重来评定特征重要性。第四种就是基于机器学习可解释的方法,其大致原理就是求输入层的梯度,根据输入层梯度和特征值大小来计算特征的重要程度。

下面简单介绍基于permutation的特征重要性计算。Kaggle上有一个简单的计算例子。
https://www.kaggle.com/code/cdeotte/lstm-feature-importance/notebook

算法的核心思路就是先训练一个神经网络;计算第i个特征重要性时,打乱第i个特征;然后计算打乱后的指标变化。这个指标我建议选取与原预测值的Loss,原预测值为不打乱特征时的预测值,非真实的label。通过比较这个指标大小来判断特征的重要程度。

你可能感兴趣的:(量化杂文,神经网络,机器学习,深度学习)