工程的博客

利用地理空间聚类识别金融欺诈

2021年4月13日 工程的博客

分享这篇文章

请查看随附笔记本的解决方案加速器

对于大多数金融服务机构(FSI)来说,欺诈预防通常意味着一个由各种组件组成的复杂生态系统——传统的基于规则的控制和人工智能(AI)的混合,以及内部部署系统、专有框架和开源云技术的拼凑。bob下载地址结合严格的监管要求(如模型可解释性)、高治理框架、低延迟和高可用性(信用卡交易的响应时间低于秒级),这些系统的操作成本很高,难以维护,更难以适应客户不断变化的行为和欺诈者。类似于风险管理现代的欺诈预防策略必须以敏捷为核心,并将以数据为中心的协作运营模型与已建立的代码、数据和机器学习(ML)交付策略(如DataOps、DevOps和MLOps.在之前解决方案加速器,我们解决了将规则与AI结合在一起的问题编制框架由MLflow提供支持。

随着消费者越来越多地参与数字化,大型金融服务机构通常可以获得客户每笔购买的实时GPS坐标。美国每年处理约400亿笔信用卡交易,零售银行拥有大量数据,可以利用这些数据更好地了解选择使用gps银行应用程序的客户的交易行为。考虑到数据量和复杂性,通常需要访问大量的计算资源和尖端库来运行地理空间分析,而这些分析并不“很适合”传统的数据仓库和关系数据库范式。

地理空间聚类识别客户消费行为
地理空间聚类识别客户消费行为

在这个以地理空间分析为中心的解决方案中,我们展示了Databricks Lakehouse平台如何使组织更好地了解客户在这两方面的消费行为bob体育客户端下载它们是和如何他们银行。这不是一个放之四海而皆准的模型,而是真正个性化的AI。毕竟,识别异常模式只有在首先了解正常行为是什么情况下才能实现,而为数百万客户做到这一点是一项挑战,需要将数据和人工智能结合到一个平台上。bob体育客户端下载

地理空间聚类是欺诈预防策略的一部分
地理空间聚类是欺诈预防策略的一部分

作为这个现实解决方案的一部分,我们发布了一个新的开源地理空间库,bob下载地址GEOSCAN,以检测大规模的地理空间行为,随着时间的推移跟踪客户模式,并检测异常的卡交易。最后,我们演示了组织如何从分析环境到在线数据存储(ODS),通过严格的SLA要求,在类似lambda的基础设施的支持下,显示异常三角洲湖、Apache Spark和MLflow

卡片交易的地理空间集群

DBSCAN(基于密度的噪声应用程序空间聚类)是一种常用的ML技术,用于对紧密聚集在一起的点进行分组。与其他聚类方法相比,它不需要预先指出聚类的数量,可以检测不同形状和大小的聚类,并有效地发现不属于任何密集区域的异常值。这使得它成为对信用卡交易和潜在欺诈活动进行地理空间分析的绝佳候选。然而,它也有一个严重的代价:DBSCAN要求将所有点与其他点进行比较,以找到密集的社区,考虑到大型fsi的运营规模,这是一个重大限制。由于我们无法找到一个可行的解决方案,可以扩展到数百万客户或超过数十万条记录,我们创建了自己的解决方案bob下载地址开源AI库:GEOSCAN.通过Scala和Python api, GEOSCAN是我们实现的DBSCAN算法,用于大数据规模的地理空间聚类。

基于密度的聚类
基于密度的聚类

利用Uber的H3库只组我们知道是在附近的点(共享至少一个H3多边形),并依赖于GraphX API,这可以检测大规模的密集区域,了解用户的消费行为,并几乎实时地检测异常交易。

使用H . gescan逻辑将接近的点分组

为了验证我们的框架,我们创建了一个纽约地区信用卡交易的合成数据集。我们的数据集只包含用户的标记化值,即地理空间坐标(如纬度而且经度),一个时间戳还有一个事务.在现实生活中,同样也应该包含额外的交易上下文(如商家叙述或MCC代码),并且通常已经丰富了干净的品牌信息(后者将作为未来的一部分来处理Databricks解决方案加速器).在这个演示中,我们将提取与高交易活动区域(如商业街和购物中心)相对应的密集集群。

我们的GEOSCAN实现支持两种模式:分布式模式和伪分布式模式。

  1. 对于分布式,我们的框架从整个数据框架中检测集群(即横跨我们所有的用户群)。
  2. 对于伪分布式,它为分组谓词检索集群,因此并行地为数百万客户训练数百万个模型。这两种模式都有助于更好地了解客户的购物行为,从而制定个性化的欺诈预防策略。

检测密集购物区

GEOSCAN算法的核心是完全分布式的,它依靠GraphX来检测点距离(以米表示)和邻居> minPoints

geoscan进口Geoscan
              gescan = gescan () \.setLatitudeCol (“纬度”) \.setLongitudeCol (“经”) \.setPredictionCol (“集群”) \.setEpsilon (200) \.setMinPts (20.
              模型= geoscan.fit(points_df)Clusters_df = model.transform(points_df)

作为开放标准的强烈倡导者,我们构建了GEOSCAN来支持RFC7946(又名GeoJSON)作为模型输出,可以使用任何地理空间库(例如geopandas)、GIS数据库(geomesa)或可视化(叶形).如下所示,MLflow原生支持将GeoJSON用作模型工件。

MLFlow显示GeoJSON文件格式
MLflow显示GeoJSON文件格式

让我们浏览一个实际运行的gescan示例。通过这个解决方案,我们以编程方式提取了与纽约市(NYC)地区高密度卡交易相对应的地理形状。如上所示,我们的参数产生了一个相对较大的形状,覆盖了纽约市的大部分地区。尽管降低薄荷值或增加epsilon可能有助于改善这种形状,但它肯定会影响密度较低的地区,如布鲁克林的威廉斯堡。很大程度上是针对特定领域的,我们探索了不同的方法来调优我们的模型并在本文最后报告的笔记本中提高性能。

模型推断和聚类平铺

由于gescan逻辑的核心依赖于H3多边形的使用,因此很自然地就可以利用H3多边形进行模型推断,而不是引入额外的GIS依赖多边形查询中的昂贵点.我们的方法包括用H3六边形“平铺”我们的集群,这些六边形可以很容易地加入到我们的原始数据框架中,最好利用Delta Lake优化(例如ZORDER索引),并以简单SQL操作的形式提供复杂的地理空间查询。

用H3六边形平铺一个地理形状
用H3六边形平铺一个地理形状

个性化的集群

我们已经演示了如何在整个数据集上使用GEOSCAN。然而,其目的不是机器学习纽约市的形状,也不是找到最好的购物地点,而是跟踪用户随着时间的推移的消费行为,最重要的是,对给定的客户来说,在哪里交易最不可能发生,因此需要一种个性化的地理空间聚类方法。

geoscan进口GeoscanPersonalized
              geoscan = GeoscanPersonalized() \.setLatitudeCol (“纬度”) \.setLongitudeCol (“经”) \.setPredictionCol (“集群”) \.setGroupedCol (“用户”) \.setEpsilon (500) \.setMinPts (3.
              模型= geoscan.fit(points_df)Clusters_df = model.transform(points_df)

与我们的分布式方法类似,模型可以按照标准Spark ML API存储和检索。在这种模式中,我们返回一个由GeoJSON对象组成的数据框架,而不是一个单独的文件,每个持卡人都有一个捕获其消费地理模式的相关记录。

了解客户特定的模式

退后一步,反思到目前为止所获得的见解是很重要的。随着我们对整BOB低频彩个客户基础(分布式方法)的了解越来越多,我们可以利用这些信息来更好地理解特定于每个人的行为。如果每个人都在相同的位置购物,那么这样的区域对于特定的用户来说就不那么具体了。我们可以检测出“个性化”区域,即它们与公共区域的重叠程度,从而更好地了解我们的终端客户,并为真正的个性化银行业务铺平道路。

检测对每个用户最具描述性的区域类似于检测对自然语言处理用例中的每个句子更具有描述性的关键字。我们可以使用术语频率/逆文档频率(TF-IDF)方法来增加特定用户位置的权重,同时减少公共区域的权重。

特定客户的地理消费模式
特定客户的地理消费模式

我们突然对顾客的购物行为有了惊人的了解。尽管该用户的交易核心是在纽约的切尔西和金融区地区进行的,但似乎更能定义该用户的是他们在第五大道和威廉斯堡广场酒店周围的交易。给定特定的用户和位置,可以使用该框架更好地了解在一天的特定时间或一周的某一天,信用卡交易是否属于已知的购物模式。

使用个性化AI预防欺诈

在前一节中,我们展示了地理空间数据分析可以告诉我们许多关于客户行为和趋势的信息,因此是过度欺诈预防策略中异常检测模型的关键组成部分。在本节中,我们将演示如何使用这些见解实时检测可疑行为。通常情况下,由于数据敏感性(PII)、监管要求(PCI/DSS)和模型重要性(高sla和低延迟)的结合,欺诈检测系统在分析环境之外运行。出于这些原因,我们探索了多种策略来提供我们的见解,无论是作为一个使用MLflow的自包含框架,还是通过关系型或NoSQL在线数据存储(如Redis、MongoDB、Redshift或ElastiCache),尽管许多其他解决方案可能是可行的。

提取异常

由于我们已经将所有个性化ML模型存储为Delta表中的H3多边形并建立了索引,因此使用一个简单的JOIN操作就可以很容易地用它们的集群丰富每个事务。在下例中,我们可以在给定特定H3分辨率的情况下提取异常(不匹配给定用户的任何已知模式的事务)(参见决议表)嵌入到用户定义的函数中。

pyspark.sql进口功能作为F
              Anomalous_transactions = (火花.read.table (“geospatial.transactions”.withColumn (“h3”to_h3 (“纬度”“经”10)). join(瓷砖,“用户”“h3”),“left_outer”过滤器(F.expr ('cluster IS NULL'))

在50万个交易中,我们在不到5秒的时间内提取了81条记录。不一定是欺诈,甚至可能并不可疑,但这些交易不符合我们用户的“正常”行为,因此,应该将其标记为过度欺诈预防框架的一部分,并进一步与其他规则和模型相结合。在实际示例中,我们应该考虑时间和其他事务上下文。考虑到我们可以了解到的用户特征,发生在周日下午或周三上午的相同交易是否值得怀疑?

由于有数百万个事务和低延迟需求,实时加入这些大型数据集是不现实的。虽然我们可以在内存中加载所有集群(它们的H3瓷砖),但我们可能已经在一天的不同时间评估了多个模型,针对不同的细分市场,不同的事务指标(例如,针对不同的品牌类别或MCC代码),并导致一个复杂的系统,需要针对数百万个变量的有效查找策略。

布鲁姆过滤

来了布鲁姆过滤器,一种高效的概率数据结构,可以测试给定记录的存在性,而无需将整个记录集保存在内存中。尽管Bloom过滤器已经存在很长时间了,但遗憾的是,它的使用还没有普及到模糊的工程技术之外,例如数据库优化引擎和令人生畏的执行计划(Delta引擎在其他技术中利用了Bloom过滤器优化)。这项技术是现代数据科学工具箱中值得拥有的强大工具。

Bloom过滤器的概念是将一系列记录(在我们的例子中,卡片交易位置为H3多边形)转换为一系列哈希值,将它们的每个字节数组表示形式叠加为1和0向量。测试给定记录是否存在的结果是测试它的每个位是否设置为1。Bloom过滤器的内存效率在欺诈检测上下文中具有不可忽略的缺点。尽管Bloom过滤器提供了0的假阴性率,但有一个非零的假阳性率(我们错误地认为由于哈希碰撞已经看到的记录)可以由数组的长度和哈希函数的数量控制。

我们会用到pybloomfilterPython库来验证这种方法,针对每个给定用户的每个已知H3 tile训练Bloom过滤器。尽管我们的过滤器在逻辑上可能包含数百万条记录,但我们只需要在内存中物理地维护1个字节数组来支持概率搜索,为更高的执行速度牺牲1%的异常事务(我们的误报率)。

进口pybloomfilterdeftrain_bloom记录):num_records =len(记录)Cluster = pybloomfilter。BloomFilter (num_records0.01cluster.update(记录)返回集群记录=列表(瓷砖。过滤器(F.col (“用户”) == user).toPandas().h3)Bloom = train_bloom(记录)

可以以闪电般的速度启用测试特定卡交易位置是否存在。

异常=事务[事务]“h3”苹果(λx:bloom)]

在本博客中列出的笔记中,我们演示了数据科学家如何将业务逻辑嵌入MLflow实验,该实验可以进一步交付给批处理或流处理,或具有更高吞吐量要求的外部api(参见MLflow部署).

进口mlflowModel = mlflow. pyfuncc .load_model(模型:/花/生产的异常= model.predict(事务)异常=异常[异常]“异常”] ! =0

然而,这种方法对大型金融服务组织提出了一个重要的操作挑战,因为新的模型需要不断地重新培训和重新部署,以适应用户不断变化的行为。

让我们以一个正在度假的用户为例。尽管他们的第一次卡片交易可能会被退回为异常(不一定是可疑的),但随着越来越多的交易被观察到,这样的策略将需要适应和学习新的“正常”。人们将需要使用新的训练数据运行相同的过程,从而发布一个新版本的模型,由独立的专家团队审查,由治理实体批准,并最终更新到任何变更冻结之外的欺诈生产端点。由于Databricks平台的数据管理协作方法,技术上是可行的,而且使用Databricks更容易,但这种方法对许多人来说可能并不可行。bob体育客户端下载

在线数据存储

金融服务机构拥有与分析平台分离的在线数据存储是相当普遍的。bob体育客户端下载通常从Kafka、Event Hub (Azure)或Kinesis (AWS)等企业消息代理访问的传入卡交易的实时流与实时参考数据点进行比较。针对上述问题的另一种方法是使用在线数据存储(如MongoDB),将参考数据点作为常规业务流程不断“推送”到活动端点(因此不在ITSM更改窗口内)。任何传入的事务都将与一组不断更新的规则进行匹配,并可通过分秒查找查询进行访问。使用MongoDB连接器(作为一个例子),我们展示了组织如何保存我们的地理集群数据帧以进行实时服务,将高级分析的预测能力与传统基于规则的系统的低延迟和可解释性相结合。

进口com.mongodb.spark._
              瓷砖.withColumn (“createdAt”current_timestamp ()).write格式“mongo”.mode (“添加”.option (“数据库”“欺诈”.option (“收集”“瓷砖”.save ()

在上面的例子中,我们以固定的时间间隔将新的参考数据(卡片交易H3位置)添加到MongoDB集合(即一个表)中。在这种设置下,新的事务可以作为一个简单的请求与MongoDB上存储的引用历史数据进行比较。给定一个用户和一个交易位置(H3多边形),这个卡片交易是否发生在一个已知的用户模式中?

蒙古人使用欺诈Mongo > db.tiles.find({“用户”“安东尼”“瓦”“8 a2a1008916ffff”})

作为这个解决方案的一部分,我们想要利用MongoDB的另一个内置功能:活着的时间(TTL)。除了不必维护这个集合(记录在TTL过期后被清除)的操作好处之外,我们还可以为我们的模型引入一个时间维度,以应对用户不断变化的模式。以1周的生存时间(例如)和每天在Databricks上训练的新模型为例,我们可以随着时间的推移跟踪集群,同时随着观察到的新交易动态地调整我们的欺诈策略,有意地使我们的模型跟随用户不断变化的行为。

如何随着时间的推移跟踪客户交易行为的变化的例子

在上面的可视化中,我们展示了如何随着时间的推移跟踪客户事务行为的变化的示例(感谢我们在MongoDB上的实时TTL和/或Delta上的时间旅行功能),其中任何观察到的位置都保持活跃X天,其中可以实时检测到异常事务。

总结:以客户为中心的银行业务的地理空间分析

信用卡欺诈交易永远不会用一刀切的模型来解决,而是应该始终将来自不同控制的孤立指标作为过度欺诈预防策略的一部分。通常,这将高级建模技术(如神经网络)与基于规则的系统相结合,集成先进技术和遗留流程、基于云的基础设施和内部部署系统,并且必须遵守严格的监管要求和关键sla。虽然这个解决方案本身并不旨在识别欺诈交易,但我们通过发布一个新的开源库来证明,bob下载地址GEOSCAN地理空间分析如何以及时、具有成本效益(自我维护)和完全可解释的方式极大地有助于提取异常事件,因此在协调规则+人工智能策略中更有效地打击金融欺诈是一个很好的候选。

作为这项研究的一部分,我们还发现了金融服务业中同样重要的东西。我们展示了Lakehouse基础设施从传统银行向个性化银行的过渡能力,在这种过渡中,消费者不再根据人口统计数据(他们是谁)划分,而是根据他们的消费模式(他们如何银行)划分,为零售银行更加以客户为中心和包容性的未来铺平了道路。

开始

请查看解决方案加速器并在Databricks上尝试这些笔记本,以加速您的欺诈预防开发策略联系我们了解更BOB低频彩多关于我们如何帮助具有类似用例的客户的信息。

免费试用Databricks
看到所有工程的博客的帖子