Home 从0到1设计一个CPC分时自动投放系统(二):设计和算法
Post
Cancel

从0到1设计一个CPC分时自动投放系统(二):设计和算法

前言

上一篇文章我们简单介绍了CPC广告系统的基本情况。这一篇文章将为美团点评的CPC系统“推广通”设计一个简单的自动投放算法。

分析问题

在开始前,为了梳理清楚要做的事情,先思考:

WHO:哪些人在用推广通?

一般是线下实体商户,他们一般是餐饮、美容、休闲娱乐业态的商户们,他们在开店的同时,也在美团和大众点评上为自己的店面的曝光。在线上获取流量。

WHY:为什么要自动投放推广通,手动操作不好吗?

推广通是竞价排名系统,出价具有实时性。不同时段,不同广告位的价格不同。特别是在周末中午、晚上这样的饭点高峰时段,价格会高并且波动大。但是商户的出价却要手动操作。商户想稳定保持广告的位次,就得频繁调整出价,很麻烦也很费事(我好累)。另外,大多数商户每日的预算有限,必须适当出价,如果没有控制好预算的消耗速度,很容易到了下午就把钱花完了,晚上就没广告了很尴尬。而且一般晚上才有便宜又优质的流量。

推广通运营的焦虑:

情景1:假设今天要投放600元到推广通,中午12点的时候发现已消耗400块钱了。我掐指一算,如果再这么投放下去,到晚上不就是投个寂寞了么,所以我立马把出价降到了两块钱,保存实力,备战待敌。

情景2:同样是600块钱,我下午5点的时候一查看,发现才消耗了100元。你看看,着急的也不止是我,推广通自己都说我曝光不足了。于是为了多花钱,我赶紧提升出价,看到金钱一点一点花出去,心里痛并快乐着。

WHAT:要解决什么问题?

因此,我们想要设计一个简单的算法,能够根据当前的时段、广告位价格和剩下的预算,来自动出价。并且要在高峰和广告效果好的时段,出价高一些,低谷时段,出价低一些。目前大多数商户都是手动派人蹲点,费人费时,效果还不能保证。

HOW:怎么自动化地投放推广通?

首先,列举我们要参考的几个参数:

  • 广告位价格:推广通会给出几个广告位的参考价格。越靠前的广告位价格越高。这个价格由其他同行的出价决定。注意,参考价格会把商户的“质量度”计算在内,也就是,质量越好的商户用相对较低的价格就可以获得同位次广告位。如果你的商户质量越好,购买广告位会越划算1。另外,推广通的最低出价是2元。

  • 预算:每天投放的总金额会有上限,谁都不会无限花钱。一般来说,周末的预算会更高,平日的预算会更低,推广通中的高峰日预算上浮也反映了同样的情况。

  • 时段:如果考虑一天之内的情况,根据我以往不充分经验,时段和广告位价格高度相关,高峰时刻竞争激烈价格高,夜间价格比较低。一般可以观察到以下规律:

    • 周末、周五11:00开始,至晚上8点价格较高
    • 平日(周一至周四)11:00~13:00和16:00~18:30会出现两个高峰。

    高峰的出现因为商户所属的同行们都认为这几个时间段流量价值更高,转化率高。同样地,我们会希望把一天中更多的预算花在这些高峰时段,如此投放的广告会更有竞争力,并且可以获得一些优质流量。

梳理了输入参数以后,我们来看一下输出。

推广通同时会在两个平台推广告:美团和大众点评。因为同一个商户在这两个平台上的质量度不同,所以两个平台的广告位参考价会不同,甚至大部分时间差距很大。我们要根据以上的参数,为两个平台分别计算价格。

从这几个参数出发,导出一个推广通CPC的出价。从这个思路,我们基本可以设计一个自动化投放系统了。

设计算法

通过以上的分析,我们可以思考:是不是能够设计一个公式,来模拟人工出价呢?

我们可以先将一天分割成几个时间段,对每个时间段分别设定预算。例如,我们可以将11:00~13:00这个时间段,设定为30元,13:00~17:00时段设定为50元。

然后,在每个时间段内,将推广通已消耗的预算,和剩余时间做比较。如果出价过低消耗过慢,那么就适当提升出价,加强推广效果。

举个例子,在11:00~13:00时间段内,当前时间为12:00,时间已经过了一半,但是我发现预算才消耗了10元,那我我就会把预算适当提高;相反地,如果出价太高,预算消耗太快,那么就马上降低预算,保住剩余的钱放到后面去投放。

嗯,这是一个机械化的工作,这种工作一定能用机器来解决的,我们可是技术宅呀。

设想我们可以写一个轮询时间为5分钟的程序,每隔五分钟检查一次当前时间和剩余预算。检查时,计算当前时段内,已经投放的平均价格,再从平均价格出发,计算下一次出价。

先做几个设定:

  • 当前时段的的总时间时间(分钟),设为 $T$
  • 当前时段的总预算(元),设为 $B$
  • 当前时段的剩余时间(分钟),设为 $t$
  • 当前时段的剩余预算(元),设为 $b$
  • $i$ 时段内的平均出价,设为 $P_i$
  • $i$ 时段的时间,设为 $k_i$
  • 公式输出的目标:的当前可接受最高出价,设为 $P_{high}$

所以公式为:

\[P_{high} = \frac{t\cdot B \cdot \sum_{i=0}^{t-1}(P_i \cdot k_i)}{T\cdot b\cdot t} = \frac{B \cdot\sum_{i=0}^{t-1}(P_i\cdot k_i)}{T\cdot b}\]

其中累加量 $\frac{\sum_{i=0}^{t-1}(P_i \cdot k_i)}{t}$ 为当前时段内的已投放时间内出价均值。

简单来说,这个公式的作用就是把之前投放的价格做个均值,根据剩余时间和剩余预算的比值,来调整这次的出价。

举个例子说的更清楚一些。

假设我想在半个小时内投放50元。即T = 30,B = 50。程序的轮询时间为5分钟,再假设初始价格为2元,且第一次轮询5分钟时,出价已调整为2.5,第二次轮询10分钟时,出价已调整为3。此时程序正处在第三次轮询的时间点,此时 t = 15, 假设已消耗的预算为 b = 40。那么计算出的P₃ = (50 x (2 x 5+ 2.5 x 5 + 3 x 5) / ( 30 x 40 )) = 1.5625。那么在第三次轮询时,最高出价为1.5625。程序就可以根据P₃,自动调整推广通出价了。

边界条件

算法设计好之后,还要考虑几个边界条件

  • 冷启动情况:每个时段开始时,因为可参考的数据很少,所以累加量的值很小,会导致出价抖动严重。这里我们采用延迟启动来处理,冷启动10分钟以后有了数据之后再确定出价。
  • 中途预算消耗完:因为推广通的底价为2元,如果时段内给的预算很低,那么就算出底价,预算也会很快消耗完。这里我们约定,一旦遇到预算中途消耗完的情况,我们就先将推广通暂停投放。

结语

这篇文章里,我们分析了要解决的问题。并且设计了一个简单的公式来执行分时自动投放,最后我们考虑了各种各样的边界条件。下一篇文章中,我们会展示分时自动投放的效果,以及必要的一些改进。

参考资料

1. 推广通官方说明:一图看懂美团推广通

版权声明

知识共享许可协议

本作品采用知识共享署名 4.0 国际许可协议进行许可。

This post is licensed under CC BY 4.0 by the author.

从0到1设计一个CPC分时自动投放系统(一):问题和背景

从0到1设计一个CPC分时自动投放系统(三):效果和评估