正如 Last Look 那篇所探讨的,处于竞价链路最后一棒的交易所往往能利用机制漏洞,在先偷看其他渠道出价后,让自家需求以「恰好高一点」的价格反超。那篇文章交代了行业为何从二价集体转向一价,但默认读者已经清楚「一次拍卖究竟是怎么运转的」。正因如此,本文将补上这一核心前提,带你重走一次程序化拍卖的完整流转过程:从收齐出价到最终定出成交价,中间究竟经历了什么。
不仅如此,在此基础上,我们还将深入探讨一价时代最为关键的工程实践:Bid Shading(出价缩水)。需要强调的是,一价拍卖存在一个反直觉的陷阱:如果你按照心中的真实价值去出价,一旦胜出,几乎必然会面临超付的窘境。因此,买方(Demand Side)必须在出价时适当压低,同时又要确保不至于输掉这场竞价。
本文是 交易模式与拍卖机制 系列的第 3 篇(机制与 Bid Shading)。 全系列 3 篇:
- 程序化交易模式:RTB / PMP / PD / PG
- Last Look 深挖
- 拍卖机制与 Bid Shading
一句话定位:本文旨在拆解程序化拍卖的多级漏斗与底价机制,并深入剖析买方如何利用 Bid Shading 在一价时代最大化期望剩余。
在深入之前,我们需要先划定本文的讨论范围:我们将聚焦于拍卖机制本身,涵盖漏斗过滤、底价设定、结算规则以及 Bid Shading。至于谁在主持拍卖以及需求方与供给方(DSP & SSP)的具体角色,请参考生态全景;二价向一价演进的历史渊源与 last look 问题,详见专文;而结算价如何通过协议字段(如 at 或 ${AUCTION_PRICE})进行回传,则在 OpenRTB 协议精讲 中有专门解析。本文在行文中仅在必要时进行跨篇引用。
TL;DR
- 拍卖漏斗机制:一次程序化拍卖并非简单的「价比高低」,而是一条多级漏斗。候选出价必须依次穿透资格过滤(尺寸、创意审核、
bcat/badv)与底价筛选,最终才能进入排序结算。 - 底价(Floor Price)演进:硬底价(hard floor)是生死线,低于则出局;软底价(soft floor)属于二价时代的遗留产物;而在全面进入一价时代后,卖方(Supply Side)普遍转向动态底价(dynamic floor),基于流量特征实时计算以实现收益最大化。
- 一价与二价的结算鸿沟:在二价拍卖中,成交价由次高价决定,因此照实出价(Truthful Bidding)是最优策略;但在第一价格拍卖(一价)中,成交价直接等于你的出价。若依旧照实出价,便会将本可保留的差价(surplus)全额让渡给卖方。
- 赢家诅咒(Winner’s Curse):在一价竞价中,你能够胜出恰恰说明你的出价高于所有竞争者,这往往意味着你付出了远超「赢下所需」的成本。赢得越干脆,超付的代价往往越大。
- Bid Shading(出价缩水):买方不再投递真实价值 (v),而是给出一个缩水出价(shaded bid)(b < v),使其刚好越过预期清算价。其核心优化目标不是单纯的赢率,而是期望剩余(surplus)与赢率的乘积最大化。
- 历史清算价预测:Bid Shading 本质上是一个动态预测问题。通过收集历史竞价全景(bid landscape),并按多维度分桶建模,进而预估「此次赢下所需的精准价位」,并在模型基础上预留安全边际。
- 利益立场的博弈:由谁来主导 Bid Shading 是个切实的利益问题。买方侧(DSP 或中立第三方)的目标是替广告主(Advertiser)省钱;而卖方侧(SSP)主动提供压价服务,本质上是抬价方既当裁判又当运动员,存在严重的利益冲突。
- 工程实现的挑战:Shading 模型的关键输入是成交价回执(
${AUCTION_PRICE})与输赢信号(lurl/${AUCTION_LOSS})。在实践中,往往需要克服数据反馈延迟、长尾样本稀疏以及市场动态博弈(即清算价分布会随各方的 shading 行为实时偏移)等重重阻碍。
Table of contents
Open Table of contents
1. 一次拍卖是一条漏斗
很多刚接触广告生态的开发者,容易将程序化拍卖简单等同于「收齐所有出价,然后价高者得」。然而,真实的交易所拍卖实际上是一条严密的多级漏斗,价格比拼仅仅是最后一道关卡,在此之前,出价请求必须先穿透一连串验证「准入资格」的筛子。
把「拍卖」拆成漏斗后,很多线上疑惑就有了答案:「我明明出价最高却没拿到量」,往往不是排序输了,而是在资格过滤(创意没过审、尺寸不符、撞了
badv)或底价那一层就被刷掉了。价格竞争只是最后一关。
我们将这条漏斗由上至下逐层拆解:
- ① 资格过滤:每一次出价所携带的创意,其尺寸或格式是否匹配当次广告曝光(
imp)的需求?创意本身是否通过了交易所的合规审核?不仅如此,落地域名adomain是否触碰了媒体(Publisher)设定的屏蔽广告主名单(badv),其所属品类cat是否落入屏蔽品类(bcat)?此外,出价方的席位还必须在许可名单(wseat)或避开黑名单(bseat)。只要有任何一项不合规,该出价便会直接出局,根本无缘后续的价格博弈。 - ② 底价筛选:顺利挺过资格过滤的出价,还必须满足大于或等于底价的硬性要求(详见第 2 节)。在这一层,公开竞价需对比
imp.bidfloor,而基于约定的交易(Deal)则需要跨过deal.bidfloor。 - ③ 排序:对于合格入围的出价,系统会根据净价或 eCPM 进行降序排列。需要指出的是,如果存在供应链抽成(ad tech tax),这里通常会按扣除费用后的真实净值来评估。正因如此,保量单和 deal 在这一环节享有着不可撼动的结构性优先权——哪怕它们的绝对出价并非最高,依然能够插队截留流量。
- ④ 结算:最后一步才是决出真正的胜者,并严格按照拍卖类型字段
at来确定最终的成交价(详见第 3 节)。
了解整个漏斗流转后就会发现,后续所有关于「出价策略」的讨论都有一个大前提:你在第 ④ 层费尽心思优化的价格,只有在前三层存活下来才有意义。
2. 底价:hard floor、soft floor 与动态底价
底价(floor price)作为卖方为广告库存划定的成交底线,是需求方出价时必然撞上的首个硬约束。在实际工程落地中,底价衍生出了三种不同的形态,理清它们是避开竞价陷阱的第一步:
| 类型 | 含义 | 出价低于它会怎样 |
|---|---|---|
| hard floor | 硬底价 | 直接出局,彻底无缘排序环节 |
| soft floor | 软底价(二价时代遗留产物) | 仍有赢的可能,但结算规则会在软硬底价间发生切换 |
| dynamic floor | 动态底价:基于流量特征实时算出的最优底价 | 命运取决于单次计算值,本质上等价于动态的硬底价 |
需要强调的是,软底价(soft floor)实际上是一个历史包袱。在传统的二价拍卖体系中,如果最高出价未能越过软底价,系统的成交价就会依从软底价的一套复杂规则来强行核定。这种机制人为制造了一段模糊地带,不仅逻辑晦涩,更成为了引发 last look 等流量套利的温床。随着行业全面倒向一价拍卖,由于成交价直接锚定出价,不再依赖所谓的「第二名」,软底价便基本失去了生存土壤,行业的优化重心也顺势转移到了动态底价(dynamic floor)上。
如今,动态底价才是交易链路中真正的博弈焦点。交易所不再粗放地对所有流量「一刀切」设定固定底价,而是精细化地根据域名、广告格式、请求时段,甚至该买家的历史出价习惯,实时计算出一个动态底线。其根本目标非常明确:最大化卖方侧的收益期望。对比前一种静态方案,这种做法直接将买方推入了两难困境,因为买方永远无法在出价前确切获知当次的真实底价,只能依赖历史数据去盲猜。
在这个「一价叠加动态底价」的新常态下,需求方与供给方都在疯狂地利用历史数据互相预测:卖方试图预测「这个买家最高愿意出多少」来伺机抬高底价;而买方则竭力预判「这次要赢究竟需要多少钱」来尽可能压低出价。贯穿这一博弈主线的,正是买方侧用于预测出价下限的核心武器——Bid Shading。
3. 一价 vs 二价:成交价由谁决定,决定了一切
一价与二价拍卖最本质的分歧,在于究竟由谁来决定最终的成交价,而这一规则差异直接重塑了整个交易生态的竞价策略。
-
二价(Second Price):赢家所需支付的金额,是排名第二的出价加上一个微小的增量。这意味着,最终成交价完全由次高竞争者决定,而与你本人的出价高度无关(只要确保你排在第一即可)。
- 核心推论:在此机制下,照实出价(truthful bidding)成为了无可争议的占优策略。当买方报出心中的真实价值 (v) 时,即便顺利胜出,也只需按照第二名的价位进行结算,绝不会吃亏;相反,如果刻意压低出价,反而可能错失本该拿下的广告曝光(Impression)。正因如此,经典的 Vickrey(二价密封)拍卖在数学上已经证明了其优雅的性质:说真话对所有参与者都是最优解。
-
一价(First Price):赢家必须为其报出的价格买单,即成交价直接等于你的出价。
- 核心推论:一价环境下,照实出价无异于将宝贵的剩余价值(surplus)拱手相让。如果你老老实实出价 (v) 并赢得竞价,就会把「出价 (v) 与本来赢下所需的最低价」之间的那段差价,全额无偿地让渡给卖方。
为了直观体会这种鸿沟,我们可以看一组数据:假设针对某次曝光,你预估的真实价值 (v = $5.0),而全场出价第二高的人仅仅出到了 $3.0。
- 二价模式下:你果断出价 $5.0,不仅毫无悬念地赢下竞胜,而且只需支付 $3.01。中间省下的 $1.99 净利润,稳稳地落入了你的口袋。
- 一价模式下(老实人做法):你依然出价 $5.0,虽然同样赢了,但必须如实支付 $5.0。那原本属于你的 $1.99 差价,瞬间荡然无存。
- 一价模式下(聪明做法):你察觉到了猫腻,选择出价 $3.1。结果是你仍然赢得了流量,且只支付了 $3.1,成功抢回了 $1.9 的净利。
这第三种做法,正是 Bid Shading 在一价时代的生存之道——强行将出价从真实价值 (v) 往下压,精准卡在「刚好赢」的位置。然而,在真实竞价环境中,棘手的问题随之而来:你根本无从知晓第二名究竟出了多少钱。这就顺理成章地将静态的定价问题,转化成了一个动态的工程预测问题。
4. Bid Shading:把「恰好赢下的价」估出来
4.1 Winner’s curse:赢,本身就是坏消息
要理解为何 Bid Shading 在一价时代变得不可回避,我们得先正视一个极具迷惑性的陷阱:赢家诅咒(winner’s curse)。
在众多买家对同一次流量机会进行密封报价的角逐中,你之所以能够最终胜出,恰恰是因为你的出价力压群雄。然而,「出价全场最高」往往暗示着系统对该流量的估值过于乐观,或者出价策略过于激进。这意味着,在你收到竞胜回执的那一刻,大概率已经陷入了超付的境地。
进一步来说,你在场面上赢得越是轻松(即出价甩开第二名的幅度越大),被白白浪费的差价就越令人痛心。一个固执己见、从不使用 shading 且始终照实出价的买家,或许在报表上能赢下极为可观的曝光量,但在底层的每一笔交易中,其实都在持续不断地「慢性失血」。
4.2 shading 的目标不是赢率,而是 surplus × 赢率
面对高昂的采买成本,许多人的第一直觉是「只要出低点就能省钱」。然而,一旦出价压得过低,整个系统就会因赢不到足够的流量而陷入停滞。因此,Bid Shading 真正需要优化的核心,既不是单一维度的赢率,也不是单纯的单均节省金额,而是这两者的乘积——即期望净收益。
假设某次曝光的真实价值为 (v),实际出价为 (b),赢得该次竞价的概率记为 (W(b))(显然,出价越高赢的概率越大,这是一条随 (b) 单调递增的曲线)。在一价机制下,一旦竞价胜出,最终的成交价即为 (b)。此时,这一单的期望剩余可以通过下式清晰表达:
[ \text{ExpectedSurplus}(b) = (v - b)\cdot W(b) ]
在这场杠杆游戏中:
- 当 (b) 往上抬高时:(W(b))(赢率)随之攀升,但 ((v-b))(每单实际省下的差额)却在迅速缩水。
- 当 (b) 往下极限施压时:虽然每单省下的差价十分诱人,但赢率却会发生断崖式坍塌。
正因如此,这条期望剩余曲线在演进过程中必然会出现一个波峰,而这个顶点对应的值,就是我们苦苦寻觅的最优出价(最优 shaded bid)(b^*)。对于任何成熟的 Bid Shading 引擎而言,其底层逻辑只有两步:先精准拟合出 (W(b)) 这条赢率曲线,紧接着通过数学推导,找出 ((v-b)\cdot W(b)) 的极大值点。
左图:赢率 (W(b)) 随出价上升,但出到真实价值 (v) 时省下的差价归零。右图:期望剩余 ((v-b)\cdot W(b)) 是一条钟形曲线,峰值 (b^*) 才是该出的价,它通常远低于 (v)。注意 (b^*) 不是常数:当所有人都在 shade,清算价分布会整体下移,昨天的最优今天就偏了。
4.3 它本质是个预测问题:估清算价分布
想要精准描绘出 (W(b)) 这条赢率曲线,前提是必须摸清「在这类特定特征的流量上,历史清算价(或是假想中的第二高价)大致呈现出何种概率分布」。落实到具体的工程流水线中,通常分为以下几步:
- 收集竞价全景(bid landscape):系统必须持之以恒地沉淀每一次竞价的反馈数据。这不仅包括成交时的价位回执(在一价机制下即为
${AUCTION_PRICE}宏替换的值),还涵盖了大量竞败时的输赢信号(依赖lurl与${AUCTION_LOSS}字段,特别是标识「因低于最高价而落败」的102错误码)。 - 精细化分桶与特征化:由于清算价极度依赖广告请求的上下文环境,我们需要引入丰富的维度进行切分。无论是落地域名(或 App 包名)、广告格式与尺寸,还是用户的地理位置、请求时段、设备指纹,甚至是该流量是否通过优先交易(Deal)通道流转,都必须被提炼为关键特征进行分桶或输入模型。
- 在线建模与预测:针对实时涌入的每一个
bid request,模型需要瞬间输出「此次赢下所需价位」的概率分布(或者直接暴力回归出最优的 (b^*) 及 shading 缩放因子)。在轻量级方案中,团队往往依靠简单的分位数统计算法或直方图来兜底;而在更硬核的工程架构里,则会全量部署梯度提升树(GBDT)甚至深度分位数回归网络来进行高精度打击。 - 预留安全边际:为了兜底模型的预测不确定性,工程上必须在最终预估出的清算价之上,人为增加一个微小的安全边际(margin)。这不仅能有效对冲局部预估误差,更能从容应对大盘水位的瞬时波动。
4.4 三个绕不开的工程坑
当这些理论框架被推向线上环境时,技术团队不可避免地会撞上以下三大工程暗礁:
- 反馈链路延迟与长尾数据稀疏:真实的业务系统总是充斥着各种异步等待。无论是计费打点(
burl)触发的成交回执,还是下游的转化归因信号,都存在数小时甚至更久的物理延迟。除此之外,在长尾流量上进行多维交叉分桶后,底层的叶子节点往往只剩下寥寥无几的样本,导致模型置信度暴跌,最终只能无奈回退到颗粒度更粗的上一级特征桶中。 - 动态博弈与市场偏移:这是 Bid Shading 区别于常规机器学习预测任务最核心的挑战所在。整个交易生态是高度动态且互相牵制的:当市场上所有买方都在疯狂进行 shading 时,整体的清算水位线必然会发生断崖式下移。此时,你的模型昨天才艰难学出来的清算价分布,今天一旦上线就已经严重偏离了真实水温。正因如此,清算预估更像是一个多方持续博弈的动态均衡过程,而不是一个刻板的静态分布,这就倒逼模型必须具备持续的在线学习与增量更新能力。
- 与 Pacing 模块及出价模型的深度耦合:在系统架构中,Bid Shading 仅仅负责敲定「针对当前这一单到底该砍价到多少」,而宏观的预算节奏(pacing)模块,才握有「现在到底该不该激进买量」的生杀大权。为了防止局部最优导致全局崩盘,两者必须达成严密的工程协同。通常的策略是:当日预算充裕甚至烧不完时,系统可以适当减轻 shading 力度,优先保证流量的跑量规模;而当预算逼近警戒线面临超支风险时,则必须果断加大 shading 比例,死守广告主的投资回报率(ROI)底线。
5. 谁来做 shading:又一次「裁判兼运动员」
从技术链路来看,Bid Shading 的计算逻辑既可以部署在买方,也可以托管在卖方。然而,部署位置的差异绝不仅是架构选择,背后更牵扯着截然相反的利益立场:
| 位置 | 谁做 | 为谁省钱 | 隐忧 |
|---|---|---|---|
| 买方侧 shading | 需求方平台(DSP)自建或中立第三方提供 | 致力于替广告主省钱 | 高度依赖 DSP 自身所积攒的深厚 bid landscape 数据底座 |
| 卖方侧 shading | 媒体侧平台(SSP)作为「增值服务」免费提供给买方 | 表面上是在帮买方压价 | 让靠高溢价抽成的抬价方来替买方压价,存在极其致命的利益冲突 |
必须认清的是,卖方侧 shading 完全是行业向一价转型初期应运而生的过渡性怪胎。当时,许多强势的 SSP 抛出诱饵:「我直接在服务端帮你做 shade 缩水,省得你们买方团队自己耗费研发资源去从零搭建预测模型。」对比前一种方案,这种逻辑简直就是 last look 黑暗交易的变种翻版:一个核心商业模式是按流水抽成、做梦都希望把成交价炒上天的一方,居然越俎代庖反过来替买方决定「这单到底该把价格压到多低」。在这套荒谬的机制下,双方的商业动机完全背道而驰。
基于这层深刻的觉醒,越来越多的头部买方开始斩断对 SSP 的路径依赖,坚定不移地将 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 换了个马甲重出江湖,必须坚决优先采用买方自建或中立侧方案 |
行业黑话总结:拍卖漏斗层层过滤;hard floor 低于即出局;soft floor 遗留包袱;dynamic floor 实时算最优;一价结算等同出价;truthful bidding 在一价中白送 surplus;一价胜出当心 winner’s curse;Bid Shading 预估 bid landscape 寻找最优 shaded bid;绝不让利益冲突的卖方代劳 shading。
要深入理解在全面一价环境下,那些处在竞价链路末端的交易所是如何通过偷看底牌完成不公平的套利,请继续阅读下一篇:Last Look:一桩名正言顺的「作弊」。
延伸阅读
- 站内专文. Last Look 深挖:二价→一价转型的历史与那桩最著名的不公平,本文的「前传」。
- 站内专文. OpenRTB 协议精讲:
at拍卖类型、${AUCTION_PRICE}成交价回执、lurl/${AUCTION_LOSS}输价信号,shading 模型的数据入口。 - 站内专文. 程序化交易模式:RTB / PMP / PD / PG:deal 与保量在排序层的结构性优先权。
- 站内专文. 预算与 Pacing:shading(出多少)与 pacing(现在该不该激进)如何协同。
- 站内专文. 程序化广告生态全景:谁在主持拍卖、ad tech tax 与 SPO 的大背景。
- IAB Tech Lab. OpenRTB 2.6 Specification:
at、底价、notice 与成交价宏的权威定义。 - W. Vickrey. Counterspeculation, Auctions, and Competitive Sealed Tenders:二价拍卖「照实出价最优」性质的理论源头。