AdTech Engineering · Operations Playbook

流量分层与动态底价
方法、策略与算法实现

把"分层"和"底价"当作两个可独立求解、又必须联合调优的优化问题来对待:一个是给流量定档,一个是给每一档定最低成交价。这份手册给出从统计基线到强化学习的完整算法谱系、可直接改写的伪代码,以及 2026 年必须知道的合规红线。

视角:供给侧 / ADX·SSP 运营 数据截止:2026 年 10 月 配套:前一份市场与运营框架报告
先定义你到底在优化什么
# 对每个曝光请求的上下文 c,选择一个底价 r # 目标是让该流量簇的总收入最大,而不是单次请求最大 max R(r | c) = r × P(bid ≥ r | c) └─单价─┘ └──中标/填充概率──┘ # 约束:填充率 ≥ F_min,且不得低于成本/合约底线 # 一阶条件(F 连续可微时): r* 满足 1 − F(r) − r·f(r) = 0 # 若出价分布满足正则性(MHR),r* = ψ⁻¹(0),即"垄断价"

这条公式是全篇的锚点。它说明了两件事:① 底价不是越高越好——提价同时压低中标概率,收入是乘积,存在唯一最优点;② 你真正的建模对象是出价分布 F(或等价的中标概率曲线),而不是"一个价格数字"。所有算法,本质都是在对 F 做估计。

01

流量分层:先给流量定档,再谈定价

底价是"给一档流量定一个价",所以分层的质量直接决定底价算法的上限。分层做粗了,再好的定价模型也只能在错误的粒度上做优化。

分层的三个层次

① 维度层:用哪些信号切流量

分层维度决定了你能切多细,也决定了样本量是否足够。实践中的信号顺序大致是:

类别典型特征分层作用
库存广告位 ID、尺寸、广告形式、页面位置、可见性决定基础价值,是分层的第一主键
媒体 / 应用媒体 ID、App 分类、内容主题、品牌安全等级决定买家池与品牌适配度
用户 / 设备设备类型、OS、运营商、地域、价值分决定需求方出价意愿(iOS/一线城市通常更高价)
上下文 / 时序时段、星期、大促节点、竞争密度捕捉需求侧波动,是动态定价的关键输入

切分粒度要受"最小样本量"约束:一个流量簇每周样本不足,估计出的分布就不稳定,宁可回退到上一级粒度。

② 方法层:怎么把流量归到档位

从易到难有四条路径,绝大多数团队应该按顺序演进:

  1. 规则打标(IF-THEN)。用人工规则给流量贴标签,如"WiFi × 一线城市 × 开屏 = 高价值档"。简单直观,但规则一多就互相冲突,且无法捕捉需求侧变化。适合冷启动。
  2. 分位数分桶。对某个价值代理指标(历史 eCPM、历史成交价)做分位数切分,把流量均匀分进 N 个档。优点是每档样本量自动均衡,是实现"动态底价第一版"最实用的选择。
  3. 聚类 / 监督打分。用 K-means、GBDT 或嵌入向量对流量簇聚类,再由模型输出一个连续"价值分",按分数切档。能捕捉非线性关系,但对数据量和特征工程要求高。
  4. 在线实时分层。把分层做成在线推理的一部分,同一批流量在不同时段、不同竞争密度下可落到不同档位。这是成熟平台的做法——分层是动态复用的,不是静态归属。

③ 映射层:档位对应哪种交易模式

分层的结果必须落到具体的售卖方式上,否则只是标签游戏。典型的映射阶梯:

PDB
最高档 · 保量定投
›
PD
固定价优先成交
›
PMP
邀请制竞价
›
Open Auction
公开竞价 · 走量
›
兜底 ADN
长尾保底填充
分层的一条硬规则 高档流量的判定不能只看历史价格,还要看可售性:如果一档流量虽然历史 eCPM 高,但买方数量少、成交不稳定,把它放进 PDB 反而会违约。分层要同时考虑"价值"和"需求的确定性"。
02

动态底价:从理论到落地的四级算法谱系

2.1 理论基础:Myerson 保留了什么问题,没解决什么问题

底价在学术上叫保留价(Reserve Price),MRC 把"底价"与"保留价"视为同义词。1981 年 Myerson(以及独立的 Riley 与 Samuelson)证明:当买家估值独立同分布且满足正则性条件时,收入最优的拍卖就是"二价拍卖 + 一个精心选择的保留价",该保留价等于该分布下的垄断价,记作 r* = ψ⁻¹(0)(ψ 为虚拟估值函数)。

这条结论给出了方向的正确性,但在工程上有三个现实障碍:

另一个重要的边界条件是 Bulow–Klemperer 的结论:在单物品拍卖里,"多吸引一个买家"带来的收入提升,往往超过"把保留价调到最优"。所以底价优化不能替代需求侧拓展——引入一个高价 DSP,常常比把底价算法调优 5% 更值钱。

2.2 关键机制区分:硬底价、软底价、第一/第二价格

机制作用实现要点
硬底价 Hard Floor低于底价的出价被直接丢弃,不参与胜出OpenRTB 中由 bidfloor 承载;丢标原因码 100
软底价 Soft Floor不改变"谁能赢",只改变"赢家付多少"OpenRTB 没有标准字段;合规敏感,需谨慎使用
Deal 底价私有交易有独立底价不继承展示层币种;丢标原因码 101
二价拍卖赢家支付"次高价 + 一美分";此时底价会直接决定成交价若次高价低于底价,成交价被抬到底价
一价拍卖赢家支付自己的出价;底价只做"资格筛选"Google Ad Manager 自 2019 年转向统一一价拍卖

这个区别极其重要:同样的底价,在二价拍卖里是"定价工具",在一价拍卖里只是"过滤器"。调参前必须先确认自己平台用的是哪套机制。

一个说明机制差异的最小例子

两家 DSP 对某曝光估值分别为 $1 和 $3。二价拍卖下,若底价设 $0.50,$3 的买家胜出但只付 $1;把底价提到 $2.50,同一个赢家要付 $2.50——价格由底价而非对手决定。换成一价拍卖,面对 $1 和 $2 的出价,$2.50 的底价会让这笔交易直接流拍,除非买家主动抬价。

2.3 四级算法谱系

下面的阶梯按"实现难度 / 数据需求 / 收益上限"排列,建议逐级演进,而不是一步跳到强化学习。

LEVEL 1统计基线法
对每个流量簇,取历史成交价的分位数(如 P50 / P60 / P75)乘以一个系数作为底价。任何动态底价系统的第一版都应该从这里开始——它给你一个干净的 Baseline,用来判断"动态底价对这个平台到底值不值得做"。
实现 数据需求 收益上限
LEVEL 2分布估计 + 期望收入最大化
不满足于取分位数,而是估计整个出价分布(经验分布 / 分位数回归 / 贝叶斯后验),再在候选价网格上直接枚举求解 max r·P(bid≥r)。数学上最完备,代价是必须处理数据截断问题。
实现 数据需求 收益上限
LEVEL 3监督学习模型法
用 GBDT / 深度网络,以请求特征为输入,直接预测最优底价或出价分布的分位数。优势是能泛化到样本稀疏的流量簇,把"高维特征 → 合理底价"的映射学出来。这是目前工业界的主力方案。
实现 数据需求 收益上限
LEVEL 4上下文老虎机 / 强化学习
把底价决策建模为 MDP:状态 = 请求特征 + 近窗统计,动作 = 底价档位,奖励 = 窗口内实际收入(含延迟回报)。用 LinUCB / Thompson Sampling / PPO 学习长期最优策略。头部平台自 2025 年起逐步标配,但必须配套延迟回报建模与安全约束。
实现 数据需求 收益上限

"收益上限"指理论上限,不代表实际增益;不同流量类型差异极大。行业实测口径下(非严格实验),规则式调价上限约个位数百分比,模型式在稳定期约 12%–18%,强化学习在长链路场景(游戏、社交)可能更高——但这些数字来自厂商自述,务必用自平台 A/B 验证。

03

算法实现:可改写的伪代码

3.1 Level 1:分位数基线(第一天就能上线)

# 输入:按流量簇聚合的历史成交价
# 输出:每个流量簇的静态底价建议
def baseline_floor(cluster_prices, quantile=0.50, k=0.90,
                     floor_min=0.10, floor_max=30.0):
    if len(cluster_prices) < MIN_SAMPLES:      # 样本不足则回退上级粒度
        return None, "fallback"
    q = percentile(cluster_prices, quantile)     # 如 P50
    r = clamp(q * k, floor_min, floor_max)       # k 为保守系数(<1 留填充空间)
    return r, "baseline"

这一版的全部价值是"提供对照"。上线后一定要能回答:动态底价相比固定底价,收入、填充率、eCPM 分别变了多少。

3.2 Level 2:直接求解期望收入最大化

核心洞察是:不需要知道解析的最优解,只要在候选价网格上枚举,取期望收入最大的那个价即可。

# 离散枚举求最优底价(经验分布版)
# R(r) = r * P(bid >= r)   —— 期望收入
def optimal_floor(bids, floor_min, floor_max, grid=64):
    best_r, best_rev = floor_min, -1
    for r in linspace(floor_min, floor_max, grid):
        p_win = mean([b >= r for b in bids])   # 中标/填充概率
        rev   = r * p_win                          # 期望收入
        if rev > best_rev:
            best_r, best_rev = r, rev
    return best_r                              # 该流量簇的建议底价
最大的坑:数据截断(censoring) bids 里只有"曾经胜出"的出价,也就是全部 ≥ 当前底价。用这份数据估计出的分布,会被系统性高估。两个必要的补救:
① 探索流量——按一定比例随机降低底价(见 3.5 的 skipRate),专门采集低价区的出价样本;
② 删失回归——把"低于底价被丢弃"当作右截断/左截断问题,用生存分析或 Tobit 类模型校正,而不是直接当缺失值丢掉。

3.3 Level 3:监督学习模型

把底价预测变成一个回归(或分位数回归)问题。关键在特征与标签的设计。

# 特征工程(示意)
x = [
  embed(ad_slot_id), app_category, ad_format, ad_size,
  device_type, os, carrier, geo_city,
  hour_of_day, day_of_week, is_holiday_promo,
  user_value_score,                 # 用户价值分
  hist_win_rate_1h,                 # 近 1 小时该簇中标率
  hist_bid_p25, hist_bid_p50, hist_bid_p75, hist_bid_p90,
  competition_qps,                  # 竞争密度(实时竞价请求量)
  dsp_count,                        # 有效参与买家数
]

# 两种建模方式
# A. 直接回归最优底价(标签来自离线回放/反事实估计)
y_A = optimal_floor_offline(x)

# B. 分位数回归,输出出价分布的分位点,再在线枚举求最优
q50, q75, q90 = lgbm_quantile(x, alphas=[0.5, 0.75, 0.9])

def predict_floor(x, floor_min, floor_max, seg_mult):
    qs = lgbm_quantile(x)
    r  = argmax_revenue(qs)          # 在分位点构成的经验分布上求最优
    r  = r * seg_mult                # 分层系数(来自流量分档)
    return clamp(r, floor_min, floor_max)   # 强制安全边界

训练标签怎么来?——这是最难的一步

你无法直接观测"如果当时设了另一个底价会怎样"。可行的标签构造路径:

  • 随机化实验:在一小部分流量上随机化底价,用这批数据学习"底价 → 填充率"的真实曲线。样本代价高,但最可信。
  • 离线回放(replay):用历史出价记录,对每个候选底价模拟中标结果,构造反事实标签。前提是记录足够完整。
  • 逆概率加权(IPW):对因探索策略不同而造成的样本偏差做校正。

3.4 Level 4:上下文老虎机与强化学习

监督学习优化的是"单次决策的即时期望",而 RL 面向的是长期累积收益——因为买家的行为会对底价作出反应(长期设高价,DSP 会学着降低出价或退出)。

# 上下文老虎机(LinUCB 简化版)
# 每个流量簇 = 一个上下文;动作 = 离散底价档位 {r1..rK}
# 奖励 = 成交收入 − λ × 未填充惩罚
for request in stream:
    x = context_features(request)
    for k in arms:                        # 每个底价档位
        score[k] = x·theta[k] + alpha * sqrt(x·A[k]^-1·x)   # 均值+探索
    k = argmax(score)
    r = arms[k]
    revenue, filled = run_auction(request, floor=r)
    reward = revenue - lambda * (1 - filled)
    update(A[k], b[k], x, reward)          # 在线更新

# 进阶:PPO / 离线 RL(IQL 等)
# state  = 请求特征 + 近窗统计量(填充率、预算消耗、竞争密度)
# action = 底价档位
# reward = 窗口内净收入(含延迟回报,需做 return 建模)
RL 的三个安全阀(缺一不可)
  • 延迟回报建模。曝光到转化有延迟,奖励不能只看即时成交,否则模型会学会"牺牲长期填充换短期高价"。
  • 硬边界 clamp。无论如何探索,底价必须被限制在 [floor_min, floor_max] 内,且不得低于合约/成本底线。
  • 影子模式先行。新策略先只记录不生效(shadow),与线上策略对比足够长的时间再灰度放量。

3.5 工程上必须处理的六个细节

机制作用参考实现
随机跳过 / skipRate按比例关掉底价,采集低价区样本、度量底价真实效应Prebid.js Price Floors Module 提供 0–100 的 skipRate
下限保护 / floorMin防止算法输出过低破坏定价Prebid 同名参数;Ad Manager 的 floor_min
Deal 豁免私有交易默认不受展示层底价约束Prebid 中 deal bids 默认豁免
规则数量上限定价规则过多会互相冲突、难以维护Ad Manager 定价规则上限约 200 条/网络(截至 2026-09)
计价口径底价通常按分成后的媒体实收衡量80/20 分成下,$1 的 bid 对媒体只值 $0.80,高于此的底价会把它过滤掉
时延预算定价推理必须在竞价时延预算内完成整体链路通常 <100–120ms;模型要轻量化、可缓存

3.6 联合优化:分层 × 底价 × 编排

三件事不能分开做:流量分档、底价定价、以及"这次请求走哪条通道"的编排(Waterfall 瀑布流 vs Unified 统一竞价 vs Hybrid 混合)。

# 混合编排的决策逻辑
def route(request, segment):
    # 1. 该流量档是否有保量合约待履约?
    if has_guaranteed_contract(segment) and contract_remaining() > 0:
        return "PDB"
    # 2. 预估统一竞价与固定价各自的期望收入
    exp_rtb = predict_revenue(request, floor=model_floor(request))
    exp_deal = best_deal_price(request)
    if exp_deal > exp_rtb:
        return "PD"
    # 3. 否则走竞价,未填充则回落兜底
    r = model_floor(request)
    result = run_unified_auction(request, floor=r)
    return result if result.filled else fallback_adn(request)
一个理论提醒 研究(Balseiro 等)指出:当渠道必须遵守发布商设置的底价时,"局部最优"可能远差于"全局最优"(甚至相差无限)。也就是说,各流量簇分别调最优底价,未必等于全局最优——因为买家的预算与注意力会在簇之间流动。做全局优化时,要考虑跨簇的预算再分配效应。
04

验证与监控:怎么证明它真的有效

实验设计

核心监控指标

指标含义异常信号
填充率成交 ÷ 请求持续下滑 = 底价过高或需求侧流失
eCPM收入 ×1000 ÷ 展示上升但填充率暴跌 = 短期虚高,需警惕总收入
总收入 / 净收入最终目标函数唯一可以单独用来下结论的指标
中标率赢竞价 ÷ 参与竞价分层与底价是否匹配需求侧
底价—填充率弹性底价每变动 1%,填充率变化多少弹性异常大 = 定价过于激进
DSP 维度流失各需求方参与度与预算贡献某 DSP 因底价过高退出 = 生态受损

真实数据给出的"权衡"长什么样

Yahoo 在 2022 年三季度对算法底价的公开数据很能说明问题:其交易所成交展示下降 13.86%,但 eCPM 上升 16.57%;交易所收入增长 0.41%,加上未售出流量通过其他通道售出后,总增长 1.27%。
读法:底价优化的典型效果不是"收入大涨",而是用更少的展示量换更高的单价,净收入小幅改善。如果你的团队期待的是两位数增长,大概率会失望——真正的大增量来自需求侧和供给质量,而不是把底价调得更聪明。

05

2026 年必须知道的合规红线

底价不再只是商业参数。过去 18 个月,监管和司法机构已经把"底价如何设置、是否披露、能否按买家区分"变成了法律问题。做这块的运营和工程,需要知道边界在哪。

时间事件对运营的含义
2026-01-29MRC 发布《数字广告拍卖透明度标准》最终版闭环拍卖方需在拍卖前后披露保留价;明确"底价不应按买家分别设置"
2026-06-26IAB Tech Lab 发布最终版《程序化拍卖定义》行业首次统一定义"什么算一次程序化拍卖"(15 个术语、12 步流程)
2026-09-02美国法院就谷歌广告技术案裁定:不拆分 AdX,但要求放宽竞价规则法院要求废止统一定价规则、开放分买家底价,并向竞品广告服务器提供 AdX 实时竞价数据
2026-08-31FTC 与 22 州起诉亚马逊,涉约 200 亿美元"隐性广告附加费"指控核心是未披露的保留价;软底价(改变成交价而非资格)成为争议焦点
三条实操红线
  • 披露。如果平台属于"闭环拍卖方",保留价的拍卖前后披露可能成为强制要求,产品设计要预留这个能力。
  • 分买家底价要谨慎。MRC 标准明确"底价不应按买家设置";但 2026 年 9 月的法院裁定又要求谷歌开放分买家底价。两股力量方向相反——做这块功能前,务必先确认适用法域与最新判例。
  • 软底价要透明。软底价没有 OpenRTB 标准字段,且正是 FTC 诉亚马逊的核心争议点。要使用就必须有清晰披露机制。

一个容易被忽略的历史教训

Yahoo 在 2008 年对 46 万个关键词做保留价实验,结果并不一致:结果页广告数平均减少约 1 条,高频搜索词上"每次搜索收入"上升 3.9%,但在最优保留价估计低于 20 美分的繁忙词上,收入反而下降 8.7%。
结论:底价优化不存在"普适最优"——低价值流量的最优底价可能就是"不设底价"。按流量簇分别决策,而不是全平台一刀切,是唯一正确的做法。

06

落地路线图与来源

四阶段推进

阶段目标交付物
第 0–1 月建立 Baseline流量分层标签体系;分位数基线底价;对照 holdout 组;核心指标看板
第 2–3 月分布估计 + 枚举最优探索流量机制(skipRate);删失校正;期望收入枚举求解器
第 4–6 月模型化分位数回归模型;特征管道;在线推理服务;A/B 平台
第 6 月+长期优化上下文老虎机 / RL 智能体;延迟回报建模;影子模式与安全约束;合规披露能力

主要来源

  1. PPC Land:《Explaining price floor》——底价定义、OpenRTB 字段(bidfloor/bidfloorcur/mincpmpersec/durfloors)、丢标原因码、Google Ad Manager 定价规则、Prebid Price Floors Module、Yahoo 历史实验数据、MRC 与 FTC 相关进展。
    https://ppc.land/price-floor/
  2. Myerson, R.(1981)《Optimal Auction Design》,Mathematics of Operations Research——收入最优拍卖与保留价的理论基础;以及 Riley & Samuelson(1981)、Bulow & Klemperer(1996)关于"多一个买家"的结论。
  3. Paes Leme 等:《Learning Algorithms for Second-Price Auctions with Reserve》(JMLR)、《Revenue Optimization with Approximate Bid Predictions》(arXiv:1706.04732)——从竞价数据学习保留价的算法框架。
  4. 《Robust Clearing Price Mechanisms for Reserve Price Optimization》(arXiv:2107.04638)——非凸性、稳健性问题。
  5. Balseiro 等(2021–2023)关于自动出价与拍卖机制的综述——"局部最优 vs 全局最优"的结论。
  6. CSDN《拍卖与博弈:计算广告中的底价问题》——统计均值法、贝叶斯法、ONE-SHOT 三类底价算法路径。
    blog.csdn.net/u013298300/article/details/96727037
  7. 快手《生成式强化学习在广告自动出价场景的技术实践》——从 PID/MPC 到 RL 的演进、数字沙盒思路。
  8. 知乎《从 Myerson 拍卖理论到广告动态底价算法》。
  9. Prebid.js Price Floors Module 文档;Google Ad Manager Unified Pricing Rules 相关公告与帮助中心(规则数量上限、Target CPM 模式等)。
使用说明 文中算法伪代码为通用框架,需按自身平台机制(一价/二价、闭环/开放、是否受发布商底价约束)调整。厂商自述的收益数字已标注,请勿直接引用为自身预期;建议以自平台随机化实验为准。