如何从 xgboost 获得类似 glm 的优势比?

How to get glm-like odds ratios from xgboost?

我已经在 Python 3.8.5 上成功地 运行 了一个使用 xgboost 的机器学习算法,但是我很难解释结果。

output/target是二元的,死了或者没死。

我自己和我的听众都理解 R 的 glm 之类的比值比,而且我确信 xgboost 可以以某种方式显示此信息,但我不知道如何显示。

我的第一直觉是查看 xgboostpredict_proba

的输出

但是当我这样做时,我得到

>>> deceased.pp.view()
array([[0.5828363 , 0.4171637 ],
       [0.89795643, 0.10204358],
       [0.5828363 , 0.4171637 ],
       [0.89795643, 0.10204358]], dtype=float32)

假设这些是将进入公式 1/(1-p) 的 p,以计算每个输入项的优势比,例如 sexage.

我在这个网站上发现了一个类似的问题,但答案对我没有帮助:

所以根据那里的答案,我使用 .classes_ 得到这个

>>> deceased.xg_clf.classes_
array([False,  True])

事实上,我什至不确定 xgboost 能否 给出类似 glm 的优势比,最接近的似乎是 feature_importances.

但是,特征重要性提供的信息与优势比不同。

但是 .classes_ 没有告诉我如何找出哪些输入类别,例如agesex 有什么概率。

如何 link classes_ 输入类别? 或者,如果这不正确或不可能,我还能如何计算 xgboost 中每个输入变量 的比值比

同意 XGBoost 并不适合提供比值比之类的东西。您是否看过 XGBoost 等更复杂模型的其他形式的模型可解释性?例如,shap 是一个可以提供类似分析的库,但更适合这些类型的模型。

how else can I calculate odds ratios for each input variable in xgboost?

关于这个问题:我有二进制解释变量的解决方案。

我是这个论坛的新手,如果我的回答有误,请随时纠正。如果您想在 XGBoost 模型中显示系数,DoubleML is a package available for both R and Python. The package is built on the results from Chernozhukov et al. (2018) 用于分析 ML 模型中解释变量的影响。

您可以使用包中的 DoubleMLIRM 模型来解释论文描述的平均治疗效果(论文第 5 章):

θ0 = [g0(1,X) - g(0,X)]

其中 θ,正如他们所说,是平均治疗效果。换句话说:二元解释变量对因变量的影响。

g0(1,X)描述因变量依赖于控制变量X,以及感兴趣的二进制解释变量 D={1,0}。但是 g0 不采用函数形式。因此,您可以应用 XGBoost。

这个模型的好处是,你可以得到置信区间,这样你就可以对系数值进行推断。