王桐:阿里智慧供应链预测算法
分享嘉宾:王桐 阿里巴巴 资深算法专家
编辑整理:杨晓磊 本来集团
出品平台:DataFunTalk
导读: 本次分享的主题是阿里在智慧供应链预测算法上的探索。供应链里最大的挑战是不确定性,决策和优化的核心诉求就是围绕着不确定性做出最优的决策。对付供应链的不确定性有很多的方式,预测是阻挡供应链不确定性的最简单直接粗暴的第一道防火墙,第一道的最强抓手。阿里围绕供应链的不确定性做了各种预测。本次分享将围绕以下三个主题展开:
- 预测场景及特性
- 预测算法研发路线及结果
- 预测应用案例
01 预测场景及特征
对于预测场景的梳理和划分,主要是基于时间轴的划分,即预测提前期。不同的预测提前期的应用和对应的算法不同。从远到近可以划分以下几个场景。
① 预测期长达一年 - GMV预测
GMV预测指对店铺或者平台的成交量做长期的预测,用于制定长期的经营计划。比如营销资源,或者一些扶持成长的核心资源怎么分配,取决于对未来长期的预判。长期的预判提前期为一年,比如现在去预测下一整年行业的成交情况。
② 预测期几个月到几周 - 销量预测
销量预测是指预测淘宝天猫以及各个阿里系新零售的,各种场景下的商品未来销量有多少。主要用于库存补货、调拨、商品流转,业务环节中的一些核心决策都取决于我们对未来的预测判断。
③ 提前一周到几天 - 仓库订单量预测
仓库的来单量是很重要的不确定因素,会影响仓库的产能、人力的各种提前准备,所以这个预测需求比较迫切。
以上是预测算法的主要支持方向。这些是用离线的预测算法进行预测的(离线的定义为提前期在一天或者一天以上的),底层数据和技术体系都是离线的。
实时的有一套完整的GMV预测、销量预测、单量预测的技术方案(实时指在一天以内的),做到小时级、分钟级刷新。实时的应用场景跟离线类似,但技术架构不同。
图1-1
在以上应用场景中,还会沿着其他的维度做细分。
① 各场景预测的目标不一样,除了销量、单量、GMV这些,还有其他的预测,所有的预测都有它的标的,都是一些未来不确定的需求,需要通过预测把不确定性尽量减小,让下游的决策能更好地执行。
② 提前期不一样,分为离线和实时,离线按年月日,实时按小时级的。
③ 分类的方式或者颗粒度怎么定,对于算法非常重要。即在做预测算法的时候,如何定义一个数据点?我们把它抽象成三个维度:
- 首先是预测对象需要做到多细。例如成交额,可以按店铺的颗粒度,做店铺的成交额,也可以是行业成交额,或者是整个天猫的成交额。同样商品的销量也有不同的粗细。这就是预测对象的粗细。
- 再者核心维度时间,即上文中的预测提前期,比如提前一年预测未来,预测未来的365天还是12个月还是52周,这是预测时间的颗粒度。
- 最后是空间,例如在淘宝天猫这个大体系下,在中国这个区域去做预测,或在华东华南这种大区做预测,或细到最细的街道层面。空间上也有不同的粗细划分方式。
以上三个不同的粗细划分方式组合起来,形成了整个预测算法的颗粒度。颗粒度的选择在很多时候是预测算法核心的决策点之一。
④ 算法产出的下游消费者是谁,可以分为两种:
- 一种是算法或者决策系统,这种对预测算法的核心要求是准确、高效率、高可用性、高稳定性;
- 一种消费方是人,做供应链计划的同学或者仓库操盘的同学,这种要求算法白盒化、可解释性高、可调整。白盒化和可解释性高是指人可以理解算法考虑的参数和没有考虑的参数,可以把人员对于业务的理解加进去,但要防止重复调整。可调整是指怎么把业务人员对事情的理解插入到算法流程中。
综上所述,供应链预测可以抽象为时间序列预测。如图1-1中预测的一个时间序列,沿着时间轴展开,会有高低起伏的趋势,在节庆日的节点会有一些爆发。比如双11,就有一个很明显的大幅度的挑高。所以预测算法最核心研究的是如何围绕着时间序列,来预测未来。
02 预测算法研发路线及结果
上文所述为基于场景的抽象和归类,接下来是对工具和技术的抽象和归类,可以分成三代,按时间分为早期中期晚期。图2-1针对三代算法效果沿着五个维度做了打分,用于传递算法之间的差异。
图2-1
按照五个维度的重要性与优先级来讲,它们分别是:
- 首先,准确性 ;
- 第二,稳定性 ,即随着时间,不能波动太大,因为算法要部署到线上自动运行;
- 第三,可调整性 ;
- 第四,可解释性 ;
- 第五,执行效率 ,即运行成本不要太高,运行时间不要太长。其中一些分钟级和小时级的算法,对算法执行效率要求比较高。
1.第一代传统的统计学领域的时间序列
传统统计学习是从上世纪40年代50年代就有的基本统计学方法,在90年代之后减少使用。
它的劣势是准确性低,模型简单可调整性低。优势是稳定性高,模型简单不会过拟合。这一代算法在电商领域早期亚马逊、阿里、京东都有使用。稳定性对于强调自动化,需要通过预测供应链补货提供各种决策的大厂,是一个核心诉求。
实际应用的同学反馈,这一代算法的缺点在于可调整性,因为算法简单,难以将已知的一些因素融到算法中。为了把人对业务的理解插入到预测结果,需要做大量的后处理工作,即补充一些算法没有捕捉到的信息,维护高的稳定性。因为在已知一些场景下,算法会跑挂掉,所以需要一些后处理规则来防范。有些友商使用一套规则引擎系统来处理后处理规则,存在的核心问题是技术的局限性。
传统的统计方法里有一系列的共性,比如对于脉冲性的波动,主要在低频率的趋势性和周期性的应用比较好,对于高频的脉冲性波动难于预测;再比如协变量,即机器学习里的特征,传统的统计方法有大量的、复杂的、相互影响的特征。
2. 第二代机器学习
经典的机器学习方法以XGB/LGB为典型代表。它在五个维度的评测上,与统计学习相反,统计学习的弱点变成了机器学习的优势,详见图2-1。
XGB/LGB在应用中核心的挑战是可调整性,因为大部分机器学习算法封装比较完整,只暴露出一些参数,所以针对具体场景去定制算法时,难以把对业务场景的理解和关键信息插入到模型结构中。只能处理成特征,做大量的特征工程的工作,把特征灌入算法里,再去调整参数。参数的意义跟具体场景的关联度弱,难以根据场景选出好的参数,基本依靠体力和算力进行网格搜索。特征工程是需要消耗大量体力的工作,对人有强依赖。不同的人处理同一个问题,由于业务理解和能力差异,会带来巨大的效果差异。
这类算法最大挑战是时序特征的提取,跟第一代统计学习方法不同之处是,把时间序列拆成n个独立的数据点,每个点都有自己的label和特征,来捕捉特征和label的关系。如何捕捉时间远近是比较难的点。这些只能通过特征工程来实现。
另外技术上比较大的挑战是,如何把大量类别变量所包含的信息插入到模型里。例如类别变量,在商品销量预测中每个商品都有大量的类别变量:标签、类目、品牌、归属卖家,每个类别变量的类别数量几万,淘宝平台有几万个品牌和几十万个卖家。用one-hot来编码的话,几乎无法实现。
除了以上,还有损失函数的选择优选,多数机器学习算法的损失函数是MSE、MAE,几乎无法定制。手写一些定制的损失函数,效果也不是特别好,同时还存在一些问题。
3. 第三代是深度学习算法
我们是从19年开始探索的,早期觉得深度学习是未来的主要发展方向。它的技术体系克服了前面算法的技术局限性,同时在图像、语言、搜索、广告、推荐上面都取得了颠覆性的突破,完全碾压前一代的机器学习算法,但在时序预测领域还没有颠覆。
早期尝试围绕其他领域成熟的模型做移植,如把卷积、LSTM等搬来套用,做了很多尝试,效果都不好。最后总结,迁移其他领域的模型存在以下问题:
- 准确性跟机器学习差不多,没有碾压性优势;
- 稳定性衰退了很多,经常出现奇葩的预测结果;
- 与机器学习相比优势是,可调整性高。
深度学习算法的框架能力比较成熟,可以在模型结构里做微调和策略训练。可调整性高也存在一些问题,因为调整的参数和结果之间没有产生闭环反馈,比如调整一个参数,看到的结果随机性很强,稳定性差。大部分时间在摸索参数的值,得到的结果忽高忽低,难以找到准确的方向去优化模型。
从图像和语言借鉴过来的模型,都有百万千万级别的参数,规模太大, 这一类的模型对数据量要求很高。深度学习在图像和语言上可以轻松地突破,也是因为做人脸识别的图像,很容易出现几十亿几百亿数据量;语言的语料也是有很大量的数据。同时图像和语言是一个相对稳态的体系,随时间变动不大。但在预测算法场景中,比如销量预测,淘宝有20年的历史,但比较半年前的数据和半年后的数据,内在机制和模型可能完全不一样,是因为业务、竞争、打法都一直在变。所以表面上我们有海量的数据,但这个体系不是一个稳态的体系,一直在变,可用的数据就十分有限。在做模型的时候,真正敢用的数据,也就最近半年的。这造成了一个规模大、灵活性强的模型对海量数据的需求,和真正与场景相关的数据十分有限,这样一个很难解决的矛盾。
另外传统的模型中,时间序列的最大问题是捕捉能力弱,比如LSTM针对场景定制性差。综合以上,最后得出结论,简单地搬别人的东西是走不通的。
4. 自研模型:Falcon
① 确定算法目标
我们确定的算法的核心目标,是针对场景去做一个定制算法,围绕五个维度:
- 准确性要比机器学习好
- 稳定性不能太差
- 可调整性不多
- 有一些可解释性
- 执行效率不做要求
同时,为了控制模型的过拟合,要求严格的控制模型的参数规模。理想的情况是能兼顾三代所有算法的优势,填掉劣势。
图2-2
② 算法实现
从20年做了一年的时间,找到一个比较好的路线,是基于一篇发表在CLLL上面的paper中的模型-NB,也是为了解决时间序列的问题。它的底层逻辑跟统计模型的逻辑相似,是用深度模型把一个时间序列拆解成不同的成分:
- 相对低频的成长性趋势性
- 相对于中频的周期性季节性
- 相对更高频的脉冲性
在深度网络里,用不同的block来描述不同的成分,用不同的内部的结构来预测。不同的成分进行叠加,就变成了最终对未来时间序列的预测。
思想虽然简单,但它与实际场景之间有着较大的空白。如协变量,大量高频的脉冲性的未来特征,怎么加到网络里。我们对这个网络做了修改,大的结构没变,还是多个block叠加一个残差网络,核心是在block里面设计了针对具体场景的block,用来达到算法的目的。趋势性、周期性都有,加入脉冲,比如双11双12的大促,有专门针对节假日的block;春节大家都突然不买东西了有特别的定制;数值特征,比如价格;针对其他的特征也开发了一系列的block。在阿里各个零售场景里,每有一个新的业务,就是在block库里面找跟场景匹配度比较高的block,然后做叠加、训练和调参,快速的形成一个比较好的方案。
除了模型结构,Falcon的核心优势是参数规模小,在几千左右。有些上万的参数,是因为block里有全连接的层,浪费了一些参数。目标是参数控制在万级别,我们的数据量大概就十万百万的级别,尽量把参数控制在一百比一,训练时间是一两个小时可以跑一个百万数据量的算法。
此外,跟上下游有些框架性的工作,主要是为使上下游匹配这个模型,快速对接业务,快速上线的工具。
算法Falcon在20年下半年基本上定型,业务上运行的结果基本达到目标。
③ 算法测评
我们拿算法去参加了集团内外的比赛。图2-3中上面一行是外部的公开比赛,参加了Kaggle的M5 Forecasting,天池的AI Earth和电力负荷预测,其中M4比赛和M5的比赛是事后刷的,因为当时比赛已经完了,另外两个是真实参加的。想证明Falcon是一个通用的时间序列预测算法,在各种电商的预测场景,和其他的非电商的时间序列预测上面,都能拿到比较好的成绩。
图2-3
21年下半年,在阿里集团内部组织的时间序列预测联赛,有大概一百六七十支算法团队参赛,用内部不同场景三个活的数据去做预测,用真实的未来数据,来评估比赛预测结果。用活数据的初衷是因为外部的比赛都是死数据,围绕着校验和测试集做各种过拟合的意义不大。活数据比赛每次只能提交一个,截止今天,Falcon算法在三个数据榜上都排第一,跟其他的算法拉开了一定的差距。
Falcon是针对供应链的场景下抽象出来的时间预测的算法包,对场景的定制性不强,围绕着时间序列的预测做的更底层。
④ 电商供应链场景的难点&挑战
在电商的供应链场景,有一些细分的场景,比如营销活动、新品上架、新老品换代、滞销品清仓。
还有对未来的销量预测有影响的因素,商品季节性,比如暖宝宝在东北十月份就开始爆卖了,而冬天广东也很少人买暖宝宝,季节性和地域性差异的融合怎么能更好地解决是值得深究的。
最特殊的是在其他的机器学习或者深度学习应用里面,不常出现的预测实体之间的关系,替代性和关联性。比如预测一百万个商品,商品之间不是独立存在的,商品和商品之间有替代性,a商品卖了降价了,会影响b商品的销量。在图像和语言或其他的场景里面,可以忽略不计,却是这个场景里面最大的一个挑战,怎么把这些商品之间的关系考虑在整个预测算法里面。
另外供给侧的影响,比如商品卖断货,断货三个月,没有任何的销售数据,怎么在这种情况下来继续预测未来它的销量和需求。这都是电商场景的一些特定的更细分的挑战。
图2-4
针对一些细分的挑战有一些简单的解法,如图2-5中对于促销品,比如商品的替代性和季节品都有一些直接的解法。核心工作是把解法的思想融到算法模型里面,把它作为一个特别的block,或者更高层面的东西,把它塞得更完美一些。季节性部分基本上已经完成,促销部分也接近完成。替代品实验是比较有挑战的一项,在用一些图的方式来解决商品之间的关系,需要做一些探索性的工作。
图2-5
03 预测应用案例
1. 案例一 - 双11
案例是2018年的双11,双11有一个显著的问题,它是消费者的一场嘉年华;是营销同学的一场盛宴,可以去搞各种的创意;是阿里云的一场年终大考,看基础设施能不能扛住这一场流量的洪峰;但对供应链来说,是一场世纪大洪水。
日常一个东西卖三五十件,到双11的时会卖三五万件,是一个超级大的洪峰。是一个发生在11月11号的零点开始的供应链洪峰,半年前就要从上游厂家走到中间供应链网络,走到仓库,然后在双11开始前全部在仓库里整装待发。对供应链体系来说是巨大的挑战,很多工作是利用算法的能力,去削峰填谷。在双11发生前的一段时间里,单量很低,仓库的人闲着没事儿做,双11突然来了天量的订单,要找大量的临时工,成本在11月份巨高,导致消费者的订单没法及时的满足。
图3-1
通过预测来把这个事情解决是一个很大的挑战,需要分析出,哪些是真正需要在促后做的工作,哪些是可以搬到前面时间去做的。促后典型的工作流程:消费者下单,订单流转到仓库,仓库拣货员拣货,打包,贴条,发快递。经过分析发现:拣货打包的工作跟具体的消费者是无关的,可以先把一些货拣下来,打好包,到消费者下单时,贴个条发出去。核心的思想,是把一部分相对确定性的工作前置。这个确定性来自于预测,预测比较复杂的是,要预测哪些商品会变成一个订单,因为消费者不是一个订单只买一个商品,可能买N多个,最后要通过预测来把范围缩小。
实际操作时,会锁定一些爆品,预测爆品在未来销量里有多少比例会是单独售卖的。基于预测结果,提前把爆品打包拣货做好,这叫做预包。除了预包,还有一部分下沉,指在中央仓库包好,直接发到地区的仓库。这时候需要街道级的商品销量预测,把每一个街道在双11会有多少爆品的订单预测准,把东西送到离消费者比较近的仓库。到双十一零点,消费者下单后,打出快递条,贴到包裹上,东西发出去。
这基本的逻辑,是利用预测算法的能力把能前置的工作全部前置,销峰填谷。通过这个算法,可以降低几万甚至是几百万人日的投入。
2. 案例二 - 直播预测
图3-2是针对淘宝直播的一套预测的方案,淘宝直播是一个比较特殊的场景,取决于谁在直播和商品跟主播达人的匹配关系,也是一个比较有意思的问题。
图3-2
04 精彩问答
Q:如何看待持续预测问题引入多模态信息的发展趋势,如现在一部分工作会融入sku信息,海量的图片和文本信息,做表征,然后对时序预测的争议有多大?
A:过去在机器学习的时候,特征工程是一个比较核心的提升抓手,是围绕着各种能拿到的数据去做各种挖掘,比如说商品销量预测,不仅限于商品自身的数据,也包括买商品的人的行为,他们在app上的点击等,想挖的数据很多。现在我们自研的Falcon算法在实际应用中,包含的信息比以前少很多。
例如,在用LGB的时候,一个同学在模型里面有300个特征,做了大量的数据挖掘。换了Falcon后,最核心的特征就是日期,未来的促销和节假日,其他的特征全部放掉,结果信息少了,结果反而更好。大量的信息,尤其是静态信息比如说海量的图片,这些东西对商品需求的影响,已经隐含在商品历史销量数据里面了,再去捕捉这个特征的价值和收益不会太大。图片做得漂亮,更容易被点击,被购买。所以需要思考的是哪些信息是没有被历史销量所包含的,比如未来的促销,未来的节假日,或者未来的一些变动,是核心的要捕捉的。总的来说是要判断信息是不是已经隐含在过去的历史销量里了。
分享嘉宾: