程序化购买专题广告需求方平台DSP竞价流程
Aug 21, 2017 17:21 · 1949 words · 4 minute read
概要
作为 DSP 角色,当接受到由广告交易平台(ADX)发送来的竞价请求时,通常会根据一些业务需求、广告主要求、用户特征等,对请求进行过滤,从而决策竞价与否。如果决定参与竞价,则会对请求特征连同自己的广告数据库、用户数据库等进行一系列的计算匹配,同时根据广告(Ads)、竞选(Campaign)、广告位(Placement)等的时长、已展示量等特征计算出竞价。以此逐步筛选,最终选出最优的广告以及竞选价格返回给广告交易平台。整个流程根据业界标准,SLA 通常需要在 200ms 内完成,同时考虑到网络通信的损耗,真正数据在 DSP 内部的用时不能超过 100ms。因为极高的 SLA 要求,所以对系统布局和算法提出了挑战。
具体流程
- 接收竞价请求(Bid Request) 我们以 OpenRTB v2.4 的竞价请求为例,如下图。
{
"id": "DxU0032U8a",
"at": 2,
"allimps": 0,
"imp": [
{
"id": "1",
"banner": {
"w": 320,
"h": 50,
"format": [
{
"w": 320,
"h": 50
}
],
"btype": [
1,
3
],
"battr": [
1,
3,
5,
6,
8,
9,
10,
11
],
"pos": 3,
"mimes": [
"image/jpeg",
"image/png",
"image/gif"
],
"api": []
},
"ext": {
"strictbannersize": 0
},
"instl": 0,
"displaymanager": "SOMA",
"tagid": "101000415",
"secure": 0
}
],
"device": {
"geo": {
"lat": 53.550003,
"lon": 10,
"ipservice": 3,
"country": "DEU",
"region": "04",
"zip": "20099",
"metro": "0",
"city": "Hamburg",
"type": 2
},
"make": "Apple",
"model": "iPhone",
"os": "iOS",
"osv": "4.3.2",
"ua": "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5",
"ip": "95.90.255.47",
"js": 0,
"connectiontype": 0,
"ifa": "e4273e31-97a9-4b29-93a8-8a99f0cea068",
"devicetype": 1
},
"app": {
"id": "101000415",
"name": "OpenRTB_2_4_UATest_openRtb_2_4_iOS_XXLARGE_320x50_IAB1",
"domain": "example.com",
"cat": [
"IAB1"
],
"storeurl": "http://example.com",
"keywords": "",
"publisher": {
"id": "1001028764",
"name": "OpenRTB_2_4_UATest_openRtb_2_4_iOS_XXLARGE_320x50_IAB1"
}
},
"user": {
"keywords": ""
},
"bcat": [
"IAB17-18",
"IAB7-42",
"IAB23",
"IAB7-28",
"IAB26",
"IAB25",
"IAB9-9",
"IAB24"
],
"badv": [],
"ext": {
"udi": {
},
"operaminibrowser": 0,
"carriername": "unknown - probably WLAN"
},
"regs": {
"coppa": 0
}
}
这个竞价请求来自于一个 iOS App,当我们深入这个请求结构可以发现,这是一个横幅广告(Banner Ad),宽度 320px,高度 50px,来自一台 iOS 设备,操作系统是 4.3.2,地理坐标为经度 53.550003,纬度 10,邮政编码是20099,城市为Hamburg,用户的 IP 地址,以及这个 App 的信息例如名字、编号、域名、App Store 的地址、发行商等,同时竞价请求也包含了这个广告需要满足的类别,比如年龄的要求等。
- 过滤(Filter)竞价请求 再接收到竞价请求后,DSP 是否参与这次竞价一般会基于几个方面的考虑:
1) 该请求是否在黑名单内? 当作弊检测(Fraud Detection)发现,该请求属于有害请求或者无效请求,则需要选择性的过滤掉该竞价请求。作弊检测通常基于 IP 地址、用户设备 ID、地理位置以及 App 本身属性等特征进行判断。
2) 是否参与该 ADX 的竞价? 此选项往往基于业务的考虑,例如某些 ADX 平台的流量质量不佳或者利润抽成过高,都可能导致不参与竞价。
3) 服务器集群是否过载? 当遇到例如双 11或者感恩节时候,广告的竞价请求往往会出现持续的洪峰,如果不进行限流可能引起集群服务雪崩,从而影响正常业务。
过滤竞价请求能够防止类似于机器人点击等作弊性质的刷量行为,有效保护了广告主的利益。同时遇到流量洪峰时,起到削峰整流的作用,保护正常业务的运转。
预处理 首先声明,并不是所有 DSP 都必须做预处理。或者说,预处理的内容完全取决于每家 DSP 的自身需求。在预处理阶段,DSP 可以对请求 App 或者网页的内容进行预爬取,然后提取一些 NLP 特征处理,或者有预先缓存好的网页特征,则可以直接提取插入到请求特征中。或者某些 DSP 拥有较大的用户数据库,则会对请求用户提取出预先计算好的用户特征段(Segments)出来以便后续计算。预处理主要目的是为了更好地定位受众(Audience Targeting)。
筛选广告 程序化购买的优势之一就在于精准投放。而体现了这一优势的地方就在于如何筛选广告。最基本的可以直接根据用户浏览的网页内容进行广告推荐,例如用户浏览汽车网站,则可以推荐汽车的品牌广告。如果做得精度更高,则可以对用户进行画像(Demographic),对用户一系列的历史行为进行分析,例如最近一段时间去过哪些地方、购买过什么商品、浏览了什么网页,对用户的行为、喜好有清晰的刻画。
以精准投放为目的,训练出一系列的算法模型,对于每个用户,可以在众多的广告库中筛选出用户最有可能感兴趣的一个,从而达到将广告推荐给有效用户的目的,进而提高点击率(CTR)和转化率(ROI)。无论是最基本的图片广告,还是最新的动态创意优化(DCP),都是以此为基础发展的。
定价 实时竞价通常采用次价密封投标拍卖(Second-price sealed-bid auction),所以如何既能中标又能以最低价格中标,成为定价阶段的主要目标,这些主要以博弈论为理论基础,我们就在此不赘述。除此之外,如何在竞选时间内平稳均匀地将广告展示(Impression)出去,而不是在竞选初期消耗掉大量展示量造成后期展示量不足,也是定价的次要目标,而业界通常以 Pacing 算法为原型,拓展出其他预算模型控制出价。
返回竞价回复 在筛选出最佳广告,需要把广告素材、追踪代码(Tracking Code)等渲染成网页代码,然后把网页代码、定价等等按照格式生成竞价回复,送返给 ADX。
我们以 OpenRTB v2.4 的竞价回复为例,如下图。
{
"seatbid":[{
"bid":[{
"nurl":"http://reports.ubimo.com/fb?b=JdZQFdbCARgKMURHWGhvUVl0bSMBJeAhAA&c=MTo6&wp=${AUCTION_PRICE}",
"crid":"12459",
"adomain":["academy.com"],
"price":2.93,
"id":"1DGXhoQYtm",
"adm":
"<ad xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="smaato_ad_v0.9.xsd" modelVersion="0.9">
<imageAd>
<clickUrl>http://reports.ubimo.com/fb?b=JdZQFdbCARgKMURHWGhvUVl0bSMBJeAhAA&c=Mzo6&t=https%3A%2F%2Fad.doubleclick.net%2Fddm%2Fclk%2F292804678%3B119963336%3Bw%3Fhttp%3A%2F%2Fwww.academy.com%2Fwebapp%2Fwcs%2Fstores%2Fservlet%2FContainer_10151_10051_-1_%3Fname%3DOfficial_Rules%26uv%3Dvanity%3Aofficialrules
</clickUrl>
<imgUrl>http://static.ubimo.com/io/603/ecd01dce
</imgUrl>
<height>50</height>
<width>320</width>
<beacons>
<beacon>http://reports.ubimo.com/fb?b=JdZQFdbCARgKMURHWGhvUVl0bSMBJeAhAA&c=Mjo6</beacon>
<beacon>https://ad.doubleclick.net/ddm/ad/N5865.276855.MOBILEFUSE/B8852634.119963336;sz=1x1;ord=1436319256367</beacon>
</beacons>
</imageAd>
</ad>",
"impid":"1",
"cid":5163
}]
}],
"id":"1DGXhoQYtm"
}
用请求数据流串联上上述所有的步骤,便如下图所示