广告系统是字节跳动收入的核心,而背后的推荐系统远比 Feed 推荐更复杂。它既要“个性化”,也要“盈利最大化”,要兼顾点击率、转化率、出价、预算等因素。这就需要多个推荐模型协同工作,完成多目标优化 + 策略融合 + 实时反馈。本篇我们将复刻一个简化版“模型集成策略”,并分析字节实际投放平台中的架构设计。
🎯 一、广告推荐系统 VS 内容推荐系统
维度 | 内容推荐 | 广告推荐 |
---|---|---|
核心目标 | 留存、满意度 | 收入、ROI |
模型指标 | CTR、DwellTime | CTR、CVR、eCPM、ROAS |
策略限制 | 几乎无限曝光 | 有预算、有频控、有投放期 |
实时性要求 | 秒级更新 | 毫秒级响应,强冷启动处理 |
广告推荐的“召回+排序”不仅关乎推荐,还决定了亿级营收的效率
🧠 二、字节跳动广告模型集成策略结构
![简化架构图-推荐模型融合逻辑]
候选广告池 → CTR模型 → eCPM计算
→ CVR模型
→ 出价模型
→ 多目标融合排序
eCPM(预估单位展示收益)计算公式:
eCPM = pCTR × pCVR × 价格 × 1000
推荐排序最终按 eCPM 降序,兼顾点击、转化与收入
🏗️ 三、实战:构建一个简化的推荐模型集成器(Node.js 版本)
假设我们有多个候选广告,需要综合多个模型输出评分结果:
1. 模拟候选广告数据
const ads = [
{ id: "ad1", pctr: 0.08, pcvr: 0.12, bid: 5.0 },
{ id: "ad2", pctr: 0.05, pcvr: 0.20, bid: 6.0 },
{ id: "ad3", pctr: 0.10, pcvr: 0.05, bid: 4.0 },
];
2. eCPM 计算模型融合策略
function calcECPM(ad) {
return ad.pctr * ad.pcvr * ad.bid * 1000;
}
ads.forEach(ad => {
ad.ecpm = calcECPM(ad);
});
const sorted = ads.sort((a, b) => b.ecpm - a.ecpm);
console.log("投放排序结果:", sorted);
3. 输出示例:
投放排序结果:
[
{ id: 'ad2', eCPM: 60 },
{ id: 'ad1', eCPM: 48 },
{ id: 'ad3', eCPM: 20 }
]
✅ 实际系统中,eCPM 还会结合分层出价、冷启动惩罚、预算约束、流量质量系数等多维因素
💡 四、字节实际策略中的集成细节
模型类型 | 作用 | 特点 |
---|---|---|
pCTR 模型 | 预估点击率 | 多塔结构 + 兴趣长链建模(DIN/DSSM) |
pCVR 模型 | 预估转化率 | 深度分类模型 + 特征交叉(DeepFM) |
ROI 模型 | 长期收益判断 | 结合行为轨迹与用户生命周期 |
多目标融合模型 | eCPM + 转化 + 留存 | 蒙特卡洛多目标调参 + 多策略集成 |
曝光控制模型 | 频次与冷启动惩罚 | 多轮投放节奏控制(如 pBid 曲线) |
✍️ 五、总结与思考
- 推荐系统不只是“谁适合谁”,广告推荐还涉及“谁更值钱”
- 字节跳动通过模型协同,让点击、转化、投放收益、流量利用率最大化
- 小型团队也可使用 pCTR + pCVR + bid 简单算出 eCPM,先跑出一个投放原型,再逐步融合更多模型
🎁 拓展推荐
- DeepFM 模型结构详解
- 字节跳动公开课:《广告排序系统中的多目标优化策略》
- 美团技术团队:《多目标排序系统的设计与演进》