当前位置: 首页 > 科技观察

人工智能在饿了么的应用实践

时间:2023-03-14 17:22:53 科技观察

关于饿了么,大多数人都点过外卖,现在外卖已经成为中国的一种就餐方式。叫外卖是一个怎样的量级?当我说出来时,每个人都感到震惊。中国最大的领域是电子商务,淘宝、京东,其次是旅游行业,滴滴、优步其次是共享单车。这些公司每天加起来约有20到3000万个订单。做外卖的人都知道,这个行业至今每天接到2500万单,可想而知这个行业的发展是多么的迅猛。为什么数据和算法起到这么大的作用,因为我们都知道在互联网+的情况下,有这么大的订单量,至少在数据行业我们有很多事情要做。2500万订单中的《你饿了吗》是一个怎样的场景:我们打开手机APP,就能找到自己喜欢的餐厅。大家选择一家餐厅,选择自己喜欢吃的。在淘宝上买衣服和在携程上买机票是一样的。过去,食品是在电商交易平台上交易的。现在不仅是食品,还有鲜花和药品,还有当地的购物和送货服务。所以电子商务只是第一部分。电子商务达到什么规模?你知道吗?,《饿了么》C端注册用户2.6亿,B端商户130万,每年订单数千万。这是我们外卖行业的一部分,它是一个电子商务交易平台。第二部分大家也可以看到这张图是骑手小哥拿着一个箱子,不是走路就是骑电动车。其实这就是当地的物流平台。为什么要强调地方性?因为我们行业的特殊性不同于其他物流行业。他们几天后到达。我们这个行业的本地物流肯定希望30分钟送达,所以我们设计了这个结构。我们工作的时候这是一个很大的挑战,但这次有点不同。后面讲算法模型的时候就清楚了。我们做的是一些本地物流,所以时间限制很严格。截至今天,我们有300万快递员。全国平均每天有30万到40万骑手在线下活跃,随时准备接单。这是和滴滴一样的运营模式,现在已经覆盖了全国2000多个城市。关于AI@饿了么第二部分是AI在《饿了么》中的应用。为什么这个行业需要人工智能?作为本地生活的平台,我们都知道衣食住行是非常必要的。各个方向都有很多大商人。他们技术挑战的不同,一定来自于他们的业务形态。给大家简单说明一下:首先是淘宝,我相信大部分都会用淘宝,淘宝是网上购物最常用的平台,主要面向用户和商家,线下大家都知道是当天发货同城更多订单在开放平台下单。每个人都下订单,然后交付给每个人。这是三通一送。菜鸟也可以,顺丰也可以。这是一个开放的平台。最重要的一点就是时效性,通常以天数来计算,不会有所谓的加班补偿。淘宝就是这样。再看看携程,它可以订酒店、酒店、网上用户和商家,不会网上下单。滴滴特别贴近外卖行业。事实上,优步在国外也做得很好。在业务形态上,滴滴与外卖非常接近。滴滴线下和线上永远是用户和司机,订单的形式也是众包的形式,要么通过加盟商,要么通过司机在线注册来承担配送能力。司机超过时限是不会被处罚的,因为没有人能预料到会不会出车祸,也不能保证这个时限,所以和饿了么很像。最后,我提到了“饿了么”和外卖行业。首先,线上用户和商家为主,线下订单较多。蓝骑有一部分是自营的“饿了么”的员工,也有团队和加盟商。当然也有公共的,比如说我今天开会,下午还有四个小时,我可以发几个单子。这是一种众包形式。时效以分钟计算。我们的目标早就实现了。全国平均订单半小时送达,有超时补偿。30分钟后10分钟内未到则有红包。补偿,加班补偿的压力比较大,但这是对客户服务不足的一种补偿。根据上面,我们进入了一个大框架,就是外卖行业有三大东西,一个是机器学习,运筹学优化其实离不开机器学习。在运筹学优化方面,大数据作为运筹学优化的基础起到了非常关键的作用。现在你可以看到这张照片很有趣。我花两分钟讲一下业务中的算法问题,分三个层次。底层外卖行业希望30分钟送达,但20、30公里外送达是不可能的。除非你会飞,否则不可能在半小时内运送10公里。基于这种情况,所有的行业都是以当前打开的APP所在的位置为准,这个位置可能有3公里或者5公里的半径。LBS保证运营商会以各种推荐或搜索为依据,接下来的两层是机器学习和优化。那么现在让我们详细谈谈这三个部分。第一:交易的话,可以看看中间的模块,就是用户商户分层,推荐搜索,智能补贴。这些是任何电商都必须做的大方向。有了非常细致的用户画像体系,我们希望对用户和商户的生命周期进行严格的管理。在此基础上进行相应的推荐、搜索、补贴。比如用户进入休眠期,我们会通过一定的方式去刺激客户。第二:线下发生交易时,我们希望在30分钟内将外卖送到用户手中。这涉及到机器学习规划。智能调度我会详细说,送餐时间和送餐时间我也会详细说。这些模块包括用餐时间的估计和动态定价。智能调度是调度的一部分。我们的30分钟包括了准备时间和路上的时间,甚至保证送货到楼下,等电梯到你的时间等等,所以30分钟有很多不可预知的事情。那么压力平衡是什么意思呢?大家都知道网上交易和我们的物流是矛盾的。对于线上交易,我们当然希望订单越多越好,希望几秒内几千万用户一下子进来。但是,30分钟内发送所有订单不太可能一下子解决。为了达到压力平衡,需要保证交易、物流、配送之间的平衡,从而在不损失用户积极性的情况下实现交易质量。第三:底层说完这两个,还有一些底层的东西。现在让我们看看之前的图片。左边包括位置推荐等,刚才说了送货是本地的。当商家决定送货地点时,我可以画一个圆圈。例如,我发送一个圆形或六边形。这不是随便画的。首先,这个地方可能是高速公路,也可能是高架桥。不是每个人都有相同的平台,有些用户可能总是以低价下单,我们在规划网格和站点时会考虑所有因素。这涉及到很多操作优化问题。最后一个例子会讲选址和网格规划。简单来说,我们的三个部分包括了我们在人工智能方面的所有尝试,这对我们的业务非常重要。我将运筹学优化和应用实例部分分为两类,分别是机器学习的应用案例和机器学习的社会优化案例。案例一:送餐时间预估第一个是送餐时间预估。我这里用滴滴做对比。什么是等待时间估计?比如我们在滴滴场景下单。比如我要去浦东机场,它会告诉你这辆车离这里两公里,3分钟后到,3分钟是预估等待时间。“你饿了吗”相当于下单,大概需要20分钟左右。但愿早到不如巧合。作为我平台上的骑手,它恰好在20分钟内到达。如果骑手早早等在那里,那就浪费了。但如果你迟到,订单可能会超过时间。送餐时间的准确性是关键。订单完成后,如何知道完成订单需要多长时间?本店受餐厅备餐时间及食堂就餐用户人数、菜品种类、烹调方式、点餐量等因素影响,订餐后不另行通知饭菜做好了。比如餐厅客人很多,一般5分钟可能就做好了。人多的话可能做不出来。产品类别也存在问题,甚至当天的天气也存在问题。有几个原因,包括餐厅的上座率,以及餐厅突然少了几个厨师,这些都是估计不准确的原因之一。我们想着为什么不在餐厅准备好时告诉我们,我们就去。这个理论是可行的。让我们想象一下餐厅场景中的厨房是什么样子的。你想象一个厨师,他手上沾满了油,出来点单,下单准备好了。这很难想象。我们没有获得这方面的数据。这是一个前提。我们的解决方案无疑是机器学习。最简单的版本是线性模型。一开始效果不是特别好,后来逐渐演变为后来使用的GBDT。大家比较熟悉,现场也可以做。平均不是特别平均,加上吃饭时间是10分钟,我们可以固定在7分钟到13分钟,准确率比较高。我强调平均值,因为有很多特殊的场景,如果厨师出了什么事,我们不知道,因为机器学习只能根据过去的事件来预测未来。有一些紧急情况下的产品计划。比如看到餐厅的送餐量和订单量没有线性增长,前方出现拥堵情况,我们根据数据对平台进行实时调整。最后,我们现在使用的方法是深度学习。我们使用LSTM。右图可以看这篇文章。我们使用时间相关性来使预测更准确。毫无疑问,送餐时间会与过去的订单有关。这个不用解释,但为什么会和未来有关呢?我们估计在接下来的3到5分钟内会有新的订单。但它与现有秩序有一些共同之处。可能是同一个菜,也可能是一个普通的地方。同一道菜是厨房的订单,菜品可以一起做。我们了解到,这个模型还可以捕捉到这些特征,有利于订单配送,也有利于订单打包。Case2:Estimatedtraveltime估计的旅行时间是这样的。当订单完成,骑手将订单拿在手中时,他将前往办公室或家中。这是预计的旅行时间。滴滴从A点开始,从B点到B点,交通方式肯定是汽车,而且有大量的地图数据,比如高德或者谷歌地图或者百度地图,都会实时上传到服务器。这种交通情况的预测还是比较准确的,信息量远不如《你饿了吗》的场景。首先,骑手可能走路,坐电梯,或者上下楼梯,或者骑电动车,或者换交通工具,这直接导致我们的数据采集极不准确。还有一点提到楼内交通复杂,这个数据很难获取。当我们上班时,餐厅和顾客都在大楼里。建筑物内没有GPS信号或不是很好。我们接收到的数据或定位误差高达数百米。所以要提前预估时间,我们需要建立轨迹,因为高德地图或者腾讯百度地图中的时间预估都是基于历史数据。我们第一步是清洗历史数据,室内定位不准确甚至完全缺失。在这种情况下,我们想到了各种方法。我们使用WIFI信号,GPS信号,或者大家相互定位,尽量减少漏定位的问题。其次,即使有定位,它所在的位置也有GPS航迹,也有很多噪声,需要去噪,所以需要去噪。我们使用定位算法将相关时间、O点和D点结合起来,最后进行轨迹聚类。案例三:智能拆分滴滴的难度和我们不一样。在滴滴场景下,一个司机需要占用两三个账单。在“饿了么”中,骑手一个包同时携带5到10个订单,订单之间有时间限制,涉及到很多时效性要求。我将讨论两种解决方案。第一个解决的是路径规划的问题,这是很传统的VRP。当您下订单时,我们需要在载客量和成本固定的情况下找到匹配的路线。每个订单的承诺时间不同,即不能超时。默认模式下,一个骑手可以同时发送5到10个订单,而且每个订单都有严格的时效要求,中午高峰时订单呈爆发式增长。场景1是车辆路线输入:订单、骑手、容量、成本。输出:订单与骑手、出行路线的匹配;优化目标:时间或行程距离最小;约束条件:骑手人数、骑手人数、最晚到达时间等。我们使用了模拟退火算法。模拟退火算法(SimulatedAnnealing,SA)是一种基于蒙特卡洛迭代求解策略的随机优化算法。通过赋予搜索过程一个时变且最终为零的概率跳跃,可以有效避免陷入局部极小值,最终趋向于全局最优序列结构的优化算法。从理论上讲,该算法具有概率的全局优化性能,在工程中得到广泛应用,如VLSI、生产调度、控制工程、机器学习、神经网络、信号处理等领域都在使用它来分配订单,但是最后的结果不是特别好,因为时间预估没有准备好。规划路径的时候,是先走orderA还是先走orderB。一旦时间出现错误,路径规划就会很差。最后使用第二种算法,也是基于大量函数的组合算法。左下角是一个矩阵,每一行是一个订单,每一列是一个骑手。我们希望通过一些规则和一些机器学习算法来计算它。右侧是订单匹配的结果。最好的匹配是KM算法。最早演进的调度算法是VRP。后来就是KM算法,但是基本框架确定之后,还有很多工作要做。订单其实也差不多,因为订单可以打包,一个人等几分钟。可能这个订单跟那个订单很像,就是去同一个地方,而且订单可以是同一个人拿的。所以订单打包和吸水是我们做的第一件事,但是高峰期和淡季的订单规则是不一样的。有两个方向的道路和两个方向之间的角度不同的地方,所以订单匹配模型是在2.2版本上做的,利用机器学习通过历史数据进行训练,这里我们也遇到了一些挑战,因为不同站点的配送人员习惯不同,我们在推广的时候会遇到问题。大家都觉得A站点可以,B站点不行,我们现在做的东西是几千个站点,几千张脸。根据类似站点的历史记录,我们分享一些情况。我们使用这些模型进行训练,以实现类似的网站有类似的拆分订单的方式。所以不会显得你不是特别喜欢这种分单方式,多少有点类似,所以2.3版本就实现了。目前版本是增强学习,我们会根据实时情况动态调整。我不会详细介绍餐厅的位置。事实上,我们已经开始与商家合作,开设一些餐厅。我们都希望选择最好的地方,餐厅覆盖的用户最多,菜品不同,用户群体不同,所以这个位置很重要。End我今天的话题是应用实践。我个人感觉自己做机器学习已经十几年了。我工作的挑战是基础数据的完整性和准确性。我们刚刚提到数据不准确,餐厅不规范。我们无法知道一些准确的情况。我们花了很多时间来调整基础数据。我讲的第二点是算法的改进和对人行为的理解更重要,因为在外卖行业,需要人去执行。以前人工分配都是通过电话,里面有很多沟通。现在机器是一次性的。很难理解,机器考虑的是全局最优而不是局部最优,这对人类来说是不可能的。只有把算法改进和产品运营结合起来,才能最终把这件事推下去,让大家养成习惯。第三点,优化算法和机器学习在我们这个行业是相辅相成的,不仅是机器学习,还有如何在这么短的时间内最好的分配人力,在最短的时间内完成订单。谢谢你们!有想法可以在下方留言。谢谢!笔者介绍张昊,饿了么技术副总裁,负责人工智能和大数据建设。带领团队将机器学习应用到物流调度、压力平衡、美食推荐等场景,通过数据挖掘建立完整的数据运营体系,用数据和智能驱动业务发展。十余年机器学习、数据挖掘、分布式经验,曾任滴滴研究院、Uber大数据部、LinkedIn搜索分析部、微软必应语音组等高级总监,从事机器学习学习和大数据工作。