虎牙直播用户增长中台算法与工程实践
分享嘉宾:郭楷扬 & 叶士铭 虎牙直播
编辑整理:罗傲雪 慧科
出品平台:DataFunTalk
导读: 用户增长一直是各类应用关注的热门议题,虎牙公司作为国内知名的直播平台,除了在直播游戏化技术、虚实融合等领域持续积累,也在用户增长方面投入了大量的实践,用外部信息流广告做有效投放进行平台的拉活、拉新。今天请到了虎牙直播用户增长的算法组负责人郭楷扬老师和架构负责人叶士铭老师,分享《虎牙直播用户增长中台算法与工程实践》,主要分为以下三部分:
- 背景介绍:用户增长和投放
- 用户增长算法实践
- 用户增长工程实践
01 背景介绍:用户增长和投放
首先和大家分享下用户增长和投放的背景介绍。
1. 用户增长全流程
首先简单介绍一下 用户增长的全流程链路,分别是用户获取、激活用户、提高留存和增加收入 。今天主要介绍用户获取中的广告拉新和提高留存中的广告拉活。
接下来是广告投放的流程:
- 首先,是投放前的目标人群圈定。譬如:拉活的目标人群就是最近N天沉默的人群。
- 随后,在广告平台进行投放并出价。
- 接着,用户对展示广告点击,进而进行APP的拉起或者下载激活。
- 最后,我们会对用户质量进行监测。譬如:次日留存率、观看率等,进行用户质量跟踪。
2. 广告投放业务背景
广告投放中的具体流程如图 ,首先在抖音、QQ空间、手机百度等外部渠道展示虎牙的广告素材。用户点击对应的广告,如果用户已经下载过虎牙app,那么则会跳转至虎牙APP的承接页面,否则跳转至下载页面。
以上就是用户增长的广告投放业务背景的介绍。
02 用户增长算法实践
算法实践按广告投放的几个主要节点分为四大部分:人群定向、素材优选、出价策略和用户承接策略。
3. 人群定向
首先是人群定向,也就是保证广告曝光给了我们的目标用户。这块在过往,我们迭代过三个不同的阶段。
第一个阶段:离线白名单。
- 做法:就是通过离线计算目标人群的白名单。按天传给广告平台进行投放。
- 效果:实现人群定向的基本诉求。
- 不足:由于离线延迟比较大,人群的更新不及时,进而导致用户误拉率比较高。
第二阶段:离线白名单+黑名单。
- 做法:上传非目标人群黑名单。
- 效果:对已经转化为非目标用户的群体进行处理,解决了部分误拉问题。
- 不足:如果目标用户安装了虎牙app,但在最近三天未打开虎牙,在投放当天,如果用户自主打开虎牙或者点击广告打开虎牙,即转化为非目标用户,当前离线策略仍旧无法解决。
第三阶段:RTA控制策略。
- 做法:在广告平台投放前,平台会实时发送RTA广告请求,其中包含了用户的设备信息,我们就可以依此判断回复是否投放,来实现实时屏蔽掉当天已打开APP用户。
- 效果:RTA策略在人群误拉和用户首启率上都有不同程度的优化,此外,结合用户差异化出价,客单价上也有百分之十五的成本下降。
在第一部分确保我们目标用户被准确投放到,第二部分主要解决如何确定目标用户,也就是uplift增益模型的工作了。
左上图是营销人群四象限:
- 营销敏感人群 :就是只有投放广告用户才会回到虎牙进行活跃,就是广告敏感人群,也就是我们投放的目标群体。
- 自然转化人群:就是无论我们是否对他投放广告,他都会自主活跃。成本考虑,我们就不投放此类群体。
- 无动于衷人群:就是无论是否投放广告,这类用户都难以促使回到虎牙活跃,这部分也是直接放弃。
- 反作用人群 :就是对广告是比较反感,不投放广告活跃,投放了广告,反而会因为反感去不会回到虎牙,也不做投放。
传统点击率模型是指看过广告后购买的概率,而uplift模型的核心是要去找出图中的营销敏感人群。最后我们实验了不同建模策略,并在广告拉活业务上进行了一个ABTest,选取营销敏感人群进行广告投放。最终在DAU和DAU转化率上都有明显提升。
第三部分在拉新广告中会用到的虚拟回调技术。
目前市场上拉新广告投放的都是OCPX广告原理,也就是通过回传广告平台的深度转化行为(譬如次日留存),来提升广告平台筛选有价值人群的能力。
假设我们拉新标准是用户的次日留存大于40%,且观看时长大于30分钟。 那么回传真实留存的传统方案,会存在以下三个问题 :
- 定向只考虑了次日留存,没有观看时长。
- 转化事件回传慢,留存由于天然的限制最早也要次日回传。
- 转化事件回传少,广告学习期通过率低。
因此我们探索性的提出了虚拟回调的方案来解决上述问题。
广告ECPM是每千次展示可以获得的广告收入。公式如图,也就是点击率、转化率和出价的乘积再乘1000。广告侧能直接干预的主要两部分,CPA(出价)和CVR(广告转化率)。
基于上面介绍,虚拟回调针对前面三个问题做了一一处理。
- 用户定向 :通过在真实留存中剔除时长不达标的用户来保证用户观看时长的要求。
- 转化回传少 :通过对观看时长较长的用户进行加量的回传。
- 转化事件回传慢 :通过对用户激活当日的行为,通过模型对其次日是否会留存进行预判,对大概率次日留存的用户在当日就进行提前回调。
这三种技术方案里面的核心思想其实是有两点:
- 一是通过回传不同的人群来影响广告平台的人群定向。
- 二是通过转化事件的回传来干预广告的转化率(CVR),进而影响广告的ECPM,提升广告竞争力。
最后对两种方案进行了对比,虚拟回调在时长优化上、转化回传速度和回传量都有明显的优势。
留存事件提前回调,是通过次日留存预测模型来实现的。该模型主要是利用户在激活后N小时内的行为特征来对用户次日是否留存进行预测,再提前回调给广告平台。
首先是模型目标的确认 。虽然我们模型追求的目标是时长较长而且次日留存的用户,但是我们是以次日留存用户为label去建模的。原因有两点:
- 一是模型的正负样本差距会过大,模型学习的难度大。
- 二是用户的次日留存率与观看时长相关性比较大,强化次日留存可以进而提升时长。
其次是时间窗口的选择 。一方面,特征时间窗口越大,特征用户特征越丰富,模型理论上越准确。另一方面,时间窗口越小,特征预测回传速度则更快。
面对这种平衡问题,我们通过激活后特征从1到6小时分别做训练,发现AUC 在3小时之后增长是非常缓慢的。所以选择了3小时作为用户特征时间窗。
最后看下我们这个项目的一个成果。我们通过构造三种不同的回调策略,形成了虚拟回调方案与传统的激活留存做了双出价的ABTest。发现不管是量级消耗还是用户质量都有非常明显的提升,此外作为完整的技术输出也应用到其他部门的业务上。
4. 素材优选
接下来,算法的第二部分是广告素材优选工作。广告素材方面,我们主要是有四大策略:热门内容,优质素材检索、低质素材下线,还有人工精选素材(详见上图)。
5. 出价策略
第三部分是广告出价策略工作,在广告投放过程中非常重要的环节就是广告出价。
之前的方案就是在各个广告渠道的投放中根据拉活目标价格统一出价。这种方式存在 两大弊端 :
- 一是用户质量是比较差的,统一出价导致优质客户占比较少。
- 二是成本不易控制,市场价格变动比较频繁,人工去维护上不同渠道百个账号的调价的工作量也是非常大的。
因此提出了智能出价方案来解决上述问题:
- 通过PID 算法计算基准出价,达到成本可控的目的。
- 通过用户分层策略对不同用户质量赋予不同的出价权重,来达到整体质量提升的目的。
由于我们是差异化出价来提升用户质量,那重点就是如何对用户质量进行有效划分了。
通过数据分析可知,用户在沉默前的活跃天数分布是对用户质量一种简单而有效划分,统计基本成线性关系。因此, 策略步骤大致如下 :
① 通过活跃天数对用户做大致划分分层;
② 通过各层的转化率来控制出价权重之间的差距;
③ 将每层的权重控制在-1到1之间,对质量低的用户进行降价,对质量高的提高,最终结合基准出价合成最终的差异化出价。
但由于分层相对粗粒度,存在不够精准的局限性,因此这里我们提出用户价值模型策略,来给用户做价值打分。而且,通过历史数据验证,发现用户价值得分越高,用户质量越好。
首先,是模型选型问题。我们测试了多种模型,包括逻辑回归、随机森林等,随后发现逻辑回归和随机森林都存在拟合能力不足的问题。尤其是我们这种沉默用户,他在历史的行为特征是非常稀疏的,非常容易过拟合。所以我们选用了 XGB加逻辑回归的模型融合策略 。
① 首先将原始特征进行了非线性的变化得到树的叶子节点。
② 再通过One-Hot编码将其构造成新的特征向量。
③ 最后将原始特征和新特征一起放入逻辑回归进行训练。
最终,智能出价策略在成本控制和用户质量上都取得了不错的效果。
6. 承接策略
最后一部分是 用户承接策略 ,就是如何使得用户点击广告后跳转至合适的落地页提升用户在虎牙内的观看、留存等行为。策略主要有以下几个方式:
- 用户兴趣承接 :根据用户历史观看、订阅等等行为来去计算用户承接主播的召回列表,进而通过不同行为特征计算出用户感兴趣主播排序,将用户点击承接至其最感兴趣的主播直播间。
- 多场景承接 :主要根据主播的开播状态进行跳转。将用户引导至正在开播的主播的热门视频流,来提升用户的体验。
- 上下文承接 :根据用户点击的广告素材进行呈现,保证场景一致性,实现所见即所得。譬如用户在抖音上看到的广告是王者荣耀张大仙的素材,那么点击广告跳转也是到张大仙的直播间或者张大仙的热门视频流中。
最后是算法部分的总结和展望,后续我们希望打造用户定向、智能出价,自动化投放的三种能力。
总的来说,2020年我们打通了外部广告投放的增长能力,在2021年通过内部平台的打造,提升了投放效率。那么在未来我们希望打造增长产品的服务化或者是体系化,能够更多地为虎牙内部的产品进行服务。
03 用户增长工程实践
工程部分,主要介绍三部分,是和我们投放的流程顺序相关的。
首先我们会把素材库里面的素材提交到外部的媒体来创建对应广告。当普通用户浏览那个媒体的时候,会请求到我们RTA模块过滤和出价。当广告得到展示之后,我们就收到媒体的这个点击。用户后续APP的行为会回传给媒体使得媒体根据归因结果优化投放。接下来我们按照以上的顺序进行介绍。
1. 素材自动化
首先介绍素材自动化和素材优选。素材库后台的目标是:打通设计师创作和效果反馈闭环,提高物料的质量。
当设计师完成物料制作,系统会将物料投放到各个媒体平台,系统会自动把投放后效果数据拉取下来,并根据规则对素材进行智能评级。设计师就可以根据以上反馈做物料的质量优化了。
接着再来看下 物料库的数量优化 ,这里列举流程中两个需要工程自动化的部分:
- 自动裁剪功能 :素材投放前,图片素材需要自动裁剪功能,来匹配不同的广告位。
- 自动广告配置和投放 :视频和图片在审核完成后也是通过规则库来自动进行广告配置,并通过API自动投放到多个平台多个账号上。
2. RTA流量筛选
接下来介绍 RTA流量过滤 ,这里对应算法侧的人群定向和出价。
因为RTA是对实时流量过滤,所以对接口响应要求很高,通常响应要求是跨机房在95%情况下控制在10毫秒内,用户在页面加载过程,无明显延迟感知。
另外,媒体只传递用户的设备号,我们则需要根据设备号查到用户标签来做过滤和出价。
由于需要在保障延时的前提下进行以上的查询,所以需要对存储进行本地化,即把用户标签载入到本地内存。其中主要有 两类数据 :
- 黑名单:单纯过滤使用,采用布隆过滤器存储,节省90%以上内存。
- 白名单:额外的策略和出价信息,要存储较多信息,使用FlattBuffers存储。
关于白名单存储,每个用户共占用128位。但设备号MD5已经占了128位,所以这边只取前64位做key。验证基本不发生碰撞。另外64位存储出价和用户标签的编码。
另外,基于生效速度考虑,我们采用增量和全量相结合的方案,增量更新实时设备号黑名单,全量更新离线白名单。
- 增量更新 :从Flink清洗后存放于Kafka,然后顺序插入到内存,存在最新的实时布隆过滤器分片里。分片按环形队列来存储,每个分片最高千分之一的假阳性。每个分片填满后顺序对下一个位置上的分片进行覆盖来实现淘汰。
- 全量更 新 :数据从Spark计算出来,根据Hash存到对应对象存储分片。然后每个RTA进程对对象存储轮询,获取最新的全量数据。
通过上述 存储本地本地化方案 ,既实现了节省机器资源、降低响应时间,也满足了用户标签的存储和实时更新的要求。
有了以上数据之后, RTA的策略投放主要通过动态算子来实现 。动态算子的好处是支持算法和优化师同时在后台进行灵活配置,方便日常调整来加快实验和迭代速度。
我们一般同时会有几套策略算子,如图所示展示了两个样例:
- 拉新策略算子
- 拉活策略算子
通过两套策略算子过滤后,对结果取并集,就产生了RTA服务的回复响应。
最后因为对接较多的平台,流量和机器资源也会影响广告投放成本,调整白名单算子和缓存算子,我们节省超过90%的资源。
3. 点击归因
点击归因对应算法侧的虚拟回调部分。
经过RTA过滤、竞价成功,媒体做广告曝光后,用户就会产生点击。媒体发点击监测过来。当用户进入我们APP并产生了我们感兴趣的事件,我们就用渠道号、Oaid等信息进行关联,关联成功后做时间归因回传给媒体,协助媒体侧投放模型的优化。
以上就是开发实践的几个要点。
分享嘉宾