千人千面营销系统在携程金融支付的实践
The following article is from 携程技术 Author 房英明
作者简介
房英明,携程支付中心数据负责人,目前负责支付离线数据仓库建设及BI业务需求。主要兴趣点为并行计算、数据处理及应用等领域。
一、引言
携程金融核心产品为:拿去花、借去花、信用卡、理财。其中拿去花提供携程产品分期支付服务,借去花提供现金借款服务,信用卡提供携程联名卡、理财则给用户提供有竞争力的理财产品。除此之外还有闪游卡、二维码、程金币等小的业务线。
如何把这些创新性的金融产品,推荐给有兴趣的潜在用户,成为一个需要解决的难题。在此背景下,支付中心数据组开发了一套用户精准营销系统。
二、系统设计目标
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 评分的标准化
由于大部分产线都会单独进行模型评分,各自评分的度量需要映射到同一个基线上进行评分才合理,这个统一基准包括:开通转化率的测算,然而不同业务线的开通转化率差异也会很大,我们对评分进行分段,对不同分段的开通转化率进行测算,最终根据测算结果选择阈值,且利用最大最小值标准化不同产线的评分。
四、策略制定需要关注的问题及解决方案
倘若某个业务线所分配的流量占比非常少时,是否可以大幅度提高其转化率?也就是尽量选择高质量的流量进行曝光,防止流量过早在相对较低质量时段中耗尽,此时如果该业务线上了模型,可以将模型分值调整到一个较大值,从而保证其转化率。
各产线营销页面投放需求差异较大,部分营销页面投放周期较短,或不以“开通”为目的时,可能就不需要为这种类型的业务线训练模型,而营销页面投放选择时会遇到:拥有模型业务线和不拥模型业务线共存问题,此时要合并这两种类型的营销页面,进行页面随机均匀选择。
新接入的业务线由于没有样本,需要事先分配部分流量,待样本积累一段时间后,才会进行模型评分。
理论上一个新的用户端产品上线前都应该进行有效的abtest,然后基于T/Z检验abtest产品效果,实际上abtest效果评估也需要根据业务进行调整。
如在一般的信用类场景中,使用abtest进行效果评估会很不合适,因为用户变坏的过程较为缓慢,且策略变更也较为频繁,而效果却难以短时间内衡量,具体到本系统,定义好目标值,如开通转化率,在保证AB样本接近1:1时,很容易可视化模型效果,无需T/Z检验。
Abtest衡量转化率时,需要尽量保证A流量和B流量近似于1:1,这需要对A、B样本进行埋点,然后线下分析,进而调整各业务线的模型分值,间接影响AB流量分配。
五、总结
本营销系统,基于携程用户信息及机器学习算法,灵活进行分群及推荐,解决了流量利用率和转化率难点,且能够通过abtest量化/迭代推荐算法效果,业务线接入简单,支持运营产品实时调整营销策略。
数据同学能够基于收集的完整后端/UBT日志,跟踪分析营销系统每一步的转化情况,然后进行策略调整及优化投放。
【推荐阅读】