Fork me on GitHub

广告算法在阿里文娱用户增长中的实践

导读: 从 2019 年开始,优酷使用 DSP 在今日头条、阿里妈妈等平台投放视频广告,实现用户的稳定增长。我们将用户增长领域与广告竞价领域结合,借鉴推荐领域的实践,基于特有的业务背景,开发落地了一系列算法。 在成本及预算可控的条件下,最终实现了数百万 DAU 的引流能力。本文主要介绍外投广告算法在用户增长领域的设计及优化,解决存在约束的条件下,实现最大化 DAU 量的问题。

下面将围绕四点展开:

  • 优酷用户增长业务介绍
  • 广告排序算法及优化
  • 自动化报价算法
  • 总结及后续规划

1. 用户增长业务背景

在用户增长的过程中,首先需要把用户增长划为不同的用户态,不同的用户态存在不同价值。**新用户会变为低活用户、中活用户直至高活用户,在整体过程中,也会随时变成沉默用户。**对用户增长而言,新用户、低活用户和沉默用户是非常有价值的,他们的到访能有效提高 APP 的活跃度。

RTB 是实现用户增长的主要方式之一。 它的主要流程是:首先 DSP 参与广告竞价,在竞价成功之后,广告会展现在外部平台上,用户在点击之后会切换至优酷 APP 上,如果感兴趣的话会有视频消费和次日回访。整个流程分为两部分,前半部分归属于 RTB 竞价,后半部分属于用户增长。

用户增长的主要业务目标是在成本可控的条件下,最大化高价值的 DAU 量,即让更多的新用户、低活用户以及沉默用户来到平台进行消费,增加平台活跃度。

2. 广告竞价 RTB 概述

RTB 有两个比较重要的组件:广告主竞价代理 DSP 和提供竞价接入、判定竞价成功与否的平台 ADX ( 例如头条 ADX,阿里的 TanX )。

RTB 过程如下:当用户访问的 Web 页面或 APP 应用时,请求发送至 ADX,由 ADX 转发至多个 DSP,DSP 根据从用户需求平台 ( DMP ) 上取得的用户特征进行预估,在 100ms 之内将广告和出价返回至 ADX,之后 ADX 根据多个 DSP 返回的结果,根据一定的排序规则和计费规则,选择一个合适的广告投放给用户,之后又将用户是否点击这条广告的信息返回给成功获得了该次竞价的 DSP 代理。

RTB 中的主要关注点是成交机制和计费模式,其中成交机制包括:GFP ( 最高价格成交 ), GSP ( 第二价成交,通用的方式 ), VCG ( 通过效用计算成交价格,存在算法上,理解上的难度,用的较少 )。计费模式主要有 CPM,CPC,CPA 和 OCPX,其中 CPM 是由广告主承担预估风险,由 DSP 预估用户对广告主的价值,CPC 和 CPA 是由平台来预估用户对于各个 DSP 的价值,OCPX 是由平台自动调整出价,由平台预估价值,用户承担风险。

在我们的业务场景中,使用的是 GSP 成交机制,CPM 的计费模式。并且优酷业务场景有鲜明的特点:

  • 使用 CPM 计费,需要我们自身建模预估,但可利用站内数据;
  • 对于不同用户态的拉活,引流成本是不一样的,需要针对不同人群提供成本控制;
  • 作为只有一个用户的 DSP 代理,可以接入不同的 ADX 平台,需要针对多渠道多平台做模型融合。

虽然现有的 ADX 平台能够支持直接在上面投放广告,但是存在很多问题:不支持定向用户分层,不支持个性化,数据属于平台方,无法进行后续优化,接入平台过多也会增加消耗等等,因此我们自建 DSP,满足业务场景需求。

1. 算法流程

离线产生数百万的广告,第一步通过人工精选或者算法选择来保证广告池的动态进出,例如删除投放时间过长,点击率过低的广告,通过算法选择高质量的广告;第二步通过个性化多路召回适合用户的千百个广告;第三步将经过召回的广告通过规则过滤,例如会过滤重复广告,或者会根据曝光频率来控制;第四步将这些广告通过预估模型,选择价值最高的广告通过报价算法产生报价,最后将广告和报价结果返回至 ADX。

与推荐系统相比,流程借鉴了推荐系统的多路个性化召回,区别在于推荐系统关注 Rank 顺序,而广告还关注 CTR 偏差,推荐系统一般最后的组件是重排 ( ReRank ),而广告系统在预估之后需要进行报价计算。

2. 算法实现方案

我们面对的业务场景的主要特点是:

  • RT 限制比较严格,要在 100ms 内返回;
  • 存在多渠道多平台;
  • 接入量大,机器资源比较紧张。

常用的排序模型有 LR,GBDT,DNN ( DCN/WDL/MMOE ) 等,LR 需要大量的特征工程工作来提高模型精度,GBDT 的训练和预估都很快,能有效缓解 RT 问题,但是类别特征的处理上容易使模型过拟合,DNN 的 embedding 技术能够处理各种特征,但是由于需要存储包含每个特征对应的 embedding 的大矩阵,线上内存消耗很大,而且 DNN 类的模型虽然能达到很高的精度,但训练和预估都很耗资源并且打分时的 RT 很高。

在多渠道多平台统一模型方面,主要存在两个问题:

  • 不同渠道之间有差异。例如汽车相关广告,在母婴社区和汽车之家论坛点击率之间会有不同;
  • 渠道平台相关没有现成的特征。在实际中,我们以平台本身作为特征,通过根据历史数据构建不同平台的统计特征,使模型感知到渠道平台的差异,最后基于不同平台不同分层的 Match 特征,实现了由 LR 单渠道模型到 GBDT 统一模型的升级,带来了业务上的明显收益。

3. 遇到的问题和思考

推荐中常用召回都是 Item-based,通过用户观看的视频来寻找相似的视频,认为这些相似视频是用户喜欢的视频,这导致推荐系统有以下缺陷:

  • 用户观看的视频未必是用户喜欢;
  • 相似视频的相似之处未必是用户观看视频的真正原因;
  • 低频用户观看的视频非常少,推荐结果缺乏多样性。

从因果推断的角度思考上述问题的话,我们认为用户变沉默的原因是对之前推荐的内容不满意,而用户留存的原因是因为推荐的视频他比较喜欢,因此,我们利用无偏信息构建相似度量,构造低活用户到高活用户的匹配,找到他的反事实镜像人,然后进行相关推荐,在业务上也取得了很大收益。

1. 业务背景及问题的形式化定义

不同的场景下,广告投放的报价算法存在不同的约束,主要场景包括日常投放和冲量投放,本质上都是多渠道多分层的投放。对于日常投放而言,会存在预算约束,首活成本约束,用户价值约束 ( 需要去高活,要更多的高质量沉默用户 );当运营有冲量需求时为冲量投放,这时预算充足,有首活成本约束,用户价值约束。

2. 单 PID 解决冲量投放

根据冲量投放的条件:预算充足、有首活成本约束、用户价值约束,可以解出报价公式,即报价为预估的 CTR/CVR 与报价系数 alpha 之积。我们通过单控制器的方法来控制报价系数 alpha,使其再能够满足成本约束的同时提升转化率。

控制器根据 Feedback 数据和控制函数计算公式,可以计算出一个信号,再将其传入执行器中通过执行器函数计算,从而给出报价。常见的控制器有 PID 和水波控制器,PID 通过振幅,累积误差和波动来调节,而水波控制器仅仅通过累计误差来进行调节,能力相对弱一些。执行器是将控制信号进行指数变换,对初始值进行放大或者缩小,实现最后的出价。

3. 日常投放解决方案

对于日常投放而言,会存在预算约束,首活成本约束,用户价值约束 ( 需要去高活,要更多的高质量沉默用户 ),我们采用多目标约束下的最大化问题来建模,用拉格朗日对偶法解决,能解出一个出价公式 ( 可参考 KDD2018 对应论文 )。计算所得的出价公式中有两个参数 p、q,我们通过两个 PID 对这两个参数进行控制来实现报价。不同于单 PID 的解决方案,一是在 q 控制器中增加了修正信号,使其以最终 CPC 为控制目标,二是利用线性插值的方法建模两个 PID 之间的耦合影响 ( 具体方法可以参考 KDD2018 )。

4. 报价工程化

用户的请求通过 DSP 接入管理后台,请求在进入系统之后,有以下流程:

  • 接入后台产生竞价、曝光、点击等日志,通过 Blink 解析统计得到误差数据,将误差数据实施写入内存数据库,并保存历史误差数据;
  • 报价算法核心 ( 为了保证最大化利用流量,M 分钟定时调度一次,一次即为一个时间步 ) 通过离线平台得到投放计划,成本、预算、算法参数等,然后从内存数据库中读取误差数据,计算当前报价参数并写入内存数据库;
  • 数据在 TPP 平台进行广告召回,点击率预估等,最后读取内存数据库中的报价参数并返回广告和出价。

整个实践过程中,在技术选型方面,除了理论上的支持,我们必须考虑机器资源,人力等方面的约束,并考虑到各种可用资源 ( 公司内部,开源等 ),将整个目标进行体系化,分层拆分优化,通过算法 AB 系统驱动效率提升;针对业务特点建模,具体问题具体分析,技术为业务服务。

后续,我们可以在实现 CTR 预估的基础上,实现用户价值的预估,实现多目标预估;在报价算法上,可以尝试基于强化学习进行报价;业务上,可以由促活扩展至拉新,热剧宣发,会员等方面,这些都可以依托已建立的预估系统和报价技术框架进行发展。

今天的分享就到这里,谢谢大家。


本文地址:https://www.6aiq.com/article/1583896723479
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出