主要要点
作为世界上最大的加密货币交易所,我们拥有一个快速且不影响准确性的风险检测系统至关重要。
我们遇到的挑战是确保我们的模型始终使用最新信息,特别是在实时检测可疑帐户活动时。
为了实现更强的功能一致性和更高的生产速度,我们现在对数据做出合理的假设,并将批次和流处理管道结合起来。
了解我们的功能工程管道如何创建强大、一致的功能来检测币安平台上的欺诈性提款。
在我们的机器学习(ML) 管道中(您可以在上一篇文章中了解更多资讯),我们最近建立了一个自动化特征工程管道,将原始资料汇集到可重复使用的线上特征中,这些特征可以在所有风险相关模型之间共用。
在建立和测试此管道的过程中,我们的资料科学家遇到了一个有趣的特征一致性问题:我们如何创建随时间动态变化的准确线上特征集?
考虑这个现实世界的场景:加密货币交易所(在本例中为币安)正试图在资金离开平台之前检测到欺诈性提款。一种可能的解决方案是为模型添加一项功能,用于检测自用户上次特定操作(例如登入或绑定手机)以来经过的时间。它看起来像这样:
user_id|last_bind_google_time_diff_in_days|...
1|3.52|...
实施的挑战
计算和更新线上特征储存中的特征所需的密钥数量是不切实际的。使用串流管道(例如 Flink)是不可能的,因为它只能计算目前有记录进入 Kafka 的使用者。
作为妥协,我们可以使用批次管道并接受一些延迟。假设一个模型可以从线上特征储存中获取特征并在大约一小时内执行即时推理。同时,如果特征储存需要一小时才能完成计算和摄取数据,理论上批次管道将解决该问题。
不幸的是,有一个明显的问题:使用这样的批次管道非常耗时。当您是世界上最大的加密货币交易所,处理大约一亿用户并且写入的 TPS 限制时,这使得在一小时内完成是不可行的。
我们发现,最佳实践是对使用者做出假设,从而减少进入特征储存的资料量。
透过实际假设缓解问题
线上功能是即时取得的,并且不断变化,因为它们代表了环境的最新版本。对于活跃的币安用户来说,我们不能使用功能过时的模型。
我们的系统必须尽快标记任何可疑的提款。任何额外的延迟,即使是几分钟,都意味著恶意行为者有更多的时间来逃脱他们的罪行。
因此,为了提高效率,我们假设最近的登入风险相对较高:
我们发现(250 天 + 0.125[3/24 延迟] 天)产生的误差比(1 天 + 0.125[3/24 延迟] 天)相对较小。
大多数操作不会超过某个阈值;假设 365 天。为了节省时间和运算资源,我们忽略了一年多没有登入的用户。
我们的解决方案
我们使用 lambda 架构,这需要一个将批次和流处理管道结合起来的流程,以实现更强的功能一致性。
从概念上讲,该解决方案是什么样的?
批量管道:为大量用户群执行特征工程。
串流媒体管道:补救最近登入的批次管道延迟时间。
如果在批次摄取的延迟时间之间将记录摄取到线上特征储存会怎样?
即使在一小时批量摄取延迟期间摄取记录,我们的功能仍然保持强一致性。这是因为我们在币安使用的线上特征储存根据您在检索值时指定的 event_time 传回最新值。
加入我们的团队!
有兴趣使用机器学习来保护世界上最大的加密生态系统及其用户吗?在我们的职业页面上查看币安工程/人工智慧以了解职位空缺。
有关更多信息,请阅读以下有用的文章:
(部落格)使用 MLOps 建立即时端到端机器学习管道
(部落格)仔细看看我们的机器学习特征库
