模型可解释性

hscredit.core.models.explainability 统一结构化 SHAP 结果、全局和局部解释、中文绘图、业务原因码与 受约束反事实建议。反事实仅表示模型条件下的非因果候选变化,不构成授信承诺或审批依据。

class hscredit.core.models.explainability.ExplanationResult(_explanation, _data, _sample_ids, target_class, output_index, model_output, explainer_type, background_summary, dataset_fingerprint, metadata)[源代码]

基类:object

一次模型解释计算的只读、可审计结果。

参数:
  • _explanation (Any)

  • _data (DataFrame)

  • _sample_ids (Index)

  • target_class (Any)

  • output_index (int | None)

  • model_output (str)

  • explainer_type (str)

  • background_summary (Mapping[str, Any])

  • dataset_fingerprint (str)

  • metadata (Mapping[str, Any])

target_class: Any
output_index: int | None
model_output: str
explainer_type: str
background_summary: Mapping[str, Any]
dataset_fingerprint: str
metadata: Mapping[str, Any]
classmethod from_explanation(explanation, *, data, target_class, output_index, model_output, explainer_type, background_summary, metadata)[源代码]

规范化 SHAP 输出并构造形状一致、外部不可原地修改的审计结果。

参数:
  • explanation (Any)

  • data (Any)

  • target_class (Any)

  • output_index (int | None)

  • model_output (str)

  • explainer_type (str)

  • background_summary (Mapping[str, Any])

  • metadata (Mapping[str, Any])

返回类型:

ExplanationResult

property explanation: Any

返回独立的 SHAP Explanation 副本。

property data: DataFrame

返回解释输入的深复制,避免外部修改审计结果。

property sample_ids: Index

返回样本索引副本。

property values: ndarray

返回二维 SHAP 贡献值副本。

property base_values: ndarray

返回每个样本的 SHAP 基准值副本。

property feature_names: list

返回固定顺序的特征名。

position_for(sample_id)[源代码]

按样本索引返回唯一的位置。

参数:

sample_id (Any)

返回类型:

int

class hscredit.core.models.explainability.ModelExplainer(model, feature_names=None, background_data=None, algorithm='auto', model_output='probability', target_class=1, max_background=200, random_state=42, explainer_type=None)[源代码]

基类:object

面向信贷模型的结构化 SHAP 解释器。

参数

参数:
  • model (Any) -- 已拟合且提供预测接口的模型。

  • background_data (DataFrame | ndarray | None) -- SHAP 背景数据;未提供时从解释数据确定性抽样。

  • algorithm (str) -- autotreelinearpermutationkernel

  • feature_names (Sequence[str] | None)

  • model_output (str)

  • target_class (Any)

  • max_background (int)

  • random_state (int)

  • explainer_type (str | None)

属性

last_result_: 最近一次 ExplanationResult

参考样例

>>> result = ModelExplainer(model, background_data=X_train).explain(X_test)
>>> ModelExplainer(model).get_global_report(result)
explain(X, *, max_samples=None, max_evals=None, check_additivity=True)[源代码]

计算选定类别的结构化 SHAP 解释。

参数:
  • X (ndarray | DataFrame)

  • max_samples (int | None)

  • max_evals (int | None)

  • check_additivity (bool)

返回类型:

ExplanationResult

compute_shap_values(X, check_additivity=True)[源代码]

计算并返回选定类别的二维 SHAP 数组。

参数:

check_additivity (bool)

返回类型:

ndarray

get_shap_importance(X=None)[源代码]

返回按平均绝对 SHAP 值稳定降序排列的重要性 Series。

返回类型:

Series

get_global_report(result=None)[源代码]

生成含重要性、方向、分位数、原生排名和相关性的中文全局报告。

返回类型:

DataFrame

get_sample_report(result=None, *, sample_id=None, position=None, top_n=None)[源代码]

按样本索引或位置生成局部贡献长表。

返回类型:

DataFrame

select_representative_samples(result=None, threshold=0.5, risk_direction=None)[源代码]

选择最高/最低风险、阈值附近、中位输出和贡献最大的代表样本。

参数:
  • result -- 结构化解释结果;None 时使用最近一次结果。

  • threshold -- 当前输出尺度下的业务决策阈值。

  • risk_direction -- higher_output_higher_riskhigher_output_lower_risk; None 时从解释元信息推导。

返回:

包含样本索引、选择理由、模型输出、风险排名和阈值距离的中文表。

返回类型:

DataFrame

get_correlation_report(result=None, kind='feature_shap')[源代码]

返回特征-SHAP 或 SHAP-SHAP 的相关性报告。

返回类型:

DataFrame

get_feature_clusters(result=None, max_clusters=None)[源代码]

按 SHAP 贡献相关性返回层次聚类叶序和聚类编号。

返回类型:

DataFrame

get_feature_interactions(X=None, top_n=10, result=None)[源代码]

返回树模型精确交互或非树模型近似交互的前 N 个特征对。

返回类型:

DataFrame

get_approximate_interactions(result=None, top_n=10)[源代码]

根据 SHAP 贡献 Spearman 相关性返回近似交互特征对。

返回类型:

DataFrame

get_stability_report(result=None, *, mode='sample', X_train=None, y_train=None, X_validation=None, n_bootstrap=100, confidence_level=0.95, top_k=10, random_state=None)[源代码]

评估固定样本 Bootstrap 或模型重训后的解释稳定性。

返回类型:

DataFrame

get_reason_codes(result=None, *, keep=3, risk_direction='higher_output_higher_risk', feature_map=None, reason_map=None)[源代码]

返回只包含不利局部贡献的中文业务原因码。

返回类型:

DataFrame

plot_decision(result=None, **kwargs)[源代码]

绘制单样本 SHAP 决策贡献条形图并返回 Figure。

plot_heatmap(result=None, **kwargs)[源代码]

绘制多样本 SHAP 贡献热力图并返回 Figure。

plot_distribution(result=None, **kwargs)[源代码]

绘制指定特征值与 SHAP 贡献分布并返回 Figure。

plot_correlation(result=None, **kwargs)[源代码]

绘制 SHAP 贡献相关性热力图并返回 Figure。

plot_feature_clustering(result=None, **kwargs)[源代码]

绘制基于 SHAP 贡献距离的特征层次聚类图。

plot_interaction_heatmap(result=None, **kwargs)[源代码]

绘制树精确或近似 SHAP 交互强度热力图。

plot_interaction_bubble(result=None, **kwargs)[源代码]

绘制主要 SHAP 交互特征对气泡图。

plot_importance_overview(result=None, **kwargs)[源代码]

绘制 SHAP 贡献分布与全局重要性组合图。

plot_explanation_overview(result=None, **kwargs)[源代码]

绘制重要性、方向、相关性与代表样本综合总览。

plot_shap_summary(X=None, plot_type='dot', max_display=20, show=True, **kwargs)[源代码]

绘制 SHAP summary 图;支持 dotviolinbar

plot_shap_bar(X=None, max_display=20, show=True, **kwargs)[源代码]

绘制单面板平均绝对 SHAP 重要性条形图。

plot_shap_dependence(feature, X=None, show=True, **kwargs)[源代码]

绘制指定特征值与其 SHAP 贡献的依赖散点图。

plot_combined_importance(X=None, top_n=15, show=True, **kwargs)[源代码]

并排绘制模型原生重要性与 SHAP 重要性。

plot_shap_waterfall(X, sample_idx=0, max_display=15, show=True, **kwargs)[源代码]

绘制真实 SHAP waterfall 图并返回 Figure。

plot_shap_force(X, sample_idx=0, show=True, **kwargs)[源代码]

绘制 Matplotlib SHAP force 图并返回 Figure。

class hscredit.core.models.explainability.CounterfactualExplainer(model, reference_data, constraints=None, output_type='auto', positive_class=1, max_candidates=100)[源代码]

基类:object

在模型与显式约束下搜索最小特征变更方案。

输出仅表示模型条件下的非因果建议,不代表真实因果效果或授信承诺。

generate(X, *, target_probability=None, target_score=None, max_changes=3, top_n=5, beam_width=50)[源代码]

生成满足风险概率上限或评分下限的确定性候选方案。

返回类型:

DataFrame

hscredit.core.models.explainability.model_explain_report(model, X=None, importance_type='gain', top_n=None, normalize=True)[源代码]

生成模型特征解释报告.

不依赖 SHAP,优先复用模型自身 get_feature_importances,再依次回退到 feature_importances_ / coef_,用于没有安装解释扩展包时的基础模型解释。

参数:
  • model (BaseRiskModel) -- 已训练模型

  • X (DataFrame | ndarray | None) -- 特征矩阵,可选,用于推断特征名

  • importance_type (str) -- 模型重要性类型,默认 'gain'

  • top_n (int | None) -- 返回前 N 个特征,None 表示全部返回

  • normalize (bool) -- 是否增加归一化重要性列,默认 True

返回:

模型解释报告 DataFrame,列名为中文

返回类型:

DataFrame

参考样例

>>> report = model_explain_report(model, X_test, importance_type='coef')
>>> print(report[['特征名', '重要性', '排名']].head())
hscredit.core.models.explainability.build_reason_codes(result, *, keep=3, risk_direction='higher_output_higher_risk', feature_map=None, reason_map=None)[源代码]

仅将风险方向一致的不利 SHAP 贡献转换为原因码。

参数:
  • keep (int)

  • risk_direction (str)

  • feature_map (Mapping[str, str] | None)

  • reason_map (Mapping[str, Mapping[str, Any]] | None)

返回类型:

DataFrame

hscredit.core.models.explainability.plot_feature_importance(model, X=None, top_n=20, importance_type='gain', figsize=(10, 8), title=None, color='#2E86AB', show_values=True, show=True)[源代码]

绘制模型原生特征重要性水平条形图。

参数:
  • model -- 已拟合且提供原生重要性或系数的模型。

  • X -- 用于推断特征名的 DataFrame 或数组,可选。

  • top_n -- 展示前 N 个特征,必须为正整数。

  • importance_type -- 传给模型重要性接口的类型。

  • figsize -- Matplotlib 画布大小。

  • title -- 自定义标题;None 时使用中文默认标题。

  • color -- 条形颜色,显式值优先。

  • show_values -- 是否标注重要性数值。

  • show -- 是否调用 plt.show()

返回:

Matplotlib Figure。

hscredit.core.models.explainability.plot_shap_importance(model, X, top_n=20, figsize=(10, 8), title=None, color='#4C78A8', show=True)[源代码]

计算并绘制平均绝对 SHAP 特征重要性。

返回:

单坐标轴 Matplotlib Figure,show=False 时不显示窗口。

hscredit.core.models.explainability.plot_importance_comparison(model, X, top_n=15, figsize=(16, 10), importance_type='gain', title=None, colors=('#2E86AB', '#4C78A8'), show=True)[源代码]

并排比较模型原生重要性与平均绝对 SHAP 重要性。

返回:

含“原生特征重要性”和“SHAP特征重要性”两个面板的 Figure。