推荐与广告融合 (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 与收入/体验的关系¶
收入/体验
▲
│ ╱╲ 收入
│ ╱ ╲
│ ╱ ╲──────
│ ╱
│ ╱ ╲
│╱ ╲ 用户体验
│ ╲──────
└──────────────────► 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 级别的实时特征计算
面试高频问题¶
- 推荐系统和广告系统的核心区别是什么?
- 常见的混排策略有哪些?各自的优缺点?
- 如何平衡广告收入和用户体验?
- Ad Load 如何确定最优值?
- 如何评估混排策略的效果?需要关注哪些指标?
推荐阅读¶
- Ads Allocation in Feed via Constrained Optimization — Meta
- Deep Reinforcement Learning for Ad Allocation
- 《深度学习推荐系统》— 王喆 (推荐系统基础)