阿里健康供应链算法简介
首先简单介绍一下医药健康供应链算法的整体架构。阿里健康有很多不同的业务板块,包括医药电商、互联网医疗、智慧医疗等。其中阿里健康供应链业务的目标价值是:为医药电商货品的供给、销售提供支撑,以降低成本,提高时效、收益,最终提升用户体验。基于目标价值,整体的算法模块分为:智能预测、品仓铺货、智能补货、智能调拨、仓网路由、快递分配、智能审价。
算法整体框架见上图:
(1)基础数据:首先有一系列的基础数据,包括商品属性、GMV 等核心数据,以及新品、季节品、长尾品等货品标签数据。
(2)预测能力:在完善的基础数据之上建立了预测能力,在不同的场景,如大促、渠道等,通过预测能力来预测销量和单量等。
(3)库存决策:在建立了预测能力之后,就能进行上层库存决策。在预测了未来销量后,会需要对当前库存进行判断(货品数量是否够用),如果货品数量不够,则需要进货,这部分就是由“智能补货”模块决定。在货品不够的情况下,除了从供应商处进货,还能从其他仓库划拨,这种仓与仓之间的库存划拨则由“智能调拨”模块进行决策。“仓网规划”模块主要包含订仓和订配:订仓主要解决哪些货品该放入哪些仓的问题;订配主要解决仓该对哪些区域进行配送,以及配送时该用哪个快递等问题。最后的模块是“智能采购”,进货时通过分析供应商相关的询报价、审价、送货时长、滞销等一系列因素,来决定从哪些供应商进行采购。
(4)应用决策:在所有的库存决策机制之上为应用决策部分。该模块能应用库存决策模块中所有的算法能力,从而提供补货、调拨建议,大促盘货,仓库配送等供应链管理能力。此外还能建立库存健康系统,进行清滞降价、库存计划、缺货归因等应用。
本次分享的内容主要集中在智能补货和智能调拨两部分,这两个模块决定了货品供给,但侧重点不同:
(1)智能补货:主要解决“持货-缺货”平衡问题,即“采-销”不确定性问题,指标主要是周转和缺货。
(2)智能调拨:主要解决仓间库存平衡问题,以及拆单、跨区配送问题,指标主要是次日达和缺货。
下面将对这两个模块分别进行详细介绍。
02
阿里健康智能补货模型
1. 智能补货算法业务背景
下面展示了智能补货算法模型背景:
左图的横轴是时间,纵轴是库存。初始时,某仓某品就是有一定库存的,称之为“初始库存”,销售过程中库存数量会不断下降,在达到某个时间点时,会判断货品不够,需要从供应商处进行补货。实际情况下,供应商接单后货品一般不能马上到货,需要一定的时间,这部分的送货就会显示为“采购在途”,在某个时间点会送达成为“现货库存”。随着时间推移,还会进行订单下放。整个完整的时间线就形成了这个时序图。
我们会发现这里面有几个关键点:
(1)在某些时间段内库存为负:出现这种情况有可能是负卖,更可能是缺货,目前只讨论缺货。
(2)库存时高时低,如何衡量一个时间段内的平均库存:通过平均库存可以衡量成本,如库存高时会有较高的持货成本(如仓储管理费、资金占用成本等);库存较低会产生缺货成本(如销量损失)。
整个补货的业务主要是在平衡持货成本和补货成本,具体指标为周转和缺货。周转指标为库存除以销售,简单来讲就是在货库存能卖多少天;缺货指标为一段时间内缺货多少天除以总时间,即可得缺货率。算法核心就是根据持货-补货平衡进行建模。
右图总结了算法需要解决的核心问题:
(1)哪些货品需要补货;
(2)什么时候应该补货;
(3)需要补多少量。
相应的解法也很直接:
(1)如何铺货;
(2)补货点;
(3)补货量。
在理解了业务背景和核心问题后,后续所有补货算法都是围绕核心问题进行求解的。
2. 智能补货算法模型演进
上图展示了智能补货算法的演进过程:
(1)传统模型 ss:最左边展示了业内通用的传统 ss 模型,该模型主要基于安全库存。模型优点是整体框架成熟、稳定、易解释,容易直接取得结果;缺点是受限于框架,考虑因素不足。
(2)运筹优化 OR 模型:运筹模型的优点是灵活性较高,针对性较强,即求解某个最优化问题即可;缺点是整体的建模和求解难度需要得到保证,如果要求最优解,时效性需要保证,如果追求时效而去求次优解,这样求解的稳定性也会受到影响。
(3)深度学习/强化学习:深度学习和强化学习在补货算法场景中的尝试。该类方法的优点是能够考虑更多的因子,网络结构和深度都可调,也能学习到更多的表征;缺点则是深度学习方法相关的缺点,即模型调参、训练时长、效果稳定性等,此外在 RL 学习中 Reward 的设计也比较有挑战性。
接下来将介绍整个补货算法的 Baseline 框架及深度学习/强化学习的应用场景。
3. 智能补货 ss 模型
首先介绍 ss 模型:
(1)确定性模型:最初的补货模型在经济学中有一个确定性模型--“经济订货量”(EOQ)模型,该模型的主要假设是持货成本、启动费用及市场需求率都是固定值,在这个条件下就能求出最优解。
(2)不确定性模型:然而在实际应用场景中很多都是不确定的,所以有了不确定性模型--“安全库存(Safety Stock)”模型。首先比较直观的是需求的不确定性,即未来销售需求量;其次是提前期的不确定性,即供应商送货时长会存在一定的波动。对应的优化解法是加入销量预测、加权 VLT 统计预测等。右上角图片比较直观的展示了补货考虑的缓冲库存(buffer stock):横轴展示了送货时长,可能需要 3 天或者 10 天,这是 VLT 的波动性;纵轴则展示了需求的波动性,有可能卖 100 件,也有可能卖 150 件。安全库存即是基于这两点进行了考虑。
(3)ss 模型:该模型是基于安全库存、销量预测、供应商送货时长、服务水平构建的补货模型框架。右下角图中展示了模型相应的公式,其中需求以 d 表示,提前期以 L 表示,ss 的基础构建方式如图。在 ss 假设的前提下,即可计算补货点。其中补货点加上提前送货期、销量预测,即可得到补货点的基础值。补货点的意义在于满足整体的需求需要有一个预警,当库存低于这个点时,未来销售有可能击穿库存而造成缺货。在确定了补货点以后,可以根据相关假设或先验信息计算最优的订货量。
在 ss 框架下还有很多可以优化的点,如 OR 求解等,下面将简单介绍其中两个情况下的优化:
(1)动态库存 DTIA 模型:针对日销情况,结合健康相关特性,如供应商送货时长,这是一个必须要考虑的因素,因为不仅要考虑到什么时候下单,还要考虑供应商什么时候能接单。由此需要考虑 VLT 的 ON/OFF 状态,以及可能的波动区间,这样构建的 VLT 能使整体 buffer 值得到较好的保证。此外,还需要确定货品周转和缺货库存状态。高库存/高缺货/正常/问题品等不同库存状态也处于一个动态区间,在不同状态时整体的参数值也需要动态调整。结合以上两点可以得到整体的建模思路,动态 DTIA 模型就能根据相应状态进行调整得到 buffer 值。
(2)大促因子模型:针对大促情况,会有相关的大促补货模型。这里重点考虑以下问题:大促之后可能会出现大库存、高缺货的状态,故在大促之前就需要通过历史信息学习到这两个因子,这样在大促前就能进行相关调整,以防止在大促之后出现大库存、高缺货的状态。整体公式如图,不再赘述。
通过在不同点进行优化,就得到了整体鲁棒性比较高的 ss 模型。
4. 智能补货 RL 模型
下面将介绍 RL(强化学习)模型的相关探索和应用。
5. 智能补货仿真系统
下面将介绍库存仿真系统。
首先简单概述一下库存仿真逻辑。不论是预测还是补货调拨都需要一个有效的评判,库存仿真就是对整体供应链系统进行模拟评判的一个比较重要的过程。简单的逻辑抽取如下:
(1)流程:串行整个补货的流程;
(2)环境:模拟市场、供应商行为;
(3)代理:执行决策部分,用于模拟采控行为。
整个仿真过程实际就是基于历史数据使用不同策略进行迭代回溯的过程,这个过程中需要考虑很多不确定性,包括销量、供应商送货等的不确定性,如销量可能会有一定波动,供应商发货可能延迟,下单后供应商是否能接货送货等。在确定这些随机项后,会对不同的策略进行历史回溯,来对比相关策略。
右边左图中显示了不同策略模型在同一系统中的表现,三个策略对不同指标的表现可能不一样,会根据实际场景的需要对策略进行评估选择;右图则展示了同一策略在不同参数下的评估,哪个参数最终对模型的影响较大,也能达到较好的验证。最终会对仿真系统的可用性和一致性进行评价,就能得到整个仿真系统对于补货实际应用的保证。
补货和仿真系统的建设,由问题出发、建模、仿真评估的一系列过程形成了一个很好的闭环。
03
阿里健康智能调拨模型
下面将对智能调拨算法进行介绍。
1. 智能调拨问题背景
首先介绍一下调拨问题的背景:仓库分布在不同的省份,每个仓会负责不同区域的发货,如果仓发货给本区域的顾客,那么送货时效是能得到保证的,不论是当日达还是次日达都能得到保证。但如果库存经营不善,有仓库发生缺货,该仓覆盖区域的顾客下单时,就不能从此仓库进行发货,由此会产生跨区配送,虽然跨区配送会使用较近仓,但距离实际还是较远的,整体来说当日达、次日达就无法得到保证,用户的整体体验就会下降,整体的次日达指标也无法完成。故在检测到仓库快缺货,采购也无法及时到达时,需要进行相关的调拨,能在它将缺货时到达,这样整体的次日达就能得到保证。
除此之外,调拨还能解决很多其他问题:
(1)可以解决仓间平衡问题。如有些仓库存较高,有些仓库存较低,这时就可以通过调拨进行仓间平衡;
(2)可以提升次日达率、降低拆单率(某品在某仓没有,在另外仓有,就会产生拆单跨区配送);
(3)提高时效性,提升用户满意度。
在了解调拨问题后,通过整体目标来抽出关键指标进行建模。在调拨计划的实际场景中,主要关注以下指标:
(1)最大化次日达;
(2)最小化仓间调拨成本;
(3)最大化降低缺货天数/最小化缺货率。
由此可见,调拨问题是一个带约束的多目标规划问题。为了更好求解,需要对指标进行量化:
(1)成本:可以通过仓间费用进行衡量;
(2)次日达:可以通过统计分析,次日达预估;
(3)预计缺货:可以通过日销、库存、调拨周期,构建预估函数进行表达。
此外还需要关注一些相关约束条件:
(1)调拨量不应该超出可调拨上限。调出仓本身货量不够,就无法完成调拨。
(2)应该满足收货仓的需求量,但不应显著高于该需求量。如实际需要 100 件,不应该调拨 200 件,满足即可。
(3)每个仓应该满足最小起订量。如求解后得到 A 仓往 B 仓仅调拨了 2 件,运输成本较高,达不到整体最小的起订约束。
(4)应该满足箱规约束,不配送散件。即一般调货按照整箱调拨,如一箱一般为 10 件,如果需要调拨 12 件,就需要规到 10 件的约束中。
关于决策变量总结如下:
(1)需要决策每个品仓应该如何进行调拨,即调拨量矩阵;
(2)还需要决策某仓是否能够进行调拨的矩阵。
(3)有了问题、约束、求解变量后,就能对问题进行公式化。
2. 智能调拨算法介绍
上图展示了多目标的次日达、成本、缺货的线性以及非线性规划,还有限制条件的相关公式化结果。在预估过程中需要考虑以下几个量化问题:简单的建模可以直接建立一个多目标线性规划问题,但实际需要进行很多更深层次的考虑,如会考虑到整体指标的效用函数,这些效用函数总结出来其实都是非线性问题,这样就需要转化为非线性规划的求解。但不管是哪种问题的求解都是多目标求解,针对于多目标求解主要使用了以下两个方案:
(1)组合目标优化:虽然有不同的目标,但可以通过归一化量化指标,对预设的更关注的指标进行加权等操作,将多目标转化为单目标。如果问题是求解整数问题,求解时会有很多整数规划的 solver;如果是非线性不太好求解时,也有一些基础的元启发式及相关优化算法,如 EA 遗传算法、ALNS 领域搜索算法等。这样就能求解出单目标最优化结果。
(2)多目标优化:可以直接求解多目标的帕累托前沿。整体思路为:多目标优化有不同的目标,在求解过程中势必会有一些解,如 A 解相对于 B 解来说所有的目标都是比较差的,则 A 解就不会被选入集合中。所以需要找到帕累托前沿中在某个目标上是最优可取的,在拿到所有满足某个目标的求解结果后,在根据实际应用场景中更关注、更优先选择的指标,直接或者加权选择相对应的最优解。
通过以上两种方法,再结合线上情况,求解的整体效果也比较显著:最终在某些相关品上,整体的缺货率能下降 5 pt,次日达上升 10 pt,单次调拨能降低 1.5 pt 左右的缺货率。
整体来讲,除了补货以外,整个调拨的结构也是按照上述的流程进行设计的。这两部分构成了整个库存决策的核心 OR 相关算法。
04
问答环节
Q1:周转和缺货指标间有冲突时,如何综合评价最终的效果?
A1:这个问题需要分两个角度来说明。第一个角度是企业本身对周转和缺货的业务目标有相关的规划,第二就是算法也有一些相关的评估,会根据历史在不做优化的情况下周转和缺货状况,在做优化平衡后就会分析相关优化会使哪些空间得到保证提升。主要会结合历史统计和业务需求来综合评价。
Q2:周转和缺货等业务指标和补货如何进行仿真?通常最终的指标不单是补货的影响,还会受到调拨、主配等业务的影响。
A2:总结一下这个问题应该是想知道仿真如何更好的对调拨和补货进行切分。针对这个问题,在整个仿真体系中会模拟很多环境因素,包括整体供应商接单、是否能按时发货等,这些对补货和调拨都会有共同的影响。由于仿真系统是一个追溯历史的系统,会每天回溯串行链路,基本上串行逻辑是补货完以后调拨,每次串联补货/调拨的最终库存进行输出都会对相关指标有影响,最终仿真结束后会得到历史时间段内的库存变化图,进而计算周转、缺货指标。所以在整个仿真过程中,可以固定某个条件来调整另外的条件,也可以同时进行,最终通过综合指标对策略进行评估。
Q3:如何构建模型的每一块策略与最终业务指标的联系和评估体系?如评估预测还是库存策略影响了最终的周转和缺货指标。
A3:针对这个问题,我们有一套比较完善的归因系统。对业务来说核心指标是周转、缺货、次日达等,我们会针对发生了缺货、高周转等问题进行追溯和详细归因。之前有简单介绍过归因的思路,首先找到实际问题发生点,然后往前进行一步一步地追溯。如发生缺货,就需要从缺货发生点往前推,到底是由于供应商送货时间太长无法达到要求,还是下单后采控/业务未接单,又或者是下单后供应商供货无法完成以及取消等,排除这些情况后,再看补货的量是否能满足这段时间的售卖,如果都排除,再往上追溯预测的准确性。整体来说就是建立了比较完善的归因系统后,就可以定位每个环节可能出现的相关问题,进而进行优化。
Q4:智能补货是纯自动化的方式?还是输出建议补货量,然后进行人工审核?
A4:现在的主体流程还是算法输出采纳建议的方式。目前的采纳率也比较高,但最终的目标是想做到 100% 的自动化率。
Q5:补货和调拨之间如何平衡?
A5:关于补货和调拨平衡有一些比较重要的指标:供货满足率和 VLT 送货时长。在供货满足率较高时倾向于补货,这样供应商比较容易送货;在供货满足率不是很高的情况下,依旧会进行补货,但同时调拨也会进行检测,如果超过预警范围就会及时触发调拨,以保证库存,防止击穿库存形成缺货,两者相辅相成。
Q6:上线前算法的效果可以由仿真验证,但如何衡量仿真本身的效果?具体仿真时有什么最佳的实践吗?
A6:针对仿真系统的建设,整体的实验效果还是比较好的,仿真系统在构建过程中会把所有的不确定性都考虑进去。在做仿真准确度评估时,会拉取历史一段时间内的数据,找到排除任何可能的影响因素如大促、疫情、不采纳等,完全根据策略和预测走的实际线上的指标;再回溯这段时间内依据相同的参数策略进行仿真,得出仿真的指标;对线上和仿真指标进行相关评估,就能得到仿真系统对于线上实际发生情况的偏差。目前已经构建了一个完整的仿真平台,也进行了相关实验,能对仿真系统进行有效的验证。
Q7:可以详细的介绍一下双塔模型是如何辅助学习的吗?
A7:这块内容也是一个探索性的尝试,针对 RL 模型我们尝试了单塔和双塔模型,以及双塔辅助的学习。上面分享过程中也提到,之所以要使用双塔辅助是因为在输出时如果不加入 loss 限制就会出现很多诡异的值,如补货点特别高、补货量特别少等,虽然在理论上是合理的,可以理解为多次少补的策略,但实际情况需要考虑到供应商有可能不接单的情况,按照实际经验来讲可能会偏离实际应用,所以在优化时会加入这个限制,并且在调优时也会根据主业务的倾向性进行相关调整,最终得到了当前模型。
Q8:针对供应商的不确定性该怎么处理?
A8:这个问题在之前的分享内容中提到过,供应商可能有很多的不确定性,如供货满足率、供应商可能不接单、或者接单后无法保证送货时长等,针对这个问题,我们在做 VLT 统计时会加入供应商状态的区分,会进行区间统计,对更近的 VLT 会进行较大加权,更远的送货时长来进行较小降权,最终调整得到加权的 VLT。为了得到较好的验证效果,在下次接单时可以评测当前预估结果的准确度,得到最终的 VLT 调整模型。
Q9:按渠道预测的销量如何合理的分配到各个仓?建模也是以运筹模型为主吗?
A9:在做渠道预测时,是分不同渠道进行相关预测的。在渠道到仓的汇总时,也有一个整体的分配逻辑。这个部分在整个预测和补货联动的过程中是同步调整的,即整个渠道发哪些仓、由哪些渠道进货的情况下,是有拆分比例的。根据细粒度的预测,并且进行了有效的准确度评估后,再按照整个比例进行汇总,整体总量的偏差不会特别高,是能够得到保证的。这是一个由分到总的汇总分配过程,不是以运筹为主。
Q10:有的计划人员是预测多少补多少的思路去理解的?如何更好的向计划人员解释补货和业务的差异?
A10:计划输出时主要考量的是采纳率和自动化率。在业务使用过程中会有白盒化的过程,即不是让业务只拿到最终的结果,而是每一步的调优都会有一个可解释性的输出,这样有利于业务接纳补货输出建议,并能够有效的解释补货业务。
Q11:对于销售稀疏的长尾品,安全库存该如何设定?
A11:针对长尾稀疏品会构建专门的长尾补货模型。从预测端来讲,是一个分步预测的过程。长尾品不仅要考虑它的准确度,更重要的是需要度量销售时长分布的偏差,在补货量的基础之上还会进行相关 Buffer 的调整,也会统计判断是否是历史易缺货品,得到其缺货概率。在安全库存设定上,结合分布预测和概率调整,就能得到每次长尾以及易缺货的 Buffer 调整程度。
Q12:对于有货率该如何确定?
A12:有货率其实就是“1- 缺货率”。
Q13:一般多久能求解出来?多目标最终如何选择使用哪个帕累托最优解?
A13:在求解时,首先会对子问题进行求解,然后再进行最终综合求解,这样就转化为分步式求解的问题,总体时间就能比较短。关于最终选择哪个解的问题,是有目标权重的预设。如当前拿到的所有解,每个解都是在某个条件下是最优的,但此刻的补货最希望解决的是次日达的问题,就可以将次日达的权重调高,其他的权重放低,在满足这个条件的所有解中,再计算综合分数取 Max 值,这样就能得到在帕累托边界上最符合需求的值,此外也可以按照优先级进行选择。这个部分的挑选主要取决于具体的应用场景,目前是按照加权的方式进行选择的。
Q14:调拨是主要解决仓库库存平衡问题吗?如果仓库库存存在补货的时候,已经合理分配,此时调拨是否可以避免?
A14:调拨能解决仓库库存问题,但在现有场景中,调拨主要解决的是缺货和次日达的问题。在仓库库存水平较低时,如果不进行调拨,仅依靠补货显然是无法到达的,这时必须要通过调拨来解决。从理论上考虑,如果仓库在补货时已经合理分配了,所有都很完美,补货就能解决一切问题。但实际场景中会存在各种不确定性,如供应商有不确定性,接单送货也有不确定性,综合所有不确定性的影响,势必会产生相应偏差,这时调拨就是这些偏差的兜底逻辑,能够去弥补产生这些偏差之后的最差情况。
Q15:是否有量化预测偏大或者偏小的损失?然后考虑最小的损失去补货?
A15:这个问题应该是想知道是否用了鲁棒优化。鲁棒优化是要考虑到最差的情况下的最优解,在调拨的场景中没有特别做这方面的用途,但是在其他场景如仓网规划中,会对这个问题进行较好的研究。如在订配算法中,我们不希望有任何的问题会影响用户的次日达体验,尤其是在仓库快递分配部分。这时会结合先前的预测偏差等进行鲁棒性的优化,会考虑预测最差值时候的鲁棒优化结果。
本文作者:龙广斌 来源:DataFunSummit
CIO之家 www.ciozj.com 微信公众号:imciow