2

OPPO互联网技术官方账号的个人空间

 2 years ago
source link: https://my.oschina.net/u/4217949/blog/5132770
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

oCPX简介——广告界的“无人驾驶”技术 - OPPO互联网技术官方账号的个人空间 - OSCHINA - 中文开源技术交流社区

oCPX诞生历程

互联网广告最早出现的时候会让广告主按时间长度去买断一个展示位置的广告,或者按广告展现次数去投放广告。这种方式与传统电视广告投放方式比较类似。我们现在看到的一些网站的Banner和大部分App的开屏广告都属于这种广告投放方式,而这些广告主都是以品牌推广为目的进行广告投放的。 这类广告特点是个性化差,所有用户观看这个电视节目或者打开这个网页都会看到这个广告,所以很多男士在电视上会看到化妆品广告,女士会看到耐克的广告,而实际上大部分情况下他们对这个品牌商品是不感兴趣的,广告流量浪费会比较多。而投放品牌广告的广告主也不太在意这些流量浪费,不要求用户看完广告会马上购买商品,从更长期角度来看来增强大众对该品牌的认知。

一般能够投放品牌广告的都是大广告主,比较注重长期品牌效应。但是对于众多中小广告主而言,他们更希望一分投入有一分产出。在Google、百度等商业搜索引擎出现之后,按点击扣费的效果广告得到大规模推广应用,很长一段时间成为互联网广告的主要投放方式。

广告主投放广告之后,广告会出现在搜索结果页或者内容推荐页上面。广告展现本身是不收费用的,只有用户点击广告之后才会进行广告扣费。这样的广告对广告主来说广告效果会更加可控,一次广告扣费就会带来一个用户访问,而不是仅仅支付广告费用其他所有方面都没有保障。而且一般来说用户感兴趣才会点击广告链接,用户对广告内容会有一定相关性,一定程度提升广告转化和用户体验。 对广告平台放来说,可以把不同用户的曝光卖给不同广告主,比起把所有用户曝光都卖给同一个广告主来说收益更高了。另一方面也对平台技术提出了更高要求,平台需要准确预估用户对每个候选广告点击率(ctr),按照ctr*bid进行排序,不断优化ctr预估模型才能更合理地把用户和广告主配对,提升平台收益。

很长一段时间互联网广告都是以点击扣费(CPC)为主的广告投放方式,平台方更多的是一个导流的作用,把用户导给广告主,而用到广告主的页面或者App后怎么营销就是广告主自己的责任。这样对广告主来说,真正的转化成本其实也不是那么可控,点击广告链接后可能最终没有在广告主这里买东西。另一方面也导致部分广告主做一些标题党或者SEO的广告,让模型预估pCtr偏高,从而廉价获取用户。实际上破坏用户体验,也破坏了广告生态。

一个互联网广告的转化漏斗是很深的,以游戏App为例,整个广告转化流程简单包括请求、曝光、点击、下载、注册、付费6个阶段,我们一般在广告点击阶段就扣除广告费用了,而广告主实际上想要的是用户付费,更希望能够按一个付费用户多少钱来投放广告。

而现实当中,像房屋买卖租赁中间就是这样收费的,按房子成交金额扣除一定比例的平台佣金。这样无论中间带多少人来看房都是不收费的,只有成交了才收费。CPC导流方式在这个场景下就是:中介带人来看房(导流),如果有人愿意来看房即导流成功,每次能把人带来收取3~5元的导流费用,最后是否成交看房主自身的营销手段。相对来说房主会更倾向按成交佣金的方式。

我们把按转化扣费的方式称作CPA,而在互联网场景上运作CPA方式会有比较多问题。

  1. 转化行为都有延迟,转化行为发生时不一定能进行扣费。
  2. 准确转化数据在广告主手上,互联网场景无法像现实中介一样全程陪同。
  3. 需要对接很多中小广告主,他们技术水平不高,回传转化数据流程容易出问题。

基于上面3点考虑CPA方式在互联网比较难落地,提升广告后端转化率降低转化成本一直都是大家努力方向,期间有比较长时间是让广告主选择人群定向标签来进行投放,从而提升转化率,但实际落地也有一些不尽人意的地方。

近年来有Facebook、头条等头部公司推出oCPC的投放方式来保障后端转化成本。其模式还是在用户点击时进行广告扣费,但是这里扣费价格不是先前的一个固定价格,而是根据广告后端转化率计算出来的价格;bid=CPA*pCvr,这里CPA是用户转化出价,例如一个付费用户100元,pCvr是模型预估的点击到目标转化(付费)的概率。因为还是在点击时扣费,广告主在回传转化数据上面作弊的动机就没有了,整体风险是平台和客户共担,搞乱转化数据只会让模型效果变差,转化效果不可控。同时在原理层面上是可以做到成本可控的,可以满足广告主需求,而且从平台来看流量分配更合理收益更大,广告生态更好。只是对于平台实际工程实现来说会更加复杂,技术挑战更大,实际转化成本与CPA存在一定偏差。

oCPC之外,后面还有oCPM、oCPD等投放方式,其原理比较类似统称oCPX。

oCPX算法技术架构

首先需要建立实时转化数据回传归因模块,把广告主回传的转化数据分门别类的存储下来,并且正确归因(把转化数据和带来转化的点击关联起来)。数据是算法系统的基石,没有数据就没有后面整个算法系统,实时数据流程必须做到稳定可靠。

其次是我们的模型训练模块,这里会跟进广告点击和转化数据,对点击转化率进行建模,即建立模型预估条件概率P(转化=1|点击=1)。模型特征层面复用大部分ctr模型特征,增加cvr的统计类特征以及落地页特征来表达用户与转化行为之间的关系。模型会推送到线上服务用来预估每个候选广告的点击转化率pCvr。

为了保障广告成本可控以及纠正模型在广告维度上的预估偏差,我们还需要一个实时成本控制模块。它会实时统计每个广告当天实际成本和广告主预期成本情况,利用工业控制算法来调整每个广告的整体出价。如果某广告成本偏高,会降低该广告整体出价,让广告的转化实际成本和广告主预期成本趋于一致,反之亦然。

在线上排序服务(ranker)上面,我们需要对每个候选广告按照它的投放目标(可能是下载、激活、注册、付费……)来预估它的转化率pCvr,结合广告主转化出价CPA以及控制模块计算的广告出价控制系数k来计算广告这次的点击智能出价bid=pCvrCPAk。得到点击出价后,和其他CPC广告一起按照score=pCtr*bid的方式进行整体综合广告竞价。经过若干排序策略最终选择胜出广告下发到客户端进行广告展现。

整个数据和算法系统复杂的是比较高的,各个环节都可能出问题,一个debug和case分析模块是必不可少的。这里在ranker侧会上报一些debug数据进入我们的case分析模块,可以跟进实际观察到的和广告主反馈的问题进行跟踪和定位,及时对系统进行调整和后续优化。

CVR建模技术简介

Cvr预估模型是oCPX系统的核心,它的效果会很大程度影响最终平台收益和广告成本偏差情况。

在Cvr模型建模之前实际上已经有Ctr预估模型,只是一个是对点击转化建模,另一个是对曝光点击建模。而实际上Cvr建模还是有不少技术难度需要克服。

  1. 预估准确性要求更高 对于pCtr而言,技术预估结果有一定偏差,只要偏差对最终竞价的结果不影响就没问题;而pCvr直接影响广告的点击出价和成本情况,即使是偏差5%也会反应到广告主的转化成本上,对广告主来说有明显感知。pCvr需要预估更加准确。 对应预估偏差问题一般来说处理模型优化之外还需要进行pCvr校准,通过模型预估pCvr值与真实统计Cvr值进行对比,通过保序回归模型进行校准。

  2. 样本稀疏有偏问题更加严重 我们训练模型样本都是以用户点击后是否转化行为进行训练,这些样本都是最终竞价胜出并且被用户点击的情况,证明都用户与广告配对比较好的情况。而线上预估时是对所有候选广告进行预估。这样就好像我们要做一个预估全国人民收入预估的模型,而建模训练样本只使用深圳市样本一样,样本有偏问题比较严重。 样本有偏问题可以通过联合建模进行缓解和优化,主流有ESMM和MMoE两个模型可以选择,目前实际发现MMoE多转化类型联合建模对模型效果有一定提升作用。而ESMM效果不明显。

  3. 延迟转化 目前模型是增量训练方式进行更新的,深度转化行为延迟比较大,如果不做特殊处理容易一个点击行为先发生,作为负样本进入模型进行训练,过了几天用户付费了,再以正样本进入模型训练。一方面是训练不准确,另一方面对于新上线广告而言容易出现较大转化率低估的情况。这个延迟问题对于Ctr模型来说会更加大。

这里我们认为7天是转化行为回流最大窗口(能覆盖95%+的情况),首先会增量训练一个T-7的模型,因为这个时候转化数据已经回流完全,因此这个模型没有延迟转化问题。

然后每天会刷新最近7天的正负样本数据,并且根据每天转化回流比例来调整样本权重来打平正负样本比。接着我们会base T-7的模型,以最近7天的调权样本数据进行增量训练,得到T-0的模型,这样T-0模型在样本比例上打平了延迟转化问题。

成本控制策略简介

通过针对性的手段会让cvr模型预估更加准确,但是难免会出现预估有偏差的情况,尤其是转化数据比较稀疏,实际转化量容易出现较大波动。因此需要一个成本控制模块来为广告主成本达成提供保障。这里引入几个概念:

实际消耗:广告主当天扣费金额 广告主价值:按CPA计费情况下,当天应该扣费金额 消耗比=实际消耗/广告主价值,控制模块让消耗比趋近1.0,从而让实际消耗趋近广告主价值。 控制策略模块会计算广告维度出价系数k,bid=CPApCvrk,来调整广告维度的出价。

最开始我们采用比例控制方法,k=1.0/消耗比。思路比较朴素,如果实际消耗是广告主价值的2倍,那么每次以一半的之前价格出价就可以达成广告主预期成本。但是实际上调控过程也在影响消耗比,最终通过数学推导上面的情况只能让消耗比控制到1.414,无法最终让消耗比趋近1.0. 使用了比例控制整体成本情况有了一定提升,而且控制算法比较简单,控制鲁棒性比较好。

第二版控制策略我们采用了工业控制中广泛应用的PID控制算法。

其算法原理通过P项(比例)、I项(积分)、D项(差分)让控制误差趋近0,能够有效解决比例控制的问题。实际上线之后PID算法也是取得一定成本控制效果提升,但是鲁棒性比P控制稍差,需要较多的规则进行限制才能稳定运行。

作者简介 Taipeng 8年互联网算法工作经历,2016年加入OPPO负责信息流广告算法,2020年负责推荐/广告机器学习基础设施建设工作。

获取更多精彩内容:关注[OPPO互联网技术]公众号


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK