Fork me on GitHub

时序与因果模型在复杂仓储控制策略的前沿探索

以下文章来源于 https://zhuanlan.zhihu.com/p/647114215

导读 本文将分享序列数据的因果推断在仓储管理上的应用,包括解决问题上的思路和相关技术。主要分为以下四个部分:

全文目录:

  1. 库存管理的抽象理解

  2. 相关技术概念回顾

  3. 因果推断协助需求预测

  4. 因果推断协助策略实施


分享嘉宾|王尔立,NEC中国研究院 研究员

内容校对|李瑶

出品社区|DataFun


01/库存管理的抽象理解

一般来讲,供应链管理的基本目标是为客户提供高价值服务,同时做好成本控制。



为了解决这样的问题可以从客户的大量历史数据以及相关其它信息入手。在一个决策时刻,如下右图T1,系统会根据对于当前库存状态的观测判断是否需要做出补货的策略,以及补多少的决策。在这个过程中隐含了一个中间步骤,每天的初始库存计算会被消费市场所消耗掉一部分。对这样的需求做出准确的预判或预测,是高质量库存的关键问题之一。除此之外还会有其它一些因素影响库存管理,比如当前库存管理状态的观测是否精准,搜集到数据是来自单一场景还是多个场景的混合,是单商品还是多商品的库存管理,特别是在需求预测出现相关性的时候就不得不考虑做一个中心化策略。



根据我们的调研和观察,很多企业在库存管理数字化转型方面仍有很大空间可做。比如刚才提到库存管理预测仅仅是基于过去经验的一种方式,难以适应日新月异的更新。更重要的,缺乏系统性的判断,对于后期改进是非常困难的。针对策略这一侧,在补货策略里,常用方法是在固定时间补充固定货物量。稍微复杂一点的,比如图中提到的(s,S)Policy------最小最大的补货方式。问题依旧是很难去捕捉一些真实情况,比如一些不确定性、仓库迁移等情况。

因果分析是一种把握和挖掘数据背后原因和结果的技术,因为它有很好的模型可解释性,所以对于可视化以及复杂商业过程会有很大的帮助。

这里举个例子,比如收集到一个demo的数据集,是对于价格、浏览量和订单的时间序列数据。数据会有很多的观测角度,比如从5次order来看,可以认为是随机变量的5次观测,也可以看成是随机变量的一次观测。鉴于有不同视角看数据,在建立订单关系的时候到底使用哪些feature,以及把哪些feature的时延信息作为额外特征。不同视角、不同方法会给我们带来截然不同甚至对立的结果。我们对这一技术的期望是简单的,即利用因果分析及一些其它技术的融合,系统性地帮助我们找到合理实验的信息,并帮助我们确定影响某个目标变量的最小集合。如果能得到上图中右下角的动态贝叶斯网络,就可以通过读图的方式找到可干预预测的尝试,以及影响某个变量重要节点的排序。



从技术角度来讲,库存管理归根结底要在每个决策时刻对于每个状态去计算最优的一个策略,使得管理可以可持续化的盈利,并且让之最大化。在这个过程中我们认为处理好对未来需求的预测,以及补货策略随着消费习惯的改变进行高效地调整,是解决库存管理的关键问题。由此产生两条主线,其一是如何对需求做预测,其二是如何做补货策略。

围绕这个问题开发了很多相关技术,在此简要介绍其中几个。



首先是关于预测的问题。当我们学到一个动态贝叶斯网络之后,可以通过一些带有时间的、或多变量的feature,对未来的多步进行预测。第二、三个功能主要得益于我们有一个很好的模型可解释性的工具,帮助我们来做根因发现、关键原因的排序,以及把观测变量分解为多渠道贡献等。第三个功能是当有了可以导出可干预程式之后,当观察到影响某个变量可以实时、快速调整对于未来的预期。最后,当我们从客户历史中学习到了某个需求并预测之后,如何搜索最优策略,会根据顾客的实际问题比如仓储规模、运输成本等约束来进行控制。

02/相关技术概念回顾



在解决仓储问题过程中,会遇到大量的序列数据,指的是数据集中的部分信息依赖于数据中其它信息这样一种特性。时间序列是一种常见的例子,观测是随着时间的推移而进行的。每次观测都依赖于前一次或前几次时间滞后的观察去确定后面的观测。另一种是和环境的交互数据,比如在怎样的库存状态下做了多少补货的补货量,真实满足多少需求以及reward反馈。在这样的交互信息里可以看到当前状态信息是另一段交互的结果状态信息。

关于时序数据,为了得到一些有意义的结果,通常情况下会有两个假设,一个是弱平稳,另一个是自相关,因为时序分析要发现历史中的一些规律,然后去预测未来。



在因果分析中有两大类分析框架,我们主要集中在SCM框架下。这样的模型可以近似描述出预产生过程,并提供一个外部可干预的形式化的数学语言。通过这样的模型不仅可以识别因果关系的强弱方向性等等,也可以帮助我们去计算path的因果效应等等。上图展示的图片来自Jonas Peters的一本书,概括了如果获取到SCM的情况下,可以支撑的一些的工具。

第一,可以通过序列方程式获取因果图,并且可视化。第二,如左上所示,在高维时刻可以通过马尔可夫性,把联合分布拆分成多个简单的条件概率形式。第三是干预,在SCM中改变某个节点的分布,或者对于关系长度进行改变,改变之后会得到新的SCM。第四是反事实,在做干预之前首先都由当前观测去更新序列方程式里的变量信息,再在更新过后的SCM上做干预的更新措施。正因为有了这样一个理论上的工具,可以支持在个性化的场景下做策略推荐或策略增强。



在动态贝叶斯网络表示中有三个图形化的表示。第一,可以把节点按时间从过去到未来的展开。第二,用unit graph刻画时序最小的一个完备的信息。最后,summary graph在unit graph中把时间信息累积掉就得到没有时间信息的图。

如何获取这类图,大致有四类方法。

  • 第一,constraint-based基于条件概率的方式判定图的边,然后通过特殊结构去定向。
  • 第二,score-based方法定义了模型BIC,在某个class中去search。
  • 第三,局限在某个特定的model class时候会去模型里做一些拟合。
  • 最后是granger casual的方法。

03/因果推断协助需求预测

回到我们要解决的主要问题,也就是仓储问题上面。第一个任务是如何用多元时序的方法做一些需求的预测,并通过模型的性质给我们提供很好的可解释性。



因为在SCM模型中有一些理论工具,以下三个方法都是可以用来处理时序分析。



在Casual discovery中,虽然表示出节点没有显示包含信息,如果知道实验信息可以对数据集做一些特征工程,比如把实验信息merge到数据集里面。第二,以ARIMA为代表的单元时序工具,主要对关心的目标节点做自回归和moving average的考虑。它的自然拓展是如何去考虑多元的时序分析。在多元时序分析里有两个小的分类,一种是未来去看现在,即没有瞬时,另一种是处理带有瞬时的时序发现。

我们对于多元时序方法的基本需求是要有较好的预测性能、以及良好的可解释性。所以在模型选择或算法使用时候集中在以贝叶斯网络为代表的几个方法中。



但是经过测试发现,目前主流方法的性能都还有改进空间。比如VAR或者VAR-LiNGAM,在进行商业决策或判断中,给到决策者100条甚至1000条对他来说都是没有信息量的。PCMCI方法在性能上还需进一步改进。上图是一幅简单的before-after对比图,我们在一个简单的ground truth模型上进行了测试。



上面我们看到这样的一种改进的方法会极大减少余边的信息。下一个问题很自然的是虽然边数少了回归出来的边的系数质量是不是能够有保证。这个对比图在这方面进行了测试。知道真实的系数值是多少,用WAPE衡量估计出来的系数误差有多少。在做对比的时候稍微做了调整,先会对系数整体的重要性做一个排序,从1%,5%到100%所有边准确性或者平均误差是多少。简单做了4个对比,通过这几个例子给到我们比较正面的反馈,在很多时候能控制学出来边的个数情况下,系数的精度得到了进一步的提高。正因为有这样一个性能的保证,为后面的预测和干预提供了很重要的保障。



进一步在实际数据中做了测试,并添加了更多擅长做时序预测的方法,比如arima,varmax, rnn, lstm等等。总体从结果上来讲,对于宏观经济预测上来讲总的表现还是不错的。下方截图可以看到,除了提供package以外,开发了相应的web API,便于具体组合到应用中去。大概流程是上传时序数据,对时序数据做一系列可选的统计检验,在一些情况下做一些转换之后会学到一个图。目前只用输入数据集本身以及lag,没有额外的显著性水平等等,极大减少了客户的负担。学完图信息之后就可以利用图上的feature信息做一些未来的预测。预测背后可以进一步发现到底是哪一些预测变量信息更重要地影响了某个节点信息。之后可以使用一些归因、仿真之类的工具。



当然我们的测试不仅如此,还有一些新能源、热辐射与能源需求上的测试,价格promotion、订单需求上的预测。这样一些真实数据中都做一些对比。综合来看在我们非常关心的预测、可解释性和模拟三个主要功能需求上来讲,我们目前提供的web API性能还是不错的。



功能已集成在技术平台上,在内部已经实现了商业应用,目前也在不断扩大应用范围到更多一线业务中去。

04/因果推断协助策略实施

接下来介绍怎么去做策略。



如何做策略,不仅会影响当前库存状态,而且会对未来产生影响。基本数学框架是通过一个马尔可夫决策来刻画长期的序列决策问题。当环境发生改变时,如何高效地做出策略。



已知ground truth模型基础上做了一个验证,在有混合迁移环境的基础上,环境迁移会影响策略的质量。最后是新的方法,基于因果模型学习或者结构学习可以帮助我们一定程度上改善这样的问题。在倒立摆的例子里会关注杆的长度,来影响决策朝左、朝右杆状态的变化。

上面一个简单例子,当我们环境不迁移,所有收集来的数据都是来自同一个杆的长度,不同强化学习方法达到的效果都差不多。但是有趣的事情是,收集到的数据是来自混合环境的,比如杆的长度是1m、2m、5m。通过对混合环境数据进行学习之后,如果把杆的长度迁移到10m,发现传统的基于MLP的方法性能下降得非常厉害。我们的方法可以和model-free方法打个平手,但是对于样本消耗上来讲目前方法只用消耗1/10的model-free方法需要计算的成本。如果把该场景应用在一些商业场景上的话,会显著节省样本收集量。



取得这样效果背后设计了一个生成对抗式的因果网络,对于当前收集到的数据进行因果网络或者反事实的增强,来高效地训练策略的网络。具体输入到模型这块来自于当前的状态、策略和环境的信息,给到图,以GAN生成对抗网络方式训练Generator。为了获取或者推理出这样一个滞后过程加了一个Encoder方式近似获取到这样信息,然后把信息给到Generator以后通过由Generator调整的方法类似调整的SCM模型去做一些数据增强。在第二次迭代还会收集到新的数据以及通过上一波数据进行反事实推理之后进行数据联合,在第二次训练时候可以帮助我们进一步扩大P1块的数据来去训练它。



在仓储问题上来讲,我们抽象出一个模型来做一个测试,其他都是一些比较基本的定义方式。因为这是一个序列决策问题总体来讲要定义reward函数,实际满足客户的订单的需求。右边对比图得到的结论和我们之前看到的场景迁移结果类似。



另一个解决处理环境变化的方法,快速做replanning的方式。主要是replanning的成本开销,所花的时间是远远小于环境迁移时间,对于处理时间问题都是可以接受的。具体来讲采用在线规划器的算法去对当前状态做一个局部状态逼近。好处是针对目前会对整个状态空间进行遍历如果状态是离散的话。目前online的plan只关心当前状态,因为目标有极大的减少会有更多的计算资源帮助我们对策略细化,以及策略树的生长。



当环境或需求发生变化的时候,该方法在计算策略时都是会重新replan策略,所以可以很好的应对这样的变化过程。同样地,目前计算的对象从一个空间变成一个状态是远大于目前离线算法的性能。



最后是结果性能对比图。第一、二张图分别描述补货策略观测不确定性大小时和不同离线算法在不同规模和在线规划时间下的计算结果值。第三张图,仓储管理追求收益,来自多大程度上可以满足消费市场需求。为了使销售额长期最大化,在个别时间会出现少量缺货情况。反映了收益和成本上的平衡,是在考虑了长期的不确定性的基础上得到的最优解。增加库存量虽然可以很大程度上满足客户的需求,但多出的管理费可能反而会伤害长期的收益情况。

以上就是本次分享的内容,谢谢大家。




本文地址:https://www.6aiq.com/article/1690801472316
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出