写点什么

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

  • 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:002724

评论

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

官方线索|1024和腾讯课堂一起摇霸符

搬砖人

1024我在现场

网络安全:SSRF+XXE漏洞挖掘笔记

网络安全学海

网络安全 信息安全 渗透测试 WEB安全 安全漏洞

微信朋友圈的高性能复杂度分析

Beyond Ryan

架构实战营

管理者如何授权

石云升

职场经验 10月月更

linux之curl使用技巧

入门小站

Linux

[ 职场 ] 发现问题容易

baiyutang

职场 10月月更

微信对外部搜索引擎开放:自媒体平台开放搜索引擎有哪些意义

石头IT视角

在线文字转图片工具

入门小站

工具

从零开始,基于焱融 SaaS 数据服务平台搭建私有 WordPress blog

焱融科技

云计算 技术 分布式 高性能 文件存储

云栖发布|阿里云消息队列 RocketMQ 5.0:消息、事件、流融合处理平台

阿里巴巴中间件

阿里云 RocketMQ 云原生 中间件 云栖大会

Leetcode 题目解析:96. 不同的二叉搜索树

程序员架构进阶

算法 LeetCode 10月月更

中文字节长度引起的数据丢失

看山

Netty 10月月更

dddd

askuy

Go语言的设计哲学

不负青春不负己🤘

Go 语言 语言设计

Python 编码规范

不负青春不负己🤘

Python Pythonic 编码规范

Docker Desktop 如何运行第一个 Docker 项目

HoneyMoose

模块一作业:微信业务架构图与学生管理系统毕设架构设计

dean

架构实战营

北鲲云超算平台能够为CAE行业发展提供哪些支持?

北鲲云

HMS的三年一诺,开放出璀璨星河

脑极体

ES索引mpping字段数据类型更改过程

李印

elasticsearch 经验分享

架构实战营-hw1

WWH

架构实战营

实作中的 std::is_detected 和 Detection Idioms (C++17)

hedzr

算法 c++17 Detection Idioms

如何呈现一款软件产品的介绍页面

boshi

创业 学习笔记

和12岁小同志搞创客开发:如何驱动LCD1602液晶显示屏?

不脱发的程序猿

少儿编程 智能硬件 创客开发 LCD1602液晶显示屏

聊聊开发日常的效率提升工具(全)

机器人主板需求配置参数有哪些呢?

双赞工控

HarmonyOS 3.0.0开发者预览版全新发布

科技汇

👊【Spring技术实战】分析探究RedisTemplate的序列化和反序列化+泛型机制

码界西柚

spring 序列化 RedisTemplate 10月月更

解决网卡“Device eth0 does not seem to be present, delaying initialization”

耳东@Erdong

Linux 10月月更

作业六:电商微服务系统设计

紫云

硝烟弥漫的安全战场,只等一位超级英雄登场

脑极体

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