3. 坏样本归因分析框架:归因分析流程与核心方法原理对比
坏样本归因分析是精算模型迭代与风险策略调优的核心环节。本章构建完整的归因分析框架,从数据收集到模型解释,并深入对比 Shapley 值、LIME 与 Permutation Importance 三种主流解释方法的原理与适用场景。
3.1 归因分析全流程
标准归因分析流程包含五个阶段,每个阶段产出驱动下一阶段的输入:
| 阶段 | 核心任务 | 关键产出 |
|---|---|---|
| ① 数据收集 | 整合承保、理赔、外部征信、行为埋点等多源数据 | 统一宽表(含坏样本标签) |
| ② 特征衍生 | 基于业务逻辑生成交叉特征、时序特征、聚合特征 | 高维特征池(通常 500+ 维) |
| ③ 特征筛选 | IV 值、相关性、缺失率、稳定性(PSI)多轮过滤 | 核心特征子集(20~50 维) |
| ④ 归因建模 | 训练可解释模型(LR/GBDT/XGBoost)并输出预测概率 | 训练好的模型 + 预测结果 |
| ⑤ 模型解释 | 应用 Shapley/LIME/Permutation Importance 量化特征贡献 | 归因报告 + 特征重要性排序 |
实战要点: 数据收集阶段必须保留时间戳与业务线标识,否则后续无法做分群归因与时间切片分析。
3.2 三种归因方法原理对比
Shapley 值、LIME 与 Permutation Importance 分别从合作博弈、局部近似、扰动测试三个角度解释模型。下表从原理基础、计算方式、输出形式与适用场景四个维度进行对比:
| 对比维度 | Shapley 值 | LIME | Permutation Importance |
|---|---|---|---|
| 原理基础 | 合作博弈论,计算每个特征在所有特征组合中的边际贡献均值 | 在预测点附近训练可解释的局部代理模型 | 随机打乱特征值,观察模型性能下降程度 |
| 计算方式 | 枚举所有特征子集(2ⁿ 组合),实际使用近似算法(KernelSHAP/TreeSHAP) | 对预测点进行扰动采样,加权拟合线性模型或决策树 | 对每个特征独立打乱 N 次,取平均性能变化 |
| 输出形式 | 每个样本每个特征的 Shapley 值(可加性,正负表示正向/负向贡献) | 局部特征重要性权重(线性系数或决策树分裂次数) | 全局特征重要性(百分比或绝对下降值) |
| 适用场景 | 需要严格公平归因、监管审计、特征交互分析 | 快速局部解释、非技术人员沟通、高维特征初筛 | 全局特征排序、模型简化、特征选择验证 |
| 计算复杂度 | 高(O(2ⁿ) 精确,O(n²) 近似) | 中(依赖采样次数与代理模型复杂度) | 低(O(n × N)) |
| 一致性 | 满足可加性、对称性、虚拟性、有效性 | 不保证一致性,不同采样可能结果不同 | 不保证一致性,打乱顺序影响结果 |
选型建议: 监管报送场景优先使用 Shapley 值;业务快速调优使用 LIME 做局部诊断;特征筛选阶段使用 Permutation Importance 做全局排序。
3.3 Shapley 值原理详解
Shapley 值源自合作博弈论,将每个特征视为一个"玩家",模型预测值视为"总收益"。特征 i 的 Shapley 值定义为:
φᵢ = Σ_{S ⊆ N\{i}} [ |S|! (n - |S| - 1)! / n! ] × [ f(S ∪ {i}) - f(S) ]
其中:
- N:所有特征的集合
- S:不包含特征 i 的特征子集
- f(S):仅使用子集 S 中特征时的模型预测值
- 权重项:对每种特征组合顺序进行加权平均
Shapley 值满足四个公理:
- 可加性:所有特征 Shapley 值之和等于总预测值减去基线值
- 对称性:两个特征贡献相等时,Shapley 值相同
- 虚拟性:对预测无贡献的特征 Shapley 值为 0
- 有效性:所有特征 Shapley 值之和等于总收益
3.4 LIME 原理详解
LIME(Local Interpretable Model-agnostic Explanations)在待解释样本 x 的邻域内训练一个可解释的代理模型 g,使得 g 在局部近似于原始模型 f:
ξ(x) = argmin_{g ∈ G} L(f, g, πₓ) + Ω(g)
其中:
- G:可解释模型集合(如线性模型、决策树)
- πₓ:局部采样权重,距离 x 越近权重越大
- L:代理模型与原始模型在局部的不一致程度
- Ω(g):模型复杂度惩罚项
LIME 局限性: 局部采样范围(核宽度)对结果敏感;不同采样种子可能导致不同的特征重要性排序;对高维稀疏特征解释不稳定。
3.5 Permutation Importance 原理详解
Permutation Importance 通过随机打乱单个特征的值,破坏该特征与目标变量的关系,观察模型性能下降程度来衡量特征重要性:
PIⱼ = (1/N) × Σ_{k=1}^{N} [ Score(original) - Score(shuffledⱼ) ]
计算步骤:
- 在验证集上计算原始模型性能(AUC / LogLoss / MSE)
- 对特征 j 的值进行随机打乱(保持其他特征不变)
- 在打乱后的数据集上重新计算模型性能
- 计算性能下降量作为特征 j 的重要性
- 重复 N 次(通常 N=5~10)取均值,减少随机性
实战注意: 如果两个特征高度相关,打乱其中一个特征后模型仍可从另一个特征获取信息,导致重要性被低估。建议先做相关性聚类,每组只保留一个代表特征。
3.6 归因分析实战代码示例
以下代码展示使用 Python 对 XGBoost 模型进行三种归因分析的完整流程:
import pandas as pd
import numpy as np
from xgboost import XGBClassifier
from sklearn.model_selection import train_test_split
import shap
from lime.lime_tabular import LimeTabularExplainer
from sklearn.inspection import permutation_importance
# 1. 加载数据与训练模型
df = pd.read_csv('claim_data.csv')
X = df.drop('bad_flag', axis=1)
y = df['bad_flag']
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
model = XGBClassifier(
n_estimators=100, max_depth=4, learning_rate=0.1,
random_state=42, eval_metric='logloss'
)
model.fit(X_train, y_train)
# 2. Shapley 值计算(使用 TreeSHAP 加速)
explainer_shap = shap.TreeExplainer(model)
shap_values = explainer_shap.shap_values(X_test)
# 输出单个样本的归因
sample_idx = 0
print(f"样本 {sample_idx} 的 Shapley 值:")
for i, col in enumerate(X.columns):
print(f" {col}: {shap_values[sample_idx][i]:.4f}")
# 3. LIME 局部解释
explainer_lime = LimeTabularExplainer(
X_train.values,
feature_names=X.columns.tolist(),
class_names=['good', 'bad'],
mode='classification'
)
exp = explainer_lime.explain_instance(
X_test.iloc[sample_idx].values,
model.predict_proba,
num_features=5
)
print(f"\nLIME 局部解释(样本 {sample_idx}):")
for feature, weight in exp.as_list():
print(f" {feature}: {weight:.4f}")
# 4. Permutation Importance 全局排序
perm_importance = permutation_importance(
model, X_test, y_test,
n_repeats=10, random_state=42,
scoring='roc_auc'
)
print("\nPermutation Importance 全局排序:")
sorted_idx = perm_importance.importances_mean.argsort()[::-1]
for idx in sorted_idx[:5]:
print(f" {X.columns[idx]}: "
f"{perm_importance.importances_mean[idx]:.4f} "
f"(±{perm_importance.importances_std[idx]:.4f})")
输出解读: Shapley 值可正可负,正值表示该特征增加坏样本概率;LIME 权重表示局部线性近似系数;Permutation Importance 表示打乱特征后 AUC 下降量,越大越重要。
3.7 归因结果交叉验证策略
单一归因方法可能存在偏差,建议采用交叉验证策略提升结论可靠性:
| 验证场景 | 推荐方法组合 | 一致性判断标准 |
|---|---|---|
| 全局特征排序 | Shapley 值 + Permutation Importance | Top-10 特征重合率 ≥ 70% |
| 局部样本诊断 | Shapley 值 + LIME | Top-3 特征方向一致(正/负向) |
| 特征交互检测 | Shapley 交互值 + 部分依赖图 | 交互强度与可视化趋势吻合 |
| 模型简化验证 | Permutation Importance + 递归特征消除 | 删除低重要性特征后性能下降 < 1% |
常见陷阱: 当特征之间存在强相关性时,Shapley 值可能低估相关特征组的重要性;Permutation Importance 可能高估相关特征的重要性。建议先做特征聚类,每组只保留一个代表特征后再做归因分析。