存在的问题如下图所示,主商品是两千左右的吸尘器,但是推荐商品中混入价格一百多的商品。虽然都是家用吸尘器而且推荐商品的销量都不错,但是以这次进商详页的用户行为意图推断,这款一百多的吸尘器不是目标商品。从用户的角度看,推荐商品和主商品的相关性偏弱了,影响到用户体验。对平台而言,这次商品曝光没有达到帮助用户更高效浏览的期望,没能满足用户需求。
我们希望通过相关推荐的价格优化,以商品相关性为核心,以用户当前时刻需求为导向,统筹考虑主商品调性、推荐商品性价比之间的关系,同时满足用户对商品价格体验和平台对uv价值的需求。
二、方案
思路拆解
如果贸然以权重打压价格不符的商品,持平推荐商品与主商品价格,会导致商品相关性减弱,最终用户不感兴趣并且平台订单减少,这也是问题的难点所在。我们自上而下拆分推荐的链路环节,调整了召回、CTR与CVR精排模型、重排等算法模块,以及尝试了cspu的价格选择和高价折扣商品补充等算法策略,去实现价格体验提升、商品相关性保持的目标。
1.召回算法优化
召回模块存在召回结果的价格倾向于低价高性价比的问题。当主商品价格较低时,暴露的问题不明显,因为候选池中有足够的低价商品可供算法选择;但是当主商品价格较高时,候选池中可供选择而且价格同样也高的商品占比偏低。巧妇难为无米之炊,这样的情况下,即使后续模块再精准,也很难在召回候选池商品的约束下获得高质量的推荐结果。
究其原因,人性使然,大家倾向于购买价廉物美的商品。这导致在高价品上的用户行为交互少,那么召回算法会倾向于把价格更低而行为丰富的商品作为更优质的召回结果,最终使得高价品在召回构建中占比偏低。
为了解决上述问题,我们针对性地设计了价格分桶召回算法和建模价格的分类图召回算法。
价格分桶召回算法在SWING方法的基础上进行了升级。原版SWING以全局商品作为训练数据,构建user-item-user的行为关系。SWING的公式如下:
如公式中所示,在寻找商品i的相似商品时,如果召回商品j的行为越多,那么公式中的求和项就越多,最后计算相似度结果也就更有优势。因此,吸人眼球、容易产生更多交互的便宜商品更容易被召回。这过程中,却自始至终未涉及到价格相关性的约束。
缺乏与主商品近似价格的商品来做候选,不但限制了精排模型的发挥,也削减了成交AOV,最终影响UV价值。因此,我们对召回算法进行细耕。首先把商品和用户的行为基于价格带做切分。然后对划分出的多个价格区间,分而治之。用价格区间内的user-item-user关系,计算局部SWING求召回倒排链。这样的做法减少了许多价格差异大用户体验差的CASE,保证召回阶段商品价格的高相关度。
另外,也搭建了分类图召回算法,在基础的GraphSAGE模型上进行了升级。常规GraphSAGE做法是是等权重的相邻节点聚合。而我们在切分用户行为session后,把价格用到了图召回的连边构建中,以商品的价格差影响聚合权重。最终,价格相近的邻居节点在聚合中获得了更高的聚合权重,更容易出现在图召回的结果中。
召回的优化改进,弥补了候选池中高价商品的不足,为后续算法进一步选品奠定扎实的基础。
2.CTR模型优化
CTR的准确预估是排序的核心。相关推荐模块区别于feed流场景,它存在主商品,所以构建出的是一个<用户,主商品,推荐商品>的三元组关系。当前的CTR模型对价格感知不足,使得推荐商品对人或主商品的价格相关性都不够。
为了解决这个问题,我们从对模型影响最大的价格特征上着手进行优化,并以用户和推荐商品的价格相关性作为难点重点突破。
a)用户的消费水平刻画。
用户消费水平特征的常见做法是拿用户历史浏览或购买的商品按价格进行整体刻画。但是不同类目的价格分布差异悬殊,得物的商品价差大,类目差异也更剧烈。例如买500元的口红比买500元的包表现了更高的消费力,所以消费水平的刻画必须与类目相结合。我们的做法是分别刻画在每一个类目下的消费水平。细节上,增加了主商品-推荐商品价格分档下的交叉特征,用户-推荐价格分档下的交叉特征以及用户点击的价格分档序列。
此外,为了精确刻画用户的长期兴趣,我们将用户行为序列扩展,采用自研Feature-Store提供的用户长序列服务,把更多、更久的特征喂入模型。大量的行为数据,帮助模型更好的学习用户兴趣,匹配与用户价格兴趣更相关的商品。
b)衍生特征的刻画。
除了价格本身,我们在做数据分析中发现,用户的活跃度、成交AOV、商品点击率三者之间有密切的联系。
我们以1/7/30天为窗口统计用户的场景内表现以及app内表现。按用户活跃度进行等频分桶刻画,1代表最不活跃,10代表最活跃。不同活跃度的用户在点击率和成交AOV上都展现出了不同的表现。活跃度高的用户,在模块的内的点击率越高,成交AOV也更高;随着用户活跃度下降,点击率也下降,但是成交AOV却出现了先减后增的情况。借助这样的差异表现,我们可以通过模型去学习出活跃度与客单价的潜在联系,辅助判断用户的消费倾向。
CTR特征的优化,获得了预期的正向收益,AOV+2.35%,场景uv价值+2.28%。
3.CVR模型优化
CTR建模中,点击行为大多在曝光后立马发生,但是转化行为通常出现在点击后比较久的时间。价格高的商品,决策成本也更大,用户往往需要更久的种草和下单时间。得物客单价高,这个效应也更强。由于高价商品往往不能当天完成购买,因此在样本的构建中,如果以点击后当天是否转化作为正负样本的标签判定,那么便宜商品会更容易打上正样本的标签,而价高商品的正样本标签数量远少于商品最终转化的实际值。价格差异造成的样本失衡,造成最后模型训练结果的有偏。
从样本构建的角度,除非等待无穷久的时间,直至最后点击样本发生转化,否则样本失衡的问题会一直存在。为了缓解这个问题,可以延长样本观察时间,在点击后等待一段时间,以最终购买情况判定正负样本。这里就会涉及到归因窗口长短的问题。如果归因窗口过短,落在这之中的已转换样本过于少,难以准确建模所有的转换;如果归因窗口过长,意味着需要等足够长的时间才可能用到新样本,这就会引起时效性问题。
因此,面对这个CVR建模的难题,在定义完以是否7天内转换为CVR模型的最终预估目标后,我们摸索了CVR延迟转化建模的解决方法。
首先解决归因窗口的问题,我们把归因窗口分拆成当天转化和2-7内转换,用两个窗口的方式去解决单一归因窗口过短或者过长的问题。具体的,对于当日产生的新鲜样本,我们通过mask=1控制样本进入左侧网络,预估当天内是否转化。以当天的转化label,作梯度反向传播更新底层网络参数,保证网络能感知到最新的线上样本数据的变化。接下来,这个样本会等待足够久的时间,直至7天的完整转化周期,并以点击后2-7天是否发生转化作为第二个label,用mask=0控制样本进入右侧网络。
两个网络的输出以概率公式相组合,计算出用户在点击后7日内发生转化的概率。
其中为7日内发生转化的概率,为当天发生转化的概率,为第2-7天发生转化的概率。
模型在评估中获得auc+0.6%,gauc+0.89%的收益,验证了我们的想法。
4.重排优化
旧排序公式是以CTR模型与CVR模型相乘作为排序依据。为了避免体验case,加上价格调整参数。旧排序公式的数学表示如下:
但是上述的排序主体物理意义是曝光转化率。为了使得与最终建模目标uv价值呼应,我们将排序公式重新设计为如下形式:
但是这样的公式形式也引发了一个新的问题,异常高价的商品会容易曝光展现。如果100元的主商品推荐出的是一个10000元的相关商品,那很显然是一个相关性比较差、违背用户购买力的badcase。为了解决这个,我们在公式修改的基础上,增加了门型价格控制函数去做约束,如下所示。
横坐标为推荐商品与主商品的相关性,大于1表示推荐商品价格大于主商品价格,小于1表示推荐商品价格小于主商品价格。纵坐标为打分权重控制。门型函数代表了我们对价格的想法,即在推荐商品价格与主商品价格偏差可容忍的范围内,打分才有效,否则打分会急剧降权。
这部分的优化,使得场景uv价值提升2+%。
5.选择商品价格
一个商品由于属性不同,会有多个价格。比如一双鞋,不同尺码的价格大相径庭,热门尺码比如42码往往是价格最高的那个。因此,在商品推荐的时候,在具体计算中使用哪个口径的价格是一个值得推敲的事。目前,各个场景大家都取cspu下最低的那个sku尺寸价格作为对外曝光展现、对内逻辑运算使用的价格值,我们期望做不同价格的尝试,看看是否有可挖掘的空间。
为了加强实验效果,对排序结果有较大的影响力,我们选择替换最终排序公式中的价格作为实验手段。经过与cspu下热门sku价格、平均sku价格、最高sku价格的对比,实验效果都不如现用的cspu下最低sku价格表现好。原因在于用户对价格十分敏感度,偏高的价格会带来大幅的订单下降,最终导致uv价值负向。当前未拿到收益,并非表示价格的选择上没有空间,现在使用的cspu下最低sku价格的方式必然不是最优的,值得进一步探索。
6.高价折扣品补充
在外投承接页中,我们尝试下发了高价高折扣商品,在美妆、鞋、手表等类目的下发量占到10%,获得了正向收益。因此,在相关推荐中,也希望把这个思路加以利用。我们以价格高于500元、相比外网的折扣低于7折作为召回商品准入门槛,为了保证效果,不以同类目或者同品牌的粗粒度方式下发,而以i2i的方式保证高相关性的方式进行召回补充。
但是效果没有达到预期。分析原因有两点,一是加上相关性的约束后,触发的商品较少,对比线上其他召回方式如swing、wbcos、multiTrigger等,高折扣品在请求中的召回数量少了一个数量级,而实际曝光量更是仅占1%,难以对场景有撬动作用;二是这部分商品相对冷门,精排模型预估出来的分较低,不能在结果中往前排。
三、实验效果
对上述有效实验合并后,实验指标如下:场景pvctr+4.41%,场景aov+5.93%,场景人均订单+2.27%,场景uv价值+8.17%,商详大盘aov+0.86%,商详大盘uv价值+0.78%。
至此,优化后相关推荐的aov稳定高于商详aov,并且促进了场景和商详的uv价值提升。
四、未来展望
经过全链路多维度的优化,在相关推荐以价格优化,去提升用户体验并且带动平台UV价值的思路得到了验证。算法的迭代升级中,有创新有突破,沉淀了新技术点,同时获得了预期的业务效果。商品价格与用户和平台都有紧密关联,这一方向会长期跟进。
此外,在项目进行中,我们也发现了一些存在的问题,比如用户行为集中在头部商品、CVR转化样本稀疏影响训练等等,未来会针对这些难点,进一步开展工作,提升相关推荐模块的效率,更好满足用户的浏览需求。