前言
这篇文章用于对booking.com 在2021年举办的Multi-Destination Trips Dataset进行介绍,并且尝试分析多份解决方案。希望能够对多目的地出行问题感兴趣的同学有所帮助。
一、基本信息
比赛官方网站:https://www.bookingchallenge.com/ 这道题的背景是:对于一个旅客来说,经常要去不止一个目的地,比如一个从US去阿姆斯特丹的旅客,在阿姆斯特丹逗留5天,然后在布鲁塞尔带2天,巴黎3天,回到阿姆斯特丹待一天,最后返航。booking需要能够在他预定了第一个房间预订后,推荐接下来的行程。 该比赛共有百万条真实的房间预定记录,需要能够为旅客推荐最好的接下来的目的地。
二、数据与评估
1.数据格式
user_id - User ID check-in - Reservation check-in date checkout - Reservation check-out date affiliate_id - An anonymized ID of affiliate channels where the booker came from (e.g. direct, some third party referrals, paid search engine, etc.) device_class - desktop/mobile booker_country - Country from which the reservation was made (anonymized) hotel_country - Country of the hotel (anonymized) city_id - city_id of the hotel’s city (anonymized) utrip_id - Unique identification of user’s trip (a group of multi-destinations bookings within the same trip)
其中,每行记录都是一个旅客的出行的一部分,由utrip_id来标示;同时,一个utrip_id中间间隔的几段旅行,并可能是连续的check-in,check-out,也可能是间隔几天的。 evaluation集结构类似,但是每次旅行的最后一个city_id是未知的,需要预测。
样例举例如下:
2.评估指标
比赛结果需要预测每个旅行(utrip_id)的最后一个旅行城市(city_id).在评估预测结果的时候,预测结果需要给出4个备选城市,只要有这四个备选城市中包含真实实际城市,就认为推荐正确,否则就推荐错误。
3.结果提交格式
utrip_id - 1000031_1 city_id_1 - 8652 city_id_2 - 8652 city_id_3 - 4323 city_id_4 - 4332
三、难点分析
首先,不同于常见的回归/分类的ML问题,从训练数据中可以看出,数据不能够按照user_id进行聚合,因为这样难以表达一个trip当中的先后顺序,以及check-in,check-out的前后。 其次,这个问题也和一般的物品推荐问题存在一定区别,物品推荐中一般不考虑训练数据中物体出现的先后顺序,但是这一题中城市的先后顺序会绝对的影响输出结果,因为训练数据中隐含着两个城市间是否是常见通行城市,以及出行顺序。 这道题的需求是,在有context的条件下(已知前面几个途径城市)的推荐问题。所以,尽管这是一个推荐问题,但是更适合用RNN来进行建模。
四、基本解题思路
这道题最开始的解决方案,建议先观看视频如下,https://www.youtube.com/watch?v=pwfwUA4ZShI。视频中是2018年booking的DS对这一问题的讲解,可以作为最基本的baseline。
首先,从RNN处理自然语言的角度,以机器翻译为例,可以计算已知一段话的基础上,输出另一段话的概率。
所以,从旅程的角度,已知前面的几个途径地,需要判断以A终点的概率是否比以B为终点的概率更大。
所以,问题描述就变成下面的样子(我是真的很喜欢这个问题描述,非常简洁有没有!!)
RNN的建模结构如下,其中,值得注意的是,embedding部分没有单独训练,而是合在模型中。
也正如如下公式琐事,x即为经过了变换的embedding向量
制定惩罚函数的时候,采用的是crossentropy
在数据过程中,一个注意事项是,一个user的出行过程可能有一段,可能有两段,可能4段,这就涉及到在处理数据的补齐问题。原作者采用排序的方式,利用的trip的长度(经历城市数目)来排序,然后每个batch都不用补齐到最大长度了。
当然,这里的例子比起比赛题目是简化了的。因为仅考虑了trip的前后关系,没有考虑其他背景信息,像是时间/出发国家/订票渠道等等。 以上是最基础的解决方案,在之后的博客中我会继续解读其他方案。
|