背景
ALE(累积局部效应)是一种用于解释机器学习模型的方法,专注于分析单个特征对模型预测的影响,同时有效避免特征之间的多重共线性问题。相比之下,部分依赖图(PDP,其假设特征之间是独立的,是因为它通过对目标特征取值进行遍历并保持其他特征固定来计算模型的平均预测值,这种方法隐含地假定非目标特征的联合分布不会受到目标特征变化的影响)。然而,在实际场景中,这种假设往往难以成立。特征之间通常存在相关性,无论是因为某些特征是由其他特征直接计算得出,还是因为数据本身来源于相关分布。因此,ALE通过局部效应的累积计算,能够更加稳健地处理相关特征的影响,为模型解释提供更准确和可信的结果
ALE的主要特点
- 局部效应:ALE通过局部计算模型预测值的变化来量化每个特征对预测结果的影响。这种局部分析可以更好地捕捉非线性关系
- 累积效应:通过累积局部效应,ALE可以绘制特征的整体影响曲线。它通过将特征划分为多个区间,并在每个区间内评估模型预测值的变化,逐步累积这些变化,从而获得一个全局的解释
- 避免共线性问题:与部分依赖图(PDP)相比,ALE不需要对其他特征保持固定,而是条件化在邻域范围内的数据分布上。这使得ALE更能反映特征对模型的真实贡献,尤其是在特征高度相关的情况下
ALE的计算过程
- 特征区间划分:将目标特征划分为多个区间(bins),并计算每个区间内特征值的变化对模型预测值的影响
- 局部效应计算:对于每个区间,计算特征值从当前区间边界移动到下一个区间边界时对预测值的局部效应
- 累积局部效应:将局部效应在区间范围内进行累积,绘制出特征的累积效应曲线
- 归一化处理:为了便于解释,ALE通常会将累积效应的值居中,以使曲线的平均值为零
最终ALE图展示了某个特征的值如何影响模型预测值, 横轴: 特征值的范围, 纵轴: 累积效应值(表示特征对预测结果的影响), 曲线形状: 反映特征与预测值之间的关系。 如果是非线性模型,曲线通常会表现出非线性趋势,当然ALE 图不仅可以用于单个特征(1D ALE),也可以扩展到两个特征(2D ALE),以探索特征之间的交互对模型预测的影响
代码实现
模型构建
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import warnings
warnings.filterwarnings("ignore")
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_excel('2024-11-27公众号Python机器学习AI.xlsx')
from sklearn.model_selection import train_test_split
X = df.drop(['Y'],axis=1)
y = df['Y']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3,
random_state=42)
from sklearn.ensemble import GradientBoostingRegressor, RandomForestRegressor
from sklearn.metrics import mean_squared_error
# 构建模型:GBRT和
gbrt = GradientBoostingRegressor(random_state=42)
# 训练模型
gbrt.fit(X_train, y_train)
加载数据、划分训练测试集以及训练一个默认配置的GBRT模型,为后续实现ALE可视化做好准备,并未进行超参数调优或模型优化
模型预测可视化
可视化展示模型预测值与实际观测值之间的关系,包括训练集和测试集的拟合效果,通过散点图、拟合线、置信区间以及边缘直方图直观比较模型的性能和分布特性,代码与数据集获取:如需获取本文的源代码和数据集,请添加作者微信联系
ALE图 可视化实 现
基础 ALE图
from alepython import ale_plot
# 对单个特征绘制ALE图
ale_plot(gbrt, X_test, "X_1", bins=50) # 对特征 X_1 进行解释
plt.show()
特征 X_1 的 第一阶累积局部效应(ALE)图,用于解释模型预测中 X_1 对目标变量的贡献,Y轴表示 X_1 对目标变量的 累积局部效应值,即 X_1 在特定区间内对模型输出的平均影响。值越大,说明特征 X_1 在该取值范围内对目标变量的正向贡献越大;值为负时,则表示对目标变量的负向贡献,X轴代表特征 X_1 的取值范围(从约5到20),并根据取值划分为50个区间(bins=50)。每个区间的点表示 X_1 在该区间内对目标变量的平均影响
- 图中的曲线是逐渐上升的,这表明随着 X_1 值的增加,其对目标变量的贡献也在逐渐增强
- 在 X_1 的低值范围(6到9之间),累积效应值接近于负,说明此时 X_1 对目标变量产生了负向影响,可能拖低模型预测的输出值
- 在 X_1 的中等值范围(9到12之间),累积效应逐渐从负变为正,这表明 X_1 开始显著地对目标变量产生正向贡献
- 在 X_1 的高值范围(12到20之间),累积效应值迅速增长,并最终趋于稳定,说明此时 X_1 对目标变量的正向贡献达到最大
进阶ALE图
import matplotlib as mpl
# 设置 matplotlib 图的默认大小为 9x6 英寸
mpl.rc("figure", figsize=(9, 6))
# 调用 ale_plot 函数绘制 Accumulated Local Effects (ALE) 图
ale_plot(
gbrt, # 传入机器学习模型(例如训练好的回归或分类模型)
X_test, # 数据特征集,用于生成 ALE 图
X_test.columns[:1], # 选择要绘制 ALE 的特征列,这里选择第一个特征列
bins=20, # 将特征值分成 20 个区间(箱数)
monte_carlo=True, # 启用蒙特卡罗模拟,用于增加鲁棒性
monte_carlo_rep=100, # 设置蒙特卡罗模拟的重复次数为 100
monte_carlo_ratio=0.6, # 设置蒙特卡罗采样比例为 60%
)
相对于前面的改进在于通过启用蒙特卡罗模拟(monte_carlo=True),引入随机采样(60%数据,重复100次),增强了ALE图在应对噪声和小样本波动时的鲁棒性,同时降低过拟合风险
自定义函数绘制
# 单个特征的 ALE 绘图
ale_plot(model=gbrt, train_set=X_train, features=["X_1"], bins=10, monte_carlo=True)
ale_plot 是一个自定义函数,用于绘制特征的 一阶累积局部效应 (ALE) 图,通过灵活的参数配置(如分箱数量 bins、是否启用蒙特卡洛采样 monte_carlo、采样比例和重复次数等)以及对 Rugplot 和图像标题的支持,使得用户可以轻松调整和扩展功能,满足不同模型解释的需求,相比于固定功能的库函数更为灵活,代码与数据集获取:如需获取本文的源代码和数据集,请添加作者微信联系
2D ALE图 可视化实 现
# 调用示例
custom_2d_ale_visualization(
model=gbrt,
X=X_test,
features=["X_1", "X_2"], # 替换为实际的特征名
bins=6, # 分箱数量
n_interp=100, # 插值点数
cmap="coolwarm", # 颜色映射
levels=20 # 等高线数量
)
custom_2d_ale_visualization 是一个自定义的 2D 二阶累积局部效应(ALE)绘制函数,其设计目的是解决 alepython 版本兼容性和调用问题,避免因为依赖库的降级或手动修改源代码带来的不便。通过自定义实现,用户可以直接计算和可视化二阶 ALE 图,同时支持灵活调整分箱数量、插值点数、颜色映射等参数,增强了适配性和可操作性,适用于更广泛的模型解释需求,代码与数据集获取:如需获取本文的源代码和数据集,请添加作者微信联系
这个 2D 二阶 ALE 图展示了特征 X_1 和 X_2 的交互效应对目标变量的影响,红色区域表示正向交互效应(目标变量增加),蓝色区域表示负向交互效应(目标变量减小),颜色深浅反映了影响强度
import matplotlib as mpl
from alepython.ale import ale_plot
# 设置图像尺寸
mpl.rc("figure", figsize=(9, 6))
# 绘制特征间的二阶ALE图(例如第 2 和第 3 个特征)
ale_plot(model, X, X.columns[2:], bins=10) # 特征取 X.columns[2:],分箱 10 个
# 绘制另一个特征组合的二阶ALE图(例如第 1 和第 2 个特征)
ale_plot(model, X, X.columns[1:], bins=10) # 特征取 X.columns[1:],分箱 10 个
这段代码展示通过 alepython 库 实现 2D 二阶 ALE 图的绘制,如果读者希望直接使用库函数进行可视化,可以参考以上代码,如果使用此代码,请确保已经安装了 alepython 库,并且使用的版本与当前环境兼容
往期推荐
复现SCI文章 SHAP 依赖图可视化以增强机器学习模型的可解释性
复现 Nature 图表——基于PCA的高维数据降维与可视化实践及其扩展
复现Nature图表——基于PCA降维与模型预测概率的分类效果可视化
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考