饿了么技术副总裁张浩:我们在大数据及AI领域的实践
诸葛君说:点外卖的时候,通常会在下单后有个提示:“预计20分钟能送到”,就是这样一个小小的时间反馈,其实背后都是大数据、算法在支撑,因为这个时间包含了一家餐厅高低峰时间段合理的出餐时间计算,包含了骑手被分配、取餐、配送,甚至可能多单同时配送的时间,他的准确性直接影响平台上多方的体验和利益。如何准确支撑?并基于AI能智能调优,在上海GDG DevFest2017大会上,“饿了么”技术副总裁张浩分享了他的实践经验。
张浩
饿了么技术副总裁
曾任滴滴研究院高级总监 美国 Uber 大数据部
LinkedIn 搜索与分析部资深数据科学家 Microsoft 语音识别组高级数据工程师
负责饿了么人工智能与大数据建设
带领团队将机器学习应用在物流调度、压力平衡、
推荐搜索等场景,通过数据挖掘建立完整的数据运营体系
提高运营效率,用数据和智能驱动业务发展
拥有十余年机器学习、数据挖掘、分布式计算的实际经验
一、关于饿了么
1.交易场景
外卖是什么样的量级?很多人可能不知道。中国最大的领域是电商,有淘宝、京东,其次是出行行业,有滴滴、UBER、还有共享单车,这几家公司加起来是一天两三千万订单量左右。而外卖行业到今天已经达到每天 2500 万单。
现在的饿了么,除了食品、还有鲜花、药品等,“饿了么” C 端注册用户 2.6 亿,B 端商家目前已经是 130 万,每年是千万级别的定单情况,这个是我们外卖行业的一部分,就是电商交易平台。
2.配送场景
到今天为止,饿了么配送员已达300 万,平均每天有2千多个城市 30 万到 40 万的骑手活跃,随时准备接单。
本地物流是外卖重要也很复杂的部分,区别于其他物流,他们几天时间到达,这个行业的“物流”是希望 30 分钟送到,这就导致我们的架构和算法模型有很大的挑战,下文会着重介绍。
二、关于 AI @ 饿了么
饿了么与淘宝、携程、滴滴等涵盖消费者衣食住行的生活服务类的产品一样,是高频需求,但因为业务模式的差异,在技术层面也有很多不同。
在外卖领域需要三大技术支持,一个是机器学习,一个是运筹优化,一个是大数据。具体到业务中:商户希望30分钟将食物送达,所以送餐距离的选择需要科学计算,目前所有行业都是基于APP定位,定位可能3公里或者5公里的半径,LBS保证以运营商的推荐/搜索为基础,我们以外卖行业中典型的3个场景为例,说明这三大技术是如何应用的。
1.交易
下图中间这个模块是用户商户分层,推荐搜索和智能补贴,这几大方向是任何电商都必须做的。
基于精细的用户画像,我们希望对用户和商户的生命周期进行严格的管理,通过相应的推荐、搜索、补贴等手段,比如:当某一用户进入沉睡期,我们会通过合适的方式对用户进行刺激。
2.线下
当交易行为发生时,我们希望30分钟将外卖送达用户,这一过程涉及机器学习的规划以及智能的调度,出餐时间、送餐时间的预估以及动态定价等模块。
线上交易与物流逻辑不同,对于线上交易来说,我们当然希望订单越多越好,但是30分钟内将订单全部送达则是不太可能一下子解决的问题,因此需要保证线上交易与物流配送环节保持平衡,既提供交易质量,也不损失用户的积极性。
3.底层
讲到这两个之后就是一些底层的东西,现在让我们看上一张图,左边包括选址推荐等等,刚才讲到配送是本地,当一个商家定下准备配送的地方就会画一个圈,比如说我送一个圆圈或者六边形,这个不是随便画的,首先有可能这个地方是高速路或者高架桥,不是每个人平台都是一样,有的用户也有可能老是定便宜订单,我们在网格和站点规划的时候会考虑所有因素,这个涉及很多运筹优化的问题,最后一个例子就会讲到选址和网格规划的问题。简单讲一下我们三个部分包含了我们在人工智能方面所有一些尝试,这对我们业务是非常重要的。
三、关于运筹优化与应用实例
1.案例1 : 出餐时间预估
我们的解决方案是机器学习,通过GBDT ,在实际场景中做到平均,而不是特殊平均,加上出餐时间10分钟,我们可以固定7分钟到13分钟,这个准确率比较高。
这里强调的是平均,因为有很多特殊场景,比如厨师环节突发状况机器学习无从得知,因为机器学习只能根据过去已发生的事件来预测未来。针对突发事件我们也设计出一些产品方案,比如:发现餐厅出餐量和订单量并没有呈线性增长,前面出现“堵塞”,我们便根据数据及时的对平台进行实时调整。
在深度学习方面,我们使用LSTM,通过时间相关性让预测更准确,毫无疑问出餐时间一定与过去订单有关,但是为什么与未来有关呢?我们预估未来3到5分钟有新订单,但是与现有订单有共同之处,有可能是同样的菜品,有可能是共同的地方,同样的菜品对厨房是一个订单便可以同时出菜,通过这个模型也可以捕捉这些特征,对订单分配和订单打包会有一定帮助。
2.案例2 :行程时间预估
与滴滴从A点到B点已经确定的交通方式不同,“饿了么”的场景远远没有那么多的道路信息可供参考,首先骑手因楼宇内的交通很复杂,有可能步行,有可能电梯,有可能爬楼梯,有可能骑电动车,甚至转换交通工具,这将直接造成我们在数据搜集方面是极不准确的,数据很难获取。再者,餐厅与顾客大多在大楼内,当楼内没有GPS信号或信号不佳时,我们收到的数据或者定位误差有时会高达几百米。
所以,时间预估需要将轨迹建立起来,第一步是历史数据清洗,针对室内定位不准甚至完全缺失的情况,我们采用WIFI+GPS信号,甚至互相定位等方式,最大程度减少定位缺失的问题,其次是去除噪音,我们通过定位的算法把相关时间合起来,最后进行轨迹聚类。
3.案例3 :智能分单
滴滴与我们的分单难度不同,滴滴场景下匹配一个司机最多接收2-3单;在 “饿了么”场景下,一个骑手一个背包,同时背5-10单,而且订单之间有时间限制,同时涉及极高的时效要求。
有两个小方案,第一个小方案是VRP路径规划。
当用户下了一个订单,在骑手容量和成本固定的情况下,我们需要找到匹配的线路,以保证不超时的承诺。默认模式下, 一个骑手可同时送5-10单, 每单都有严格的时效要求, 并且订单在午高峰爆发式增加。
方案1:车辆路径规划
输入:订单,骑手,容量,成本。
输出:订单和骑手间的匹配以及行走路线;
优化目标:最小化时间或者行驶距离;
约束条件:骑手背单数、骑手数量、最晚到达时间等。
我们通过模拟退火算法。
模拟退火算法 ( Simulated Annealing,SA ) 是基于 Monte-Carlo 迭代求解策略的一种随机寻优算法。
赋予搜索过程一种时变且最终趋于零的概率突跳性,从而可有效避免陷入局部极小并最终趋于全局最优的串行结构的优化算法。从理论上来说这算法具有概率的全局优化性能, 目前已在工程中得到了广泛应用,诸如 VLSI ,生产调度、控制工程、机器学习、神经网络、信号处理等领域就是用它来做订单的分配,但最终结果不是特别好,因为时间预估存在不准备性,在路径规划时,先配送A 单还是B单,一旦在时间出现误差时,路径规划得很差。
第二个算法,也是一种基于大量函数的组合算法。
左下角是个矩阵,每一行是一个订单,每一列是一个骑手,我们希望通过一些规则和机器学习的算法算出来,右边是一个定单匹配的结果。
最优匹配:KM 算法。调度算法的演进最早是 VRP。
最后看看KM 算法,在基础框架界定后依然有大量的工作量。实际上,订单有相似性,因为订单是可以打包的,一个人稍微等几分钟,也许这个订单出来与那个订单很相似,都是送往同一个地方,就可以将订单分配给同一个骑士拿走。但是,订单规则在高峰期与非高峰期是不同的,存在两个方向的路和两个方向的夹角,所以定单匹配模型是在2.2版基础上设计出来的,基于机器学习,通过历史数据来训练,这一过程我们也遇到一些挑战,由于在不同的站点骑士习惯不同,在推广时会遇到一个问题,在A站点骑士们觉得OK,但是在B站点就行不通,我们现在做到“千站千面”,根据类似的站点历史分单数据,将这些模型用来做训练,做到类似的站点有类似分单的方式,所以我们又将版本升级到2.3。目前开发中的版本就是增强学习,我们实时的进行动态调整。
方案2:最优餐厅选址问题
我们其实也与商家开始合作餐厅,希望获得一个最优的选址,餐厅覆盖最多的用户,菜品不一样,用户群不一样,我们选择了如下图的算法方案。
机器学习在应用实践中的挑战来自于基础数据的完整性和准确性。上文中提到的数据不准确,餐厅不规则等情况,因无法了解准确的情况,我们花费大量时间做基础数据的调整。此外,算法的提升和对用户行为的理解比较重要,因为在外卖行业需要人来完成执行,以前通过打电话的方式人工分配,其中涉及大量沟通,现在通过机器完成快速分单,机器考虑全局最优而不是局部最优,恰恰来说,人是做不到这点。将算法提升与产品运营综合起来,才能让用户形成习惯。最后,优化算法与机器学习在外卖行业是相辅相成的,不仅是机器学习,更重要的是我们如何在短时间内将人力合理配置,在最少的时间内将订单完成。
文/于晓松 微信公众号 诸葛io(ID:zhugeio1)