写点什么

千人千面营销系统在携程金融支付的实践

  • 2019-09-17
  • 本文字数:3018 字

    阅读完需:约 10 分钟

千人千面营销系统在携程金融支付的实践

一、引言

携程金融核心产品为:拿去花、借去花、信用卡、理财。其中拿去花提供携程产品分期支付服务,借去花提供现金借款服务,信用卡提供携程联名卡、理财则给用户提供有竞争力的理财产品。除此之外还有闪游卡、二维码、程金币等小的业务线。


如何把这些创新性的金融产品,推荐给有兴趣的潜在用户,成为一个需要解决的难题。在此背景下,支付中心数据组开发了一套用户精准营销系统。

二、系统设计目标

1)不侵入业务系统,与业务系统解耦


业务方只要提供符合规范的 restful 接口,即可接入系统。接口分为两类:一些强业务关联的规则,由业务研发实现;另外一些分析相关的接口由数据组负责完成实现。


2)灵活的营销页面投放方法


可以灵活进行分群及投放。投放策略分为:共性策略,个性化策略。共性策略配置实时生效,产品运营可以根据业务需要及时调整相关策略,无需数据/研发参与;而较为复杂的个性化策略可以由数据组基于画像指标进行扩展与定制,免去了漫长的开发、测试、发布等阶段,提高了投放效率。


3)支持多种投放模式


基于优先级、随机、模型等,其中模型效果可以通过 Abtest 量化效果以及迭代优化。


4)报表监控/离线数据采集


报表监控包括:实时流量使用、实时点击、离线点展转化、业务接入 api 性能监控;离线数据采集主要是为了追踪策略效果及转化。


为了方便其他业务方接入,数据组定义了一套输入/输出标准,业务方提供的 restful 接口只需满足输入输出的定义,即可接入本系统,这样接口开发与数据组策略制定可以解耦,运营可以针对每种接口进行热插拔式投放。

2.1 整体架构


1)策略管理模块:数据组收集业务相关需求,沉淀相关的业务规则。目前核心功能是:借助分流策略提高流量利用率及使用模型评分提高开户转化率。


2)模型训练模块:根据不同业务线的特点,定义模型黑白样本,使用机器学习算法,对用户业务线的开通情况进行评分并进行标准化。


3)数据收集/分析模块:建立了完善的离线及实时监控,如实时流量使用、实时点击、离线流量/开通转化率数据;通过后端埋点,埋点日志落地至 hive 中,数据组基于日志分析各个步骤数据转化效果,进而优化策略。

2.2 交互时序

通过各接入业务方接口拦截是其营销页面展示的必要条件,为了提高接口的响应性能,采用了线程池对每种类型的弹窗分别遍历各自的规则,同时对于业务线接口返回超时时间进行限制,防止系统性能出现较大的真震荡。


三、核心功能

本系统关注两个方面:流量使用率和流量转化率,前者实现流量精细化运营,能够更加精细的控制每个产线所分配的流量;后者致力于提高流量转化,使流量能够最大化其价值,流量使用率主要通过分流实现,而流量转化率主要借助机器学习算法。

3.1 流量使用率-分流

分流的本质在于提高流量的利用率,在流量总量有限的情况下,如何根据一定的策略实现不同流量的分配,流量是通过百分比进行划分,所有产品线共享流量比例为 100%。当前支持的策略有:随机均匀、基于优先级、基于推荐算法实现。

3.1.1 随机均匀

均匀性:保证各业务线不仅能够在投放总量上保持均匀分配还要求在同一时点尽可能的均匀,不同时点的流量质量会有差异,此处可以借鉴各种随机化函数实现(random/Collections.shuffle())。


一致性:保证同一个用户多次进入都会显示相同的营销内容,常用的算法为 hash 取模,如果对于并发度要求高,可以使用 murmurhash3。

3.1.2 预测当天流量

当一个用户能够通过多个业务线策略拦截时,随机选择一个业务线的营销页面进行投放。针对任一用户 uid,各业务线接口返回值会有不同,且不同业务线的拦截策略也会有所不同,最终能够通过业务线拦截的业务线个数会不同,故无法保证完全的均匀性和一致性。


如果仅仅借助于均匀性和一致性会导致部分产线的流量分配不合理,因此需要对各个业务线流量的上限进行严格控制。此时需要预测当天流量才能借助于当天流量总量及所分配比例,确定流量预算,考虑到携程 app 流量周期性影响,可以借助于时间序列模型去预测。

3.2 开通转化率-模型

3.2.1 模型 Y 值定义

为了提高营销页面的转化率,我们借助机器学习算法,在选择模型的正负样本的时候,我们没有以是否点击作为模型的 target,而是以是否开通作为模型的 target,原因是我们通过离线数据分析发现,UED 重新设计页面,可能导致页面的点击率变动较大,当对于整体的开通转化率影响较小。

3.2.2 关于模型开发及部署

我们测试了多种业内算法,最终采用了 GBDT+LR,由于目标客户量大,而模型训练的特征也有近百个,且需要对每天的全量用户进行打分并推到生产环境,故直接使用 spark ML 在 hadoop 平台进行模型训练及部署。


模型效果如下:其中拿去花 KS 较高,是由于已激活的拿去花用户较多,能够拿到的特征相对比较全面。



3.2.3 评分的标准化

由于大部分产线都会单独进行模型评分,各自评分的度量需要映射到同一个基线上进行评分才合理,这个统一基准包括:开通转化率的测算,然而不同业务线的开通转化率差异也会很大,我们对评分进行分段,对不同分段的开通转化率进行测算,最终根据测算结果选择阈值,且利用最大最小值标准化不同产线的评分。

四、策略制定需要关注的问题及解决方案

4.1 流量预算少时模型阈值的选择

倘若某个业务线所分配的流量占比非常少时,是否可以大幅度提高其转化率?也就是尽量选择高质量的流量进行曝光,防止流量过早在相对较低质量时段中耗尽,此时如果该业务线上了模型,可以将模型分值调整到一个较大值,从而保证其转化率。

4.2 业务线共存

各产线营销页面投放需求差异较大,部分营销页面投放周期较短,或不以“开通”为目的时,可能就不需要为这种类型的业务线训练模型,而营销页面投放选择时会遇到:拥有模型业务线和不拥模型业务线共存问题,此时要合并这两种类型的营销页面,进行页面随机均匀选择。

4.3 新业务线的接入

新接入的业务线由于没有样本,需要事先分配部分流量,待样本积累一段时间后,才会进行模型评分。

4.4 模型效果量化-abtest

理论上一个新的用户端产品上线前都应该进行有效的 abtest,然后基于 T/Z 检验 abtest 产品效果,实际上 abtest 效果评估也需要根据业务进行调整。


如在一般的信用类场景中,使用 abtest 进行效果评估会很不合适,因为用户变坏的过程较为缓慢,且策略变更也较为频繁,而效果却难以短时间内衡量,具体到本系统,定义好目标值,如开通转化率,在保证 AB 样本接近 1:1 时,很容易可视化模型效果,无需 T/Z 检验。

4.5 如何构建近似 1:1 的 abtest 流量

Abtest 衡量转化率时,需要尽量保证 A 流量和 B 流量近似于 1:1,这需要对 A、B 样本进行埋点,然后线下分析,进而调整各业务线的模型分值,间接影响 AB 流量分配。


五、总结

本营销系统,基于携程用户信息及机器学习算法,灵活进行分群及推荐,解决了流量利用率和转化率难点,且能够通过 abtest 量化/迭代推荐算法效果,业务线接入简单,支持运营产品实时调整营销策略。


数据同学能够基于收集的完整后端/UBT 日志,跟踪分析营销系统每一步的转化情况,然后进行策略调整及优化投放。


作者介绍


房英明,携程支付中心数据负责人,目前负责支付离线数据仓库建设及 BI 业务需求。主要兴趣点为并行计算、数据处理及应用等领域。


本文转载自公众号携程技术中心(ID:ctriptech)


原文链接


https://mp.weixin.qq.com/s?__biz=MjM5MDI3MjA5MQ==&mid=2697268843&idx=2&sn=d06a334e47c160f1ce73af9b55ce3d81&chksm=8376f15fb401784985aed56df9621e53ca152369bd5b666235a8d5e7510b71b22723e99d5e6f&scene=27#wechat_redirect


2019-09-17 08:002609

评论

发布
暂无评论
发现更多内容

架构师训练营-第1周学习总结(1期)

阿甘

UML

哈哈,成为作者了

大海

Clickhouse在大数据分析平台-留存分析上的应用

腾讯云大数据

大数据

百度大脑6.0重磅升级 不断进阶中的中国AI底座实力尽显

脑极体

架构师训练营-第1周课后作业(1期)

阿甘

我写了一个TypeScript虚拟机。

渔子长

Java typescript 大前端 deno Node

架构师训练营第 0 期 期末大作业

无名氏

oeasy 教您玩转 linux 010215 随机谚语 fortune

o

金融企业敏捷转型大咖风采 | 中国出口信用保险公司的 DevOps 落地之道

Atlassian

项目管理 DevOps 敏捷 行业资讯 Atlassian

Java面试史上最全的JAVA专业术语面试100问 (前1-50)

Java架构师迁哥

甲方日常 15

句子

工作 随笔杂谈 日常

服务质量分析:腾讯会议&腾讯云Elasticsearch玩出了怎样的新操作?

腾讯云大数据

大数据

滴滴基于 Flink 的实时数仓建设实践

Apache Flink

flink

介绍

剑心

学习

如何让知识图谱告诉你“故障根因”

华为云开发者联盟

华为云 知识图谱 图谱

USDT跑分承兑系统开发,区块链支付平台搭建

Netty之旅三:Netty服务端启动源码分析,一梭子带走!

一枝花算不算浪漫

Netty

两年Java开发经验赶上金九招聘季涨到23K,这究竟是怎么做到的?

Java架构师迁哥

繁星计划将成为引领全球币值管理的带动计划!

InfoQ_967a83c6d0d7

@所有人 Flink Forward Asia 2020 向您发出议题征集邀请!

Apache Flink

flink

读书笔记之《普罗普:故事形态学》

AI代笔

应对高并发系统有没有通用的解决方案呢?

架构师修行之路

架构 高并发 异步

Week 13 学习总结

Jeremy

用Go-Guardian写一个Golang的可扩展的身份认证

朱亚光

微服务 身份认证 Go 语言

LeetCode题解:206. 反转链表,双指针,JavaScript,详细注释

Lee Chen

大前端 LeetCode

在Ubuntu 20.04 搭建 Django 开发环境 以及 快速构建一个简单的 Blog

Matrix Chan

Python django 后端 Ubuntu20.04

Apache Pulsar 在腾讯 Angel PowerFL 联邦学习平台上的实践

Apache Pulsar

Apache 学习 开源 Apache Pulsar

Week 13 命题作业

Jeremy

架构师训练营 - 大作业

张明森

面试常考算法题之 Top K 问题

小齐本齐

数据结构 算法

彻底理解JavaScript执行上下文

Walker

Java 大前端 this指针 函数执行

千人千面营销系统在携程金融支付的实践_文化 & 方法_房英明_InfoQ精选文章