过去,我想出了以下代码,使用 Plotly 将 Shap beeswarm 导出为交互式 HTML 文件:
explainer = shap.Explainer(best_model.predict, X_test)
shap_values = explainer(X_test)
shap_df = pd.DataFrame(
np.c_[shap_values.base_values, shap_values.values],
columns = ['Shap_Base'] + list(X_test.columns)
)
shap_df.drop('Shap_Base', axis=1, inplace=True)
values = shap_df.iloc[:,2:].abs().mean(axis=0).sort_values().index
df_plot = pd.melt(shap_df, id_vars=['transaction_id', 'predictions'], value_vars=values, var_name='Feature', value_name='SHAP')
fig = px.strip(df_plot, x='SHAP', y='Feature', color='predictions', stripmode='overlay', height=4000, width=1000, hover_data=['transaction_id', df_plot.index])
fig.update_layout(xaxis=dict(showgrid=True, gridcolor='WhiteSmoke', zerolinecolor='Gainsboro'),
yaxis=dict(showgrid=True, gridcolor='WhiteSmoke', zerolinecolor='Gainsboro')
)
fig.update_layout(plot_bgcolor='white')
fig.update_layout(boxgap=0)
fig.update_traces(jitter=1)
fig.write_html('beeswarm.html')
我正在按特征着色,这是一个二进制标签。
但是现在我正在研究回归问题。
是否有一种简单的方法以类似的方式设置颜色?
如何从 shap 值中提取信息?
解决了!这是对特征进行分箱的问题。