ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

NISE半监督学习:利用未点击样本提升CVR转化率预测

NISE半监督学习:利用未点击样本提升CVR转化率预测 转化率预测这件事做推荐和广告的同行都不陌生。模型上线跑一段时间后最头疼的往往不是特征工程做不动而是样本标签的分布和真实线上分布对不上。点击样本好拿转化样本却稀疏得可怜更麻烦的是那些曝光了、没点击的样本——它们到底算负样本还是只是没被用户看见这个问题我在实际项目里反复踩过坑直到接触到 NISE 这套思路才算把这块逻辑理顺。NISE 的核心是用半监督学习的方式把未点击样本重新利用起来缓解假负样本带来的噪声让转化率预测模型在稀疏标签下也能稳住效果。这篇文章我会从整体设计、核心原理、实操落地到问题排查完整拆一遍这套方法适合做推荐系统、广告排序、增长算法的同学参考无论你是刚接触 CVR 预测还是已经在调模型但效果卡住都能从中找到可复用的思路。1. 转化率预测为什么难从样本结构说起1.1 转化率预测的任务本质与样本漏斗转化率预测CVR要回答的问题很直接给定一次曝光用户最终完成目标行为下单、注册、留资等的概率是多少。它和点击率预测CTR最大的区别在于样本漏斗更深。一次完整的链路是“曝光 → 点击 → 转化”CTR 只需要在曝光样本上判断是否点击而 CVR 通常只在点击样本上判断是否转化。这就带来一个结构性矛盾曝光样本量级最大点击样本少一个数量级转化样本再少一到两个数量级。假设一天有 1 亿次曝光点击率 5%转化率在点击基础上 3%那么点击样本 500 万转化样本只有 15 万。用 15 万正样本去训练一个高维稀疏特征的模型过拟合几乎是必然的。更关键的是CVR 模型上线时面对的输入是“所有可能被点击的曝光”但训练时只见过“已经点击的样本”。训练分布和推理分布不一致这就是经典的样本选择偏差Sample Selection Bias。业界常用的解法是 ESMM 那套多任务思路把 CTR 和 CTCVR 联合建模间接绕开偏差。但 ESMM 并没有解决另一个更隐蔽的问题——未点击样本的归属。1.2 未点击样本被浪费的负样本还是潜在的假负样本传统做法里未点击样本在 CVR 任务中通常被直接丢弃因为 CVR 只在点击空间建模。但如果换个视角把未点击样本纳入进来就会遇到一个尴尬的事实未点击不等于不转化。用户没点击可能只是没看到、没兴趣、位置太靠后甚至只是当时在忙。这些样本如果被简单标成负样本就会引入大量假负样本False Negative。模型学到的是“没点击 不会转化”但真实情况是“没点击 ≠ 不会转化”。这种标签噪声会严重拉低模型的区分能力。我在早期项目里做过一个对比实验把未点击样本直接当负样本喂给 CVR 模型AUC 表面上没掉太多但线上转化率预估明显偏低尤其是长尾商品模型几乎不敢给高分。后来分析发现正是假负样本把决策边界压偏了。NISE 要解决的就是如何在不引入过多噪声的前提下把这些未点击样本的价值榨出来。1.3 半监督学习切入的合理性半监督学习的核心假设是少量有标签样本 大量无标签样本可以共同刻画数据的整体分布。放到 CVR 场景里点击样本可以看作“有标签”我们知道它是否转化未点击样本可以看作“无标签”我们不确定它会不会转化。这个映射非常自然。未点击样本虽然标签不确定但它携带了丰富的特征分布信息——用户画像、商品属性、上下文特征都在。半监督学习正好可以利用这些无标签样本去约束模型的决策边界让模型在稀疏标签下依然能学到平滑、泛化更好的表示。NISE 正是沿着这条线把未点击样本从“噪声源”变成了“信息源”。2. NISE 的整体设计思路拆解2.1 核心思想把未点击样本当作弱标签样本NISE 最核心的一步是重新定义未点击样本的角色。它不把未点击样本硬性归为负样本也不完全丢弃而是当作一种“弱标签”样本。所谓弱标签就是标签置信度低、但并非完全无信息。具体来说NISE 会为每个未点击样本估计一个“伪标签”或“软标签”表示它潜在转化的概率。这个概率不是拍脑袋给的而是通过模型自身的预测、结合点击行为的先验来推断。这样一来未点击样本就从一个二值的硬标签变成了一个连续的概率分布模型在学习时就不会被“非黑即白”的标签带偏。这个思路的好处在于它保留了未点击样本的分布信息同时通过软标签降低了假负样本的伤害。你可以理解为与其争论这个用户到底会不会转化不如让模型自己给出一个置信度再根据置信度决定它对损失函数的贡献权重。2.2 与 ESMM、多任务学习的区别与联系很多人会问NISE 和 ESMM 是不是一回事。它们确实都在解决 CVR 的样本问题但切入点不同。ESMM 的思路是“不直接在点击空间建模 CVR”而是建模 CTR 和 CTCVR通过 pCTR × pCVR pCTCVR 的关系间接得到 CVR。它解决的是样本选择偏差让模型在全曝光空间上训练。但 ESMM 对未点击样本的处理仍然是“当作 CTCVR 的负样本”并没有深挖未点击样本内部的标签不确定性。NISE 则更关注标签噪声本身。它承认未点击样本里混着假负样本然后用半监督的方式去估计这些样本的真实标签分布。两者其实可以互补ESMM 负责把训练空间拉到全曝光NISE 负责在这个空间里把未点击样本的标签处理得更精细。我在实际项目里试过把两者结合先做全空间建模再对未点击样本做软标签加权效果比单用任何一种都稳。2.3 方案选型背后的权衡为什么不用纯监督或纯无监督纯监督的方案就是只用点击样本简单直接但样本量受限且无法利用未点击样本的分布信息。纯无监督的方案比如聚类、自编码器能利用未点击样本但缺乏转化信号的引导学到的表示和 CVR 任务目标不对齐。NISE 选择半监督是在“标签可靠性”和“数据利用率”之间找平衡。它用点击样本提供可靠的监督信号用未点击样本提供分布约束两者通过一个统一的损失函数联合优化。这个权衡在实际工程里很关键你既不想浪费 95% 的曝光数据又不想让噪声标签污染模型。半监督正好卡在中间。3. 核心细节解析假负样本、软标签与损失设计3.1 假负样本的成因与量化假负样本的产生有几个典型来源。第一是位置偏差用户根本没滑到那个位置自然没点击。第二是展示偏差系统只展示了部分候选未展示的谈不上点击。第三是用户行为随机性同一用户在不同时间对同一商品的反应可能完全不同。要量化假负样本的比例可以用一个小技巧拿一部分未点击样本做随机探索强制展示给用户观察真实转化率。这个比例虽然不能精确到每个样本但能给出一个全局的先验。我在项目里做过类似探索发现未点击样本里潜在转化率大约在 0.1% 到 0.5% 之间远高于零这就证明了“未点击 负样本”的假设是错的。3.2 软标签的估计方法NISE 里软标签的估计通常有几种做法。一种是基于模型预测先用点击样本训一个初始模型再对未点击样本打分把预测概率作为软标签。另一种是基于贝叶斯推断结合点击率和转化率的先验用后验概率估计未点击样本的转化可能性。实际操作中我倾向于用“模型预测 先验校准”的组合。先用初始模型给出一个粗估再用全局转化率先验做一次校准避免模型过度自信。软标签不需要非常精确它的作用是提供一个相对排序和权重而不是绝对真值。3.3 损失函数的设计与加权策略NISE 的损失函数一般由两部分组成有标签样本的监督损失和无标签样本的半监督损失。监督损失就是常规的交叉熵半监督损失则用软标签做加权交叉熵或者一致性正则。加权策略是重点。未点击样本的损失权重不能给太高否则噪声会主导训练也不能太低否则等于没用。常见做法是用软标签的置信度作为权重置信度高的样本权重大置信度低的权重小。还可以引入一个温度系数控制软标签的平滑程度。温度高软标签更均匀模型更保守温度低软标签更尖锐模型更激进。这个参数需要根据业务数据调没有万能值。4. 实操过程从数据准备到模型训练4.1 数据准备与样本构造第一步是把曝光、点击、转化三张行为表对齐。以用户 ID、商品 ID、时间戳为键构造出每个曝光样本的特征和标签。标签有三列是否点击、是否转化、是否未点击。未点击样本就是点击列为 0 的那些。特征方面用户侧包括画像、历史行为序列商品侧包括类目、价格、销量上下文侧包括时间、位置、设备。这些特征在点击和未点击样本上都要有保证分布一致。我建议在构造阶段就做好特征归一化和缺失值处理避免训练时再补容易出不一致。4.2 初始模型训练与软标签生成先用点击样本训一个基础 CVR 模型比如 DeepFM 或 DIN。这个模型不需要调太好它的作用是给未点击样本打一个初始分。训练时注意用早停避免过拟合到点击样本的噪声上。拿到初始模型后对全部未点击样本做推理得到每个样本的转化概率。这个概率就是软标签的雏形。接着用全局转化率先验做校准如果模型平均预测转化率是 2%而真实全局转化率是 0.3%就按比例缩放。校准后的软标签更接近真实分布。4.3 联合训练与参数配置联合训练时把点击样本和未点击样本混在一个 batch 里。点击样本用硬标签未点击样本用软标签。损失函数写成loss supervised_loss alpha * semi_loss其中 alpha 控制半监督部分的权重一般从 0.1 开始调。semi_loss 用软标签的交叉熵权重用软标签置信度。优化器用 Adam学习率比初始模型小一个量级避免破坏已学到的表示。训练轮数不宜太多通常 3 到 5 个 epoch 就够。每轮结束后在验证集上看 AUC 和校准曲线如果校准曲线偏离对角线太多说明软标签噪声过大需要降低 alpha 或重新校准。4.4 线上推理与效果验证线上推理时模型只对曝光样本打分输出 CVR 预估。验证不能只看 AUC还要看 GAUC按用户分组的 AUC和校准误差。CVR 模型对校准特别敏感因为出价和排序都依赖预估值的绝对值。我一般会做 A/B 实验对比基线只用点击样本和 NISE 版本。观察指标包括转化率、GMV、以及长尾商品的曝光占比。实测下来NISE 版本在长尾商品上的提升更明显因为软标签缓解了长尾样本被压分的问题。5. 常见问题与排查技巧实录5.1 软标签置信度过高导致模型过拟合这是最常见的坑。初始模型在点击样本上训得太好对未点击样本打分时过于自信软标签接近 0 或 1。这样半监督部分就退化成硬标签假负样本的噪声又回来了。解决办法是给软标签加温度平滑或者直接用全局先验做插值soft_label beta * model_pred (1 - beta) * priorbeta 取 0.5 到 0.7 之间让软标签保留模型信息的同时不过度自信。5.2 未点击样本权重失衡如果未点击样本数量远大于点击样本联合训练时梯度会被未点击样本主导。表现是模型在点击样本上的 AUC 下降整体校准变差。对策是控制采样比例比如每个 batch 里点击样本和未点击样本按 1:3 或 1:5 混合而不是全量灌入。也可以用损失权重反向补偿让点击样本的权重更高。5.3 校准曲线偏离与线上效果不一致离线 AUC 涨了线上却没涨八成是校准出了问题。CVR 预估值偏高或偏低都会影响排序和出价。排查时先画校准曲线看预测分桶和真实转化率的对应关系。如果高分段预估偏高说明模型对高置信样本过拟合如果低分段预估偏高说明假负样本还在起作用。前者降低模型复杂度后者加大软标签平滑。5.4 常见问题速查表问题现象可能原因排查方法解决方向离线 AUC 涨线上不涨校准偏差画校准曲线重新校准软标签长尾商品预估偏低假负样本压制分品类看 AUC提高长尾样本权重训练不收敛半监督权重过大看 loss 曲线降低 alpha软标签过于尖锐初始模型过拟合看软标签分布加温度平滑点击样本 AUC 下降未点击样本主导看 batch 构成调整采样比例5.5 实操心得与避坑建议第一初始模型不要训太久它的任务是给软标签不是最终模型。第二软标签一定要做校准否则半监督部分会放大偏差。第三线上验证一定要看校准不能只看 AUC。第四长尾样本是检验 NISE 效果的试金石如果长尾没提升说明软标签没起到作用。第五参数没有万能值alpha、beta、温度都要根据业务数据调建议做小规模网格搜索。6. 影响范围与可扩展方向6.1 对推荐系统与广告排序的价值NISE 的价值不局限于 CVR 预测。任何存在“行为漏斗深、标签稀疏、未观测样本多”的场景都可以借鉴这套思路。比如推荐系统里的停留时长预测、广告里的深度转化加购、收藏、内容平台里的完播率预测都面临类似的假负样本问题。把未点击样本用半监督方式利用起来本质上是提升了数据利用率。在流量红利见顶的当下这比单纯堆模型结构更有性价比。6.2 与其他技术的结合空间NISE 可以和对比学习结合用未点击样本做数据增强构造正负样本对提升表示质量。也可以和图神经网络结合把用户-商品交互图里的未点击边作为弱边传播转化信号。还可以和因果推断结合用反事实框架估计未点击样本的潜在转化进一步降低偏差。我在最近的一个项目里尝试把 NISE 和对比学习结合用未点击样本做负采样发现模型在冷启动商品上的表现有明显改善。这个方向值得继续挖。6.3 工程落地的注意事项工程上要注意三点。第一是数据管道未点击样本量级大推理和存储成本高建议做采样和分片。第二是训练效率联合训练比单任务慢可以用分布式或者梯度累积。第三是监控软标签分布、校准曲线、长尾指标都要上线监控一旦漂移及时告警。最后分享一个小技巧软标签不要一次性生成就固定可以每隔几个 epoch 用当前模型重新估计一次做迭代式半监督。这样软标签会随着模型进化越来越准效果比一次性生成更稳。我在实际使用中发现迭代两到三轮后长尾商品的预估偏差能缩小三成左右。
返回列表