马玉潮:物流平台的车货匹配推荐算法及标签体系搭建
分享嘉宾:马玉潮 狮桥集团 高级算法经理
编辑整理:王梓蔚 香港中文大学(深圳)
出品平台:DataFunTalk
导读: 狮桥经过几年的探索,逐步在物流行业打造了一个智能化、高效流通的物流平台,为整个行业赋能,帮助行业里面每一个角色去提升自身的效率,降低成本。今天分享的题目是物流平台的车货匹配系统,将介绍狮桥是如何打造物流大数据平台的,以及其核心的数据和算法。今天的介绍围绕下面四点展开:
- 物流大数据的应用
- 智能车货匹配推荐算法的实现
- 司机标签体系的搭建及算法
- 货运价格预测
01 物流大数据的应用
1. 物流行业背景
根据研究报告,中国拥有全球最大的道路运输市场,2020年市场规模为人民币6.2万亿元。其中整车(FTL)和零担(LTL)运输占中国公路运输市场的大部分,2020年到达了人民币5.3万亿元。
整个物流市场由物流公司、专项车队、司机等角色组成。一个普通物流订单由货主,物流公司,车队和司机通过逐层人工订单传递完成。物流中还有计划外的货运需求,需要由调度人员通过人工电话联系各个下级的承运方进行承运。另外,物流行业中还有许多地方需要人工支持,如车辆的在途信息、货运单据以及财务结算。可见,人工支持在物流行业中占有较高比例。
较高的人工支持占比导致物流企业在运营过程中无法针对一些具体的情况或者突发事件进行快速的反应和决策,使得一些中小企业在市场竞争中处于劣势。因此,物流公司需要一个智能高效的数字化物流平台,使其拥有信息化、数据处理以及算法能力,形成一个高效的物流生态。
2. 物流大数据平台的架构与设计
物流大数据平台通过数字化各个物流环节,使得各流程实时衔接,提升物流系统的效率。随着车辆的移动、票据资金的流转以及交易的完成,所有业务数据都会沉淀到物流大数据平台。接着,通过大数据平台的计算能力,对数据进行整理,归类和分析,将数据提供给物流平台中的各个应用模块。同时,平台引入算法(机器学习和深度学习),在海量数据中不断接近业务问题的全局最优解,借助算法决策使得收益最大化。
目前,物流大数据技术平台主要是由应用层,算法平台,数据仓库和数据平台组成。
- 最上层的是应用层 ,包括销售管理、智能调度、货源推荐、图片资料审核等,提供了平台所需要的核心功能,其实现应用了很多算法。这些算法是在算法平台上开发的。
- 算法平台 提供丰富的算法以及模型来支撑整个平台的运转。
- 算法层的下一层是数据仓库 ,存放了集团所有的业务数据。只有基于这些丰富的数据,算法才能够能够为上层应用提供服务。
- 最底层是整个大数据平台基础设施 ,包含CDH集群(Hadoop/ spark/ Impala)、Doris集群和监控系统。它们实现了海量数据的基础存储和计算能力,对批量数据进行秒级的统计分析,让企业的业务人员和分析人员能实时掌握企业的运营情况。
3. 应用案例
大数据平台可以支持多样业务问题,如:车货推荐匹配、智能运费定价、运单OCR识别、反垃圾消息、智能客服、人脸识别、物流风控等。下面举两个案例。
① 车辆在途追踪
数据平台可追踪到任意一台已经安装了特定GPS设备的车辆。GPS设备每三十秒给数据中心传输一条经纬度位置的数据,从而让数据平台获取车辆的实时位置。连续的实时位置可构成行车记录,用于判断车辆在货运的途中是否正常行驶、是否偏离方向、是否超速行驶等。
② 实时调度中心
实时调度中心可以实时地计算出物流平台上各时间段内累计的货运单量、活跃司机数、货主数、交易金额等,便于业务决策。
02 智能车货匹配推荐算法的实现
1. 问题陈述
智能车货匹配推荐算法的应用场景分为两种:一是人找货,二是货找人。人找货是货运司机通过浏览货运信息找到想要运输的货物;货找人是发货人下单后调度人员推送货源信息给货运司机。两个场景均涉及三个变量:司机、货物、环境。(具体涵盖如下图所示)
唯有合理运用这三个变量,才能计算出合理的车货匹配度。问题可以被抽象地用数学表达为 y=F(Xi, Xu, Xc) ,其中y表示匹配程度,Xi指的是我们的item货物,Xu指的是货运司机user,Xc指的是环境context。
不妨将该问题变成点击率预测问题。当司机查看一个货源列表的时候,如果他点击了某条货源信息,就表示该司机对这条货源信息比较感兴趣;如果他没有点击,则假设他对这条货源信息不感兴趣。通过点击数据,我们可以把每一条货源信息标记为0和1,点击是1,未点击是0。从而,根据司机、货物以及环境所有的属性特征,我们预测该货源信息最终是否发生点击(变成了一个二分类问题)。
2. 算法模型
在实际应用中,解决是否点击问题经常引用的模型是DeepFM。DeepFM是深度学习和FM模型结合的一个框架,比单个深度学习模型或FM模型要表现好。
① FM模型
FM (Factorization Machine) 主要是为了解决数据稀疏的情况下,特征怎样组合的问题,也就是特征两两组合的问题。数学表达式如下:
其中n表示样本的特征数。这里的特征是离散化后的特征。与线性模型相比,FM的模型多了特征两两组合的部分。
② DeepFM构建
DeepFM模型包含FM和DNN两部分,FM模型可以抽取low-order特征,DNN可以抽取high-order特征,因而无需人工特征工程。FM模块进行一阶和二阶的特征进行组合并学习到低阶特征;深度模型模块可以让模型学到更高阶的特征组合。最终,通过激活函数,预测点击概率。DeepFM具体框架如上图右半部分所示。首先,DeepFM对所有输入的稀疏特征进行embedding向量化,并对不同的特征之间进行交叉,生成新特征。FM layer实现了上图左上的公式(2),把变量的二阶的特征交叉进行线性累加;Hidden layer(DNN)实现了特征多重交叉,获得更高阶的特征交叉。FM模型和DNN模块共享特征embedding。通过FM和DNN,模型同时学习低阶和高阶的一个特征组合。
③ 模型评估
我们先用AUC评价并筛选出最优DeepFM模型。除此以外,还有其它离线指标评判模型是否能上线。
- 离线指标(Top10) : 根据回溯数据,模型算出司机(用户)前十适配的货源信息,前十适配的货源里有哪些货源被点击,从而计算出离线的前十点击率;
- CTR: 货源展现点击率;
- CVR: 订单成交转化率;
- 订单量: 由对应推荐位。
经过评估,如果该模型比之前的模型离线效果更好,我们就可以上线这个模型,再对其进行基于AB test的线上效果评估。如下图所示,我们先将用户随机分成三组,占比30%,40%和30%。根据三组的线上CTR和CVR情况,平台抉择出最优版本进行发布。抉择可基于数值,也可基于统计学的假设检验。
3. 模型构建总览
平台收集到用户行为数据后,通过实时计算框架,对行为数据进行处理并存到离线仓库,以制作模型训练集。模型给用户提供线上推荐。根据离线仓库里的数据,我们计算出一些离线特征。将离线仓库数据按日处理获得日志,其中包括统计分析以及近线特征。根据统计分析可以提炼出指标报表,为业务与模型训练提供指引;近线特征是指通过司机最近的行为计算其近期特征,可加入推荐模型以获得更好的推荐效果。
03 司机标签体系的搭建及算法
推荐车货匹配系统需要用到很多司机的标签特征,而且公司的产品和运营也需要良好的标签体系的辅助。接下来我们介绍司机的标签体系。
司机的标签体系主要有发货地、目的地、车型、车长、货物等。我们需要通过司机用户的历史行为,包括当前坐标、浏览货源筛选、报价等,做出标签预测。
1. 冷启动
前期数据匮乏时,我们需要经历一个冷启动的阶段。此时我们需要通过一些人工规则方式给司机打标签。例如,当司机访问一个货源时,若这个货源上面有标签,最简单的方法就是把这个货源上的标签打到这个司机身上。但司机的货运需求是变化的。例如,司机A之前更加关注轻工业产品的货运信息,但现在他比较关注普通商品的货运信息。可见,司机的近期的行为才更能代表其目前需求。
对于这个问题,我们借鉴了牛顿冷却定律的思想提出了解决方案。牛顿冷却定律指出物体的冷却速度与它当前温度与室温之间的温差成正比。将该公式映射到推荐场景中,则为距离当前时间越远的行为其权重越低。权重公式:
冷启动下的标签规则为,基于权重公式和人工规定的阈值,通过司机点击行为来给司机打上标签。
2. LSTM多标签模型算法
当累积一定的司机数据后,不仅平台会预测司机标签,司机用户也会自己维护标签。之后我们可以拿完整的司机数据(如标签完整度大于80%且其在app中交互行为超过一定阈值的司机数据)作为训练集,训练模型以预测司机的标签情况。
这里提出LSTM多标签模型,因为循环神经网络可以处理不定长的用户行为输入。具体框架示意如下:
X表示的司机行为数据,例如X0表示司机的一次点击行为,X1表示司机的一次电话联系行为。X是不可预测的。司机用户每发生一种行为,都会被构建成输入,并被输入到LSTM模型当中。经过一系列行为后,模型输出对该司机的多标签预测。框架最后一层其实是对每一个标签做二分类,生成了一个多标签模型。
模型评价标准有精确度(Precision)以及召回率(Recall):
此处L是用户实际标签,P是模型预测标签。
这个模型现在还有以下几点待实现和解决:
- 预测出来的标签都可以作为推荐模型的一个输入;
- 司机车型、发货地和卸货地的预测困难,当前司机的车型标签比较少且固定,但司机对于发货地卸货地需求变化多端,因而我们需要更多数据才能更加准确地预测;
- 召回率与精确度平衡问题,比如给司机推送消息需要更高精确性以减少不必要的打扰。
04 货运价格预测
货运价格一方面可以作为模型的输入,另一方面可为系统整体运作提供提示和参考,尤其是需要知道整体市场价格的调度人员。因此,需要有模型来对货运价格进行预测。若要建模,首先要把货运价格通过专业知识拆分出固定的成本,如过路费、邮费、司机劳务费用、车辆折旧费用等等。另外,针对一些返程空车情况严重的路线,我们还需要考虑供需关系对于价格的影响。基础的货运价格公式和价格模型如下图所示。
要搭建模型,首先要做特征工程,得到城市、月份、路程、车长以及其他特征。成本分为三种:线性成本、周期成本与时序成本。对于不同成本,我们施与不同的模型策略。线性成本是可以根据货运距离和油价计算出来的成本,例如过路费和邮费,因此使用线性回归模型进行学习。周期成本是跟天气相关、季节相关的。时序成本,如司机劳务费,是随着当地环境因素(如:收入水平)是在动态变化的。因此,通过连续的成本模型LSTM模型去进行预测。对于突发状况,模型则应用规则策略。规则策略主要是靠人工观察市场行情,并调参以调整价格模型。那么随着逐步收集市场数据,模型中可加入市场行情模型实现自动价格调整以及价格预测。
价格模型的评估指标为SMAPE(对称平均绝对值百分比误差),以处理高价带来的高方差。正常来说,模型对价格预测在实际价格上下10%波动,可以达到85%左右的准确率。
05 总结
物流大数据平台通过大量业务数据沉淀,训练出基于DeepFM的车货匹配系统模型,基于LSTM的司机标签体系模型,以及货运价格预测模型,从而成功建造了一个高效的物流生态。
06 精彩问答
Q1:车货匹配的时候,司机会比较货物再做出选择。怎么考虑这个问题,是否要有Pairwise的方法?
A:这种情况我们也可以用Pairwise的模型来建,但它是否能有更好表现还是需要在实际应用场景下测试。之前我在其他的推荐算法中有用Pairwise,比单纯的CTR模型会更好一些。但是我们还是得看具体场景,而且需要考虑到计算量问题。
Q2:LSTM生成标签再输入给CTR模型是怎么考虑的?跟直接在CTR模型里加LSTM结构提取特征相比,有哪些优势?
A:LSTM模型是预测整个司机标签体系,因此是独立于车货匹配系统的。理论上LSTM可以加到整个CTR模型里面,但计算量大且复杂,而且代码也不是特别好实现。另外一个就是LSTM标签体系,是基于一定的标注数据。标注数据可以给我们的模型提供额外的信息,使得这个模型的泛化性更好,能够带来更好的效果。所以我认为LSTM和CTR模型还是应该分开比较好。
Q3:在车多货少的背景下,司机查阅货源信息是否能表征其感兴趣的货源?
A:车货匹配是从数据中、从整个模型中去学习的。但如果在冷启动的阶段,由于后续的转化数据比较少无法确定司机对这个货源是否感兴趣的情况下,只能假设司机对点击的货源都是感兴趣的。因此,在冷启动阶段,我们是通过专家经验去做的这样一个假设。当数据积累足够多了,通过算法从数据中学习出模型的参数,再理解学习点击与兴趣的转化关系。
Q4:司机对运单要求的起始地点以及时间对司机的点击率影响是如何考虑的?
A:首先平台是有GPS数据的,可以计算司机到起始地点的距离。因为距离比较远的司机要耗费很多油费成本,所以距离越近的司机更愿意去承运。起始地点对司机的决策以及最终转化影响是非常大的。时间当然也是一个重要的因素。我们需要把时间做成特征,比如说这个发货时间距离收货时间有几天,并把这些特征加入模型。另外一个因素就是司机目前已经有一个载运的货物,那他需要一定时间后才能接一个新的单。那平台还会去根据他目前正在承运的这个单的目的地,预计司机到达目的地时间,然后把这个做成一个新的特征,加入到整个推荐模型中。
Q5:如何考虑运费变化对司机点击率的影响?
A:整个市场的运费变化对点击率是会有影响的,业务人员一般会比较关心这个数据。但是我们目前只需要通过AB Test关心不同模型在相同市场环境下的表现,来考察哪个模型效果更好即可。市场价格处于一个正常范围波动的话,就不需要太担心,除非出现异常波动导致点击率急剧变化,我们才需要介入去研究和寻找更优的模型。