Fork me on GitHub

飞猪旅行供应链品类规划算法——推荐和选品模型

以下文章来源于 https://zhuanlan.zhihu.com/p/684184873

导读 本文将分享飞猪旅行在酒店供应链品类规划方面的算法。

今天的介绍会围绕下面四点展开:

  1. 品类规划业务背景介绍

  2. LINet-基于位置和出行意图感知的群组推荐模型

  3. PETS-满足召回约束下的大促选品模型

  4. Q&A

分享嘉宾|吕德涛(楼溪) 阿里飞猪 高级算法工程师

编辑整理|吕晶

内容校对|李瑶

出品社区|DataFun


01品类规划业务背景介绍

首先,介绍飞猪品类规划相关业务背景。以一次大型促销活动为例,来详细说明酒店运营活动的运营流程。



我们将整个流程划分为两个主要阶段:supply side 和 consumption side。

在 supply side,通常会运用一些算法模型筛选出一批性价比较高的酒店,并将其提供给业务 BD。随后,业务 BD 将基于这个列表进行招商,提前进行价格库存的协商。

在 consumption side,主要基于招商结果进行一系列营销活动,例如人群 Push、不同人群的营销活动,以及个性化的推荐。

从上图中可以看出,阶段 1 是整个运营流程的瓶颈,因为所有后续阶段本质上都是根据这一阶段的结果进行优化。具体的:在阶段 1,需要提供重点运营的酒店名单给阶段 2(这需要在有限的 BD 人力情况下完成);需要为阶段 3 准备人群和商品的匹配关系,用于人群营销;并且需要为阶段 4 提供推荐候选池。品类规划的主要工作也集中在阶段 1。

第一阶段常用的品规方案主要有三种。



  • 第一种方案是基于时间序列预测,根据酒店历史销量,预估未来销量,并选择销量排名靠前的酒店进行BD。通常采用的时间序列方案包括 Prophet、MQ-RNN、DeepAR、TFT 等。
  • 这种方案的缺陷在于忽略了用户交互信息和酒店位置信息。
  • 第二种方案是个性化推荐,主要基于用户和商品的行为序列来建模用户偏好。
  • 其缺陷为,在阶段 1 建模时,用户请求尚未生成。因此采用个性化方案时,只能使用用户 t +1 的行为序列,这样并不能很好地捕捉用户偏好。
  • 第三种方案是群组推荐,如 AGREE、SIGR 和 Group SA 等,旨在更好地刻画群组偏好。
  • 其缺陷为,忽略了酒店特性,用户出行时间、酒店位置和用户出行意图,这些因素会影响用户的购买决策。

02LINet-基于位置和出行意图感知的群组推荐模型

基于上述问题,我们在群组推荐的基础上提出了一个全新的群组推荐模型,名为 LINet(该模型已被 WWW2023 录用)。

1. 问题定义

我们首先将这一问题定义为在阶段 1 的 WWW 问题,即在特定时间段(when)和出行区域(where)为具有相似出行意图(why)的用户群体推荐酒店,然后在阶段 1 解决 WWW 问题。

2. 难点

首先是如何有效划分群组,因为划分的准确性直接影响下游应用。因此,在划分群组时,需要考虑用户的出行意图和位置。

其次,如何有效利用 WWW 问题的三个维度信息,即时间、出行区域和意图。

最后是数据稀疏性问题,由于航旅出行是较低频的场景,WWW 问题进一步将<用户,商品>的交互数据限制在特定的时空范围内,加剧了数据稀疏性。

3. 模型结构

为解决这些问题,LINet 模型进行了针对性的设计,主要包括六个关键子结构,用于群组划分、群组内部偏好刻画、群组外部时空偏好刻画,并在损失函数上进行了一些优化以解决数据稀疏性问题。接下来,将逐一进行说明。



(1)第一部分:用户的出行意图识别和群组划分

在第一部分,我们采用了一个分类模型来描述用户的出行订单意图,将具有相同出行目的地和相似出行意图的用户划分为一组。这样我们就得到了不同的群组以及每个群组的出行意图。并且这一部分的输出将用作其他子模块的输入。分类模型的形式可以多种多样,这并不是 LINet 的重点,在此不做详细阐述。

在进行划分时,主要考虑了用户的三种出行意图,即用户的本地旅行、异地旅行和商务出差。选择这三种是因为它们在旅行行业中比较常见,占据了用户出行意图的大部分。

(2)第二部分:Internal Local Preference Representation

模块主要获取群组的近期偏好,具体来说,包括两个子模块:群组成员的表征聚集和群组近期的商品偏好表征。

  • 群组成员的表征聚集:为了反映不同用户在群组决策时的不同影响力,类似 AGREE 本模块利用一个注意力网络来动态调整每个用户对群体推荐性能的贡献权重。在 WWW 问题中,具有更多历史交互行为的用户被分配更高的权重。
  • 群组最近行为的商品偏好表征:考虑到一个群体内的用户具有相似的购买偏好,一个用户最近购买的酒店很可能会被同一组内的其他用户再次购买,因此引入了类似于 DIN 的结构来建模用户群组近期的商品偏好表征。

(3)第三部分:Internal Global Preference Representation

主要用于建模群组的长期偏好。虽然每个群体内的用户会因出行意图和目的地的变化而波动,但一个群组的长期偏好往往保持相对稳定。例如,商旅意向的群体更倾向于预订办公区附近的商务型酒店,而旅游意向的群体更倾向于预订景区附近的度假型酒店,其次 WWW 问题使得酒店群组推荐问题的数据更加稀疏。为此我们利用<群组-酒店>在长时间段内的交互数据以及酒店之间的相似度,构建了一个无向加权异构图网络。为了构建一个相对密集的图,我们在创建图的边时将用户的历史点击日志与购买日志一起考虑。

在完成群组内部偏好表征后,得到了三个表征,即群组的长期偏好表征、群组的短期偏好表征以及群组内部成员的聚集表征。

(4)第四部分:External Location-Time Representation

选择这部分作为表征主要是考虑到外部的时空因素会影响群组的偏好。例如,夏季游乐园和冬季温泉是不同季节的热门事件,这些与时空相关的因素会影响群组的购买行为。

首先针对时间相关因素,季节、节假日等主要以周期性的形式表现出来。因此,我们引入了一个 PRM 模块来建模这种周期性。其次在空间上,群组的购买偏好会受到区域内酒店分布和价格分布的影响。具体来说,我们建立了一个月粒度的 POI(Point of Interest)的 memory 矩阵。在使用时,直接使用群组的出行意图和出行时间作为查询,结合空间上的基础属性表征,即可得到群组的外部时空偏好表征。

经过这四个部分的处理,我们分别得到了群组意图的表征、群组的长期偏好表征、群组成员的聚集表征、群组的短期表征以及群组的外部时空偏好表征。这样综合考虑了 WWW 问题的三个方面,就得到了相对完善的群组表征。

在获得这一表征之后,我们通过一个 NCF Layer 进行群组偏好的学习。在损失函数上,除了群组粒度的损失外,还包括一个时空粒度的损失,也是为了解决数据稀疏性问题,考虑到相同意图、不同位置以及相同位置不同意图的数据共享。



利用群组的基本属性、购买力和出行意图来划分群组。通过比较每个群组的前 50 个购买商品的差异,可以看到采用出行意图划分群组时,它们之间的差异较大。关于周期性模块建模在前文中已做介绍,在此不再赘述。



在离线实验中使用了 Hit 和 Precision 作为评估指标。由上图的对比实验结果可以看到,相比于时间序列的方案,群组方案的效果更好,因为它更好地捕捉了群组的偏好。

此外,在两个特殊的场景和人群中,即旅行和出差场景中,DIN 也取得了良好的效果。这是因为在这两个场景中,这两个人群的出行模式相对固定,而在进行群组推荐时,可以将其视为特殊用户来处理,采用 DIN 的方式更容易捕捉到这种模式。

通过消融实验可以看到,每个子结构对提升效果都有帮助。

最后,我们采用了线上实验的方法来验证模型效果。在这里,我们进行了对比实验,选取了群组推荐中离线评估最好的 MOSAN 模型。选择了四个位置相近的城市,每个城市选取了 TOP1000 的酒店,交由 BD 输出并进行运营,然后采用 DID 的方式评估酒店前后间夜数(room nights)的变化。可以看到实验组带来了 3% 的显著提升。

以上就是对 LINet 模型的介绍。

03PETS-满足召回约束下的大促选品模型

接下来,是一个大型促销活动的两阶段召回模型。

1. 问题定义

这个模型主要用于为假期促销活动选择爆款酒店,使选择的酒店在能够覆盖真实销量 Top80% 的基础上,尽可能地准确,也就是最大化准确率(即满足召回率的前提下最大化 F1 值)。

2. 难点

在阶段 1 解决满足召回约束的大型促销选品问题,主要有三个难点:

  • 首先,酒店在不同假期的表现是不同的。例如,一个酒店在今年春节可能在销量的前 80%,在元旦可能在前 50%,而在中秋可能在前 10%,是不断变化的。我们需要挖掘酒店在不同假期的排名变化。
  • 其次,数据稀疏性也是一个挑战,我们经常发现在大型促销活动选品时,很多酒店最近没有销量,而在假期其销量大幅增加,成为热销商品,这是酒店冷启动的问题。
  • 最后,需要解决如何确保选品结果能够覆盖 Top80% 的热销酒店。

3. 模型结构



我们将问题建模成一个两阶段的选品模型:打分阶段和截断阶段。第一阶段建模成一个二分类问题,即一个商品是否可以成为爆款。第二个阶段是截断阶段,主要基于第一阶段的打分结果产生一个合理的截断位置。打分阶段采用编码解码的方式,在截断阶段借鉴了文档检索领域的方案,使用 Transformer 来预测位置 k 和 F1 之间的关系。

(1)打分阶段

在打分阶段,主要考虑一个酒店能否成为爆款的概率。从三个方面考虑:酒店在历史大促中是否成为过爆款、酒店在近期是否成为过爆款以及相似酒店是否成为过爆款。

  • 酒店在历史上是否成为过爆款?
  • 构建了一个酒店长期表现的抽取模块,采用卷积模式。这个模块的行是酒店的排名,列是假期。使用两种卷积方式,一种是列卷,另一种是行卷。列卷主要观察相同排名的酒店能够覆盖多少假期,而行卷则观察相同假期的酒店在历史大促上的表现。将这两部分综合得到酒店的长期表现。
  • 酒店近期是否成为过爆款?
  • 构建了一个时序预测模型,采用了 GRU 的结构,预测酒店的近期表现。
  • 相似酒店是否成为过爆款?
  • 采用两种融合模式,一种是 item level 的,另一种是 category level 的。item level 与相似酒店做 attention,而 category level 主要是对相似属性的酒店进行泛化,看其是否成为过爆款。两部分为了解决数据稀疏和酒店冷启动的问题

(2)截断阶段

将第一阶段打分的酒店作为一个 token 送入 Transformer,最后通过 Softmax 来预测位置 k 与 F1 的关系。



(3)损失函数

第一阶段的打分阶段的损失包括两部分。一部分是直接预测是否成为爆款的交叉熵损失,另一部分是引入了对比的损失,以确保在保持预测准确度的情况下使正样本更相似。

第二阶段,损失是基于 RAML(Reward Augmented Maximum Likelihood)的奖励增强的最大自然似然估计 F1 的分布,实际上是最大似然的一种变种。这里的 qk 代表 F1 的分布,而不是真正的二元标签。

在解决满足召回约束下最大化 F1 的问题时,在截断阶段,采用相同的模型再进行一次对召回率的预估,得到召回率与位置k 的关系。有了位置 k 和 F1 的关系以及位置 k 和召回率的关系,就可以找到在满足召回约束下最优的 F1 和相应的位置。

(4)截断阶段的调整

对输入进行了一些调整。输入包括打分阶段的输出;酒店的基础类目、商圈星级的统计特征;对第一阶段打分存在的偏差进行的校准;以及当前 token 与之前所有酒店的相似关系。

对于 Transformer 的输入也进行了调整,因为对于大促选品来说,只有一个查询,而打分的酒店可能有数十万个,因此对酒店进行了一定的分段。

以上就是本次分享的内容,谢谢大家。

04Q&A

Q:请问老师这个框架可以应用到比如连锁餐饮的菜品的上新吗?有足够多的供应链 SKU,但是只有 100 多个展示位这种情况。

A:我们的模型服务于特定的业务场景,比如大促。对于连锁餐饮的菜品上新,我的理解是类似于我们的冷启动问题。在我们的模型结构中也针对性地做了设计,比如会考虑相似酒店的 item level 和 category level 的建模,对于连锁餐饮的菜品应该也有一定的借鉴意义。

其次我们解决的问题有很多的候选集,而输出或者提供给 BD 的名单只有有限个,对酒店具体的排序位置关注少,更多关注的是 recall 和 F1,对应的是一个截断问题。

如果你们也是这样,理论上是可以的。

以上就是本次分享的内容,谢谢大家。




本文地址:https://www.6aiq.com/article/1709035521289
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出