问题描述
我们已将多个机器学习模型(例如light GBM,随机森林,弹性网,XGBoost )用于预测。要求是根据输入特征分解预测值(每个预测)。Sample data
例如要求:说我有一个预测y = 1000$
,并且有三个输入特征x1
,x2
和x3
。有没有一种方法可以表示预测值(1000 $),其中x1
贡献了400 $,x2
贡献了300 $,x3
贡献了300 $。
尝试的方法:功能重要性从随机森林到每个输入变量的属性百分比贡献。这没有给出有意义的结果。
LIME和Shapley :LIME提供的本地截距值在所考虑的场景中没有意义。 Shapley提供了从期望值到各个特征的偏差的量化,这也没有帮助。
解决方法
您正在寻找功能与目标之间的线性关系。最好的解决方案当然是拟合线性模型!
您说您尝试过弹性网,它实际上是规则化的线性回归。如果模型性能令人满意,则可以使用线性回归的系数来计算贡献。实际上,该模型将是:
因此由
(或者仅仅是
,取决于您“贡献”的意思)贡献给
。请注意,在“贡献”的概念中,您应该尝试理解拦截值
。
如果“基本”线性模型的性能不够好,则可以进行一些特征工程(以变量平方或其他变换为例),请查看the generalized linear model or the generalized additive model,但这确实是特定于你有问题。
现在,如果拟合线性模型不起作用,则意味着您无法在目标特征和从属特征之间找到全局线性关系。您需要近似一个局部线性关系,但它可能并不总是有效或无法提供预期的结果。具有线性解释模型的LIME似乎是一个不错的选择,也许您可以进一步研究为什么它对您不起作用。