竞赛总结:新冠期间饿了么骑士行为预估

删除回忆录丶 提交于 2020-11-13 09:29:59

智慧物流挑战赛


赛题介绍

饿了么拥有几十万外卖员,几百万商家,每天外卖订单几千万,服务几亿用户。具体统计每天饿了么外卖员(蓝骑士)行驶的距离累计可以绕地球400圈以上,这就是阿里巴巴本地生活今天的服务规模。

面对新型肺炎疫情,饿了么和广大商家一起,全力组织防护用品供给,平抑价格,增加骑士运力,持续实施最高等级的卫生安全举措,对骑手、餐箱、配送车辆、站点等消毒措施已全面升级,并进行专项督查。

在这些骑士背后,有一套智能调度系统,采用大数据平衡算法,实现自动化派单。 阿里巴巴本地生活聚焦新冠疫情期间的骑士行为,邀请开发者为提高平台的物流运营效率贡献一份力量。
赛题奖励

Top5选手将获得天池奖牌、证书,以及精美礼品。

一等奖:1名,机械键盘

二等奖:2名,Kindle阅读器

三等奖:2名,天猫精灵


阿里校招绿色通道:初复赛TOP20团队有机会直投简历,简历直投邮箱。

外卖员绿色通道:优秀的参赛选手可体验当地骑士工作。

赛题任务

在饿了么的配送场景下,骑士在外卖配送中的决策行为主要分为到店取单到用户处送单两种行为。骑士在某一时刻会接收到分配给他的配送订单,同时骑士身上也背负着之前分配给他还未完成的订单。骑士会根据当前身上背负所有订单状态和自己所处的位置来决策下一步的任务。本项比赛的任务就是需要根据骑士历史的决策信息,结合当前骑士所处的状态来预测骑士的下一步决策行为。
在饿了么的业务场景下,商圈内的订单和骑士都是相互独立的,不会有重叠。每一轮的调度中,可以将所有订单都进行分配,也可以根据需要将部分订单保留至下一轮进行调度。
本次比赛的任务就是对订单进行调度,分配给最合适的骑士,并预测骑士的后续行为及每个行为事件发生的具体时间。另外,选手可以对历史订单数据做挖掘,为调度提供有用的信息。
赛题数据


赛题会提供一部分历史订单数据,选手可以选择是否利用这部分数据做挖掘。此部分数据包括订单时间、订单预期时间、订单起始经纬度和订单结束经纬度。

赛题评测是一个交互的过程,选手提交代码,评测系统会下发订单并使用选手代码进行调度,并进行评分。由于赛题数据比较复杂,初赛与复赛的任务还有差异,为节约篇幅,详细的数据介绍见比赛官网:
https://tianchi.aliyun.com/competition/entrance/231777/information
在初赛需要满足取餐在送餐之前, 调度系统评测需要同时评测行为与时间的准确性,两者进行加权求和。复赛调度系统评估指标为订单平均配送时长和超时率的综合指标,


第1名:成都-枫亭



第2名:新冠天敌


第3名:嗨多磨!

初赛的目标是对骑手的下一个动作和下一个动作完成的时间做预测。很明显,存在两个不同的目标:预测动作和预测时间。并且存在着逻辑先后关系:先有动作,再有时间。在这里我主要分享一下我们组对于第一个小任务:预测骑手动作的思路,因为预测时间相对来说更简单一些。

首先,我们认为,判定一个动作,仅仅通过这个动作本身的相关属性是远远不够的,需要对所有的候选项通盘考量。也就是说,我们认为这个任务的重点是分析与提取某一个动作候选项与其他动作候选项(context)的关系。其中,context中可能有不定多个条目(动作候选项),并且,我们还希望获得一个对context的条目顺序无关的表示。

我们从一下两个方面去解决该难题

  1. 我们的总体的解决思想是将一个动作与一个动作之间的关系转化为一个排序问题:我们对每个动作进行打分,这个分值代表着这个动作的紧急程度,我们希望骑手选择的动作的分值尽量比其他动作的分值要大并且尽量扩大这个间隔。

  2. 我们对context进行化简:将context的大小化简为1,彻底消除顺序问题。具体讲,我们选择地理上离当前动作目标地点最近的动作作为context,因为我们认为骑手在规划订单的时候,会比较多地考虑一i个订单和附近进的订单。

基于排序以及context化简的思想,我们的模型阐述如下:我们的模型基本结构是一个mlp模型,候选动作与其context叠加后送入共享参数的mlp模型进行打分。打分完成后,经过softmax对其进行归一化,并使用negative log loss 进行优化,negative log loss可以极大化正确选项的得分并且极小化不正确选项的得分,从而达到排序效果。

复赛我们采用的是简单贪心派单策略,总体pipeline如图3所示

  • 根据骑手-订单(组)生成订单对

  • 按照cost从小到大排序,依次模拟派单

原因是该方法比较迅速,在一个复杂度为主要限制的情况下,可以给算法的其他部分留下充足的时间。一些更加全面的方法都有一定的应用局限性或者复杂度较高,比如:二分图最有匹配算法,计算骑手与订单的整体cost最小的匹配。


第4名:一鸣惊人

初赛目标:预测骑手的下一步动作(挑选后续动作中骑手最可能做的动作)
  1. 将行动与之后的行动两两组合在一起,如果是紧接着的行动,则结果为True,否则为False;

  2. 根据业务规则,排除不可能连续的行动,如5、6为同一个订单的取餐和送餐,则5还没发生,6必然不可能发生,故1 6、2 6等等都是不可能的,排除;(背单上限后不能再取餐、订单还没开始等都是不合理的)

  3. 按上一个行动分组,如果后续可选择动作只有1个,故没有比较的参考价值,排除;

  4. 同理,预测集中已完成的行动也可用同样的方法生成训练集;

  5. 而预测集中需要预测的那一个节点,用同样的过滤方法生成预测集;

提取特征
行为类型、距离、新老骑手、骑士速度、背单能力、天气、
离期望时间(预计取餐时间或送达时间)相差时间 即剩余时间、
离开始时间(分配时间或取餐时间)相差时间 即已开始时间、
及在所有待选择行动里的相对距离和相对剩余时间
(还可以考虑更多如:背单数等)

带入模型
用五折lgb分类模型预测待选择行动中概率最高的一个为下一个行为
提取所有正样本用五折lgb回归模型预测这个行为所需要消耗的时间,加上上一个行动时间即为预测时间

复赛目标:合理安排骑手,平均配送时长尽可能短、超时运单数尽可能少;思路:优先满足尽可能多的运单准时送达;策略:先分配能准时送达的运单,再分配无法准时送达的运单。

  1. 遍历所有骑手与未分配运单,通过穷举所有行动方式判断该骑手增加该运单后,能否准时送达;

  2. 最优先运单:能准时送达的骑手数最少;

  3. 在能准时送达的骑手里随机挑选一个;

  4. 重新计算分配的骑手能否完成之前可以准时送达的运单;

  5. 不能准时送达的放在行动链最后面;

将在行动开始时间在下一个调度周期前的行动记录下来,若是最后一轮,则全部行动记录下来,准备发送给服务器;只有当运单的相关行为被记录下来,才认为该运单已分配;

穷举路径

  1. 每个骑手分配的运单不能过多,过多的运单将导致复杂度激增;

  2. 只需要找到一条可行的路线,则终止穷举返回;

  3. 尽早的发现路线的不可行,每进行一步,都需要判断
    取了餐的运单 -> 当前时间 小于 送达时间
    未取餐的运单 -> 当前时间 小于 送达时间 减 取餐到送餐所需要花费的时间
    未超出背单上限;

  4. 大量重复的数据可提前算好,如送餐所需时间等;

  5. 记录骑手无法完成的运单,以免重复计算;

  6. 到店行为和取餐行为可以放在一起;


第5名:北京科技大学

初赛骑手在面临行为决策时,存在多个待取订单和多个待送订单,我们团队将骑手行为预测问题分为两个阶段进行解决。

  1. 阶段一:骑手决策时,先考虑从多个需要取的订单中选出最有可能取的订单,和从多个需要送的订单中选出最有可能送的订单,称之为“选单阶段”

  2. 阶段二:骑手在经过阶段一的选单后,进行取单还是送单的决策,确定最终的行为,称之为“决策阶段”

复赛主要思路,让骑士尽可能在一个小范围商家区域内取单,每个只取用户距离比较相近的单子,取完一些订单后,在统一进行送单。这样骑士就尽可能在起点终点两点直线配送。
因此需要对商圈内的商家进行聚类,以及商家对应的用户进行聚类。同时,由于不同的商家,订单产生量在时间上有差异,比如有的是卖早餐,有的卖午餐,用户群体不同,学生,上班白领,用餐时间也有差异。因此引入时间变量,不同时间段内单独进行聚类。整体方案由动态区域划分的规则模型和调度模型构成,详细思路如下图所示。

第6名:正方形的园


比赛完整分享,请访问http://coggle.club

或点击阅读原文,直达分享链接!


赛事交流群已成立
一起组队参赛,baseline交流分享
如果加入了之前的社群不需要重复添加!
若进群失败,可在Coggle后台回复【竞赛群】
即可得到最新的二维码!

本文分享自微信公众号 - 从数据分析到人工智能(close_3232479263)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!