Skip to content
Charles Shao
Go back

拍卖机制与 Bid Shading:一次竞价的漏斗、底价、结算,与一价时代为什么要「主动少出一点」

Updated:
views

Last Look 那篇聚焦于拍卖中的一桩具体不公平——处在竞价链路最后一棒的交易所,先偷看其他渠道已报出的竞胜价,再让自家需求「恰好高一点」地反超;也顺带交代了行业为何从二价集体转向一价。但那篇默认读者已经清楚「一次拍卖究竟是怎么运转的」。本文正是要补上这一前提:一次程序化拍卖,从收齐出价到定出成交价,中间到底发生了什么。

在此基础上,本文再落到一价时代最关键、也最考验工程能力的一环——Bid Shading(出价缩水)。一价拍卖有一个反直觉的陷阱:按你心中的真实价值出价,一旦胜出,几乎必然超付。 买方因此必须学会「主动压低一点、却又不至于输掉」。下文将依次讲清:这个陷阱从何而来、如何用数据估出「恰好赢下」的价位,以及为何「由谁来做 shading」本身就是一场利益博弈。

范围划界:本文讲拍卖机制本身(漏斗 / 底价 / 结算 / shading)。谁在主持拍卖、DSP/SSP 的角色见生态全景;二价→一价的历史与 last look 见专文;结算价通过什么字段回传(at / ${AUCTION_PRICE})见 OpenRTB 协议精讲。这里只在需要处引用。

TL;DR

Table of contents

Open Table of contents

1. 一次拍卖是一条漏斗

新人最容易把拍卖想成「收齐所有出价,价高者得」。真实的交易所拍卖是一条多级漏斗——价格只是最后一关,前面还有一串「你有没有资格参与」的筛子。

程序化拍卖漏斗:顶部紫色输入「一次曝光机会 + 收到的所有 bid response」向下依次经过四层筛子——① 资格过滤(尺寸/格式匹配、创意审核、bcat/badv/bapp 品牌安全、席位白黑名单),旁注「不合规直接出局」;② 底价筛选(出价 ≥ hard floor?deal 出价 ≥ deal floor?),旁注「低于底价不入围」;③ 排序(按净价/eCPM 排序,deal 与保量享结构性优先);④ 结算(按 at 定成交价:一价=自己出价,二价=第二名+增量),产出绿色「胜者 + 成交价」;右侧竖排旁注:价高者未必得,先要活着走到最后一层;每一层都会刷掉一批候选。底部注解:这条漏斗解释了为什么『我出价最高却没赢』——可能在第①/②层就被刷掉了 把「拍卖」拆成漏斗后,很多线上疑惑就有了答案:「我明明出价最高却没拿到量」,往往不是排序输了,而是在资格过滤(创意没过审、尺寸不符、撞了 badv)或底价那一层就被刷掉了。价格竞争只是最后一关。

四层逐个看:

记住这条漏斗,本文后面所有关于「出多少」的讨论,才有正确的语境:你优化的是第 ④ 层的价格,但能不能走到第 ④ 层,是前三层决定的。

2. 底价:hard floor / soft floor / 动态底价

底价(floor price)是卖方给库存设的成交底线,也是买方出价时第一个撞上的硬约束。它有三种形态,混淆它们是新人常犯的错:

类型含义出价低于它会怎样
hard floor硬底价直接出局,连排序都进不去
soft floor软底价(二价时代产物)仍可能赢,但结算规则在软硬之间切换
dynamic floor动态底价:按流量特征实时算出的最优底价取决于当次算出的值,等价于动态 hard

soft floor 是个历史包袱:在二价拍卖里,如果最高价没超过 soft floor,成交价按 soft floor 之类的规则来定,制造了一段模糊地带——它也是 last look 那类套利的温床之一。一价普及后,soft floor 基本失去意义(成交价就是你的出价,没有「第二名」可依),行业重心转向 dynamic floor

动态底价才是今天真正的博弈焦点:交易所不再对所有流量设一个固定底价,而是按域名、格式、时段、这个买家的历史出价实时算一个底价,目标是最大化自己的收益期望。这直接把买方推向了下一节的困境——因为买方永远不完全知道这次的底价是多少,只能靠历史去猜。

一个必须建立的直觉:在一价 + 动态底价的世界里,买卖双方都在用历史数据互相预测。卖方预测「这个买家愿意出多少」来抬底价;买方预测「这次要赢需要多少」来压出价。Bid Shading 就是买方这一侧的预测武器。

3. 一价 vs 二价:成交价由谁决定,决定了一切

这一节是理解 shading 的钥匙。两种拍卖的差别,一句话:成交价由谁决定。

看个数:一次曝光,你的真实价值 (v = $5.0),而实际上出价第二高的人只出到 $3.0。

第三种做法就是 Bid Shading——把出价从 (v) 压到「刚好赢」的位置。问题只剩一个:你怎么知道 $3.1 就够了? 你并不知道第二名出多少。这就把定价变成了一个预测问题

4. Bid Shading:把「恰好赢下的价」估出来

4.1 Winner’s curse:赢,本身就是坏消息

要理解为何 shading 不可回避,得先认识一价拍卖里那个绕不开的现象——winner’s curse(赢家诅咒)

在众人对同一次曝光各自密封出价的一价拍卖里,你之所以能赢,恰恰是因为你出得比所有人都高。 而「比所有人都高」往往意味着你的估值偏乐观、或出价过猛——胜出的那一刻,你大概率已经超付。

换句话说,赢得越轻松(出价甩开第二名越多),被浪费的差价就越大。一个从不 shading、始终照实出价的买家会赢下很多曝光,但每一单都在悄悄失血。

4.2 shading 的目标不是赢率,而是 surplus × 赢率

一个常见的直觉是「出低点就能省钱」,但出得太低会赢不到量。因此 shading 真正要优化的既不是赢率、也不是单均节省,而是二者的乘积——期望净收益。

设真实价值 (v),出价 (b),赢的概率 (W(b))(出得越高越可能赢,是一条随 (b) 上升的曲线)。一价下,一旦赢,成交价就是 (b),这一单的期望剩余是:

[ \text{ExpectedSurplus}(b) = (v - b)\cdot W(b) ]

这条曲线中间有个——那就是最优 shaded bid (b^*)。shading 引擎干的就是:估出 (W(b)) 这条赢率曲线,再找 ((v-b)\cdot W(b)) 的极大值点。

Bid Shading 的两张图并排:左图「一价照实出价的代价」——横轴出价 b、纵轴,画一条随 b 上升并趋于 1 的赢率曲线 W(b),标出真实价值 v 处(照实出价,赢率高但 v-b=0 无剩余)、以及远低处(省得多但赢率低);右图「surplus × 赢率 有个峰」——横轴出价 b,画一条先升后降的钟形曲线 ExpectedSurplus(b)=(v-b)·W(b),峰值处竖虚线标注 b*(最优 shaded bid),并在 b* 与 v 之间用琥珀色区间标注「shading margin:省下的差价」,右端 v 处标注「照实出价:surplus=0」;底部注解:shading 不是一味压低,而是在赢率和每单剩余之间找乘积最大的甜点;市场会随大家一起 shade 而移动,b* 不是常数 左图:赢率 (W(b)) 随出价上升,但出到真实价值 (v) 时省下的差价归零。右图:期望剩余 ((v-b)\cdot W(b)) 是一条钟形曲线,峰值 (b^*) 才是该出的价——它通常远低于 (v)。注意 (b^*) 不是常数:当所有人都在 shade,清算价分布会整体下移,昨天的最优今天就偏了。

4.3 它本质是个预测问题:估清算价分布

要画出 (W(b)) 这条曲线,就得知道「在这类流量上,历史清算价(或第二高价)大致长什么分布」。工程上:

  1. 收集 bid landscape:把每次竞价的成交价回执(一价下就是 ${AUCTION_PRICE})和输赢信号lurl + ${AUCTION_LOSS},尤其是「输给更高价 102」)攒下来。
  2. 分桶 / 特征化:清算价强烈依赖上下文——域名 / App、广告格式与尺寸、地区、时段、设备、是否走 deal。按这些维度分桶,或用模型把它们当特征。
  3. 建模预测:对每个 bid request,预测「要赢需要多少」的分布(或直接预测最优 (b^*) / shading factor)。简单的用分位数 / 直方图,复杂的用梯度提升、分位回归等。
  4. 留安全边际:在预测清算价上加一个小 margin——既对冲预测误差,也应对市场波动。

4.4 三个绕不开的工程坑

5. 谁来做 shading:又一次「裁判兼运动员」

技术上,shading 可以发生在两个位置,而位置本身就带着利益立场

位置谁做为谁省钱隐忧
买方侧 shadingDSP 自建 / 中立第三方替广告主省钱需要 DSP 有足够的 bid landscape 数据
卖方侧 shadingSSP 作为「服务」提供给买方名义上帮买方压价抬价方来替你压价——利益天然冲突

卖方侧 shading 是一价转型初期冒出来的产物:SSP 说「我帮你 shade,省得你自己建模型」。但这就像 last look 的翻版——靠成交额抽成、希望成交价越高越好的一方,反过来替你决定该出多低,动机天然相反。因此买方越来越倾向把 shading 收回到自己或中立第三方手里:让「出多少」这个决策,落在与自己利益一致的一侧,而不是交给抽价方去替你算。

6. 常见误解 ↔ 正解

常见误解正解
拍卖就是价高者得价格是最后一关;先得过资格过滤与底价,很多「最高价」死在前面
hard floor 和 soft floor 差不多hard floor 低于即出局;soft floor 是二价遗产,一价下基本失效
一价和二价对出价策略没差别天壤之别:二价照实出价最优,一价照实出价 = 白送 surplus
赢得越多说明策略越好一价下赢得太干脆往往是超付(winner’s curse)——赢的姿势比赢的次数重要
Bid Shading 就是一律压低出价是找 ((v-b)\cdot W(b)) 的峰值,压过头会输掉量,是最优化不是砍价
shading 是一次性算好的固定折扣清算价分布随市场(大家都在 shade)动态变化,必须持续在线学习
让 SSP 帮我 shading 最省心抬价方替你压价利益冲突,等于 last look 换个马甲——优先买方/中立侧

7. 一张速查表

概念一句话关联
拍卖漏斗资格过滤 → 底价 → 排序 → 结算,价格是最后一关§1
hard floor硬底价,低于即出局§2
soft floor二价遗产,一价下基本失效§2
dynamic floor交易所按流量特征实时算的最优底价§2
二价结算成交价 = 第二名 + 增量 → 照实出价最优§3
一价结算成交价 = 自己的出价 → 必须 shade§3 / OpenRTB at
winner’s curse赢,本身说明你可能超付了§4.1
shaded bid (b^*)((v-b)\cdot W(b)) 的峰值,通常远低于 (v)§4.2
bid landscape历史清算价分布,shading 模型的原料§4.3 / ${AUCTION_PRICE}
买方 vs 卖方 shading谁做,就替谁的利益服务§5

一句话收尾:二价的世界里你只要诚实,一价的世界里你必须精明。 Bid Shading 就是把「精明」变成一个可以用历史数据训练、持续迭代的预测问题——而它最大的敌人,是一个所有人都在变聪明、因而不断移动的市场。


延伸阅读

规范与资料:

附录:术语表


views
Share this post on:

Previous Post
媒体 Ad Server 深挖:它如何拍板每一次曝光
Next Post
Header Bidding 深挖:Prebid.js(客户端)vs Prebid Server(服务端)架构