DTC 补货实战:从算法到落地
![DTC补货实战:从算法到落地](https://static001.geekbang.org/infoq/cb/cb106196b7161a51892a66f7b17f037b.jpeg)
本文作者:凡飞,从快递到快消,一个平凡的供应链算法深耕者。
“ 我希望衡量我们 ai 团队价值的,不是创造了多么精深的算法,而是跨越算法到落地间距离的能力。”
近年来随着电商行业从增量市场逐步成长到了存量市场,不少店家的规模已经达到一定水平,营收的增长也开始放缓,这时候对电商渠道的供应链管理就开始被大家所关注到。
供应链就像古代战争的粮草供应,一两场闪电战或许看不到粮草供应的重要性,但只要涉及持久、大型战役,那必是三军未动,粮草先行。
现在的商场也是一样,在企业规模较小,处于高速增长、占领市场的阶段,供应链不一定被关注到;但只要规模达到一定程度,供应链将会像企业的心脏一样,用更少的资金流,为企业的业务运转提供更稳定的商流,成为企业“先为不可胜”的条件之一。
有幸的是,在我们与某个大 KA 客户合作的过程中,专门就 DTC 场景的补货做了深入的探索,从经典的安全库存理论出发,到针对性地设计调整,再走向价值预测算,最终到落地,得到了业务指标优化。本文将我们的思考、实践分享出来,与各位看官交流,希望能有更多的收获 :)
1. 算法设计
供应链的话题在国内已经发展有 20 年之久了,在方法论层面,我们非常推崇刘宝红老师《供应链的三道防线》所沉淀的理论,从预测到补货到采购、从算法到流程到组织架构,都有非常鞭辟入里的见解,我们也得以站在巨人的肩膀上创造价值。
而在补货领域,比较经典且在工业界广泛应用的,还是安全库存理论,较少涉及复杂的运筹学或者强化学习。当我们假定 Lead Time 恒定时,一般的安全库存计算方式可以表示如下:
![](https://static001.geekbang.org/infoq/14/14f1e2d7d2f76f7aa0c09efa342e33d6.png)
其对应的数理逻辑可以由下图解释,假如未来实际发生的销量服从正态分布,那么我们 ai 模型预测结果往往是对未来的期望,如果我们直接拿预测值来补货,将有 50%的概率会造成缺货。
这时候我们就期望在指定的 Service Level 情况下,库存能保证不缺货,实际上就是求其对应置信区间上的值。这是对一天的预测补货来看的,考虑到当天下的补货订单可能要隔几天才能入库,在假设销量是正态分布的情况下,多天安全库存就是上述的公式。
![](https://static001.geekbang.org/infoq/10/106db5b953a151fb7c5ef73fdd347c86.jpeg?x-oss-process=image%2Fresize%2Cp_80%2Fauto-orient%2C1)
图 1:预测值、安全库存、Service Level 在统计上的关系
更进一步,工业界在一个决策周期内(如三天补一次货、一周排一次产等),销量一般不会服从正态分布,但只要我们的预测模型选择恰当,往往误差还是可以接近正态分布的,这时候我们也可以用同样的方式计算安全库存。比如某些场景下,周一到周日销量呈现周期性变化,那么我们在模型中加入日期的因素即可。
道理虽然简单,但结合到实际业务会发现,这里的正态分布假设存在很大问题。未来每一天的预测误差服从同一个正态分布,在 DTC 的场景下很难达成此条件。
1.1 DTC 的特殊性
电商业发展到现在,大家几乎都能感受到,每一天似乎都在做活动,每一天好像都可以领优惠券,我们从数据上来看不难发现以下特点:
促销活动频繁。像我们本次合作的客户,光自家的促销平均一个月就促销 4 次,每次持续 3~4 天,还不算平台合作类的聚划算、百亿补贴;
促销刺激显著。不论促销多频繁,促销力度如何,相比于非促销日,销量都有一定增长;特殊日期的促销相比平常促销又有显著增长,如 38、88、99 大促、七夕、年货节等等;而待促销结束后,销量基本就立刻回到了日销水平;
促销存在相似性。不论是周期性的频繁促销,还是特殊节日的促销,从总量、促销期间每日销量占比、不同商品的销量占比等方面都存在相似性,同一个模型的准确率、误差分布表现,也存在一定相似性;
个别促销存在计划性。像双十一、618,或某些头部主播的直播活动,都有强烈的计划导向。品牌方都会与合作方提前有明确的销售计划,这时整个供应链往往以约定的计划值为导向,而非通过历史销量预测的方式;
因为上述的特性,我们本次合作暂不将 618 和双十一的大促考虑在内。而对于剩下的时段,很自然不会有大一统的预测模型,能使得每天的预测误差服从同一个分布,供安全库存理论来补货。那我们要怎么办呢?
1.2 基于联合误差分布的安全库存计算
基于 DTC 的特性,我们至少可以对促销和非促销分开建模,当我们的模型选择恰当时,可以保证在单个模型预测的误差中服从正态分布。那么这时候每一天的预测可以通过不同模型拼接起来,每个模型回测历史时也可以得到预测误差,那按照上文安全库存理论的基本思想,只要得到在 Lead Time 期间各模型误差的联合分布,找到对应 Service Level 下的安全库存,问题就可以迎刃而解!
需要注意的是,当 Lead Time 覆盖的促销和非促销天数不同,对应的联合误差分布也不同,例如两天促销一天非促销和一天促销和两天非促销,在相同的 Service Level 下的安全库存是不一样的。
![](https://static001.geekbang.org/infoq/d8/d8eb1d243d7d21bfdae28be49d237e19.png)
图 2:DTC 促销频繁,每日销量变化巨大
基于这样的思路,我们开发了相应的补货体系。这里为了与下文呼应,我们定义 3 个模块:
预测模型,即促销和非促销的融合模型。
决策模型,当前是基于联合误差分布的安全库存模型。任何能给出补货方案的方式均可视为不同决策模型,包括不限于运筹优化、强化学习等模型。
仿真模型,以一定业务逻辑构成,输入预测、决策模型及历史数据或未来预测数据,对历史或未来业务表现进行模拟。
关于这三个模块的深入探讨,有机会我们可以再写一篇文章来讨论,这里重点介绍 DTC 如何用此方式来落地的。
我们通过仿真回测以及基于仿真优化的超参数搜索方式,验证了模型的有效性。我们根据历史销量、库存,加上一定的业务运转逻辑进行仿真,在相同业务流转情况下,假如用我们的方式来补货,业务指标会发生怎样的变化,如下图 3,就是某段时间用我们的补货方式下的库存天数和缺货率仿真结果。与人工运转下来指标相比,有超过 20%的改善。
![](https://static001.geekbang.org/infoq/09/099952a877bdda84e1df98642a13c23c.png)
图 3:仿真库存天数与人工库存天数
而从细节上看,如图 4,ai 补货的节奏比较平稳,补货值会随未来的预测销量波动而相应变化。而库存也有像安全库存示例图一样稳定地高低起伏,看起来很优雅:)
![](https://static001.geekbang.org/infoq/3b/3b08cd8f299113386b80404cd5f8b7f6.png)
图 4:仿真下的补货值与库存表现
需要注意的是,当前的仿真测算的仅仅是理论值,因为生产中有各种异常因素的影响,理论值往往只是能达到的上限。尽管如此,我们至少验证了当前算法存在一定落地价值,剩下的就是落地过程中如何保障理论值和落地值之间的损失尽量小了!
2. 落地前的准备
算法在落地过程中,也会对业务的管理带来很多干扰。为了确保高质量的落地效果,我们采用了 MLOps 和仿真相结合的理念,来管理落地过程。在落地之前,我们的客户提出了两点顾虑:
模型在仿真回测历史的表现不错,但如何保障模型对未来的表现持续稳定?
DTC 经营商品较多,能否有科学的方式分批上线,并确保每批上线的都表现良好?
我们对此一一做了解答。
2.1 模型性能稳定性
MLOps 的基本认知里,我们认为开发是相对便宜的,持续性运维线上模型是昂贵的。在历史回测效果良好的模型只是开始的第一步,更多的挑战是上线后的持续运维,以及不可避免的模型性能下降。我们的补货模型,或是 ML 模型,我们需要持续监控过程,当模型性能显著下降时及时干预,有可能是重新训练模型,也有可能是调整输入数据。
![](https://static001.geekbang.org/infoq/cd/cd007f7f606714ef104ffb6e4f2fe4e1.png)
图 5:MLOps 的模型性能监控理念
尤其是在商业环境变化多样的工业界,任何战略的调整、市场的变化都可能导致模型性能下降。像 DTC 前几年直播、淘宝客还是热门的话题,近几年热度就下降了,他们对销量的刺激也在减少。
![](https://static001.geekbang.org/infoq/a0/a00915b2b5bedf1b33fa3ede62a44019.png)
图 6:与 data centric 理念相结合的模型性能保障体系
基于此,我们以业务同学最关心的库存天数和缺货率作为核心监控指标。除此之外,我们也可以通过仿真做一定的事前预警。
历史不同时段的稳定性分析,如上文所述,我们通过仿真优化的方式得到的模型在某段期间内表现良好,我们也可以用同样的超参数来仿真历史不同的时间段,来观察同样的决策方式稳定性如何。
如下图 7,我们用同样的超参数仿真了另一段期间的历史数据,可以看到 ai 的库存天数和缺货率在均值上与之前期间接近,并且也是稳定比人工表现好。由此证明同一套决策超参数确定的模型,在不同时间段是相对稳定的。
![](https://static001.geekbang.org/infoq/30/3030a35bc28145cc07d181b708257238.png)
图 7:同套决策超参数下不同时段的仿真库存天数
周期性特殊活动的稳定性预警,同样是图 7 期间的仿真回测,细心的同学可能发现 ai 缺货率有 3 个高峰点。结合 DTC 的促销计划我们不难发现,这三次分别对应七夕、88、99 大促,这是每年都会做的大促销。而当我们的预测、决策模型没有调整时,每年的仿真回测都会发生同样缺货率增高的现象。
反过来说,对于还没到的大活动,我们都可以用过去活动期间做仿真回测,以观察当前模型是否有信心度过今年的同样活动,这将给我们应对未来的变化留下了机会点。
这里以 88 大促为例,我们可以用前几年的 88 历史数据做仿真超参搜索,搜得的结果可用于后续 88 期间的特定超参,如图 8 所示,相比上文在长时间内稳定的超参结果,88 特定超参可在 88 期间将缺货率优化 4%,而如图 9 所示,相应的库存天数没有造成太大影响。
![](https://static001.geekbang.org/infoq/74/74623c60880fb594c40c3a7871290cd7.png)
图 8:特殊活动下超参调整缺货率对比
![](https://static001.geekbang.org/infoq/f2/f244a82ec310bf6e5e046a3d04dfb2ff.png)
图 9:特殊活动下超参调整库存天数对比
理论上,我们可以每天都对未来一段时间做稳定性预警,吸取历史的教训,及时对预测或决策模型做适当调整。在 DTC 场景下,周期性大活动尤其有必要,比如 38 妇女节、88 大促、99 大促、年货节等等。
2.2 基于仿真的上线准入机制
当稳定性有保障后,随之而来的是如何分批次落地的问题。虽然我们能在仿真测算时,整体的业务指标良好,但实际落地不可能直接全量落地,而是分批次的。
这时候孰先孰后也是有讲究的,我们更希望“最有把握”,落地后优化指标更多的先落地,这不仅能提振团队士气,也能在成果出来后得到更大的授权。
落地后指标变化不大的暂缓落地,它们可能有特殊的影响因素,需要针对性调整模型;落地后指标变差的,有可能它们就是很难用 ai 自动化补货,需要人工干预的。
我们如何将这些批次区分开呢?在一开始我们认为首批落地的商品需要符合下列条件:
销量持续稳定
ai 预测精度持续良好
预测误差持续稳定
而实际实践下来后发现这些商品虽然模型落地后能表现良好,但与人工相比优化空间并不大。反思之后发现我们进入了一个误区,这些筛选条件指向的都是销量稳定、让预测模型表现良好的商品,这些商品虽然补货模型能很好地应对,但人工也同样能很好地应对。
反而对于销量不太稳定,人工不太容易做预测的商品,预测模型通过类似场景的学习,决策模型经过精密的测算,其实能比人工更少犯错,从而得到更好的优化潜力。ai 不就是在不确定中找到确定性,从而帮助人更好地决策么?
既如此,何不用仿真拿历史的数据来判断到底选哪些呢?因此,我们提出了基于仿真的上线准入机制。
以仿真回测的业务指标与人工指标之间的差距作为是否达标的判断依据,分析未达标的案例弱于人工的原因,相应地调整模型,再用仿真测算,直至达标,符合上线标准。对于已达标的,我们也可以根据仿真回测业务指标相较于人工的优化潜力做排序,让潜力大的先落地。
![](https://static001.geekbang.org/infoq/4b/4b074b680433e6cb31c629920a4c440d.png)
图 10:基于仿真的上线准入机制
拓展开来,仿真->归因->模型调整的闭环,不光适用于 sku 的上线准入,同样也适用于新模型的上线准入。小到模型的超参数调整,大到模型结构变换,如 lgb 换成 transformer,都适用这样的体系。
3. 落地过程的挑战
兜兜转转,我们的模型终于到了要真正接受考验的时刻,在此过程中也受到了充分的挑战。
3.1 采纳率不高怎么办
在落地的试运行期间,通过监控发现业务同学在未加干预的情况下对补货推荐值采纳率很低。对典型案例做了分析总结后发现,其主要根源出现在以下两方面,对销量的高估,以及对 AI 补货不够信任产生的不安全感。
以某个商品为例,从图 11 中可以看到人工有两次补货,而当时的实际库存都高于 ai 推荐的最大库存,从实际库存每日消耗来看,其销量也是持续低迷的。由此我们可以判断这两次是不合理的补货行为。
![](https://static001.geekbang.org/infoq/09/09248ba28bcdeab74904e7dc5c39956e.png)
图 11:根据实际案例加密转换后的补货场景回溯示意图 1
在和业务同学的访谈中我们得知,这两次补货分别对应了两场重要的促销,仓管同学受到前端销售同学的压力,并且缺乏此商品历史销量趋势的感知,补了较多的货。
这也从侧面证明了 ai 预测的优势,一方面 ai 可以站在更全局的角度做预测,使得销售和成本在最优的水平,既不会为了营收多备货,也不会为了减少库存成本而损失销售机会;另一方面,ai 在最细的粒度可以做到更精准的预测,对于重要的促销,不仅可以知道知道销量的增长,还可以知道哪些商品涨的多哪些涨的少。
为了减少类似情况的发生,我们给业务同学开发了相应的看板,可以让业务同学感知到各个商品历史销量趋势,增强对 ai 预测的信任感,而非只提供一个冷冰冰的推荐补货值。
因不安全感,做的额外补货。以此商品为例,可以看到业务同学也补了两次货,但此商品销量较稳定,没有对库存造成太大负面影响,真实库存水位也在 ai 推荐最大库存量之下。而从 ai 推荐订货点和实际库存量的对比来看,业务同学的补货时机已经非常接近 ai 推荐补货的时机了。根据库存和销量推算,如果业务同学在第一个补货点没有补货,那么在第二个补货点时,ai 已经会推荐其补货了。
![](https://static001.geekbang.org/infoq/e0/e04098e0a0e9158d00b86727f62bf0e5.png)
图 12:根据实际案例加密转换后的补货场景回溯示意图 2
同样在和业务同学的访谈中得知,当时他密切关注着这个商品,但 ai 迟迟不推荐他补货,业务同学担心 ai 是不是把此商品漏了,于是分别补了 2 次,但考虑到与我们的合作,又不敢多补,非常纠结。而因为业务同学在这两天补货了,导致 ai 拉取最新库存时发现当前库存充足,也就不补货了,又加深了业务同学对于 ai 是否漏了此商品的疑虑。
类似的行为虽然不会对我们主要考核的库存水位和缺货率,但如果每次都是这样小批量地补货,一定程度会对物流、拣货造成额外的成本,同时也增大了我们补货推荐的使用成本。
相应地,我们在与用户交互的补货推荐表中额外增加了 ai 推荐订货点和最大库存量字段。前者可以减轻业务同学的不安全感,让他知道虽然今天 ai 没推荐补货,但下次肯定就推荐了;后者可以在业务同学坚持要补货的情况下,让业务同学可以参考当天应该补多少量。
由此我们确认了与业务同学的交互形式,如图 13 所示,业务同学不仅可以看到推荐补货值,如果在特殊情况下如需提前补货,业务也可以根据推荐订货点和最大库存作为参考做更好的决策。
![](https://static001.geekbang.org/infoq/0a/0ae350d567a09cff37416dfd78a7a703.png)
图 13:最终与业务同学交互的补货表
我们在落地过程中,也发现了一个有趣的现象,供大家参考:对于业务流程较为成熟的企业,直接用 ai 做强制实行,会对现有业务流程带来极大挑战,因此 AI 实施过程中,在现有流程内,帮助业务同学做更科学的决策,会帮助更好的产生业务价值。
当我们正式上线运行后,采纳率提高了 60%以上,业务指标也在 3 天后有了显著提升。
3.2 归因分析
在持续的落地期间,我们在监控业务指标的同时,也需要对业务同学没有采纳补货推荐值的情况进行分析,以便深入了解是模型本身问题,还是流程问题。在初期阶段这是个极繁琐、工作量巨大的工作。
这个过程需要准确而全面的采集业务同学的反馈是最关键的。对每一条未采纳推荐值的反馈,需要用数据回溯当时的场景,确认其反馈并归结到有限的标签,同时会遇到大量的文字解析工作,比如,同样的问题,业务同学可能用不同的反馈文字描述;相似的反馈文字,背后对应的原因可能不一样,触发的多补或少补的行为也不一致。
幸运的是,观远拥有强大的 BI 产品,以及服务数百家客户后沉淀下的分析方法论,顺利完成了归因分析。下图是我们某个阶段低采纳的归因结果。
![](https://static001.geekbang.org/infoq/e6/e60886af61c9d6a5086324a31a5b219e.png)
图 14:未采纳的归因分析
通过归因分析,我们一次次找到了当前模型的不足,加深了对业务的理解。比如:
For99 大促提前备货。在建模之初我们和业务方明确了 Lead Time 是 3 天,如果 9 月 9 日有活动,我们在 9 月 6 日把活动期间的货量补足即可。
但是对于大促,业务同学往往会提前备货,大促的货量不是一次性能补足的,也没有那么多现成的货运车辆来运输,所以都是提前分批补的。这就要求我们的补货模型针对大促补货做额外调整。
满足日销需求。其本质上是我们模型对部分商品的非促销时段预测不准确。而经过我们深入分析,所谓的“非促销”时段其实是未被感知到的促销,比如部分百亿补贴、聚划算等未被整合到输入数据的活动,或者原计划的活动临时调整了促销商品却未被模型采集到。
我们和客户的 IT 团队沟通后也得知,理论上所有的促销活动都能采集到,但都需要成本,所以有部分体量不大、低频发生的活动都不建议采集。相应地,这也要求我们的预测模型需要有感知计划外活动开始和结束的能力,及时调整预测值以做到更好的补货。
除了模型本身的问题,AI 落地与流程的执行配套也非常重要,比如:
site 需求,site 可视为前端销售同学,他们希望仓库多备货,对销量有一定的高估,会给予补货同学一定的压力,导致补货过量,这对 AI 补货是一个干扰。刘宝红老师在《供应链的三道防线》中也提到,如何让整个公司用一个预测值,一直以来是个巨大的挑战。
B 仓无货防断货,DTC 的网络结构是典型的多层级仓储结构,当我们的某些热销商品在全网缺货时,业务同学会紧盯工厂的生产,一旦生产出来就囤货在附近的 DTC 仓库,即便因此可能牺牲该仓库的库存水平和跨仓,也要防止出现全国性断货的现象。
这两种场景,对于业务影响稍有不同,前者会造成了过大的库存成本;而后者会减少缺货,一定程度上对市场是有利的。
4. 不足及可优化点
经过我们的努力,我们实验组的库存天数比对照组降低了 14.8%,缺货率降低了 6.9%,得到了客户的肯定,当然其中也有一定的不足值得我们未来持续努力。
4.1 面向财报值的优化
在上文对于业务指标的优化过程中,我们提到了落地前的理论值测算,上线后努力保障落地后业务指标的改善,我们看到了业务指标从理论值走向落地值的过程。站在商业的角度,我们并不希望止步于业务指标,而是希望获得财报值。希望后续有机会邀请财务同学全面地核算我们优化结果收益。
落地值和财报值比较:
落地值仅考虑核心考核 kpi,未体系化地考虑综合成本。比如项目未考虑拣货、物流费用,如果高频少量补货就可以作为“投机取巧”的手段;
落地值未核算到金额。比如我们将整体库存水平优化了 10%,并不代表我们的仓储成本就能下降 10%;
模型需接受持久性考验。
财报值也可以反哺模型,更全面地考虑问题,完善优化目标。期望未来有越来越多的项目,能收获清晰的财报值,让我们可以看到 AI 对企业的更加核心的价值。
4.2 集成预测、决策和仿真的补货产品
ai 模型带来了巨大的价值的背后,不容忽视的是,其强大的产品、完善的流程使得 ai 模型能快速验证、迭代,从而产生价值。补货场景下,我们也需要预测、决策和仿真相结合的闭环,让补货系统更加友好,人性化,更接近管理的需要。
对于算法同学来讲,他们可以:
开发新的预测模型,从 lgb 到 transformer 或是 MQ-RNN;他们也可以调整决策逻辑,从安全库存逻辑改成运筹优化问题或者强化学习求解;他们也可以在当前模型上超参搜索,得到更好的表现。但无论哪一步,当他们提交代码后,系统都会做仿真回测,验证新方法的潜力。
对于确定要落地的模型,当和业务同学沟通好后,产品也能基于仿真上线准入的思想,分批次推荐落地商品,并告知哪些商品需要再做调整。
落地过程中,产品能对大部分的未采纳情况做自动化归因分析,以高效提升采纳率。
对于算法同学,任何新研究成果都可以通过这套流程快速得到验证,加快商业价值的转化。
对于业务同学来讲,每天补货时,我们的产品可以告诉业务应该如何补货,背后的决策链路是多种预测和决策模型经过历史仿真所得到的最优组合。业务同学可以按自己的理解修改与其相关的参数,比如:
预期服务水平从 95%调整到 97%,产品会调整今天补货方案的同时也告诉他,2%的服务水平提升,经过历史的仿真回测,预计会带来 x%的库存费用提升,最终综合财务值变化了 y%;
业务同学也可以根据自己得到的信息适当修改未来的预测值,比如下周五有场临时直播,预计要 2w 箱的货,产品也会告诉他这几天如何有节奏地补足。
对于有自己补货节奏的业务同学,可以输入自己理解的补货节奏,而仿真也会告诉他两种补货方案之间的费用区别。
我们认为好的补货系统,不是去强制补货命令,而是帮助业务做更好的决策。补货过程是可视可解释的,也能落实到看得见、摸得着的费用上。
版权声明: 本文为 InfoQ 作者【观远数据】的原创文章。
原文链接:【http://xie.infoq.cn/article/d99d7c31ca79d53cdacd7ae86】。文章转载请联系作者。
评论