通常,利益相关者不希望得到一个仅擅长预测的黑盒模型;他们希望了解特征的洞察,以便更好地理解他们的业务,并且能够向他人解释这些洞察。
当我们检查xgboost或sklearn梯度提升模型的特征重要性时,我们可以确定特征的重要性……但我们并不知道这些特征为何重要,对吗?
有没有一种方法不仅可以解释哪些特征重要,还可以解释它们为何重要?
有人建议我使用shap,但即使是运行一些样板示例也会抛出错误,所以我在寻找替代方案(甚至只是一个程序化的方法来检查树并获取除了plot_importance()
图表之外的洞察)。
在下面的例子中,应该如何解释为什么特征f19
是最重要的(同时还要意识到决策树在没有random_state或种子的情况下是随机的)。
from xgboost import XGBClassifier, plot_importancefrom sklearn.datasets import make_classificationimport matplotlib.pyplot as pltX,y = make_classification(random_state=68)xgb = XGBClassifier()xgb.fit(X, y)plot_importance(xgb)plt.show()
更新:我正在寻找一种程序化的证明方法,证明上述模型选择的特征对预测能力有正面或负面的贡献。我希望看到代码(而不是理论),说明如何检查实际模型并确定每个特征的正面或负面贡献。目前,我认为这是不可能的,所以请有人证明我是错的。我希望自己是错的!
我也明白决策树是非参数的,没有系数。然而,是否有办法查看某个特征是正面贡献(该特征的一个单位增加y)还是负面贡献(该特征的一个单位减少y)。
更新2:尽管这个问题被否决,并有几次“关闭”投票,看来这个问题并不那么疯狂。部分依赖图可能是答案。
部分依赖图(PDP)由Friedman(2001)引入,目的是解释复杂的机器学习算法。解释线性回归模型不像解释支持向量机、随机森林或梯度提升机器模型那么复杂,这就是部分依赖图可以派上用场的地方。对于一些统计解释,您可以参考这里和更高级的解释。一些算法有方法来寻找变量重要性,但它们并不表达一个变量是正面还是负面影响模型。
回答:
tldr; http://scikit-learn.org/stable/auto_examples/ensemble/plot_partial_dependence.html
我想澄清一些措辞,以确保我们达成共识。
- 预测能力:哪些特征显著地贡献于预测
- 特征依赖:特征是正相关还是负相关,即特征X的变化是否导致预测y增加/减少
1. 预测能力
您的特征重要性显示了哪些特征保留了最多的信息,并且是最显著的特征。能力可能意味着什么导致了最大的变化——您需要通过插入虚拟值来检查它们的整体影响,就像您对线性回归系数所做的那样。
2. 相关性/依赖性
正如@Tiago1984指出的,这在很大程度上取决于底层算法。XGBoost/GBM通过加法构建一个由桩子组成的委员会(决策树,通常只有一个分裂的低树数)。
在回归问题中,树通常使用与MSE相关的标准。我不会详细介绍,但您可以在这里阅读更多信息:https://medium.com/towards-data-science/boosting-algorithm-gbm-97737c63daa3。
您会看到在每一步它都会计算一个“方向”向量来表示弱学习器的方向,所以原则上您知道它的影响方向(但请记住,它可能在一棵树中多次出现,在加法模型的多个步骤中)。
但是,简单来说;您可以固定除f19
之外的所有特征,并为f19
的一系列值进行预测,看看它与响应值的关系如何。
看看部分依赖图:http://scikit-learn.org/stable/auto_examples/ensemble/plot_partial_dependence.html
在《统计学习的元素》中也有关于此的章节,第10.13.2章节。