散点密度 vs. 小提琴图

本笔记本提供了几个示例,用于比较 summary_plot 的点密度与小提琴图选项。

[1]:
import xgboost

import shap

# train xgboost model on diabetes data:
X, y = shap.datasets.diabetes()
bst = xgboost.train({"learning_rate": 0.01}, xgboost.DMatrix(X, label=y), 100)

# explain the model's prediction using SHAP values on the first 1000 training data samples
shap_values = shap.TreeExplainer(bst).shap_values(X)

分层小提琴图

没有颜色,这个图可以简单地显示每个变量的重要性分布,作为一个标准的提琴图。

[2]:
shap.summary_plot(
    shap_values[:1000, :], X.iloc[:1000, :], plot_type="layered_violin", color="#cccccc"
)
../../../_images/example_notebooks_tabular_examples_tree_based_models_Scatter_Density_vs._Violin_Plot_Comparison_3_0.png

例如,在上文中,我们可以看到 s5 是最重要的变量,通常它会导致预测结果发生较大的正向或负向变化。然而,是 s5 的大值导致正向变化,小值导致负向变化,还是相反,或者更复杂的情况?如果我们用颜色来表示特征的大小,那么这一点就变得显而易见了:

[3]:
shap.summary_plot(
    shap_values[:1000, :],
    X.iloc[:1000, :],
    plot_type="layered_violin",
    color="coolwarm",
)
../../../_images/example_notebooks_tabular_examples_tree_based_models_Scatter_Density_vs._Violin_Plot_Comparison_5_0.png

在这里,红色代表变量的大值,蓝色代表小值。因此,很明显,s5 的大值确实会增加预测,反之亦然。你还可以看到其他变量(如 s6)相当均匀地分布,这表明尽管它们总体上仍然重要,但它们的相互作用依赖于其他变量。(毕竟,像 xgboost 这样的树模型的全部意义在于捕捉这些相互作用,所以我们不能期望在单一维度上看到所有内容!)

请注意,颜色的顺序并不重要:每个小提琴图实际上是由若干个单独的平滑形状堆叠而成的,每个形状对应于某个特征的特定百分位数(例如 s5值的5-10%百分位数)。这些形状总是从小值开始绘制(因此最接近x轴),大值最后绘制(因此在’边缘’),这就是为什么在这种情况下你总是看到红色在边缘,蓝色在中间。(当然,你可以通过使用不同的颜色映射来改变这一点,但重点是红色在蓝色内部/外部的顺序没有固有的意义。)

如果你愿意,还有其他选项可以尝试。最值得注意的是上面提到的 layered_violin_max_num_bins。这个选项有一个额外的效果,如果特征的唯一值少于 layered_violin_max_num_bins,那么我们不会将每个部分按百分位分区(如上面的 5-10%),而是让每个部分代表一个特定的值。例如,由于 sex 只有两个值,这里蓝色将代表男性(或女性?),红色代表女性(或男性?)。

点图

点图结合了散点图和密度估计,通过在点无法适应时让它们堆积起来。这种方法的优点是它不会在核平滑背后隐藏任何东西,因此你可以看到数据的精确表示。

[4]:
shap.summary_plot(shap_values[:1000, :], X.iloc[:1000, :])
../../../_images/example_notebooks_tabular_examples_tree_based_models_Scatter_Density_vs._Violin_Plot_Comparison_9_0.png

小提琴图

这些是标准的箱线图,但异常值绘制为点。这比仅从少数点估计的核密度更能准确地表示异常值的密度。颜色表示该位置的平均特征值,因此红色区域高特征值占主导,而蓝色区域低特征值占主导。

[5]:
shap.summary_plot(shap_values[:1000, :], X.iloc[:1000, :], plot_type="violin")
../../../_images/example_notebooks_tabular_examples_tree_based_models_Scatter_Density_vs._Violin_Plot_Comparison_12_0.png