Fork me on GitHub

熊飞:"猜你去哪" 飞猪用户旅行意图预测

图片

分享嘉宾:熊飞 阿里巴巴 算法工程师
编辑整理:小赵
出品平台:DataFunTalk

导读: 旅行商品推荐和实物商品推荐不管从用户维度还是宝贝维度上都具有较大的差异,不管是度假商品、门票、酒店、交通都具有较强的目的地心智。针对旅行场景的特殊性,此次分享介绍飞猪在用户旅行意图预测上的技术沉淀,包括如何克服用户行为稀疏的问题以及如何通过融合用户多源的旅行行为获得更准确的意图刻画表达。主要包括以下几部分:

  • 旅⾏场景下的算法策略现状
  • ⻜猪⽤户旅⾏意图预测
  • 总结

01 旅⾏场景下的算法策略现状

首先介绍下具体的预测场景。

1. 场景介绍

图片

飞猪是面向用户提供旅行商品和旅行内容服务的一个综合电商平台,涵盖了非常多类目的旅行商品,包括度假商品、⻔票、酒店、机票、⽕⻋票、内容以及POI等多源实体,我们的目标是通过算法帮助用户找到理想和合适的旅行商品以及旅行方案,最大化流量分发效率。

2. 旅行场景的特质

旅行场景的特质可以总结为以下几点:

  • ⽤户旅⾏是超低频需求,⽤户⾏为数据以及商品⾏为数据异常稀疏;
  • ⽤户访问频次低、间隔⻓,上⼀次的访问信息可能失效,需要实时快速的捕捉当前⽤户的真实兴趣;
  • 旅⾏具有明显的⾏前→⾏中→⾏后的状态转移过程,并且不同状态下存在明显的差异;
  • ⽤户对旅⾏的决策期较⻓,会有明显的前瞻规划需求;
  • 旅⾏具有丰富的混合LBS特质,包括跨城的⻓途旅⾏、跨区的周边游旅⾏以及跨⻢路的短途旅⾏;
  • 旅⾏⾏为多源化,涵盖多个⾏为域,包括⽕⻋票,酒店,机票,度假宝⻉等;
  • 旅⾏不是单点需求,是⼀个package需求,⼀次完整的旅⾏涵盖多个⾏为域的交叉。

02 飞猪用户旅行意图预测

1. 预测目标

图片

不管是哪种形式的旅⾏产品,⽬的地属性是最重要也是最全⾯的信息。考虑旅⾏不变的LBS特质,⽤户最重要的意图为⽬的地意图。所以我们的目标就是准确预测用户旅行意图(目的地偏好)。

针对前面提到的问题:

  • 第一个问题,用户旅行是一个超低频的需求,那么我们在预估用户旅行意图的时候,在用户历史行为的一些信息去刻画的时候,时间必须要足够长,行为域要足够多。
  • 第二个问题,用户访问频次低,间隔长。那么在考虑用户长期行为的时候,也必须把用户近期实时的行为考虑进来,并且在刻画意图的时候必须要考虑时间维度。
  • 第三个问题,旅行行为多源化,不是单点需求。在考虑用户历史行为时,要充分融合用户多域的行为。

2. 多源行为的聚集性

不管是哪种形式的商品,在目的地上都是可以做到统一的。

图片

如上图,上部分是一个按照时间线的某用户的行为条,下部分不同颜色的纵轴表示不同的业务线,将不同的行为去映射到不同的行为线上不同的行为类目上面。比如说用户在上海,行为是购买了两次火车票,但是该用户没有产生预订相应自由行门票的行为,其实我们可以认为上海的旅行意图不是很稳定,有可能是出差,或者不是一个旅行的需求,可能是很随意的点击或者购买,所以就需要考虑到多源行为的聚合性。

多源行为的聚集性 :⽤户在短时间窗⼝内,在同⼀⽬的地下,发⽣多个类⽬的⾏为,表示⽤户多源⾏为聚集性。这种聚集性更能充分的反馈⽤户确定性的旅⾏需求。

3. 多源行为序列处理

图片

我们首先要将多源行为序列的埋点规范,采集规范,时序关系必须要统一。在这个基础上,我们要规范化id,统一⾏为类型、时间,⽬的地维度上对⻬,按照时间顺序进⾏融合排列。上图(右)可以看到五种行为序列的最大、最小长度,以及均值长度。最后的global就是融合上面所有的,可以看到经过融合后,长度扩大了很多。

4. 模型设计

图片

第一步: 考虑上述的⽤户融合序列,将⾏为类⽬、⾏为类型等信息通过side information的⽅式加⼊到序列中,主ID还是规范化ID。

第二步: 针对聚集性特点,通过Multi-CNN抽取不同区间范围内的局部特征(units),用一维卷积替代长序列上去做卷积,去产出进行局部units之后的结果。涉及到多粒度卷积,同时考虑local和global信息。区间越⼩,更加关注于局部,区间越⼤,更加关注于全局。⽐如区间为1时,考虑的是point level。

图片

第三步 :通过⽤户状态作为query,加⼊时间维度特征,对抽取出来的多组units进⾏time attention pooling。(公式参见上图)

第四步 :为了克服意图维度⽤户区分度⼩的问题,采⽤pairwise的hinge loss的⽅式进⾏训练。(公式参见上图)

5. 模型实验

图片

首先验证不同域⾏为融合⽅式是否有效果。

  • independent:只考虑⼀个⾏为域
  • strategy 1:多个⾏为域按照时间排列为⼀条序列
  • strategy 2:多个⾏为域各⾃按照时间排列为⼀条序列

不同序列处理⽅式:

  • Autoint:self-attention
  • DIN:attention
  • MLP:简单reduce_sum+MLP
  • ATRNN:GRU+time-attention
  • ATMC:Multi-CNN+time-attention

对比以上baseline,我们的多粒度卷积抽取加time-attention达到了一个比较稳定的效果。

图片

6. 融合用户兴趣建模

图片

  • 考虑全⽹实时宝⻉点击序列以及场景内宝⻉曝光未点击序列,采⽤transformer + time-attention的⽅式进⾏pooling。
  • 考虑全⽹⽤户⾏为序列,包含多个⾏为域,通过MultiCNN + time-attention的⽅式进⾏pooling。
  • concat所有特征和pooling的结果,通过多层BN + MLP进⾏打分(CTR or CVR)

7. 融合实验结果

图片

左图包括正负反馈,但在这个的基础上,我们把刚刚说的多力度卷积提取用户全网行为去或多源融合序列的结果,做一个可提高的结构加进来之后,在这个基础上会有比较稳定的提升。

03 总结

图片

我们做模型时,首先考虑的是需要哪些特征,然后在这些特征的基础上,去考核这部分特征和信息的特点,去完成相应的模型设计,从而让我们设计的模型更加充分地去表达我们想要拟合的特征。用特征去指导模型设计,再想模型怎么更好的去表达特征,形成一个回环。

模型只是整个项目中的一部分,若想要更好的推荐结果和good case,其实是业务、工程和模型等多方面来共同保证的。

04 精彩问答

Q:请问旅行意图的预测主要输出是什么?旅行意图是否有其他方向的应用?

A:输出其实有很多种形式,我们开始做这个事情的时候,当时的输出就是会在用户每一次进来飞猪的时候,不管进入哪个场景,我们会通过这个模型采集用户历史的一些信息,然后给用户提供一个候选意向旅行目的地列表。具体应用有很多,这里举两个例子。第一种是我们最常见的入口类的应用,优先选择一个目的地给用户推荐,这个时候可以通过做一遍初步筛选,就是把所有的候选集限定在某一个目的地下,这就是入口类应用。第二种是信息流与瀑布流类的应用,我们在对商品做混排,甚至精排的时候,会在商品力度的基础上面再考虑它的目的地分布,如果预估的是一个用户在他历史行为或者他没有行为过的一个目的地上的兴趣分布,可以用分布去对整个旅行商品的推荐结果去做一个校准,甚至直接去改变它的次序也行,这也是一种应用方式。

Q:在旅行意图的项目中,产品同学和算法同学是怎么合作的?

A:我们算法这边只是输出一个大的策略,如果在某一些小的策略上微调可能产品或业务会介入。比如举个例子,入口型的应用,我们这边模型都是贪婪的,每次都会选概率最高的一个目的地给用户,但是实际上在整个产品设计链路上会有一些其他考虑,比如用户他刚刚已经去过了某个位置,那是否还要给他推这个目的地,我们应该给他推什么类型的目的地。比如在国内长居的用户,在疫情期间给他推一个日本大阪的商品显然是不合理的。但是我们的模型有可能就会变成这样,因为有一些极端的匹配。模型相当于是个机器,不会考虑任何业务逻辑,甚至是人性相关的一些东西,像这种我们只是输出一个大的策略,在一些细小的策略和规则上,业务或者产品的输入比较多,然后加入时间序列可视化,算法这边再次进行筛选。

Q:本次实验结果AUC不算高,那么如何保证线上效果AUC?

A:其实从AUC这个层面,在不同的数据集、不同的正负样本比,甚至是不同的特征下,AUC都是不可比的。举个例子,有可能通常意义上的搜索场景的AUC一般都比推荐场景的AUC高非常多。而且推荐场景的入口类的AUC和信息流类的AUC也是不一样,信息流的AUC和入口类的AUC有可能差到百分位两个点,甚至是十分位一个点。并且只是一个场景的变化,即使行为商品都一样,它的结果差别也很大。所以说AUC这个层面,我觉得需要首先构建一个你认为比较好的baseline,只要不是0.5就行。如果模型和数据集没问题的情况下,即便推荐产品的AUC比搜索场景的AUC低百分位两个点,也不能说推荐的模型没有搜索模型好,同样一个模型用两个数据集跑出来的AUC差别也会很大。

分享嘉宾:

图片


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