10模型可解释和LIME
模型可解释和LIME
学习目标
- 知道LIME的原理
- 知道LIME API的使用方法
1 模型可解释性介绍
近年来深度学习模型与集成学习模型(如XGBoost、LightGBM等)广泛应用于多个领域,并展现出显著的应用价值;但这类模型具有共同的特征:
- 内部结构极其复杂, 其运作机制如同一个不可见的(inner workings)黑盒子, 使得用人类易懂的语言对其行为进行描述变得异常困难
- 模型输出结果无法被理解, 因此其在涉及生命安全或重要决策的关键领域中的应用受到了严重限制
黑盒模型存在的问题举例:
- 某银行希望通过XGBoost模型识别客户数据库中可能更倾向于购买基金产品的客户群体。经过训练后发现该分类器的AUC值达到了0.85,在实际应用中表现非常出色。为了提高客户的转化率,银行将基于模型预测结果展开了针对性的电话营销行动。然而,在进行了数百次电话营销后发现仅有少数几个客户最终选择了购买该基金产品。
- 某银行的风险控制专员注意到新信用卡系统出现了严重的逾期还款问题。为了减少违约事件的发生频率,他决定对原有的信用评分模型进行优化调整,并采用了新的训练数据集重新构建了模型框架。同时对特征变量进行了更加细致的分箱处理工作以提升模型预测精度。经过测试后新版本模型已正式投入应用并获得了预期效果。
- 在新开发的信用评分模型上线运行后出现了不少令人困惑的问题:现有申请者提供了完整的申请资料且征信状况也无可挑剔为何其申请却被直接拒绝?同样地还有些申请人虽然提交的信息与同事基本一致但其获得的产品额度却明显低于前者的情况为何会出现这样的差异?面对这些质疑声音运营团队暂时无法给出令人信服的答案而建模团队对于这个黑箱系统的运行机制依然无法做出准确解释。
可解释性大致可以为模型带来如下好处
- 深入分析因果关联,并引导构建特征工程策略(尤其是在医学、金融、自动驾驶等高风险领域)
- 稳定性高,并便于积累社会公信力
模型可解释性分类
内在可解释 和 事后可解释
- 内在可解释性(Intrinsic Interpretability)主要体现在模型架构设计上较为简洁明了的特点上。这种特性使得相关研究者能够直观地理解并分析其内部运行机制,并且通过逻辑回归、线性回归以及决策树等典型算法可以明显观察到其输出结果具备明确的因果关系特征。
- 事后可解释性则依赖于在训练完成后运用特定技术来增强对复杂模型的解读能力。对于那些架构较为复杂的机器学习模型而言,在缺乏深入解析的情况下仅能获得基础预测结果而不具备对其推理过程的理解权及输出结论的具体说明空间。因此,在实际应用中我们往往需要结合原有预测系统的特点灵活选择合适的解析工具以实现对黑箱模型的有效拆解与分析。
局部解释 和 全局解释
- 局部解释是指在给定一个样本或一组样本的情况下, 当其输入变量发生变动时, 探讨其预测输出的变化情况. 例如, 在银行风控场景下, 我们可以通过识别违规客户的特征要素, 从而识别潜在风险客户; 随着账户金额的变化情况, 影响预测失败率的变化趋势; 在信用卡申请被拒后, 可以通过模型分析结果向用户说明拒绝的原因依据
- 全局解释是指整体上阐述输入与输出之间的关系. 通过全局视角分析能够提取通用模式和统计关联性, 并明确各个变量对模型行为的作用机制
2 LIME原理
LIME 全称是 Local Interpretable Model-Agnostic Explanation,并且是一种与模型无关的局部解释算法。
模型无关:该算法仅依赖原始输入特征集合以及对应的预测结果;这表明该算法无需针对特定类型的模型进行调整;其适用范围广泛;例如可采用XGBoost这一树状集成方法;也可应用于基于深度学习的神经网络架构
基于局部代理的解释算法:通过为每个单独样本构建一个局部代理模型,在分析其各特征取值对模型预测结果的影响时能够揭示出该样本各特征取值对其模型预测结果的作用机制
Lime原理
LIME的核心理念是基于简单模型来解析复杂模型的行为,在局部区域中当简单模型与复杂模型在预测结果上达成一致时,则可利用该简单模型来说明复杂模型的行为机制。LIME算法要求输入待解析的预测样本及其对应的输出结果,并按照以下步骤运行:首先获取待解析的预测样本及其对应的输出结果;其次计算该样本在局部区域中的梯度信息;最后基于梯度信息构建线性可解释的简单模型。
基于预测样本点的随机采样方法
(2)对新生成的样本打标签:将这些样本输入到预先经过训练的复杂模型中进行推断,并获取相应的预测输出。

(4)选择用于解释特征的因素,并构建线性回归模型:通过计算线性模型的参数来实现。(基于上一步计算得到的权重)加权平方损失作为损失函数

3 LIME API 应用
加载数据
import pandas as pd
import numpy as np
np.random.seed(0)
import matplotlib.pyplot as plt
df = pd.read_csv('data/红酒品质分类.csv')
df.shape
AI写代码
(1599, 12)
查看标签分布
df['quality'].hist()
AI写代码

from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
Y = df['quality']
X = df[['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar',
'chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density',
'pH', 'sulphates', 'alcohol']]
X_featurenames = X.columns
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2)
model = RandomForestRegressor(max_depth=6, random_state=0, n_estimators=10)
model.fit(X_train, Y_train)
AI写代码
查看集成模型的特征重要性
importances = model.feature_importances_
indices = np.argsort(importances)
features = X_train.columns
plt.title('Feature Importances')
plt.barh(range(len(indices)), importances[indices], color='b')
plt.yticks(range(len(indices)), [features[i] for i in indices])
plt.xlabel('Relative Importance')
plt.show()
AI写代码

使用lime解释结果
import lime
import lime.lime_tabular
# 创建解释器对象
explainer = lime.lime_tabular.LimeTabularExplainer(np.array(X_train),
feature_names=X_featurenames,
class_names=['quality'],
verbose=True, mode='regression')
Y_test[0:2]
AI写代码
1109 6 1032 5 Name: quality, dtype: int32
model.predict(X_test[0:2])
AI写代码
array([5.58934518, 4.49841532])
解释第一条数据
exp = explainer.explain_instance(X_test.iloc[0], model.predict)
exp.as_pyplot_figure()
AI写代码

上面的结果中:
- 颜色根据相关性分为绿色和红色
- 硫酸含量高于0.73单位时表现出显著的品质关联
- 总二氧化硫水平超过63单位时则呈现出负面品质特性
- 当pH值低于等于3.21时仍能保持优质特性
上面的结果也可以通过列表的形式表示
pd.DataFrame(exp.as_list())
AI写代码

exp.show_in_notebook(show_table=True, show_all=False)
AI写代码
Intercept 5.6038609378707065 Prediction_local [5.67885663] Right: 5.589345184970929

上面的结果中, 显示了所有与解释这条数据有关的信息
- LIME模型的截距值为:L = -\ln\left(\frac{p}{1-p}\right)
- 使用LIME模型进行预测的结果是:\hat{y} = \sigma(w^T\phi(x) + b)
- 原始随机森林模型的预测结果为:\text{Right}=f_{RF}(x)
Lime 模型的预测结果计算方式 截距+ 上面列表中所有值的和
pd.DataFrame(exp.as_list())[1].sum()
AI写代码
0.07499569299707402
6038609378707065 + 0.07499569299707402
AI写代码
5.678856630867781
小结
Lime是一种与模型无关的事后解释方法,优势如下:
- 适用场景广泛,在表格数据、图像以及多种数据类型中均可应用
- 适用于各种模型,并且包括SVM(支持向量机)、XGBoost以及神经网络等模型都可通过LIME进行解释
- 生成的解释结果可用于分析复杂的机器学习模型
Lime的不足:
- 解释效果的不稳定主要源于从待解释样本中进行随机抽样的结果不确定性,在反复抽样并重新构建模型的过程中验证各特征的重要性时发现,在个别样本中各特征的重要性可能会略有差异。
- 第二点需要注意的是仅采用正态分布的抽样方法会导致忽视不同特征间的相互关联关系,从而可能导致生成的一些样本不够合理。
