Tinkoff.ru如何使用Zeppelin自动化分析

Tinkoff.ru在金融服务市场中开发许多服务。 我们的分析师,开发人员,技术人员和经理可以解决他们的日常任务。 我们每天都会提出想法,进行分析,开发并竭尽所能,以创造出市场上最好的产品。

我在内部开发部门担任后端程序员。 我们帮助启动新的业务线,使工作流程自动化,并尝试在可能的情况下节省大量资金(例如,拒绝购买某种昂贵软件的许可证)。 我们的工作流程非常标准:管理人员提出了业务功能,技术人员对其进行了形式化并设置了任务,分析师对数据进行了分析,开发人员已经解决了分配给他们的任务。 生活中的一切都更加复杂,但是您已经知道了。

我们的业务客户之一是客户忠诚度部门-Tinkoff Target。 在讨论分析自动化之前,我将解释我们的会员计划的工作方式。

Tinkoff.ru忠诚度计划或我们如何向人们分配现金返还


几乎所有现代银行都会发行现金返还:卢布,英里或鹦鹉(您可以在特定的东西上花费的点数)。

我们也不例外,我们对所有商品发出1%的标准现金返还,对3个选定类别(例如“运输”,“电影院”,“纪念品”等)发出5%的标准现金返还。 您不必提供很多此类现金返还(但我真的很想这样做),因此,我们也希望获得现金返还的银行合作伙伴提供特别优惠。 因此,作为忠诚度计划业务范围的一部分,我们试图寻找并说服各种公司在互惠互利的条件下向我们的客户发行现金返还。 这些公司是我们的合作伙伴。

我们该怎么做? 想象一下,市场上有一家有条件的公司Yabloko。 将Yabloko吸引到我们的现金返还计划的最好方法是帮助他出售产品或服务。 这里的任务是吸引合作伙伴的观众。 例如,从竞争对手那里购买的客户或不知道Yabloko存在的客户。 而且,Yabloko可以选择最适合其个人资料的客户,而他们真正想要Yabloko的客户,他们只是还不了解-这与人工智能和机器学习有关。

选择这样的目标受众的任务在于分析师。 我们有两个人,并且有很多合作伙伴-超过1000个。此外,分析师还有很多有趣的工作,而且随着合作伙伴数量的增长,选择合适的受众群体已成为常规。 这样的例程需要自动化,并且只需单击一下按钮即可(或者最好根本不用按钮)。 此外,执行此类任务的多阶段过程还会带来由人为因素引起的错误。 接下来,我将告诉您我们如何摆脱此类常规工作。

我们如何建立分析


在Tinkoff.ru,大多数分析师在日常工作中都使用Apache Zeppelin 。 我们长期以来一直在使用此工具,并正在积极开发(甚至致力于开源)。 所有员工都可以访问全球数据和报告存储库,即所有Tinkoff.ru分析资源,并可以使用方便的分析语言。

Zeppelin用Java编写,包括许多现代语言和技术的解释器,包括Python,Hive,Spark,Groovy,R和许多其他语言。 书面脚本存储在笔记本电脑中,该笔记本电脑由各段组成;在外部,工作环境的用户界面与Jupyter非常相似。 该应用程序的主屏幕如下:

图片

这里的每个业务线都有其自己的工作目录,并具有不同的读取和编辑权限。

对于我们(开发人员)来说,一个巨大的好处就是可以使用非常方便的交互式API 。 使用API​​,生活变得更加轻松。 通过带有此工具的API,您可以绕过Web UI进行任何所需的操作。 因此,产生了将分析人员的工作结果整合到我们的项目中的想法。

简要介绍我们的项目


我们的后端是用Java编写的,在Angular 5中是用Frontend编写的(由于项目还不很年轻,所以部分UI用Vaadin编写,我们逐渐摆脱了它)。 该项目的大部分内容是供管理人员使用的Web应用程序,用于与合作伙伴建立关系,提供新的特别报价,监视其KPI的执行情况等。 我们有一个合作伙伴的个人帐户,银行的任何合作伙伴都可以在该帐户中查看其推出的特别优惠(应计,激活等),下载和签署协议,帐户以及一般文档关系的统计信息。

图片

我们通过SOAP Web服务将数据发送到移动银行,并将Web门户发送到“ Bonuses”部分。 有一个用React写的登陆文件,任何人都可以提出参加忠诚度计划的请求。 我们已采用各种机制来计算现金返还和特别分期付款,并与各种银行服务集成。

与Apache Zeppelin集成


传统上,为了吸引新的合作伙伴,经理们给分析师写了一封信,带有一系列希望产生目标受众的合作伙伴的意愿。 分析人员在动物园和语言复制粘贴中使用了以前编写的脚本。

显然,有了正确的需求形式化,您就可以编写一个通用脚本,而我们已经做到了。 为了输入形式化数据,他们编写了一个方便的UI。 仅保留在我们的Web应用程序中使用Apache Zeppelin进行工作。 这种集成的工作方案如下:

图片

经理在与伙伴进行交流的过程中会在应用程序中创建一个任务,并在表单上填写参数以形成目标受众。 此类参数的示例如下:

  • 类别BCC和/或MCC代码,在该代码中,客户在一定时间段内以一定的平均检查金额在一定时间内进行交易或交易。
  • 客户在一定时间内运输或运输的竞争公司。

还有一个。

有很多这样的参数,它们都在UI上形式化。 输入初始参数后,管理器开始生成操作,并且算法开始其工作:

  1. 由于我们所有的脚本都写在一个笔记本中,并且我们不想更改它,因此我们将其克隆到一个单独的目录中。 Zeppelin响应我们的请求返回了克隆的ID,我们将通过该ID与新的笔记本电脑联系。 克隆工作脚本对于管理也很方便,因为我们总是可以查看针对特定任务执行的脚本并查找问题。
  2. Zeppelin API 0.8版本开始在创建新笔记本电脑之后,您需要为其添加CRUD访问权限以进行后续管理。
  3. 通常,在工作中的笔记本电脑的第一段中,声明变量并设置其初始默认值,必须将其替换。 在此阶段,我们将段落插入到便携式计算机中(带有变量和形式化数据的初始化),然后在发送之前形成该便携式计算机。
  4. 接下来,在请求POST方法的情况下,我们启动便携式计算机以执行。 或者更确切地说,我们一次运行一个段落,以便监视所有脚本的执行并在应用程序中显示目标受众的生成状态。
  5. 在操作结束时,经理会收到通知(以防他未监控进度状态)。 脚本的结果是生成带有受众的CSV文件,存储在共享目录中。 推出特价商品时,我们可以吸引多个受众,并在添加商品时将他们附加不同的类型。 对于不同类型的受众群体,我们可以灵活设置应计现金返还的条件和规模。

一点粗鲁的分析


根据粗略估计,目标受众集合的自动化导致释放了超过30%的分析师工作时间(不计算分析师和经理之间进行交流所花费的时间)。

从2018年6月到2019年1月,已完成的生成任务超过400个。根据沟通经理的要求并得到所需的结果,他们花费了0.5到4个小时,形成目标受众的平均时间约为2个小时,节省了800多个工时(超过100个工作日)。

总结


与Zeppelin集成所要实现的最重要的事情是在目标受众生成过程的所有阶段都将人为因素降至最低。 通常,在应计之后确定适合合作伙伴的听众形成方面的错误。 特价优惠推出后,连续向所有人提供现金返还,很难将所产生的财务成本降至最低,而且由于错误导致您必须付出高昂的代价。

另一个大优点是,责任转移到流程的主要来源,因为 人为因素的“瓶颈”现在处于经理最初形成数据的区域。 这意味着创建生成任务并填写初始参数的人员会对此进行更多的关注。

当前,我们继续开发集成并自动执行分析任务。 因此,使用Zeppelin编写的脚本的远程启动,从应用程序中我们生成了针对管理人员的各种类型的分析报告,这些报告先前是根据要求单独准备的。

Source: https://habr.com/ru/post/zh-CN441644/


All Articles