广告系统工程实践:PI 控制器实现 CTR 精准稳态控制

目录

广告系统工程实践:PI 控制器实现 CTR 精准稳态控制

背景

在 Adx 系统中,CTR 与 DSP 出价强相关:CTR 越高,DSP 出价越高,系统整体营收随之提升。但与此同时,过高的 CTR 往往伴随着更高的媒体投诉率与合规风险。

因此,系统本质上是在做一个多目标约束优化问题

在媒体可接受范围内,使 CTR 尽可能接近目标值,从而实现收益最大化。

不同媒体、不同流量对 CTR 的敏感度差异显著,统一阈值不可行。因此我们引入:

  • 媒体代码位级目标 CTR
  • 闭环调控系统(PI 控制)

目标是:

使实际 CTR 稳定、可控地逼近目标 CTR,而非追求极值。

总体思路(控制系统建模)

该问题可以抽象为一个典型的反馈控制系统

  • 系统输出:实际 CTR
  • 目标值:Target CTR
  • 控制量:高 CTR 策略(A+)的流量占比
  • 扰动项:用户变化、DSP 出价波动、媒体流量结构变化

我们采用 PI 控制器(比例 + 积分)

  • P(比例项):快速响应当前误差
  • I(积分项):消除长期稳态偏差

控制核心

  1. 定期采样实际 CTR

  2. 计算误差:

    error = actual_ctr - target_ctr
    
  3. 根据误差动态调整 A+ 策略占比

  4. 控制调节节奏,避免震荡与过冲

分层策略包设计

为什么需要分层

不同人群对“高 CTR 策略”的容忍度不同:

  • 一线城市:敏感度高(投诉风险高)
  • 下沉市场:容忍度相对更高

因此将流量划分为多个等级(如 7 层):

等级越高,对 CTR 提升的“责任”越大

策略包结构

每个等级包含:

  • 高 CTR 策略包(A+)
  • 低 CTR 策略包(A)

控制方式:

  • 仅调整 A+ 占比(x%)
  • A 自动补齐(100% - x%)

CTR 调整规则(分层控制)

当 actual CTR < target CTR

  • 高等级 → 低等级逐层调节
  • 提升 A+ 占比
  • 单层存在上限(如 90%)
  • 达到上限后向下一层扩展(爬楼机制

当 actual CTR > target CTR

  • 从当前层开始回退
  • 逐级降低 A+ 占比
  • 抑制过冲

PI 控制的工程化设计

1. 快速区 & 精细区(非线性调节)

为兼顾收敛速度与稳定性,引入分段控制:

  • **快速区( error > 20%)**
    • 增大调节步长
    • 快速逼近目标
  • **精细区( error ≤ 20%)**
    • 减小调节幅度
    • 抑制震荡

本质:非线性 PI(Gain Scheduling)

2. 死区机制(Dead Zone)

|actual_ctr - target_ctr| ≤ 2%

作用:

  • 消除抖动
  • 提升稳定性
  • 降低无效计算

3. 积分偏置修正(Bias)

工程中常见问题:

实际 CTR 长期偏离目标 CTR(系统性偏差)

原因:

  • 数据延迟
  • 采样误差
  • 策略执行偏差

解决方案:

  • 引入 bias 参数

    effective_target = target_ctr + bias
    

本质:积分项的工程替代实现

4. 层级爬楼机制(Saturation Handling)

当某一层:

  • A+ 占比已达上限
  • 无可调空间

则自动切换到下一层继续调节

作用:

  • 保证控制系统始终具备调节能力
  • 避免控制失效

5. 概率归一化

在多策略组合下:

  • 所有策略下发概率需满足:

    Σ p_i = 1
    

避免:

  • 流量分配异常
  • CTR 统计失真

数据统计与依赖(工程实现重点)

1. CTR 统计策略

采用分层回溯机制:

  • 优先:最近 1 小时数据
  • 不足:回溯至 ≤ 24 小时

目标:

平衡实时性 vs 稳定性

2. 多维统计

系统依赖以下核心指标:

  • DSP × 媒体代码位 CTR(主控制信号)
  • 策略包级 CTR(用于高低策略识别)
  • 可调节区间(上下界)

3. CTR 可调节区间

为避免不可达目标,引入:

  • 下限:低 CTR 策略历史表现
  • 上限:高 CTR 策略历史表现

用于:

  • 指导目标 CTR 设置
  • 防止系统进入不可控区

冷启动与状态迁移

冷启动问题

新流量:

  • 无历史数据
  • 无法区分策略优劣

冷启动策略

  • 同层策略均分流量
  • 引入“最保守策略”兜底
  • 限制 A+ 初始占比

状态迁移路径

冷启动 → 初始调控 → 稳态收敛

收敛过程(系统行为)

典型收敛路径:

  1. 从高层开始调节
  2. 多层联动
  3. CTR 逐步逼近目标
  4. 进入死区稳定

线上效果与稳定性分析

  1. 实验条件:目标 CTR = 25%

  2. 小时级别效果

  3. 天级别效果

  4. 多次触发 DEAD_ZONE

    1. <font color=blut size=4.5>DEAD_ZONE</font> 日志含义说明:表示当前实际 CTR 已进入控制 <font color=blue size=4.5>死区</font>。实际 CTR 与目标 CTR 的偏差在 ±2% 以内

实际观测现象:

  • CTR 在目标值附近小幅波动(如 0.25)
  • error ≈ 0
  • 多次触发 DEAD_ZONE

结论:

这是典型的控制系统稳态表现:

  • 系统已收敛
  • 无明显震荡
  • 流量分配稳定

在线流量分配(执行层)

在线流量分配模块是 CTR 控制系统的核心执行层,负责将离线策略与实时反馈结合,实现流量的动态调度与精细化控制。

1.阶梯放量

针对新接入 CTR 控制的媒体代码位,采用渐进式放量机制

  • 初始阶段限制流量规模,避免冷启动阶段数据不稳定导致 CTR 剧烈波动

  • 随着数据积累与效果稳定,逐步提升流量上限(阶梯式增长)

核心价值:降低系统初期不确定性风险,保证 CTR 控制过程平滑、可控

2.探索与利用(Exploration vs Exploitation)

在流量分配中引入经典的探索-利用机制:

  • 利用(≈95%):优先分配给当前表现稳定、CTR 较高的策略包,保障整体收益
  • 探索(≈5%):分配少量随机流量给其他策略包,用于持续评估其潜在效果

本质:这是一个轻量级的在线学习机制,为策略调优提供数据基础

3. 黑白名单机制

【目标】通过引入业务规则,对流量进行先验干预,在模型决策之外增加一层可控的策略约束,实现 CTR 的稳定提升与风险控制。

  • 【白名单】(高质量流量)
    • 【定义】高价值、高转化潜力的人群或请求
    • 【策略】
      • 优先分配至高 CTR 策略包(如高出价、强转化策略)
      • 提升其参与优质流量竞争的机会
    • 【示例】
      • 本次竞胜广告出价较高
      • 用户历史转化率 / 唤起率较高
  • 【黑名单】(低质量 / 风险流量)
    • 【定义】低质量或存在风险的流量
    • 【策略】
      • 降级处理(分配至低 CTR 策略包)
      • 或限制参与高价值策略分配
    • 【示例】
      • 请求历史唤起率长期偏低
      • 用户行为异常或疑似无效流量

本质上是将业务经验显式结构化,嵌入在线决策流程中

4.人群分类

基于用户特征进行精细化分层,实现“人群 × 策略”的匹配:

  • 【输入特征】
    • 用户标签(性别、年龄、地域等)
    • 行为数据(点击、转化、活跃度等)
    • 用户质量分(LTV、转化概率等)
  • 【输出结果】
    • 将用户划分为多个等级(高价值 / 中等 / 低价值)
    • 匹配对应 CTR 水平的策略包
  • 【补充说明】
    • 不同人群对广告的响应差异显著
    • 通过分层可提升策略命中率与 CTR 表现

本质:从“统一策略”演进为“人群定制策略”

5.Smart-Job(离线支撑)

Smart-Job 作为离线数据处理与策略生成模块,为在线分配提供决策依据

离线职责:

  • 统计各策略包历史 CTR、CVR、收益等核心指标
  • 构建策略分层(如 CTR 分位:0.1% → 95%)
  • 生成策略包组合(如高CTR包、低CTR包)
  • 输出黑白名单、人群标签、策略映射关系

补充说明:

  • 离线负责“建模与分层”,在线负责“决策与执行
  • 在线效果依赖离线数据质量与更新频率

职责划分:

离线负责 “算”,在线负责”判“

流量分布调控(敏感度机制)

媒体代码位新增 **「敏感度分级」** 机制,用于提升 CTR 控制的精细化程度与稳定性。

  1. **【配置设计】**

    后台为媒体代码位新增三级敏感度配置:

    1. 高敏:对 CTR 波动响应快,调节幅度大,适用于对效果要求高、容忍波动低的流量

    2. 中敏:在稳定性与调节速度之间平衡,作为默认策略

    3. 低敏:控制节奏平缓,避免频繁调整,适用于对稳定性要求高的流量

      说明:敏感度本质上是对“控制系统增益”的抽象,不同敏感度对应不同的调控强度与响应速度。

  2. **【策略目的】**

    当实际 CTR 偏离目标 CTR 时,通过 **动态调整流量分布结构**,驱动整体 CTR 向目标值收敛。

    补充说明:

    • 不直接修改模型打分或出价,而是通过流量结构调控实现目标控制
    • 本质是一种“间接控制策略”,降低对模型稳定性的影响
    • 适用于模型短期不可调或存在延迟的场景(如 LR / 大模型在线学习滞后)
  3. **【设计思路】**
    1. 核心设计思想:

      1. 图中绿色区间表示系统当前可通过流量调控实现的 CTR 可达范围(可调区间)

      2. 目标 CTR 低于当前可调区间下界 时:

        为减小偏差,系统会通过流量重分配,逐步降低高 CTR 层级的流量占比(高 CTR 用户下沉),从而推动整体 CTR 向目标值收敛

      3. 目标 CTR 位于可调区间内 时:

        当前流量结构已能够覆盖目标值,系统无需进行额外调控,仅需保持现有分布即可稳定逼近目标 CTR

      4. 目标 CTR 高于当前可调区间上界 时:

        受限于系统当前能力,仅低敏媒体会进行渐进式调整:通过减少低 CTR 层级流量占比(低 CTR 用户上移),以有限幅度拉升整体 CTR,逐步逼近目标值

  4. **【流量调节策略】**
    1. 拉升 CTR(CTR < Target)

      1. 策略原则:提升高 CTR 层的流量占比

      2. 执行路径:优先从低 CTR 层开始削减流量

      3. 补充说明

        1. 避免直接大幅增加高层流量,防止系统震荡
        2. 采用“逐层收缩”的方式,控制调节节奏

    2. 打压 CTR(CTR > Target)

      1. 策略原则:降低高 CTR 层的流量占比

      2. 执行路径:优先从高 CTR 层开始削减流量

      3. 补充说明

        1. 防止高 CTR 流量过度集中导致成本异常或不稳定
        2. 通过释放部分流量至低层,实现整体 CTR 下调

    3. 不同敏感度的策略差异

      1. 不同敏感度对应不同策略包组合:
        • 高敏:策略差异明显(高CTR包 vs 低CTR包区分强)
        • 中敏:策略差异适中
        • 低敏:策略趋同,主要保障稳定性
      2. 补充说明:
        1. 敏感度不仅影响“调多少”,还影响“可调空间有多大”
        2. 本质上是对“策略分层梯度”的控制

  5. **【小结】**

    该方案通过引入“敏感度分级 + 流量分层”的机制,实现了对 CTR 的结构性调控,具有以下优势:

    • 解耦模型与控制:无需频繁调整模型或出价策略
    • 稳定性强:通过分层渐进调节,避免系统震荡
    • 可解释性高:CTR 变化来源清晰(流量占比变化)
    • 扩展性好:可结合 PID、动态阈值等进一步演进为闭环控制系统

从本质上看,这是将广告系统中的 CTR 控制问题,转化为一个“多层流量分配的反馈控制问题”。

总结

该方案的核心价值在于:

1. 控制理论落地

  • 使用 PI 控制实现闭环调节
  • 支持稳定收敛与抗扰动

2. 工程增强能力

  • 快慢调节区(提升收敛速度)
  • 死区机制(提升稳定性)
  • 爬楼机制(避免饱和失效)
  • bias 修正(消除系统偏差)

3. 风险可控

  • 分层策略分摊风险
  • CTR 上下界约束

这不是一个“追求最高 CTR”的系统,而是一个 在收益、风险与稳定性之间做最优控制的工程系统。