大家好,我是 Sam Ray,人工智能工程副总裁。这里展示的是同一笔交易两次评分的结果。左侧是一笔在线购买,我们考察了消费金额、商户、MCC 代码、设备类型以及一天中的时间等特征,经过工程化处理共提取了 198 个特征,最终得分为 0.04。这个分数远低于我们会发出警报的任何阈值。在我们看来,这笔交易看起来是干净的;而在右侧,虽然是同一笔交易、相同的特征向量,没有任何一行数据有差异。我们唯一改变的是允许模型观察其所在的邻域环境。在过去一小时内,该用户、商户以及另外两笔交易均被标记为正常欺诈模式。此时分数变为 0.91。因此,信号并不在数据行中,而是在边(连接关系)里。

所以,欺诈不是交易本身的属性,而是其所在邻域的属性。让我描述一下问题的形态,因为这实际上是披着同一个名字的两个问题。实体商户销售点的交易自然欺诈率约为 0.05%,即两千分之一。这是紧密且低噪声的信号,欺诈主要取决于卡片自身的交易频率。相比之下,在线交易的欺诈率为 0.6%,高出12倍,且交易量更大、噪声更多。大部分信号存在于商户和邻域上下文中。这两个投资组合具有不同的基准率和不同的信号几何结构,因此在实践中需要两个模型而非一个。

这里有一个约束条件使这成为一个工程问题,而不仅仅是建模问题:警报预算是固定的。分析师只审查评分最高的 0.5% 到 1.5% 的交易,仅此而已。因此,曲线下面积(AUC)不仅仅是我们关心的目标,更重要的是在固定 K 值下的精确度。模型必须有价值,就必须将真实的欺诈交易移入这个切片中,同时保持相同的延迟。那么显而易见的问题是:为什么不直接构建更好的 XGBoost 模型呢?

我们在实体销售点进行了尝试,将40个原始属性转化为87个工程特征。经过选择和泄漏检查后,两个正样本率从35.5%提升至36.6%。对于在线交易,情况类似:近200个工程特征仅提升了约一个百分点。这意味着两到五倍的特征表面积只带来了一个点的提升(DPR)。这不是调优失败,而是天花板所在,因为我们工程的每一个特征都只是同一行数据或安全卡片自身历史的函数。我们只是在投影已有的信息。

表格型特征只能回答一个问题:这笔交易看起来如何?它们无法回答第二个问题:它与谁相连,以及对方正在做什么?例如设备共享、跨购物车的交易频率链条、40分钟前出现问题的商户等,这些都存在于行与行之间的边中。每次只查看一行的模型在设计上就是盲目的,无论我们添加多少列都无法改变这一点。

接下来是本次演讲的核心模型:图神经网络(GNN)不是从节点自身的特征中学习,而是从其邻域中学习。一层包含三个操作:首先是收集(Gather),我们沿着边(如交易到用户、交易到商户)拉入每个邻居的隐藏状态;其次是聚合,我们将那个对每个节点大小不同的邻居集合坍缩为一个固定宽度的向量,并使用置换不变函数完成此操作。我们选择的聚合函数比预期的更重要,Charik 稍后会回到这一点;第三是更新(Update),我们将聚合结果与节点自身状态结合,通过神经网络层推送并堆叠两次。

这样,在分类器看到数据之前,每笔交易都了解其邻居及其邻居的邻居。这些结果有效吗?是的。我要精确说明比较的内容:我们没有替换 XGBoost,而是将其作为后续步骤。图神经网络生成嵌入向量,这些嵌入评分被输入到同一个梯度提升模型中进行最终打分。因此,我们比较的是单纯的 XGBoost 与“XGBoost + GNN”曲线。

首先强调三个数字:第一,使用相同的警报率、评估窗口和可用特征的两阶段基线相比,真阳性率提升了 27% 到 30%,相关提升为 33%。第二,预计每年因欺诈捕获增加而带来的增量收益约为 6500 万美元。第三,P99 延迟为 3 毫秒。这次演讲不仅关于数字,更关于我们如何达成这些结果:四个决策且顺序至关重要。首先也是最重要的是采样欺诈率为 1/2000,因此我们不能训练原始分布。必须提高正样本率,但这不像表格数据集那样行是独立的。

我们丢弃的每一个负样本都会带走其边连接关系。简单地下采样会保留标签但丢失使其有价值的邻域结构。因此,在不破坏连接性的前提下保持软目标的欺诈率是关键。第二是图特征构建和泄漏状态检测,这比听起来更难,因为边带有时间戳以及用于检测欺诈的32个衍生特征。第三是可解释性:分析师不会操作一个数字,这是一个受监管的工作,分数必须附带证据否则无法上线。

在 3 毫秒内提供服务需要两件事:聚合方法和从节点级预测到边级预测的转变。最后,我们在发布后验证了一次迭代:在滚动窗口上创建和训练模型,并采用边缘哈希 DK 方法。这再次提升了数据指标。现在我将把时间交给 Mohammed Sarik,让他深入探讨我们如何创建图、优化它们以及为使模型更优而做出的工程决策。

大家好,我是 Mohammed Sarik,首席 AI 架构师。今天我将展示图神经网络如何将欺诈捕获率提升超过30%,以及我们如何在 3 毫秒内提供服务。我将详细介绍技术构建、采样、图构造、服务和可解释性。让我们开始吧。第一个大多数团队犯错的决策是数据采样。我们将卡相关商户交易的软目标欺诈率保持在 0.5%,约为自然欺诈率 0.05% 的10倍;在线交易则为6%,约为自然欺诈率 0.6% 的10倍。这远温和于表格管道中使用的激进过采样或欠采样方法。

为什么?因为每个选中的用户的完整交易历史都保留在图中。如果你为了达到类别比例而修剪真实用户的历史记录,就会破坏连接性。

取决于其邻居的情况,而欺诈用户自身的真实交易则作为硬负样本保留在决策边界的最有用示例中。如果触发上限,仅真实用户的词预算会缩减,欺诈用户永远不会被限制类别不平衡是在训练器内部通过平衡批次采样在下游处理的。这是收据:平均用户度数在训练时为11.5,对于与卡相关的商户交易几乎达到14,这与模型在推理时看到的一致。如果训练时的邻居与推理时的不匹配,模型就会学错东西。它在所有12个月的测试中保持稳定,自然率为0.05%和0.6%,无需纠正漂移。

第二项决策泄漏控制内置于图本身,而非事后检查。每个日历月都是其自身不相交的图,没有边跨越边界。交易是中心节点,连接到用户和商户,加上一个五跳跟随链回溯其自身近期历史。由于月份之间从不连接,信息无法从一个拆分泄漏到另一个中。由此产生四个属性:无未来泄漏,交易仅聚合具有较早时间戳的邻居;由于月份不相交,无训练/验证/测试泄漏。

无标签泄漏,欺诈标志是目标,从未作为特征或边;且无分布泄漏,每个标量和词汇仅在训练月拟合然后冻结。四者通过构造验证而非事后审查。架构前的最后一个决定:202个模型特征分布在三个节点类型上,用户73个,交易109个,商户20个。其中32个交易特征是经过派生的,专为欺诈检测构建,分三波加入:10个实体历史特征包括过去交易次数、距上次活动的天数,以及最近五笔金额的平均值、标准差和最大值。

这是每个用户和商户的行为基线;8个风险聚合指标,包括与该历史对比的金额Jet分数、近期与过去比率、每日交易数。这些标志偏离实体自身基线的情况,而非某些全局阈值;以及14个真正的滚动窗口速度和时序特征:5分钟、1小时和24小时的交易计数及金额;最近一天的不同对手方数量,距上次交易的秒数,甚至包括用于检测不可能旅行模式的国家变更率。

为什么这很重要?图告诉模型交易连接到谁,这些衍生特征则告诉它该实体如何与其自身正常情况不同。它们是互补信号而非冗余信号,在底层运作。这是图神经网络架构:采样、聚合、组合和嵌入。每跳采用固定近期偏差集的邻居,因此一个巨大的商户节点不能主导每条消息。聚合:这里有一个值得暂停的详细信息。我们不只是求平均,而是连接三个顺序不变的统计量:均值、最大值和标准差。

将其与节点自身的向量通过可学习权重组合,嵌入固定长度的跳数向量。这是归纳式的:我们了解到聚合器等待的不是每个节点的固定向量,因此新用户或商户可以即时嵌入而无需重新训练。为什么用三个统计量而不是一个?让我展示一下:想象交易的四个邻居,其中三个看起来完全正常分数约为0.1第四个与欺诈团伙有关联为0.92。将这四个平均在一起得到0.32,那个与团伙关联的邻居只是在人群中稀释了。

如果取最大值则它原封不动地显现出来为0.92这就是为什么我们不单独依赖均值。在许多真实邻居中单个危险邻居正是欺诈团伙创造的模式,而平均池化恰恰是隐藏它的操作。标准差增加了第三个视角:邻居之间自我不一致的程度。一个均匀无聊的邻里环境与包含活跃异常值的环境截然不同,而且这在服务时没有额外成本。无需额外的学习参数无论节点有多少邻居输出大小固定。

一个快速超参数说明:128维是甜蜜点,64维接近但略欠拟合;256成本更高的GPU且无回报验证性能在128之后趋于平坦并开始过拟合。这不是哲学辩论,只是扫描测试。现在并排显示实际数字:对于与卡相关的商户交易最佳XGBoost在固定0.5%警报率下获得36%的召回率,图神经网络加XGBoost达到48%,相对提升33%,捕获560万美元,捕获率为83%。

对于在线交易从48%提升至61%,相对提升27%,捕获3540万美元,捕获率为71%。在线交易是这6500万美元节省的主要来源因为它运行在与卡相关的商户交易12倍的欺诈率下。第三个决定:可解释性我们在每个渠道对200个标记案例运行子图归因。交易速度边缘在与卡相关的交易中承载0.94的平均重要性,在在线交易中为0.62,并且是所有200个卡现案例中的顶级证据。

商户边缘在在线交易中更重要为0.19,而在卡现中仅为0.04因为在卡现场景中欺诈者写的是卡片自身的速度而非接受点。这就是模型说91与因为过去40分钟内这三个链接交易而说91之间的区别。为什么这在欺诈中如此重要?四个原因:一是监管和模型风险管理金融机构在自动化决策框架下运作需要记录理由这不是可选的。二是分析师信任和调查速度未解释的高分会被橡皮图章式批准或忽略边缘级证据将重新计算案例变为验证三个链接交易。

三是模型调试归因模式向我们展示当模型依赖虚假或衰减信号时,在性能在生产环境中明显下降之前。四是反馈循环质量当解释与分析师已经怀疑的一致时,他们会对边缘案例有足够的信任进行正确标记从而改进下一轮训练数据。一个准确的黑盒根本不会被使用。现在真正的挑战是在3毫秒内提供这些解决方案离线VRAM受限GPU分层图神经网络前向传递覆盖整个图按目标节点分块因此它在数值上等同于全图前向传播只是每次限制在几GB跨越多个GPU。

每个用户、商户和近期交易都获得其每层表示并投射到低延迟嵌入存储中。每个用户最近的五笔交易位于一个环形结构中。

在请求时在线缓冲,一个轻量级的组装步骤直接从该缓存中重建邻居状态。无需构建图,也无需采样。通过指数衰减进行加权重算,以精确复现训练过程。随后,实时评分服务仅基于这些缓存状态以及额外的头部信息,对新交易执行两层的正向传播。没有任何与图规模相关的计算会在每个请求中运行。

三个小窍门使其在实际应用中变得快速。我们在加载重型库之前,将数学库的线程池固定在一个核心上。仅此一项就将延迟从30毫秒降低到了1毫秒(注:原文one疑为笔误,结合语境应为更低数值或单位差异,此处忠实翻译“1”)。我们在启动时预热模型,以确保第一个真实请求不会缓慢。目前它是一个单一的内存进程接口,当我们需要扩展时,该接口可直接映射到分布式缓存中。

但这里有一个陷阱。那个技巧要求在生产规模下为每个节点(包括每笔交易)缓存表示,这需要60GB的内存空间。它需要昂贵的高内存服务支持,并且存在一天的嵌入滞后时间(注:原文embedding lag指更新延迟)。这导致真正的阳性率实际上从48%下降到44%。

解决方案是在边缘而非节点上进行预测。仅为用户和商户预计算嵌入,绝不针对每笔交易进行计算。这将内存占用缩减至2到3GB,大约是原来的二十分之一,成本低廉,足以在与旁边XGBoost模型相同的CPU类别上运行。Nvidia独立推荐了相同的方法,并预计其性能与节点模型相当。

以下是实际的请求路径:预处理、缓存查找以及XGBoost头部的处理都只占几分之一毫秒。GNN自身真正的两层正向传播是最大的单一组成部分,耗时1.61毫秒。中位数端到端延迟为2.3毫秒,P99分位数为3.1毫秒, comfortably(舒适地)处于我们3到4毫秒的服务等级协议(SLA)范围内。如果我们需要更多的余量,GNN正向传播将是我们要重新编译或优化的第一件事。

感谢观看。我们很高兴深入探讨采样、图构建、可解释性或部署服务等方面的问题,欢迎随时联系我们。谢谢。