SHAP 值如何解释特征对异常值事件的贡献?

数据挖掘 Python 特征 可解释的ai 形状 隔离森林
2022-02-19 13:29:33

我正在尝试了解和试验 SHAP 值如何解释每个异常事件(行)的行为以及它如何与shap.force_plot(). 我已经创建了一个包含 7 个异常值的简单合成数据集。

  • 我没有得到4.85是如何计算为输出模型的。
outliers_df = temp_dataset.loc[synth_data_df[outdet.label_feature] == 1]
outliers_df

#Here is the frame of 7 outlier cases I input to SHAP: 

+----+-------------+--------------+---------------+
| id |      NF1    |      CF1     |outlier_scores |
+----+-------------+--------------+---------------+
|  1 |       904   |     2        | -0.192221     |
|  2 |       951   |     3        | -0.203116     |
|  3 |       125   |     5        | -0.076722     |
|  4 |       755   |     2        | -0.237189     |
|  5 |       983   |     2        | -0.213205     |
|  6 |       906   |     3        | -0.202074     |
|  7 |       999   |     5        | -0.266428     |
+----+-------------+--------------+---------------+

我在实现中应用了IsolationForest使用类OutlierDetector来隔离异常值:

outdet = OutlierDetector(synth_data_df, label_feature="label", 
                         normalize_outlier_scores=True, standardize_outlier_scores=False, 
                         n_estimators=100, max_samples=1., contamination=0.1)
outdet.train_IF()

我得到了每一行的 SHAP:

outdet.shap_values_outliers = outdet.explainer.shap_values(outliers_df)
outdet.shap_values_outliers
array([[-6.0205, -0.7785,  0.    ],
       [-6.3379, -0.7031,  0.    ],
       [-2.9014, -1.0911,  0.    ],
       [-6.6259, -1.1502,  0.    ],
       [-6.445 , -0.8171,  0.    ],
       [-6.2393, -0.7787,  0.    ],
       [-8.1958, -0.1862,  0.    ]])

这对于 3 个功能的第一行很简单shap.force_plot()在我训练我的模型后,我已经连接outlier_scores到框架NF1CF1如下所示: 图像

  • 怎么获得basicvalue=11.65通过脚本,如此所述?

  • 一般解释考虑basicvalue=11.65Modeloutput=4.85对于第一个事件或观察,考虑到没有将预测推高的特征用红色显示?

  • 获得理由SHAPoutlier_scores=0?

编辑 我还想分享以下情节,这可能有助于了解我们是否可以理解这两个特征之一对解释异常值的贡献,例如 SHAPNF1=[8,6]

outdet.plot_shap_values()

图像

0个回答
没有发现任何回复~