为什么要特殊对待特殊人群?
- 新用户,低活用户的行为很少,个性化推荐不准确。个性化的召回和排序都需要基于用户的历史行为,如果历史行为少,个性化就做不好,尤其是新用户,这就需要策略把个性化做的特别好或者用非个性化方法来做弥补
- 新用户,低活用户容易流失,要想办法促使他们留存。对于全体用户,推荐系统要努力提升很多指标,比如留存,时长,消费等。而对于新用户和低活用户,只需要考虑留存,不需要考虑其他任何指标,所以只需要考虑优化留存
- 特殊用户的行为(比如点击率,交互率等)不同于主流用户,基于全体用户行为训练出的模型在特殊用户人群上有偏。要对特殊用户人群用特殊模型来消除偏差
涨指标的方法
- 构造特殊内容池,用于特殊用户人群的召回
- 使用特殊排序策略,保护特殊用户
- 使用特殊的排序模型,消除模型预估的偏差
构造特殊的内容池
- 为什么需要特殊内容池?
- 新用户,低活用户的行为很少,个性化召回不准确(既然个性化不好,那么就需要保证内容质量好,用优质内容弥补个性化缺失)
- 针对特定群体的特点构造特殊内容池,提升用户满意度(例如,对于喜欢留评论的中年女性,构造粗评论内容池,满足这些用户的互动需求)
- 方法1:根据物品获得的交互次数,交互率选择优质物品
- 圈定人群:只考虑特定人群,例如 18 到 25 岁一二线城市男性
- 构造内容池:用该人群对物品的交互次数,交互率给物品打分,选出分数最高的物品进入内容池,分数高说明质量好,容易吸引用户
- 内容池有弱个性化的效果,说明这个人群对这个池子的内容感兴趣
- 内容池定期更新,加入新物品,排除交互率低和失去时效性的老物品
- 该内容池只对该人群生效
- 方法2:做因果推断,判断物品对人群留存率的贡献,根据贡献值选物品
- 通常使用双塔模型从特殊内容池中做召回
- 双塔模型是个性化的
- 对于新用户,双塔模型的个性化做不准
- 靠高质量,弱个性化做弥补(可以容忍双塔模型的不准确)
- 额外的训练代价?
- 对于正常用户,无论有多少内容池,只训练一个双塔模型
- 对于新用户,由于历史交互记录很少,需要单独训练模型。但不论有多少个内容池,新用户只需要一个自己的双塔模型就够了
- 额外的推理代码?
- 内容池定期更新,然后要更新 ANN 索引
- 线上做召回时,需要做 ANN 检索
- 无论是更新内容池还是做召回,每多一个内容池,就需要多一份额外的算力,内容池越大,需要的额外算力越多
- 特殊内容池都很小(比全量内容池少 10 到 100 倍),所以需要的额外算力不大
特殊的排序策略
排除低质量物品
- 对于新用户,低活用户这样的特殊人群,业务上只关注留存,不在乎消费(总曝光量,广告收入,电商收入)
- 对于新用户,低活用户,少出广告,甚至不出广告
- 新发布的物品不在新用户,低活用户上做探索
- 新物品发布时,推荐做的不准,会损害用户体验。这没办法,毕竟一定要推荐出去。如果不做探索,推荐系统就不知道谁会喜欢这些物品
- 只在老用户上做探索,对新物品做提权(boost)。老用户受一点伤害并不会流失
- 不在新用户,低活用户上做探索,避免伤害用户体验。用这些特殊用户做探索会得不偿失
差异化的融分公式
- 新用户,低活用户的点击,交互行为不同于正常用户
- 低活用户的人均点击量很小;没有点击就不会有进一步的交互
- 低活用户的融分公式中,提高预估点击率的权重(相较于普通用户,点进去看了才可能留存)
- 保留几个曝光坑位给点击率最高的几个物品
- 例:精排从 500 个物品中选 50 个作为推荐结果,其中 3 个坑位给点击率最高的物品,剩余 47 个坑位由融分公式决定。这 3 个坑位的目的是吸引用户点击
- 甚至把点击率最高的物品排在第一,确保用户一定能看到。如果用在普通用户身上会损害核心指标
特殊的排序模型
差异化的排序模型
- 特殊用户人群的行为不同于普通用户。新用户,低活用户的点击率,交互率偏高或偏低
- 排序模型被主流用户主导,对特殊用户做不准预估
- 用权力用户训练出的模型,给新用户做的预估有严重偏差
- 如果一个 APP 的用户 90% 都是女性,用全体用户数据训练出的模型,对男性用户做的预估有偏差
- 问题:对于特殊用户,如何让排序模型预估做的更准?
- 方法1:大模型 + 小模型
- 用全体用户行为训练大模型,大模型的预估 ppp 拟合用户的行为 yyy
- 用特殊用户的行为训练小模型,小模型的预估 qqq 拟合大模型的残差 y−py-py−p,残差是大模型犯的错误,我们希望小模型可以纠正大模型的错误
- 对主流用户只用大模型做预估 ppp
- 对特殊用户,结合大模型和小模型的预估 p+qp+qp+q,小模型的作用是纠偏
- 方法2:融合多个 experts,类似 MMoE
- 只用一个模型,模型有多个 experts,各输出一个向量
- 对 expert 的输出做加权平均
- 根据用户特征计算权重(和MMoE的区别是这里的神经网络输入只有一个用户特征)
- 以新用户为例,模型将用户的新老,活跃度等特征作为输入,输出权重,用户对 expert 做加权平均。例:如果有两个 expert,用户刚刚注册,那么新用户 expert 的权重是 1,老用户 expert 的权重是 0。如果介于新老之间那么两个 expert都有一定的权重
- 方法3:大模型预估之后,用小模型做校准
- 用大模型预估点击率,交互率
- 将用户特征,大模型预估点击率和交互率作为小模型(例如 GBDT)的输入
- 在特殊用户人群的数据上训练小模型,小模型7的输入拟合用户的真实行为
错误的做法
- 每个用户人群使用一个排序模型,推荐系统同时维护多个大模型
- 系统有一个主模型,每个用户人群有自己的一个模型
- 每天凌晨,用全体用户数据更新主模型,训练 1 个 epoch
- 基于训练好的主模型,在某特殊用户人群的数据上再训练 1 epoch,作为该用户人群的模型、
- 短期可以提升指标;维护代价大,长期有害
- 起初,低活男性用户模型比主模型的 AUC 高 0.2%
- 主模型迭代几个版本后,AUC 累计提升 0.5%
- 特殊人群模型太多,长期没有人维护和更新
- 如果把低活男性用户模型下线,换成主模型,在低活用户上的 AUC 反倒提升 0.3%
总结
