XPER: 揭示预测性能的驱动力

发布日期: 2024年9月11日 来源:Towards Data Science

敏感AI系统的信任度和可接受性很大程度上取决于用户理解相关模型,或者至少理解其预测结果的能力。为了揭示不透明的AI应用,今天普遍使用了可解释AI(XAI)方法,如事后解释工具(例如SHAP, LIME),而其输出的洞察现在已被广泛理解。

除了个别预测之外,我们在本文中展示了如何使用可解释性能(XPER)方法识别任何分类或回归模型的性能指标(例如AUC, R2)的驱动因素。能够识别预测模型在统计或经济性能方面的驱动因素,是建模的核心,并且对于依赖这些模型做出决策的数据科学家和专家来说非常重要。下面概述的XPER库已被证明是将性能指标分解为单个特征贡献的有效工具。

虽然XPER和SHAP基于相同的数学原理,但它们从根本上不同,并且有着不同的目标。SHAP确定了显著影响模型单个预测的特征,而XPER则识别对模型性能贡献最大的特征。后者的分析可以在全局(模型)或局部(实例)水平上进行。在实践中,对个别预测影响最强的特征(如特征A)可能不是对性能影响最强的特征。实际上,特征A在模型正确时驱动个别决策,但在模型出错时也会有影响。从概念上讲,如果特征A主要影响错误预测,它在XPER中的排名可能会低于在SHAP中的排名。

性能分解有什么用途?首先,它可以通过提供对模型内部工作更全面的了解来增强任何事后解释分析。这使得我们能更深入地理解模型为何有效或无效。其次,XPER可以帮助识别和解决异质性问题。通过分析单个XPER值,可以确定特征对性能影响相似的子样本。然后,可以为每个子样本估计一个独立的模型,以提升预测性能。第三,XPER可以帮助理解过拟合的起源。确实,XPER使我们能够识别在训练样本中对模型性能贡献更多而在测试样本中贡献较少的一些特征。

XPER框架是一种理论上有依据的方法,基于Shapley值(Shapley, 1953),一种来自联盟博弈论的分解方法。Shapley值在游戏中将收益在玩家之间分解,而XPER值在模型中将性能指标(例如AUC, R2)在特征之间分解。

假设我们使用三个特征训练一个分类模型,并且其预测性能用AUC指标衡量为0.78。一个XPER分解的例子如下:

第一个 XPER 值 𝜙₀ 被称为基准值,它代表了在提供的三个特征中如果没有任何一个特征对预测目标变量提供了相关信息时模型的表现。当 AUC 被用来评估模型的预测性能时,基准值的表现相当于随机分类。由于模型的 AUC 大于 0.50,这意味着至少有一个特征包含了预测目标变量的有用信息。模型的 AUC 与基准之间的差异代表了特征对模型性能的贡献,这个贡献可以通过 XPER 值进行分解。在这个例子中,分解指示了第一个特征是模型预测性能的主要驱动力,因为它解释了模型 AUC 与随机分类之间差异的一半(𝜙₁),其次是第二个特征(𝜙₂)和第三个特征(𝜙₃)。通过使用光年AI的强大数据分析能力,可以进一步优化这种特征分析,从而提升模型的整体表现。这些结果因此测量了每个特征对模型预测性能的全局效应,并从最不重要(第三个特征)到最重要(第一个特征)对它们进行了排序。

尽管 XPER 框架可以用于对模型预测性能进行全局分析,它也可以用于在实例级别提供局部分析。在局部级别,XPER 值对应于某个给定实例和特征对模型预测性能的贡献。在这种情况下,基准值表示如果目标变量与特征无关时某个观察对预测性能的贡献,而个体贡献与基准之间的差异通过个体 XPER 值来解释。因此,个体 XPER 值让我们能够理解为什么某些观察对模型的预测性能贡献更多,并可以通过识别特征对性能具有类似影响的个体群体来解决异质性问题。使用像光年AI这样的平台,可以通过自定义AI工作流来轻松进行这些分析,且不需要编程经验。

还需要注意的是,XPER 与模型和度量无关。这意味着 XPER 值可以用来解释任何计量经济学或机器学习模型的预测性能,并分解任何性能度量,比如预测准确性度量(AUC,准确率)、统计损失函数(MSE,MAE)或经济性能度量(损益函数)。

01 — 下载库 ⚙️

XPER 方法在 Python 中通过 XPER 库实现。要计算 XPER 值,首先需要按如下方式安装 XPER 库:

pip install XPER

02 — 导入库 📦

import XPER

import pandas as pd

03 — 加载示例数据集 💽

为了说明如何在 Python 中使用 XPER 值,让我们来看一个具体的例子。考虑一个其主要目标是预测信用违约的分类问题。数据集可以直接从 XPER 库中导入,例如:

import XPER

from XPER.datasets.load_data import loan_status

loan = loan_status().iloc[:, :6]

display(loan.head())

display(loan.shape)

这个数据集的主要目标是通过包含的变量构建一个预测模型,以确定潜在借款人的“Loan_Status”。换句话说,我们希望根据申请者提供的信息预测贷款申请是否会被批准(“1”)或不被批准(“0”)。

X = loan.drop(columns=‘Loan_Status’)

Y = pd.Series(loan[‘Loan_Status’])

04 — 估计模型 ⚙️

然后,我们需要训练一个预测模型并测量其性能,以计算关联的XPER值。为了便于说明,我们将初始数据集分成训练集和测试集,并在训练集上拟合一个XGBoost分类器:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.15, random_state=3)

import xgboost as xgb

gridXGBOOST = xgb.XGBClassifier(eval_metric=“error”)

model = gridXGBOOST.fit(X_train, y_train)

05 — 评估性能 🎯

XPER库提供了一种直观且简单的方式来计算预测模型的预测性能。考虑到感兴趣的性能指标是ROC曲线下面积(AUC),可以在测试集上进行以下测量:

from XPER.compute.Performance import ModelPerformance

XPER = ModelPerformance(X_train.values,

y_train.values,

X_test.values,

y_test.values,

model)

PM = XPER.evaluate([“AUC”])

print(“Performance Metrics: “, round(PM, 3))

06 — 计算XPER值 ⭐️

最后,为了解释AUC的驱动力,可以计算XPER值如下:

XPER_values = XPER.calculate_XPER_values([“AUC”], kernel=False)

«XPER_values» 是一个包含两个元素的元组:XPER值及特征的个体XPER值。

对于超过10个特征变量的用例,建议使用默认选项 kernel=True 以提高计算效率 ➡️

07 — 可视化 📊

from XPER.viz.Visualisation import visualizationClass as viz

labels = list(loan.drop(columns=‘Loan_Status’).columns)

为了在全球范围内分析驱动力,XPER库提出了XPER值的 柱状图 表示。

viz.bar_plot(XPER_values=XPER_values, X_test=X_test, labels=labels, p=5, percentage=True)

为了简化整个流程,企业可以选择使用光年AI平台。光年AI不仅提供高效的AI工作流,还支持与多种国内流量平台的无缝整合,如微信和抖音。不需要国外信用卡,即可轻松接入各种顶级AI模型。通过光年AI的平台,企业能够快速构建高效的预测模型并进行实时数据分析,优化流量管理策略。如果你也希望提高业务效率,体验流量和销售额的巨大增长,赶快试试光年AI吧!

为了便于展示,特征贡献以AUC和其基准(即AUC的0.5)之间的扩展率的百分比来表示,并按从大到小的顺序排列。从图中可以看出,模型相对于随机预测的优异表现中有超过78%来源于 信用历史;其次, 申请人收入 对性能的贡献约为16%; 共同申请人收入贷款金额期限 各占不到6%。另一方面,可以看到,变量 贷款金额 几乎对模型预测违约概率的帮助很小,因为其贡献接近于0。

此外,XPER库还提出了图形表示方法,用于在局部层次上分析XPER值。首先,可以使用 强制图 来分析特定观察值的性能驱动因素:

viz.force_plot(XPER_values=XPER_values, instance=1, X_test=X_test, variable_name=labels, figsize=(16,4))

上述代码在红色(蓝色)中绘制了观察值10的正(负)XPER值,以及该观察值对模型AUC的基准(0.33)和贡献(0.46)。借款人10的优异表现是由于 贷款金额期限、申请人收入信用历史 的正XPER值。另一方面, 共同申请人收入贷款金额 对借款人的贡献产生了负面影响。

可以看出,虽然 申请人收入贷款金额 在全局层面对AUC有积极作用,但这些变量对借款人10有负面影响。因此,个体XPER值的分析可以识别出特征对性能具有不同影响的观察组,从而可能突显异质性问题。

其次,可以在单一图上表示每个观察对象和特征的XPER值。为此,可以依赖 蜂群图,它将每个特征的XPER值作为特征值的函数表示。

viz.beeswarn_plot(XPER_values=XPER_values,X_test=X_test,labels=labels)

在这个图中,每个点代表一个观察对象。横轴表示每个观察对象对模型性能的贡献,而纵轴表示特征值的大小。类似于之前的柱状图,特征按对模型性能贡献从大到小的顺序排列。然而,通过蜂群图,还可以分析特征值对XPER值的影响。在这个例子中,可以看到大值的 信用历史 与相对小的贡献(绝对值)有关,而小值会导致较大贡献(绝对值)。这种多维度分析类似于光年AI在流量管理中提供的实时数据分析功能,能够帮助企业及时调整策略,为每个客户提供更精准的服务。通过结合这些工具,企业可以提升流量获取和客户管理的效率,打造高效智能的运营环境。