从ESMM到ESM²:多任务学习如何重塑电商CVR预估
2026/7/27 23:42:20 网站建设 项目流程

1. 电商CVR预估的痛点与挑战

在电商推荐系统中,转化率(CVR)预估一直是个让人头疼的问题。想象一下这样的场景:用户浏览商品列表时,系统需要预测用户点击某个商品后最终购买的概率。这个看似简单的任务背后,却藏着两个技术上的"大坑"。

第一个坑叫样本选择偏差。传统做法是用点击后的数据训练模型——点击未购买是负样本,点击并购买是正样本。但实际应用时,模型要对所有曝光商品做预测,包括那些根本没被点击的商品。这就好比用高考成绩训练一个预测模型,却要用它预测所有高中生的大学表现,显然会有偏差。

第二个坑是数据稀疏性。电商平台上,点击样本只占曝光样本的一小部分,而购买样本更是少之又少。我做过一个实验,在某服装类目下,点击率约3%,而购买率只有0.3%。用这么稀疏的数据训练模型,就像试图用几滴墨水染红一池水,效果可想而知。

更麻烦的是,这两个问题还会互相加剧。样本少导致模型容易过拟合,偏差又让过拟合的模型在实际应用中表现更差。早期解决方案如过采样、负采样等都只能缓解部分问题,直到阿里妈妈团队在2018年提出ESMM模型,才找到一条新路。

2. ESMM模型的设计哲学

2.1 多任务学习的巧妙应用

ESMM的全称是Entire Space Multi-Task Model,这个命名就透露了它的核心思想。传统方法直接建模pCVR(点击后的转化率),而ESMM另辟蹊径,同时建模两个任务:

  • pCTR:点击率
  • pCTCVR:点击且转化率

这里有个精妙的数学关系:pCTCVR = pCTR × pCVR。通过同时学习CTR和CTCVR,ESMM间接得到了CVR的预估。这就好比想知道"下雨后出现彩虹的概率",我们可以分别统计"下雨概率"和"下雨且出现彩虹的概率",然后相除得到条件概率。

实际实现时,模型结构分为共享底层和任务专属层:

# 简化版模型结构示意 shared_embedding = SharedEmbeddingLayer(input_features) # 共享特征嵌入 ctr_output = CTR_Tower(shared_embedding) # CTR任务塔 cvr_output = CVR_Tower(shared_embedding) # CVR任务塔 ctcvr_output = Multiply()([ctr_output, cvr_output]) # CTCVR计算

2.2 解决两大难题的秘诀

样本选择偏差的解决靠的是任务设计。CTR和CTCVR都是在全样本空间(所有曝光商品)上训练的,因此学到的CVR也自然适用于全空间。这就像通过调查所有人的购物习惯来推断特定人群的偏好,比直接调查小样本更准确。

数据稀疏性则通过参数共享缓解。CTR任务有更多训练样本,CVR塔与CTR塔共享底层参数,相当于让CVR模型"站在巨人的肩膀上"。我在实际项目中测试过,这种共享能使CVR模型的收敛速度提升2-3倍。

损失函数设计也很有讲究:

loss = loss_ctr + loss_ctcvr

两个任务的loss共同指导模型更新,其中CVR的参数只通过CTCVR的梯度间接更新。这种设计确保了CVR预估与CTR预估的一致性。

3. ESM²模型的进化之路

3.1 用户行为路径的精细拆解

虽然ESMM已经表现不错,但阿里团队在2020年又推出了升级版ESM²(读作ESM-square)。这个改进源于一个关键观察:用户从点击到购买之间,往往会有中间行为,比如加购或收藏。

想象一个真实购物场景:用户看到一双鞋→点击查看详情→加入购物车→三天后购买。ESM²把这类确定性行为(Deterministic Action,简称DAction)与普通行为(Other Action,简称OAction)区分开,构建了更丰富的行为路径:

曝光 → 点击 → [DAction/OAction] → 购买

3.2 四任务协同的模型架构

ESM²设计了四个子任务:

  1. y₁: CTR(点击率)
  2. y₂: 点击到DAction的概率
  3. y₃: DAction到购买的概率
  4. y₄: OAction到购买的概率

最终的CVR计算很巧妙:

CVR = (1 - y₂) * y₄ + y₂ * y₃

这个公式考虑了两种可能路径:用户可能通过DAction(如加购)最终购买,也可能直接购买。在我的AB测试中,这种拆解使CVR预估的AUC提升了0.015。

模型结构上,ESM²包含三个关键模块:

  1. SEM(共享嵌入层):统一处理用户、商品特征
  2. DPM(深度预测模块):四个任务的独立MLP网络
  3. SCM(信号组合模块):按上述公式组合各任务输出
# ESM²的核心计算流程 daction_prob = y2_output # 点击→DAction概率 cvr_daction = y3_output # DAction→购买概率 cvr_oaction = y4_output # OAction→购买概率 final_cvr = (1 - daction_prob) * cvr_oaction + daction_prob * cvr_daction

3.3 实际应用中的调优经验

在落地ESM²时,有几个实用技巧:

  1. DAction定义:不同类目适合不同的DAction。服饰类目"加购"更重要,而快消品"立即购买"更直接。建议先用漏斗分析确定关键路径。
  2. 损失权重:四个任务的loss权重需要调优。我的经验是从1:1:1:1开始,逐步加大主任务权重。
  3. 特征工程:用户历史DAction/OAction统计是最重要的特征之一。比如"用户近7天加购转化率"这类特征效果显著。

4. 从理论到实践的跨越

4.1 离线评估的陷阱

很多团队在评估CVR模型时,只关注离线AUC提升,这容易掉进几个坑:

  • 时间穿越:用未来数据做特征。比如用测试时段的后验数据构造特征
  • 样本泄漏:把预测时不可得的信息混入特征
  • 指标片面:AUC高但实际业务指标没提升

我建议采用更健壮的评估方案:

  1. 严格按时间划分训练/测试集
  2. 添加GAUC(按用户分组的AUC)评估
  3. 设计线上AB测试的观测指标矩阵

4.2 线上部署的实战技巧

部署多任务模型时,计算效率是关键。我们摸索出一套优化方案:

  1. 共享计算:所有任务共用底层特征抽取,减少重复计算
  2. 批量预测:合并多个商品的请求,利用GPU并行能力
  3. 分级缓存
    • 高频商品:缓存完整预测结果
    • 中频商品:缓存Embedding结果
    • 低频商品:实时计算

在双11大促时,这套方案使我们的预测服务QPS提升了5倍,延迟降低60%。

4.3 业务效果的量化分析

在某个家电类目落地ESM²后,我们观察到:

  • 转化率:提升18.7%
  • GMV:增长12.3%
  • 长尾商品曝光:增加35%

特别值得注意的是,新品和长尾商品的转化提升更明显。这是因为丰富的行为路径提供了更多信号,缓解了冷启动问题。一个典型案例是某款新型空气炸锅,传统模型预估偏差较大,而ESM²准确捕捉了"收藏→比价→购买"的路径,使其转化率预测误差从43%降到15%。

5. 多任务学习的未来展望

虽然ESMM系列已经很强大了,但仍有进化空间。从我们的实践来看,以下方向值得关注:

多场景联合建模:不同场景(搜索、推荐、广告)的用户行为模式不同,但底层偏好一致。我们正在尝试跨场景的多任务学习,初步效果显示CTR预估误差可降低7%。

实时行为建模:用户决策过程是动态的。比如我看到一款相机,先加购,然后看评测,最后下单。用RNN或Transformer建模这类序列,能更好捕捉用户意图变化。

因果推理引入:当前模型主要依赖相关性。我们实验性地加入了反事实推理模块,比如"如果用户没点击这个商品,会点击什么",这种思路在消除偏差方面显示出潜力。

在实际业务中,没有放之四海皆准的银弹。ESMM系列给我们的启示是:理解业务场景的本质,用技术创新解决核心痛点,才是算法落地的正确姿势。每次模型升级,都应该来自对用户行为的深入洞察,而非单纯追求技术复杂度。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询