工程的博客

通过丰富交易改善客户体验

2021年5月10日 工程的博客

分享这篇文章

在过去五年中,随着开放银行应用程序的普及、新银行(Neobanks)的主流采用以及最近科技巨头进入金融服务业,零售银行的格局发生了巨大变化。根据福布斯最近的一篇文章在美国,千禧一代目前占全球劳动力的75%,71%的人表示他们“宁愿去看牙医,也不愿听取银行的建议”。竞争已经从晚上9点到5点的实体网点转移到赢得精通数字技术的消费者,这些消费者越来越痴迷于简单、高效和透明的概念。新一代的人不再对从分行经理那里听到一般的金融建议感兴趣,而是希望通过舒适的移动银行应用程序,通过个性化的实时见解重新控制自己的财务。为了保持竞争力,银行必须提供吸引人的手机银行体验,超越传统银行,通过个性化的洞察、建议、设定财务目标和报告功能——所有这些都由先进的分析软件提供支持地理空间自然语言处理(NLP)。

考虑到银行手头拥有的海量数据,这些功能的意义尤其深远。根据2020年的研究《尼尔森报告》全球每天大约有10亿笔信用卡交易(仅美国就有1亿笔)。也就是说,每天都可以利用10亿个数据点来造福终端消费者,用更个性化的见解来奖励他们的忠诚度(以及他们对数据的使用)。另一方面,这需要获取、管理、处理、分类和背景化10亿个数据点,需要一个既支持数据又支持人工智能的分析环境,并促进工程师、科学家和业务分析师之间的合作。SQL不能改善客户体验。人工智能。

在这个新的解决方案加速器(在本博客的末尾报告了可公开访问的笔记本),我们将演示如何使用湖屋建筑使银行、开放银行聚合商和支付处理商能够解决零售银行的核心挑战:商户分类。通过使用笔记本电脑和行业最佳实践,我们为客户提供了丰富交易的上下文信息(品牌,类别)的能力,这些信息可以用于下游用例,如客户细分或欺诈预防。

了解银行卡交易

卡片交易的动态是复杂的。每个操作都涉及一个销售点终端、一个商户、一个支付处理网关、一个收单银行、一个卡处理网络、一个发卡银行和一个消费者账户。由于信用卡交易的授权和结算涉及许多实体,从商家转移到零售银行的上下文信息很复杂,有时会误导最终消费者,而且往往违反直觉,需要使用先进的分析技术来提取清晰的品牌和商家信息。首先,任何商家都需要对商家类别代码(MCC)达成一致,这是一个4位数的数字,用于根据其提供的商品或服务类型对企业进行分类(见列表)。MCC本身通常不足以理解任何业务的真实性质(例如销售不同商品的大型零售商),因为它往往太宽泛或太具体。

商户类别代码
商户类别代码(来源:https://instabill.com/merchant-category-code-mcc-basics/)

除了复杂的分类之外,即使给定相同的商家,销售终端的一个点与另一个点之间的MCC有时也是不同的。仅仅依靠MCC代码不足以带来卓越的客户体验,必须结合其他上下文,如交易叙述和商家描述,以充分了解所购商品的品牌、位置和性质。但这里有个难题。交易叙述和商家描述是由商家填写的自由格式文本,没有通用的指导方针或行业标准,因此需要数据科学方法来解决数据不一致问题。在这个解决方案加速器中,我们将演示如何使用文本分类技术,例如fasttext可以帮助组织更好地理解隐藏在任何交易叙述中的品牌,给定商家的参考数据集。交易描述“STARBUCKS LONDON 1233-242-43 2021”与公司“STARBUCKS”有多接近?

需要了解的一个重要方面是,我们有多少数据可以用来学习文本模式。当涉及到交易数据时,不同商家的可用数据存在很大差异是很常见的。这是非常正常的,这是由客户群的购物模式所驱动的。例如,可以预期,我们将更容易访问亚马逊的交易,而不是街角商店的交易,这仅仅是因为交易发生在这些各自的商家的频率。自然,事务数据将遵循一个幂律分布(如下所示),其中很大一部分数据来自少数商家。

我们的模糊字符串匹配方法

从模糊字符串匹配来处理这个问题的挑战是简单的,描述和商家字符串的大部分不匹配。任何字符串类型的距离都非常高,实际上,任何相似度都非常低。如果我们改变角度呢?有没有更好的方法来模拟这个问题?我们认为,上述问题最好通过文档(自由文本)分类而不是字符串相似性来建模。在这个解决方案加速器中,我们演示了fasttext如何帮助我们有效地解决描述到商家的翻译,并解锁高级分析用例。

最近流行的一种方法是将文本数据表示为数值向量,这就出现了两个突出的概念:word2vec和doc2vec (看博客).Fasttext自带内置逻辑,可以将文本转换为基于两种方法的矢量表示,cbow和skipgrams (看文档),并且根据数据的性质,一种表示方式会比另一种表现得更好。我们的重点不是剖析用于文本向量化的逻辑的内部结构,而是在面对可以将文本分类为数千个类别(商家)时,如何实际使用模型来解决文本分类问题。

卡片交易的推广方法

为了使模型的效益最大化,数据消毒和分层是关键!机器学习(ML)在更干净的数据下可以更好地扩展和执行。考虑到这一点,我们将确保我们的数据根据商家进行分层。我们希望确保我们可以为每个商家提供类似数量的数据,供模型学习。这将避免这种情况,即模型会偏向某些商家,只是因为购物者在他们那里消费的频率。为此,我们使用了下面这行代码:

result = data.sampleBy(自我.target_column sample_rates)

Spark sampleBy方法确保分层,该方法需要一个将发生分层的值的列,以及地层标签到样本大小映射的字典。在我们的解决方案中,我们已经确保任何拥有超过100行可用标记数据的商家都保存在训练语料库中。我们还确保了零类别(未被识别的商家)在10:1的比例中被过度代表,这是因为我们的模型无法从交易空间中学习到更高的文本复杂性。我们保持零级作为一个有效的分类选项,以避免假阳性的膨胀。另一种同样有效的方法是用类的阈值概率来校准每个类,在这个类的阈值概率上,我们不再信任模型生成的标签,并默认为“Unknown Merchant”标签。这是一个更复杂的过程,因此,我们选择了一个更简单的方法。你应该只在ML和AI中引入能够带来明显价值的复杂性。

分层训练数据

从清理的角度来看,我们希望确保我们的模型不会因为从无关紧要的数据中学习所花费的时间而受到限制。一个这样的例子是可能包含在交易叙述中的日期和金额。我们无法根据交易发生的日期提取商家级别的信息。如果我们再考虑到,当涉及到日期时,商家并不遵循相同的表示标准,我们立即得出结论,日期可以安全地从描述中删除,这一操作将帮助模型更有效地学习。BOB低频彩为此,我们的清洁策略是基于Kaggle博客.作为数据清理参考,我们展示了如何清理和标准化数据的完整逻辑图。这是一个逻辑管道,该解决方案的最终用户可以轻松地修改和/或扩展这些步骤中的任何一个的行为,并实现定制的体验。

数据卫生和清洁管道

在将数据转换成正确的表示形式后,我们利用了MLflow的强大功能,Hyperopt和Apache Spark™来训练具有不同参数的快速文本模型。MLflow使我们能够跟踪许多不同的模型运行并进行比较。MLflow的关键功能是其丰富的UI,这使得比较数百个不同的ML模型在许多参数和指标上运行成为可能:

使用MLflow建模性能可视化

有关如何参数化和优化快速文本模型的参考,请参阅文档。在我们的解决方案中,我们使用了train_unsupervised培训方法。考虑到我们拥有的商家数量(1000+),我们已经意识到我们不能基于一个度量值正确地比较模型。生成包含1000多个类的混淆矩阵可能不会带来性能解释的简单性。我们选择了每百分位精度的方法。我们根据中位数精度、最差的第25百分位和最差的第5百分位的表现比较了我们的模型。这让我们了解了模型的性能如何分布在商家空间中。

使用Hyperopt和Spark实现机器学习模型训练的自动化

作为我们解决方案的一部分,我们已经实现了fasttext模型与MLflow的集成,并且能够通过MLflow api加载模型,并通过预打包的Spark udfs在以下代码中应用最佳模型:

logged_model =f 'runs: /{run_id}/模型”Loaded_model = mlflow. pyfuncc .load_model(logged_model)Loaded_model_udf = mlflow. pyfuncc .spark_udf(Spark, model_uri=logged_model, result_type=“字符串”
              Spark_results = (validation_data.withColumn (“预测”loaded_model_udf (“clean_description”))

在应用解决方案时,这种级别的简单性是至关重要的。一旦对模型进行了训练和校准,就可以用几行代码重新记录历史事务数据。这几行代码前所未有地开启了客户数据分析。分析师最终可以专注于以流或批处理的方式交付复杂的高级数据分析用例,例如客户生命周期价值、定价、客户细分、客户保留和许多其他分析解决方案。

业绩,业绩,业绩!

所有这些努力背后的原因很简单:获得一个能够自动化事务充实任务的系统。对于一个在自动运行模式下值得信任的解决方案,每个商家的性能都必须达到很高的水平。我们已经训练了几百种不同的配置,并将这些模型与低绩效商家进行了比较。我们获得的第5个最低百分位数的准确率约为93%;我们的中位数准确率达到99%。这些结果使我们有信心在最低限度的人工监督下提出自动商户分类。

这些结果很好,但我想到了一个问题。我们是不是太合身了?只有当我们期望从模型中得到很多泛化时,过拟合才会出现问题,也就是说,当我们的训练数据只代表了现实中非常小的样本,而新到达的数据与训练数据相差很大时。在我们的例子中,我们有非常简短的文档,其中包含每个商家的语法,这些语法相当简单。另一方面,fasttext生成ngram和skipgram,在事务描述中,这种方法可以提取所有有用的知识。这两个考虑结合起来表明,即使我们过度拟合这些向量,它们本质上从知识表示中排除了一些标记,我们仍然会泛化。简单地说,在给定应用程序上下文的情况下,模型对于过拟合具有足够的鲁棒性。值得一提的是,用于模型评估的所有指标都是在400,000个事务集上计算的,并且该数据集与训练数据是分离的。

如果我们没有标记的数据集,这有用吗

这个问题很难用“是”或“不是”来回答。然而,作为我们实验的一部分,我们已经形成了一个观点。有了我们的框架,答案是肯定的。我们已经执行了几个ML模型训练活动,每个商家都有不同数量的标记行。我们利用MLflow、Hyperopt和Spark来训练具有不同参数的不同模型,并在不同的数据大小上训练具有不同参数的不同模型,并对它们进行交叉引用,并在一组公共指标上进行比较。

在不同数据量的并行模型训练中

这种方法使我们能够回答这样一个问题:我需要训练提议的模型并为我的历史交易数据评分的每个商家的最小标记行数是多少?答案是:低至50,是的,5 - 0 !

使用MLflow建模性能可视化(在#transactions中表示样本量)

由于每个商家只有50条记录,我们保持了99%的中位数准确性,而排名第五的最低百分位仅将性能降低了几个百分点,降至85%。另一方面,对于每个商家数据集的100条记录,获得的结果对于最低的第5百分位的准确率为91%。这只表明某些品牌的描述语法更复杂,可能需要更多的数据。最重要的是,在每个商家只有50行的边缘情况下,该系统以优异的中值性能和合理的性能运行。这使得商家分类的进入壁垒非常低。

丰富交易以推动高级参与度

由于消费者对个性化服务和用户体验的期望不断提高,零售银行业正处于转型之中,而银行和金融机构可以从其他已经从批发转向零售的行业学习大量的消费者参与策略。在媒体行业,像Netflix、亚马逊(Amazon)和谷歌这样的公司已经为新进入者和传统玩家在任何时候都能在所有渠道上获得无障碍、个性化的体验。游戏行业已经完全从“内容为王”转变为基于用户偏好和细分信息的专业化体验。建立个性化的体验,让消费者获得价值,建立信任,并确保你在一个消费者有无数供应商和选择的市场中仍然是一个选择平台。bob体育客户端下载

以客户为中心的模式奖励客户体验的参与

向媒体行业的先行者学习,专注于银行体验而非交易数据的零售银行公司不仅能够吸引年轻一代的心灵和思想,还将创造出人们喜欢并想要再次使用的移动银行体验。在这个以个人客户为中心的模型中,任何新的信用卡交易都将产生额外的数据点,这些数据点可以进一步利用,使最终消费者受益,推动更多的个性化,更多的客户参与,更多的交易等等,同时减少客户流失和不满。

用户体验
尽管这里讨论的商家分类技术并没有涉及个性化金融的全图,但我们相信本文概述的技术功能对于实现这一目标至关重要。为客户提供上下文信息的简单UI(如上图所示),而不是移动设备上简单的“SQL转储”,将是这种转变的催化剂。

在未来的解决方案加速器中,我们计划利用这一能力来推动进一步的个性化和可操作的洞察,例如客户细分、消费目标和行为消费模式(检测生活事件),随着终端消费者越来越多地参与,我们从他们那里了解更多,并确保这些新的洞察带来的增值使他们受益。
在这个加速器中,我们展示了零售银行需要大幅改变他们处理交易数据的方法,从数据仓库上的OLTP模式到数据湖上的OLAP方法,以及需要一个湖屋架构来在行业规模上应用ML。我们还解决了实施这个解决方案的入门障碍的非常重要的考虑因素,涉及到训练数据量。通过我们的方法,进入门槛从未如此之低(一个商家50笔交易)。

试试下面的笔记本在Databricks加速您的数字银行战略今天和联系我们了解更BOB低频彩多关于我们如何帮助具有类似用例的客户的信息。

带上笔记本

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