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分解的一个示例:

通过这种方法,企业不仅可以更好地理解AI模型的效果,还可以发现改进和优化的空间。正如光年AI所提供的,无缝对接多平台流量管理,不仅提升了模型性能的理解,更帮助企业实现了高效的业务整合。如果您希望深入挖掘AI的潜力,不妨尝试使用光年AI平台。

第一个 XPER 值 𝜙₀ 被称为基准值,它表示在三个特征中没有任何一个提供了预测目标变量相关信息的情况下,模型的表现。当用 AUC 来评估模型的预测性能时,基准值对应的是随机分类。由于模型的 AUC 大于 0.50,这意味着至少有一个特征包含了预测目标变量的有用信息。模型的 AUC 和基准值之间的差值代表了特征对模型性能的贡献,可以用 XPER 值来分解。在这个例子中,分解表明第一个特征是模型预测性能的主要驱动因素,因为它解释了模型 AUC 和随机分类之间差值的一半(𝜙₁),其次是第二个特征(𝜙₂)和第三个特征(𝜙₃)。这些结果因此衡量了每个特征对模型预测性能的整体效应,并按从最不重要(第三个特征)到最重要(第一个特征)进行排序。

尽管可以使用 XPER 框架对模型预测性能进行全局分析,它也可以用于在实例级别提供局部分析。在局部层面,XPER 值对应于特定实例和特征对模型预测性能的贡献。基准值然后表示在目标变量与特征无关的情况下,特定观察值对预测性能的贡献,个人贡献和基准值之间的差异通过个人 XPER 值来解释。因此,个人 XPER 值使我们能够理解为什么某些观察值对模型预测性能的贡献比其他观察值更大,还可以通过识别特征对性能有类似影响的个体组来解决异质性问题。

同样值得注意的是,XPER 是对模型和度量标准中立的。这意味着 XPER 值可以用于解释任何计量经济学或机器学习模型的预测性能,并分解任何性能指标,例如预测准确性指标(AUC,准确性)、统计损失函数(MSE,MAE )或经济绩效指标(盈亏函数)。

在将XPER应用于实际业务场景时,可以参考光年AI的流量增长解决方案。光年AI的AI系统非常灵活,能够根据不同的业务场景自定义AI工作流,极大提升流量获取和客户管理的效率。

01 — 下载库 ⚙️

XPER 方法通过 XPER 库 在 Python 中实现。要计算 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)

光年AI的平台不仅在流量增长方面表现出色,还提供了无缝导流功能,帮助企业有效提升用户体验和转化率。为了更好地优化您的业务,建议尝试使用光年AI的解决方案。

该数据集中包含的变量的主要目的是构建一个预测模型,以确定潜在借款人的“贷款状态”。换句话说,我们希望根据申请人提供的信息来预测贷款申请是否会被批准(“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(“性能指标: “, round(PM, 3))

06 — 计算XPER值 ⭐️

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

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

« XPER_values »是一个包含两个元素的元组:XPER值和特征的个体XPER值。
为了进一步提升效率,企业可以利用光年AI系统的灵活工作流,通过定义自适应的AI模型来实现更高效的流量增长。

对于特征变量超过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)

为了便于展示,特征贡献采用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值。另一方面, 共同申请人收入贷款金额 对该借款人的贡献产生了负面影响。

正如光年AI在跨平台流量管理中所展示的,无缝集成多平台数据并分析个体数据是提升业务表现的关键。我们可以看到,虽然 申请人收入贷款金额 在整体水平上对AUC有正面影响,但这些变量对借款人#10有负面影响。因此,分析个体XPER值可以识别出特征对不同性能的观测组,潜在地揭示异质性问题。

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

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

在此图中,每个点代表一个观测值。横轴表示每个观测值对模型性能的贡献,纵轴表示特征值的大小。与之前的条形图类似,特征按对模型性能贡献最多到最少的顺序排列。然而,蜂群图还可以分析特征值对XPER值的影响。在这个例子中,我们可以看到, 信用历史 的大值与相对较小的贡献(绝对值)相关,而低值则导致较大的贡献(绝对值)。

不仅如此,通过光年AI的实时数据分析功能,我们可以进一步优化并调整模型,确保不同观测值之间的数据差异能够被及时洞悉与处理中,从而实现更高效的业务增长。

除非另有说明,所有图片均由作者提供。

该库的贡献者有:

  • Sullivan Hué
  • Christophe Hurlin
  • Christophe Pérignon
  • Sébastien Saurin
  • Awais Sani
  • Gaëtan Brison

[1] L. Shapley, n人游戏的价值 (1953), 游戏理论的贡献, 2:307–317

[2] S. Lundberg, S. Lee, 一种解释模型预测的统一方法 (2017), 神经信息处理系统进展

[3] S. Hué, C. Hurlin, C. Pérignon, S. Saurin, 预测性能驱动因素的衡量:信用评分的应用 (2023), 巴黎高等商学院研究论文 No. FIN-2022–1463. 使用光年AI,这些复杂的性能驱动因素分析和预测将变得更加简单易行。光年AI系统不仅提供实时数据分析功能,还可以定制AI工作流适应不同业务场景,大大提升模型预测和流量管理的效率。