广告出价--如何使用PID控制广告投放成本

文章来源:AlphaSue https://zhuanlan.zhihu.com/p/139244173

背景

任何一个广告投放体系在商业化的过程中必须考虑的两个因素就是,投放成本、投放量. 只有投放成本低于整个商业链条中可接受的成本,这个商业模式才能够成立,而投放量决定了这个模式能够有多大的规模。

成本控制是衡量广告投放能力最直观的指标。广告主、业务人员,在使用广告投放系统(例如dsp)时,与这个产品进行交互,设定成本,能够最直接感知到的就是实际投放成本,不失一般性的,我们这里讨论一种最简单的成本,cpc(cost per click). 在实际投放过程中,由于模型预估ctr不可能非常精准,甚至会有量级的差异,再加上二价的机制,都会导致 实际投放出的cpc和目标cpc严重不一致,导致成本不可控。而出价体系就是为了保证投放cpc符合预期。出价策略对于广告投放体系,就类似于GUI对于计算机的重要性,直接影响了用户体验.

PID算法是控制理论中,最简单,但也是应用最广泛的一种控制方法,如果你对PID算法不是很了解,强烈建议先看完这篇通俗易懂的介绍。

确定有穷自动机:PID控制算法原理(抛弃公式,从本质上真正理解PID控制)((https://zhuanlan.zhihu.com/p/39573490))

接下来就介绍下P、I、D在控制cpc时分别代表什么含义,以及大概的调参方法.

PID在控制cpc中的应用

不失一般性的,我直接给出一个最简单的出价公式,目标是控制cpc,同时最大化点击数,结算方式为ecpm. bid = (cpc + lambda) * ctr * 1000

其中cpc为设置的目标cpc,lambda为使用pid来调整的系数, 假设每隔1h来调整一次,如果实际cpc偏低,那么就增大lambda,这样出价就会增大,反之亦然. 显然,这里的K_p,K_I 为正.

关于P

K_p是比例系数,假设目标cpc 0.4, 实际cpc 0.2 误差是0.2,K_p 越大,反应幅度就会越大,新的lambda 就会增加很多,出价就会增加很多,但是K_p不能够过大,不然会导致超调,出价过高. 所以K_p代表了 根据当前误差反应的比例。

关于I

I的存在是为了解决稳态误差。

假如我cpc偏低,每小时我都在提高价格,但是市场价格(出价第二高的广告主出价)也在下降,所以,虽然每个小时我都在提价,但是由于市场价格在降价,导致我每次提价cpc都没有提上去. 像这种如果一直存在,我们称之为稳态误差. 积分的存在就是 通过过去差值的经验来调整出价,来消除这个稳态误差.

但是,实际投放过程中基本不会存在这样的稳态,因为竞价系统是动态的,只能说市场价格可能随着时间有些固定的变化,但是变化并不一定是稳定方向,所以 I值在实际使用中需要慎重,如果设置特别大,会导致上个小时已经不存在的误差,影响到当前小时,所以I即使要使用,最好设置的非常小.

关于D

D项被称为微分项,当两次调控间隔十分小,(error_t - error_t-1) / 1, 计算的就是斜率,如果间隔十分小,那么这个斜率就可以一定程度体现出下次error的走向,这也是为什么说 微分项代表未来。但是,如果两次间隔十分大、或者噪音非常多,微分项的作用就不大了。对于一个小时调控一次的PID调价,D项可以为0. 实际上, 很多PID控制器仅用PI就已经足够了.

总结

简单的说,P代表现在,I代表过去,D代表未来。在实际应用中还是需要考虑 具体参数大小,可以通过grid search, 根据响应时间、超调量、稳态误差指标,来综合选择PID值. 除此以外,面对一些紧急情况还是需要添加一些规则的,毕竟非常时期,采用非常手段.

PID调价同时也存在着一些缺陷,简单泛化能力强是优点也是缺点,只需要根据设定cpc和实际cpc的反馈就能够调节。但是,在某些固定场景下,cpc的波动会呈现固定的pattern,例如在某几个小时流量质量特别好,cpc会特别低,这就需要使用机器学习来记忆到哪些campaign在哪些时间点需要提高价格,使用强化学习出价在充分利用投放数据、建立MDP模型、序列化决策这些方面 就有了天然的优势. 如何搭建有效模拟环境、训练出有效的agent、使用RL出价便是另一个非常大的问题了.

那么整体来说,调价也只是出价体系的一小环节,除此之外还有出价公式的设计、预算分配等等问题. 而出价体系在整个广告投放系统也是其中一个环节,但起着至关重要的作用.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章