力美大事记

联系公关团队

mail:pr@limei.com

狮猿汇:RTB动态出价策略的设计与实践


在上一篇《浅析RTB的竞价策略》(戳我回顾)竞价的两个核心问题:竞价该考虑哪些因素以及如何设计竞价策略。前者主要涉及到预算、库存、流量质量、市场竞争等因素,后者主要在于为了达成既定的投放目标,要考虑哪些因素并舍弃哪些因素。本文将继续上文的内容,具体谈谈如何设计并实现一个竞价策略:动态出价

CPM动态出价以较为经济的方式获取较多的曝光,或者简单的讲就是要降低ecpm,主要实现方式是基于成交价格预估模型,在模型的基础上用实时竞价成功率进行反馈调节。这个出价策略和固定出价策略相对应,适用于侧重曝光的项目,但是CPM动态出价则更为经济和灵活,能根据竞价成功率自动调整出价。如下表所示,CPM动态出价主要考虑了供需和市场竞争,假设供大于需,就有空间有动力进行动态出价以降低ecpm。

这个策略的目标、假设已经相对清楚,接下来的问题就是如何设计这个出价函数?这个出价函数既要能反应流量的预期成交价,又要能够反应当前市场竞争情况。前者可以使用模型预测一个基本的成交价,后者可以使用竞价成功率来反映市场的竞争情况,在价格一定的情况,市场竞争状况和竞价成功率呈现负相关。所以我们的出价公式就逐渐清晰:

bid+ k/r

bid是模型预测的成交价,后面的这一项根据竞价成功率来调节最终的出价,当r较低,代表市场竞争激烈,出价就会在预测的成交价基础上更高一点,反之就会更低一点。在这个公式中,bid可以用机器学习算法训练模型并预测,而r则可以采取近段时间的竞价成功率来近似,也可以使用机器学习进行预测,剩下的k值用来权衡两者的关系,较大的k值会使出价随着竞价成功率产生很大的波动,k值可以由人工调节,也可以通过实验进行选择。

以上是动态出价策略的大体设计,接下来与大家分享力美的实践,具体分为三个阶段:数据清洗、特征选取、模型选择等。

首先需要说明,这三个阶段的前提——数据源,即竞价日志(response)和展示日志(impression),竞价日志中包含了媒体、设备、尺寸、创意、预估的点击率、底价以及出价的信息,竞价成功的,则会有展示日志,两份日志匹配后,就形成了训练两个模型的原始数据。

数据清洗。首先对日志中的每个字段做描述性统计分析,重点看是否有异常值,对有异常值的,要查清楚这个异常值的产生机理,之后再确定处理手段。如果是投放过程中bug产生的,则要尽快修复,如果占比极小则可以考虑删除,因为异常值对以预测值和真实平方差的损失函数来说,影响巨大,会严重放大误差。正因如此,删除那些成交价过高的样本对保持模型的精准有着重要意义。对于在某些变量上没有取到值的记录,如果该变量是离散的,则直接归为新的一类,如果是数值,则要根据具体的实际意义进行判断,或取均值或置为0。

特征抽取。在数据中有两类变量,一类是数值型,另外一类是离散型。前者很容易处理,做一些数值运算取多项式或者应用Box-Cox转换,在此基础上进行各种数值运算;另外一种是离散型变量,一般会用到one-hot编码,其优点是信息不损失,缺点是特征向量会增大很多。同时,离散型变量的值可能在未来增多,甚至发生不少变化,就必须修改模型。考虑到此,采取折衷方式,那些较为固定的变量直接采用one-hot编码,而那些容易变化的,取值的可能性更多采取dense编码。除了编码之外,还可以对特征进一步的处理,组合特征、乘法转换、除法转换等。

模型训练。模型和特征并不是分离的,在特征抽取的过程中已经开始训练模型。在模型训练中,先使用xgboost训练并调参,将其测试误差作为一个baseline,然后使用简单的线性模型进行训练,通过特征工程以及调参,最终使线性模型的效果接近或等同于xgboost的结果。 需要说明,选择线性模型主要是在保证模型性能的基础上降低模型的工程难度及维护成本。实验发现,及时更新模型会让线上测试误差大幅度降低。

上图简述了整个系统运行的流程图,线下训练模型会得到字典和模型的文件,线上的流量(request)过来后会按照规则进行特征抽取,并结合模型文件最终生成出价。

经较长时间的实战投放,力美科技动态出价模型在不同流量来源及复杂竞争环境下表现出色,符合设计预期,ecpm降低40%-80%,ecpc降低20%-70%。

欢迎各位工程狮、程序猿留言交流。