跳转至

推荐与广告融合 (Recommendation-Ads Blending)

一句话概述

推荐系统和广告系统是信息流产品的两大引擎,混排策略决定了自然内容和广告的展示比例与位置,核心挑战是在商业化收入和用户体验之间找到最优平衡点。


推荐与广告的关系

flowchart TD
    A[用户请求] --> B[推荐系统<br/>目标: 用户体验/留存/时长]
    A --> C[广告系统<br/>目标: 商业收入/eCPM]
    B --> D[自然内容候选]
    C --> E[广告候选]
    D --> F[混排引擎 Blending]
    E --> F
    F --> G["最终展示列表<br/>内容, 内容, 广告, 内容, 内容, 广告, ..."]

推荐系统 vs 广告系统

维度 推荐系统 广告系统
目标 用户满意度、留存、时长 广告收入、广告主 ROI
内容来源 UGC/PGC 自然内容 广告主付费内容
排序依据 用户兴趣匹配度 eCPM (出价×预估)
约束 多样性、新鲜度 预算、频控、成本
反馈信号 点赞、评论、完播 点击、转化、付费
延迟要求 ~200ms ~100ms
商业模式 间接变现 (广告/电商) 直接变现

共同点

  • 都是"从候选集中选出最优内容展示给用户"
  • 都依赖用户画像和行为数据
  • 都使用深度学习模型进行排序
  • 都需要处理冷启动问题
  • 都需要 A/B 实验验证效果

混排策略

策略一: 固定位置插入 (Fixed Position)

展示列表:
  位置1: 自然内容
  位置2: 自然内容
  位置3: 广告 ← 固定广告位
  位置4: 自然内容
  位置5: 自然内容
  位置6: 自然内容
  位置7: 广告 ← 固定广告位
  ...

规则: 每 N 条内容插入 1 条广告 (如 N=4)

优点: 实现简单,广告密度可控
缺点: 不灵活,无法根据用户/场景优化

策略二: 动态插入 (Dynamic Insertion)

根据用户特征和上下文动态决定广告插入位置和数量

因素:
  - 用户广告容忍度 (历史负反馈率)
  - 当前 Session 已展示广告数
  - 广告质量 (eCPM、质量分)
  - 自然内容质量

示例:
  高价值用户 + 高质量广告 → 可以插入更多广告
  新用户 + 低质量广告 → 减少广告插入

策略三: 统一排序 (Unified Ranking)

将自然内容和广告放在同一个排序框架中

统一分数:
  自然内容分数 = f(用户兴趣匹配度, 内容质量)
  广告分数 = g(eCPM, 广告质量) × 转换系数

  统一排序: 按统一分数排序

转换系数的作用:
  - 将 eCPM (金钱) 和用户兴趣 (效用) 转换到同一尺度
  - 调节广告密度: 系数大 → 广告多, 系数小 → 广告少

策略四: 约束优化 (Constrained Optimization)

优化目标:
  max  α × 用户体验分 + β × 广告收入
  s.t. 广告密度 ≤ 20%
       连续广告间隔 ≥ 3
       首条不是广告
       用户负反馈率 ≤ 阈值

求解方法:
  - 整数规划 (小规模)
  - 贪心算法 (实时)
  - 强化学习 (长期优化)

广告密度控制 (Ad Load)

Ad Load 定义

Ad Load = 广告展示数 / 总展示数 (内容 + 广告)

典型值:
  信息流: 10%–20%
  搜索结果: 20%–30%
  视频平台: 5%–15%

Ad Load 与收入/体验的关系

收入/体验
    │     ╱╲ 收入
    │    ╱  ╲
    │   ╱    ╲──────
    │  ╱
    │ ╱  ╲
    │╱    ╲ 用户体验
    │      ╲──────
    └──────────────────► Ad Load
    0%   10%  20%  30%

  Ad Load 过低: 收入不足
  Ad Load 过高: 用户体验下降 → 留存下降 → 长期收入下降
  最优点: 通常在 10%–20%

动态 Ad Load

根据不同维度动态调整:

用户维度:
  高活跃用户 (DAU 贡献大): Ad Load 适当降低,保留存
  低活跃用户 (流失风险低): Ad Load 适当提高

场景维度:
  首次打开 App: Ad Load 降低
  深度浏览 (>10条): Ad Load 可适当提高

时间维度:
  广告主预算充足时: Ad Load 提高
  预算不足时: Ad Load 降低 (避免低质量广告)

用户体验保护

负反馈机制

用户负反馈信号:
  - 显式: 点击"不感兴趣"、"举报"
  - 隐式: 快速滑过、短停留时间

处理策略:
  1. 即时响应: 屏蔽该广告/广告主
  2. 短期调整: 降低该用户的 Ad Load
  3. 长期学习: 更新用户广告偏好模型
  4. 全局优化: 负反馈率高的广告降权

广告疲劳控制

同一广告重复展示 → 效果递减 + 体验下降

控制策略:
  - 频次控制: 同一广告每天最多展示 N 次
  - 创意轮换: 同一广告主的不同创意交替展示
  - 衰减因子: 展示次数越多,排序分越低
    score = base_score × decay^(展示次数)
    decay = 0.9 → 展示3次后分数降为 0.73

广告与内容的一致性

原则: 广告应与周围内容风格一致

好的体验:
  用户在看美食内容 → 插入美食相关广告
  用户在看科技内容 → 插入数码产品广告

差的体验:
  用户在看严肃新闻 → 插入游戏广告
  用户在看母婴内容 → 插入不相关广告

长期价值优化

短期 vs 长期

短期优化: 最大化当次请求的 eCPM
  → 可能展示高 eCPM 但低质量的广告
  → 用户体验下降 → 留存下降

长期优化: 最大化用户生命周期广告收入
  LTV_ad = Σ (每天广告收入 × 留存概率)

  需要平衡:
  - 当前广告收入
  - 对用户留存的影响
  - 对用户活跃度的影响

强化学习方法

State:  (用户特征, Session状态, 已展示广告数, 负反馈历史)
Action: (是否插入广告, 选择哪个广告)
Reward: 短期收入 + γ × 长期留存价值

模型: DQN / Actor-Critic

挑战:
  - 留存的反馈延迟很长 (天/周级别)
  - 需要大量数据和长期实验
  - 线上探索风险高

搜索广告与自然结果混排

搜索结果页混排示例:

位置 类型 内容
1 广告 品牌A官方旗舰店
2 广告 品牌B 限时优惠
3 自然结果 自然结果1
4 自然结果 自然结果2
5 广告 品牌C 新品上市
6 自然结果 自然结果3

排序逻辑: 广告按 eCPM × 质量分,自然结果按相关性分数,广告插入固定/动态位置


电商广告与推荐混排

电商推荐页混排示例:

推荐1 商品 ¥99 [广告] 商品A ¥199 推荐2 商品 ¥59
推荐3 商品 推荐4 商品 [广告] 商品B

特点:

  • 广告商品与推荐商品形态一致 (原生)
  • 用户难以区分广告和推荐
  • 需要明确标注"广告"/"推广"

效果评估

核心指标

指标 说明 目标
广告收入 总广告收入 / DAU 广告收入 提升
用户留存 次日/7日/30日留存率 不下降
用户时长 人均使用时长 不下降
负反馈率 广告负反馈 / 广告展示 降低
Ad Load 广告占比 可控范围内
广告CTR 广告点击率 提升

A/B 实验设计

实验组设计:
  对照组: 当前混排策略
  实验组: 新混排策略

关键:
  - 用户级别分流 (不是请求级别)
  - 观察周期足够长 (≥ 7天,看留存影响)
  - 同时观察短期和长期指标
  - 注意 novelty effect (新鲜感效应)

与大数据开发的关联

  • 混排日志: 记录每次混排决策的详细日志
  • Ad Load 监控: 实时监控各维度的广告密度
  • 用户体验指标: 负反馈率、留存率等指标的计算
  • A/B 实验平台: 分流、指标计算、显著性检验
  • 长期价值数据: 用户 LTV 的计算和预测
  • 实时特征: Session 级别的实时特征计算

面试高频问题

  1. 推荐系统和广告系统的核心区别是什么?
  2. 常见的混排策略有哪些?各自的优缺点?
  3. 如何平衡广告收入和用户体验?
  4. Ad Load 如何确定最优值?
  5. 如何评估混排策略的效果?需要关注哪些指标?

推荐阅读