在程序化广告的交易链路中,供应链透明度(上)与 schain(下) 重点解决了路径的真伪与授权验证问题。然而,需要强调的是,即使是一条真实合法的路径,依然可能面临高昂的交易成本。正因如此,同一份广告库存如果通过 1 跳的 DIRECT 模式购买,与通过 4 跳的转售(RESELLER)模式购买相比,中间的每一层流转都会产生不可忽视的供应链抽成(ad tech tax)。在生态全景中,广告主投入 1 美元而媒体最终只能拿到一半左右的现象,很大程度上就消耗在这些冗余的供应路径上;而 ISBA 与 PwC 审计报告中提到的约 15% 的 unknown delta,更是这种「路径不可观测」所导致的极端形态。
供应链优化(SPO,Supply Path Optimization) 正是买方在完成路径核验之后必须采取的关键动作。其核心逻辑在于,对同一广告曝光的多条可达路径进行评估与排序,优先选择链路更短、透明度更高且供应链抽成更少的路径,同时主动规避或降权那些冗余的转售节点。站在需求方平台(DSP)或 Trading Desk 的工程视角来看,SPO 的最终验收标准应当是工作媒体(Working Media)支出的提升以及业务 KPI 的达成,而绝不仅仅是平均跳数(hops)的表面下降。
本文是 供应链透明度与优化 系列的第 3 篇(路径优化)。 全系列 3 篇:
一句话定位:买方在可核验的基础上,通过对同一广告曝光的多条可达路径进行打分与排序,优先选择更短、更透明且供应链抽成更少的路径,从而最大化净工作媒体价值。
范围划界:本篇将聚焦于买方如何进行路径选择与收敛。关于路径核验的具体细节,请参考本系列的上下两篇,此处不再赘述。此外,若想了解供给方(SSP)如何通过底价策略提升收益,请参阅 SSP Yield;关于将短路径打包的策展模式,请见程序化策展;而涉及垂直整合路径的潜在风险,则可参考 Last Look。
TL;DR
- SPO 优化的是路径,不是单次广告竞价:同一
domain或bundle可能会经过多条 SSP 链路到达买方;SPO 的核心作用是决定优先向谁发起请求、对谁进行降权,以及将谁拉入黑名单。 - 先核验,再优化:没有核验基础就谈不上 SPO,只有当
schain将完整的跳数节点摊开后,买方才能获得优化的依据;核验失败属于「真伪」问题,而跳数过长则属于「效率」问题。 - 输入信号:主要依赖
schain跳数与complete标识、ads.txt中的DIRECT与RESELLER声明、sellers.json的身份信息,并结合历史竞胜率(win rate)、净效果、无效流量(IVT)、自我交易嫌疑以及是否属于策展或 Deal 交易。 - 输出动作:具体表现为席位级别的白/灰/黑名单划分、路径评分机制、QPS 与预算的倾斜分配、出价系数的动态调整,以及对 Deal 的优先处理和对冗长链路的
no-bid策略。 - 工程位置:通常部署在出价前的供应过滤阶段(与定向逻辑同级),依赖离线索引与热路径本地表的结合,且日志中必须完整记录
path_score与spo_action。 - 风险提示:过度收敛会导致竞争减少并引发卖方抬价,同时可能误杀稀缺的长链库存;此外,索引滞后会造成误伤,而仅仅关注跳数却忽略最终转化效果也是常见的策略盲区。
Table of contents
Open Table of contents
1. 问题:同一份库存,为什么有多条路
在开放的程序化广告市场中,一个媒体域名往往会采用多渠道分发的策略。具体而言,媒体可能会:
- 直接通过
DIRECT授权给 SSP-A; - 同时将
RESELLER权限授予 SSP-B; - 随后 SSP-B 又将流量转售给 Exchange-C;
- 而你的 DSP 刚好同时对接了 A、B、C 三个交易节点。
正因如此,针对同一次用户广告曝光(或同一库存池),买方极有可能会收到多条 bid request。需要强调的是,每条请求所携带的 schain 长度各不相同,其背后隐藏的供应链抽成也存在显著差异:
同一库存多条可达路径:短链优先、转售降权、长链收敛——合法路径不等于值得买的路径。
| 路径 | 示意 schain | 跳数 | 典型成本形态 |
|---|---|---|---|
| P1 | Publisher → SSP-A → 你 | 1 | 短链、税少、常 DIRECT |
| P2 | Pub → SSP-B → C → 你 | 2~3 | 转售税叠层 |
| P3 | Pub → … → 多层 RESELLER → 你 | ≥4 | 税重、核验噪声大 |
如果买方对每一条请求都采取「见价就追」的盲目策略,这不仅会导致自己和自己抢量,从而在多路同时出价时无形中抬高了最终的清算价;还会让宝贵的预算流向供应链抽成最重的冗余路径。最终,系统日志里会被大量的 unknown 节点或冗长链路填满,这正是导致那 15% unknown delta 无法对账的根本原因。
我们可以算一笔示意账(假设同一广告曝光的业务价值在广告主侧愿意支付到 $10 eCPM 量级):
| 路径 | 中间税代理 | 媒体侧可得(粗) | 买方「净工作媒体」感 |
|---|---|---|---|
| 1 跳 DIRECT | 低 | 高 | 同预算买到更多真曝光 |
| 4 跳转售 | 高 | 低 | 同预算大量沉没在中间层 |
虽然具体数字会因费率结构与计费基数的不同而有所差异,但核心结论是极其稳定的:一条合法的路径并不等同于一条值得购买的路径。因此,SPO 必须在策略层面上将这一认知转化为具体的执行逻辑。简而言之,透明度机制回答了这条路径「能不能信」的问题,而 SPO 机制则要回答这条路径「值不值得走」的问题。
2. SPO 的目标函数
选净价值最高的路径:效果价值减去媒体价、路径税与风险——不是单纯追最低成交价。
在工程实现中,SPO 的核心逻辑可以简化为以下目标函数:
| 项 | 含义 |
|---|---|
| 转化 / 可见性等业务价值 | |
| 成交价 | |
| 中间抽成(ad tech tax) | |
| 欺诈 / 品牌安全 |
在实际业务中,由于买方往往无法获取逐跳精确拆解的账单数据,因此必须依赖一系列代理指标来进行评估:
| 代理 | 含义 | 注意 |
|---|---|---|
| schain 跳数 | 越短通常税越少、风险面越小 | 短链也可能脏或贵 |
| DIRECT 占比 | ads.txt 上 DIRECT 优先于纯 RESELLER 长链 | RESELLER 不一定坏,长链叠加才糟 |
| complete=1 且核验通过 | 不可核验路径直接降权或剔除 | 与 SPO 分层:先真伪,后效率 |
| 历史 IVT / 可见性 | 路径级质量,不只看域名 | 需按 seat×domain 聚合 |
| 净效果 / post-auction KPI | 最终以业务校准 | 稀疏域要 backoff |
| 自我交易 / 垂直整合嫌疑 | 路径可能含 last look 或利益冲突 | 见 Last Look |
对比 SSP Yield 的优化逻辑,我们可以看到需求方与供给方在策略上的对称性:
| 侧 | 优化什么 | 旋钮 |
|---|---|---|
| 卖方 Yield | 卖给谁、要多少钱 | floor / 分层 |
| 买方 SPO | 向谁买、走哪条路 | 名单 / 分数 / 系数 |
需要强调的是,当需求方与供给方同时变得更加「苛刻」时,整个市场会自发地重新寻找均衡点——这属于预期的商业博弈现象,而不是系统 bug。归根结底,SPO 是利用路径特征在供应源层面进行定向过滤与出价系数调整,其作用对象是 SSP 的流转路径,而非终端用户的受众画像。
3. 打分:从 schain 到路径分
对于每一条入站的 bid request,系统在完成交叉核验之后,会立即计算对应的 path_score。如果核验失败,该请求应当直接进入风险控制流程(执行硬拒或强降权),切忌将其与「跳数略长」的合法请求混杂在同一个灰名单档位中。否则,运营团队在后期排查时,将无法分辨系统到底是在防御欺诈流量,还是在优化供应链抽成。
典型的打分逻辑示意如下:
path_score =
+ w1 * (1 / max(hops, 1))
+ w2 * (has_direct ? 1 : 0)
+ w3 * (verified ? 1 : 0)
+ w4 * hist_win_rate # 或 hist_cvr / viewability
+ w5 * (1 - hist_ivt_rate)
+ w6 * curated_or_deal_bonus # 可选
- w7 * (self_dealing_risk)
- w8 * (hops >= hop_hard_cap ? large : 0)
计算出分数后,系统会将其映射为具体的执行动作:
| 分数段 | 动作 |
|---|---|
| 高 | 正常竞价;可提高出价系数 / 预算份额 / QPS |
| 中 | 降权:更低出价系数或更严 ROI 门槛 |
| 低 | no-bid;或仅在 deal 场景参与 |
| 核验失败 | 按风险政策:硬拒或强降权(与分数段分离记账) |
3.1 席位级 vs 请求级
在打分粒度的选择上,通常有以下几种方案:
| 粒度 | 做法 | 优点 | 风险 |
|---|---|---|---|
| 席位级 | 离线统计 (exchange_seat, publisher) 或 seat 的平均 hops / 效果 → 白灰黑名单 | 热路径只查表,省 CPU | 粗;席位内好坏混杂 |
| 请求级 | 逐条读 schain.nodes.length、DIRECT 标记、核验结果 | 精细 | CPU 与策略复杂度高 |
| 混合(常见) | 席位默认分 + 请求级硬规则(如 hops≥4 再砍一档) | 可解释、可渐进收紧 | 两套配置要对齐版本 |
在生产环境中,大多数 DSP 会以席位级 SPO 作为主干策略,因为这种方式比逐条请求解析整棵供应树要稳定得多。而请求级的精细化打分,则通常保留给长尾流量、高客单价的品牌线,或者是新席位接入时的冷启动观察窗。
3.2 特征工程注意点
- hop 计数口径:必须明确是否包含
hp=0的节点,并与供给方的报表口径严格对齐,否则极易出现「买方认为 hops=2,而卖方声称 hops=1」的扯皮现象。 - Publisher 键:在 Web 端应使用规范化后的
domain,而在 App 端则依赖bundle(当映射关系脏乱时,请参考上篇关于app-ads.txt的处理方案)。 - 稀疏 backoff:当遇到新域名或新席位缺乏历史效果数据时,系统应平滑回退到「仅依赖 hops + 核验」的硬规则,坚决禁止使用充满噪声的 CVR 数据进行乱加权。
- 时间衰减:上周的优质路径并不代表本周依然高效;尤其在大促期间,转售链路往往会突然拉长,因此特征数据必须具备极强的时效性。
4. 在 DSP 链路里落在哪
对照 Bidder 漏斗与解析模块,SPO 的工程位置如下:
解析(抽出 schain / domain / bundle / seat)
→ 供应链核验(真伪)
→ 供应过滤 SPO(效率:名单 / 分数 / 硬 hops)
→ 定向 / RTA / 频控
→ 召回 · 打分 · 出价(可对高分路径加系数)
→ 排序 · 填充
SPO 的过滤逻辑与域名黑名单属于同类操作,因此能够在供应过滤阶段砍掉的冗余请求,就绝对不要让它流入后续的召回环节。至于根据路径质量调整出价系数的逻辑,则可以挂载在出价模块中。这两处的动作必须分开记账,切忌将其揉捏成一团难以归因的黑盒系数。
4.1 多路径去重与自我竞争
在开放市场中,同一次广告曝光机会极有可能经过多个交易席位几乎同时到达买方系统。如果策略引擎允许对所有副本同时发起出价,将会带来严重的负面后果:
- 最终的清算价会被买方自己的多路出价无谓抬高;
- 报表上显示的「多源竞胜」实际上只是对同一广告曝光的重复采买;
- SPO 策略表面上看起来「覆盖广」,但实际上却在疯狂燃烧供应链抽成。
为了解决这一痛点,工程上常见的去重手段(由易到难)包括:
- 席位优先:针对同一
(domain|bundle, 近似时间窗)的请求簇,系统只保留path_score最高的席位参与竞价; - 出价互斥:对低分路径强制执行
no-bid,仅允许高分路径正常流转; - 事后归因去重:即使在用户层面难以实现完美的实时去重,日志层也必须打上统一的
inventory_key,以便离线分析时能够精准捕捉自我竞争的损耗。
尽管完全的实时去重面临着请求不同步、ID 缺失等挑战,但仅靠席位级的收敛策略,就已经能够砍掉绝大部分无意义的副本消耗。
4.2 Fail-open vs fail-closed
当遇到索引缺失或核验超时的情况时,系统需要根据业务场景选择合适的容错策略:
| 场景 | 索引缺失 / 超时 | 建议 |
|---|---|---|
| 品牌 / 高客单 | 偏 fail-closed(不买看不清的路) | 保安全 |
| 量导向 UA | 偏 fail-open + 事后降权 | 保量 |
| 新 seat 接入 | 观察窗 open,过核验门槛后再收紧 | 避免一上来误杀 |
这一逻辑与透明度核验的原则高度一致:对于灰色地带优先采取降权处理,而硬拒动作则严格保留给明确标记为 unauthorized 的非法流量。
5. 和 Deal / 策展 / 卖方 Yield 怎么咬合
5.1 Curated deal
在程序化策展场景下,受众数据与优质库存通常会被打包成 Deal ID,这会导致 schain 中多出一个 curator 的流转跳数。针对这种情况,SPO 策略需要做出适配:
- 绝不能仅仅因为「多了一跳」就盲目实施惩罚,因为策展节点的核心价值可能恰恰在于其提供的数据增益与流量筛选能力;
- 系统应当对策展席位或特定的 Deal ID 进行单独加权,同时强制要求该 curator 必须在
sellers.json与schain中具备可核验的身份; - 反之,如果策展节点只是一个徒增供应链抽成却无法带来效果提升的黑箱,那么就必须果断将其按普通长链进行降权处理。
5.2 PG / PD 保量
对于程序化保证(PG)或优先交易(PD)等合约路径,其链路可能较短但单价偏高,或者跳数略长却是触达该媒体的唯一通路。此时,SPO 绝不能机械地只看跳数:毕竟保量违约的商业成本远远大于省下的那点供应链抽成。正确的做法是将这类合约路径标记为「SPO 豁免或弱约束」,并在看板中进行独立监控。
5.3 卖方抬 floor 之后
当供给方实施 Yield 优化策略,通过抬高底价或收窄开放层来提升收益时,原本的短链可能会变得异常昂贵,而长链的清仓流量反而会增多。如果买方的 SPO 策略机械地锁死在「只买 hops≤2」的硬规则上,极易导致突然断量。为此,买方需要:
- 按照不同层级与域名细致监控填充率与 eCPM 的波动;
- 在投资回报率(ROI)达标的前提下,允许部分灰名单路径进行流量回补;
- 务必将「路径税」与「媒体价」拆开独立核算,避免将卖方合理的提价行为误判为「供应链抽成又加重了」。
5.4 App 多源世界
在移动端 App 侧,流量往往会经过 TopON 等多源聚合平台进行分发。此时,买方可能无法像在 Web 端那样看到完整的 schain 拓扑,但多通路并存的博弈逻辑却是完全同构的:同一个 bundle 可能会通过 Vungle、Pangle 或 Mintegral 等多个渠道到达买方。因此,买方依然需要建立源级别的排序机制与统一的衡量尺子。在这种场景下,SPO 的核心思想可以灵活降级为「源白名单 + 效果打分」,而不必死死纠结于 hops 字段是否绝对完整。
6. 工程落地:闭环、实验与指标
6.1 最小闭环
要让 SPO 策略真正运转起来,必须构建以下最小工程闭环:
- 离线计算:复用透明度管道抓取
ads.txt与sellers.json;按席位和域名聚合统计 hops、核验通过率、消耗金额以及 CVR/IVT 等效果指标。 - 策略编译:基于离线数据生成名单表与分数表,并以版本化的方式下发至线上引擎(必须具备秒级回滚能力)。
- 在线执行:引擎在处理请求时实时查表,输出
spo_action,进而执行过滤或调整出价系数的动作。 - 数据回灌:将
path_score、hops、verified状态、spo_action以及最终的成交与转化数据完整落盘——没有这一步,策略迭代将无从谈起。
6.2 A/B 怎么做才不算自欺
在验证 SPO 效果时,必须遵循严谨的实验规范:
| 要做 | 不要做 |
|---|---|
| 主指标用工作媒体占比 / CPA·ROAS / 增量转化 | 只看平均 hops↓ |
| 同步看 win rate、覆盖域名数、CPM | 忽略「量没了」 |
| 按库存层 / 地区切片 | 全球一个 uplift 平均数 |
| 渐进收紧(先核验失败降权 → hops≥4 → 席位白名单) | 第一天全量黑名单 |
| 跑过完整日周期与预算节奏 | 用一小时 spare QPS 定胜负 |
一个典型的误读场景是:「实验组的平均 hops 从 2.8 成功降到了 1.6,但 CPA 却飙升了 22%」。这往往意味着策略误杀了某些唯一可达的高转化路径,此时应当果断判定实验失败或缩小收敛范围。
6.3 看板最小集
为了实时监控 SPO 的健康度,以下指标构成了看板的最小集:
| 指标 | 读法 |
|---|---|
| 工作媒体 / 有效 KPI | 最终目标 |
| spend by hops / by seat | 预算是否仍沉在长链 |
| verify pass rate | 透明度管道是否健康 |
| spo_action 分布(allow / downrank / nobid) | 策略实际杀伤面 |
| 覆盖 publisher 数、稀缺位 fill | 是否过度收敛 |
| 自我竞争率(多 seat 同 inventory_key) | 去重是否生效 |
| deal vs open 占比 | 合约是否被误伤 |
| 索引新鲜度(ads.txt age) | 滞后误伤预警 |
7. 生产里见过的
案例 A:平均 hops 漂亮,效果变差。
某 DSP 曾一刀切地执行 hops≤2 规则,结果导致核心 App 在某些只剩长链可达的海外地区瞬间断量,整体 CPA 急剧恶化。随后团队将策略调整为「核验失败硬降权 + hops≥4 降权 + 稀缺 bundle 豁免」后,大盘指标才得以回正。这警示我们:必须先保流量的可达性,再去优化供应链抽成。
案例 B:三家 SSP 同时追同一域名。
通过日志排查发现,针对同一个 inventory_key,系统竟然通过多个席位同时发起了高价竞标,导致最终清算价严重虚高。在引入席位优先逻辑、仅保留 path_score 最高的链路后,整体 eCPM 显著下降,而转化量保持平稳。这证明了 SPO 不能仅仅停留在缩减名单上,多路去重同样是核心环节。
案例 C:索引滞后误杀新媒体。
某新锐媒体刚刚更新了 ads.txt,但由于买方爬虫长达 48 小时未刷新索引,导致该席位被错误标记为 unauthorized。这直接造成了采用 fail-closed 策略的品牌广告线出现了两天的投放空窗。正因如此,系统必须设立明确的新鲜度 SLO,并为新媒体预留合理的观察窗。
案例 D:策展多一跳被误罚。
在一次投放中,由于 curator 节点的引入导致 hops+1,系统自动将其降级至灰名单;但实际上该链路的 CVR 表现远超大盘。在对 curated deal 进行单独加权豁免后,效果迅速恢复。这说明跳数仅仅是抽成与风险的代理指标,策展带来的「多一跳」并不总是坏事。
案例 E:卖方收紧 floor,买方 SPO 过拟合短链。 当卖方整体抬高底价后,短链的 eCPM 随之飙升,此时原本处于灰名单的长链反而凸显出了性价比优势。在系统放宽限制、允许 ROI 达标的灰路径进行回补后,整体投放效果达到了新的最优解。因此,SPO 必须与卖方的 Yield 策略结合起来看,切忌将短链逻辑静态锁死。
8. 风险与边界
在推进 SPO 的过程中,必须时刻警惕以下风险边界:
- 过度收敛:如果极端到只保留 1~2 家 SSP,会导致供给侧竞争严重不足,卖方极易顺势抬价,买方最终未必能省下预算。保留可控的多路径竞争往往是更优的博弈策略。
- 误杀稀缺库存:某些 CTV(联网电视)或特定区域的下沉流量,客观上只有通过长链才能触达。
- 索引滞后:新媒体或新
sid尚未入库时,极易被系统误判为unauthorized。 - 把 SPO 当反欺诈唯一手段:SPO 的核心职责是减税与收敛路径;至于 IVT 过滤与核验等反欺诈工作,依然需要独立且前置的模块来承担。
- 只看 hops 不看效果:必须清醒地认识到,短链中同样可能充斥着劣质的垃圾流量。
- 与 unknown delta 混淆:砍掉跳数只能降低明面上的抽成与冗余;而那无法对账的 15% 损耗,最终还要依靠 log-level 的精细对账来排查,单靠 SPO 是无法彻底消除的。
最佳实践建议:先从「核验失败降权 + hops≥4 降权」起步,观察 spend 分布与核心 KPI 两周后,再逐步收紧至席位白名单——这比第一天就上线全量黑名单要安全得多。
9. 常见误区 ↔ 正解
| 常见误区 | 正解 |
|---|---|
| SPO = 只接一家 SSP | SPO = 有依据地排序与收敛,不是垄断单一路径 |
| 跳数越少一定越赚 | 要叠加效果、可见性、合约;短链也可能贵或脏 |
| 有了 schain 就自动 SPO | schain 只提供数据;策略与工程要另建 |
| SPO 是卖方的事 | 卖方做 yield;SPO 是买方选路 |
| 与透明度无关 | 透明度是 SPO 的前提;先核验再优化 |
| 平均 hops↓ = 成功 | 可能以覆盖与 CPA 为代价;看工作媒体与 KPI |
| 策展多一跳必砍 | 可能是打包短路径;按 seat/Deal 单独评估 |
| 接更多 SSP 就更多量 | 无 SPO 时更多是自我竞争与税 |
延伸阅读
同系列(供应链透明度与优化):
- 供应链透明度(上):ads.txt / sellers.json:授权声明与对账键。
- OpenRTB schain:运行时跳数——SPO 的直接输入。
跨系列相关:
- 程序化广告生态全景:ad tech tax 与 unknown delta。
- 程序化策展:打包短路径的 Marketplace 2.0 形态。
- SSP Yield:卖方定价与买方 SPO 的对偶。
- 对接 Vungle / Pangle / Mintegral:多通路并存时 SPO 更必要。
- Last Look:选路时对垂直整合路径的风险加权。
- Bidder 请求解析:schain 在漏斗最前段如何抽出。
资料:
- IAB Tech Lab. Supply Chain Object / sellers.json
- ISBA & PwC. Programmatic Supply Chain Transparency Study:unknown delta 实证
- Prebid.org / 各 DSP 文档中的 SPO / supply path 控制说明(厂商侧实现口径不一,以你对接的 DSP 为准)
附录:术语表
- SPO(Supply Path Optimization):买方收敛供应路径、降低中间税与风险的策略与工程实践。
- Ad tech tax:预算在中间技术链路中被抽走的部分。
- Hops:
schain.nodes长度(口径需与hp约定一致)。 - DIRECT / RESELLER:ads.txt 上的直连 / 转售授权关系。
- Path score:综合跳数、核验、质量与效果的路径分数。
- Seat whitelist:按交易所席位做的供应源白名单。
- Self-competition:同一库存经多路径被同一买方重复追价。
- Working media:真正落到媒体有效曝光的预算占比。
- Fail-open / fail-closed:索引缺失时放行还是拒绝。
spo_action:日志中的允许 / 降权 / 拒投动作,迭代 SPO 的观测键。