揭秘Stripe欺诈检测系统背后的机器学习算法 - quastor


Stripe 是世界上最大的支付处理商之一。
该公司的主要产品是 Stripe Payments API,开发人员可以使用它轻松地将支付功能嵌入到他们的应用程序中。
由于 Stripe 的规模,它们是支付欺诈和网络犯罪的一大目标。
Andrew Tausz 是 Stripe 风险情报团队的一员,他写了一篇很棒的博客文章,介绍了 Stripe 如何使用相似性聚类来捕获欺诈圈。
 
Stripe 的商家欺诈行为
Stripe 面临的最常见的欺诈类型之一是商家欺诈,诈骗者将创建一个网站来宣传欺诈性产品或服务(并使用 Stripe 处理付款):例如,如果诈骗者创建了一个以极低折扣价销售电子产品的网站。顾客付钱给他后,他把钱装在口袋里,不给顾客承诺的商品。客户肯定会对他们的信用卡发出退款请求,最终将由 Stripe 偿还。
然后,Stripe 将尝试从骗子的账户中扣款,但如果骗子转出所有钱,那么 Stripe 将不得不承担损失。
欺诈者被 Stripe 抓住后,他的帐户将被禁用。但是,他很可能会尝试通过创建一个新的 Stripe 帐户来继续骗局。
Stripe 可以减少欺诈的一种方法是通过相似性聚类来捕获这些重复的欺诈者。
 
使用相似性聚类减少商家欺诈
当诈骗者创建一个新的 Stripe 帐户(在他以前的帐户被抓后)时,他可能会重复使用他以前的帐户中的一些信息和属性。
某些信息很容易伪造,例如您的姓名或出生日期。但是,其他属性更难:例如,获得一个新的银行账户需要付出很大的努力。
因此,Stripe 发现通过共享属性将账户链接在一起对于捕捉明显的欺诈企图非常有效。
 
从基于启发式模型切换到 ML 模型
为了将帐户链接在一起,Stripe 依赖于相似度分数。
他们获取两个帐户,然后根据帐户具有的共享属性的数量为它们分配相似度分数。
一些共享属性的权重比其他属性重。共享出生日期的两个 Stripe 账户的相似度分数应该低于共享银行账户的两个账户。
以前,Stripe 依赖于基于启发式的系统,其中权重是手动构建的(基于猜测和检查)。
Stripe 决定通过训练机器学习模型来处理这项任务来进行转换。
现在,随着时间的推移,他们可以随着时间的推移自动重新训练模型,因为他们可以获得更多数据并提高准确性,适应新的欺诈趋势,并学习特定对抗群体的特征。
 
构建 ML 模型
为了构建模型,Stripe 采用了监督学习方法。
Stripe 构建模型的方法是相似度学习,其目标是学习一个相似度函数,该函数可以衡量两个对象的相似程度。相似性学习广泛用于排名、推荐系统、面部/语音验证和欺诈检测。
根据风险承保团队之前的工作,他们已经拥有庞大的欺诈圈和欺诈账户集群数据集。
Stripe 将其清理到一个由账户对组成的数据集中,每对账户都有一个标签,表明两个账户是否属于同一个集群。
现在他们有了数据集,Stripe 必须生成模型可以用来比较这对账户的特征,创建一个 Stripe 帐户需要大量数据,因此 Stripe 拥有可以利用的大量功能集。
选择的功能示例包括帐户的电子邮件域、用于两个帐户的信用卡号重叠、文本相似性度量等。
 
使用梯度提升决策树
由于特征范围广泛,Stripe 决定使用梯度增强决策树 (GBDT)来表示它们的相似性模型。
Stripe 发现 GBDT 在易于训练、具有强大的预测能力以及尽管数据存在差异但仍保持稳健之间取得了适当的平衡。
GBDT 也易于微调并具有易于理解的特性。
Stripe 使用的 GBDT 的实现是XGBoost
Stripe 之所以选择 XGBoost 模型,是因为它们具有出色的性能,还因为 Stripe 已经拥有完善的基础设施来训练和支持它们。
Stripe 有一个名为 Railyard 的内部 API,它以可扩展和可维护的方式处理训练 ML 模型。
您可以在此处阅读有关 Railyard 及其架构的更多信息。
 
预测使用
之后,Stripe 开始使用他们的模型来预测欺诈活动。
由于此模型在成对的 Stripe 帐户上运行,因此不可能向其提供所有帐户对并计算所有帐户对的相似度分数(组合太多)。
相反,Stripe 使用一些启发式方法来识别可疑帐户并将候选者集修剪到合理的数量。
然后,他们使用他们的 ML 模型来生成账户之间的相似度分数。
之后,他们计算结果图上的连接组件,以获得可以分析、处理或手动检查的高保真帐户集群的最终输出。
如果一个集群包含大量已知的欺诈账户,那么风险分析师可能想要进一步调查该集群中的剩余账户。
您可以在此处阅读完整文章的更多详细信息。