写点什么

盒马销量预测核心算法的技术演进

作者:阿里技术
  • 2022-08-16
    浙江
  • 本文字数:11872 字

    阅读完需:约 39 分钟

盒马销量预测核心算法的技术演进

作者:韩明皓(明就)    盒马产品技术团队


销量预测作为供应链域的核心算法,目前已服务于全国百家级店仓,每日百万量级 SKU 的补货作业,在提升人效、降低缺货和损耗方面发挥了重要的价值。本文将揭秘盒马销量预测的整体框架介绍和技术演进过程。


一、背景介绍


盒马围绕用户生活全场景发展出了丰富的业态,提供了线上线下一体化的高品质购物体验。用户可以通过移动互联网便捷下单,享受最快 30 分钟送到家的服务。为了追求极致的新鲜体验,盒马还推出了只售一天的日日鲜系列商品,涵盖牛奶、蔬菜、肉禽等日常消费品类。即时的生鲜服务非常切合消费者需求,但对供应链提出了很高的要求。对此,盒马供应链算法根据零售场景特点,搭建了包括预测、库存、营销和价格在内的算法能力。


销量预测作为供应链域的核心算法,目前已提供了包括盒马鲜生、云超、X 会员店、盒马邻里等业态在内的商品销量预测能力。在全自动补货中同时服务于盒马、盒小马、天猫校园、逸刻等多个商家的日常订货,在提升人效、降低缺货和损耗方面发挥了重要的价值。


销量预测从技术角度来看是一个重要且具有挑战的问题。首先商品的销量会受很多因素的影响,除了时序性规律以外,还包括促销、调价、天气、季节性、商品状态等多方面因素;其次,销量预测的消费场景通常是很多的,除了应用在全自动补货之外,还可以作为一种基础能力赋能更多的项目,例如生意计划、SPT、品类规划、库配一体化等。另外,销量预测所使用的数据范围广,上游依赖多,技术链路长,对于算法整体链路的稳定性也提出了很高的要求。


因此盒马的销量预测重点围绕“预测结果准,整体链路稳,业务响应快”的思路进行搭建和迭代,本文主要聚焦于盒马销量预测的整体框架介绍。


二、整体思路


2.1 盒马销量预测特点


盒马销量预测的主要特点可以归纳为多业态、多品类、多场景三个方面:在业态上重点支持了盒马鲜生、盒马云超、盒马邻里,同时也包含一些外部商家;在品类上覆盖了标品、生鲜、餐饮下的多个类目,商品丰富度高;在场景方面,主要针对影响商品销量的关键因素进行单独的建模和优化。


考虑到盒马业态的多样性,为了让销量预测既能贴近业务又能有一定的通用性,所以在流程上进行了划分:在数据预处理环节和结果后处理环节会尽量贴近业务特点,让训练数据和预测结果能更好的适配业务场景;然后在算法模型的设计上更加注重结构的通用性,这样通过圈选特定数据单独训练就能够快速地支持到不同业态和场景,同时也能提高开发效率。


2.2 销量预测技术路线


销量预测的整体技术路线可以分成以下 14 个步骤,其中前半部分是对问题的分析定义,以及数据的各种预处理,目的是将建模过程中的类似工作进行统一收口,保证数据口径的一致性,方便后续模型的开发;中间部分是各种预测模型的构造;后半部分是对模型结果的校验和融合,以及根据业务逻辑进行的后处理,目的是提高预测结果的实用性和灵活性,实现对业务需求的快速响应。具体模块和对应的介绍章节如下:


整个流程把数据、模型和业务规则进行解耦,逻辑上形成总-分-总的结构,各部分主要内容如下。


2.2.1 问题定义与数据处理


  • 预测问题定义:包括预测的维度(sku/类目;销量/单量/GMV;小时/天/周);预测的口径(交易口径、履约口径);预测的范围(哪些店、仓、商品需要预测);预测的渠道(APP、POS、全渠道);预测的时长(7 天、30 天、3 个月等)。


  • 考虑的各种因素:结合业务场景,分析目标变量受哪些因素影响,例如营销活动、采购调价、季节性、天气、流量、关联替代性、竞对、新品、节假日、大促等。


  • 数据源选择:明确数据口径,确保数据来源与既定的维度严格保持一致;确保数据实时性满足业务要求。


  • 基础数据加工:对 DW 层的原始数据做进一步加工,生成适用于算法的数据,例如组合商品交易拆分到单品,未来调价/促销活动解析,天气类型打标,日清商品圈选等。


  • 数据业务处理:结合业务规则对数据进行处理,例如出清销量还原,大订单识别等。


  • 数据异常处理:对历史数据中的异常点进行削峰填谷,例如异常值检测和时序补缺。


  • 通用特征提取:构造销量预测使用的基础特征,沉淀到特征宽表,统一数据口径,便于管理,提高后续模型的开发效率。


2.2.2 模型构造


  • 算法模型构造:销量预测模型从不同角度可以划分成不同类型,按建模方式的不同可以分为传统时序方法、机器学习方法、深度学习方法和时空图网络方法;按照预测步长的不同可以分为单步预测和多步预测;按照输出结果的不同可以分为点预测和概率预测;按照目标个数的不同可以分为一元和多元预测等。模型构造环节主要聚焦在预测方法本身的研究,不同场景和业务问题的建模,以及销量预测准确率的提升上。


2.2.3 结果后处理


  • 预测结果修正:为了防止极端值对业务造成的负面影响,需要对模型结果进行异常值拦截和区间约束。


  • 算法模型融合:根据预测目标的特性选择最合适的模型或模型组合,并基于一定策略对不同模型的预测结果进行融合。


  • 预测结果算法处理:基于算法逻辑调整预测结果,包括季节性、节假日、恶劣天气 lift 等。


  • 预测结果业务处理:基于业务逻辑调整预测结果,包括 BOM 转化,店仓关系映射,大仓销量汇总等。


  • 效果评价与分析:设定算法指标(如 WMAPE)和业务指标(如采纳率、自动提交占比),监控整体趋势的变化情况;对具体问题进行分析诊断,并不断完善流程中的各步骤。


  • 提示与使用建议:预测结果对外提供服务时,友好的提示可以给业务更好的指导,例如是否需要人工审核,白盒化中展示算法考虑的因素等。


三、数据处理


3.1 整体框架


信息的准确性和完整性对于预测模型的效果起到了至关重要的作用,因此需要精细打磨和持续迭代。为了保证数据口径的一致性,需要对建模过程中的数据处理相关工作进行统一收口,包括数据源选择、基础数据加工、数据业务处理、数据异常处理、以及通用特征提取。这部分最终沉淀下来的是标准化的特征宽表,便于后续模型的使用。数据处理各步骤的具体内容如下:


需要注意的是,基础数据加工和数据业务(异常)处理的区别在于,前者生成的是客观数据,即只会在数仓基础上对数据进行拆分、汇总、打标等操作,不会改变原始信息;而后者生成的是主观数据,例如经过缺货补全将实际销量由 0 变成 10,目的是方便模型更好地进行学习,提升预测结果的准确性和稳定性。


3.2 数据业务处理


该环节需要结合具体的业务场景进行处理,目的是让数据能更好地适配各种业务场景,提高最终销量预测结果的实用性。下面列举了一些典型场景:


  • 智能调控还原:智能调控会基于小时销量预测实时计算当天可能产生损耗或者缺货的商品,通过流量倾斜、折扣清仓等手段对库存进行调整和优化,降低当天的缺货和损耗。该环节需要对调控产生的交易进行还原(通过转化率/UV 价值、量价关系等方式),从而确保在下一个预测周期所参考的历史销量更加准确。


  • 特殊交易剔除:主要是根据业务逻辑和交易数据打标规则进行处理,包括对团购订单和折扣码的过滤、以及大订单的识别和剔除等(包括同一用户多次下单,以及同时购买组合品和单品形成的大订单)。


  • 基础数据修正:例如调价或活动审批通过时间晚于期望的生效时间,需要以审批通过时间作为实际生效时间;另外遇到当天的生效时间较晚时(例如 23 点生效),需要将新价格打标成第二天生效。


3.3 数据异常处理


3.3.1 异常值检测


异常值检测可以分为新颖点检测(Novelty Detection)和离群点检测(Outlier Detection)。新颖点检测假设训练数据中不包含异常值,即通过学习历史数据,使模型学习“正常数据”的特征及其分布,并且以此检测新数据是否符合“正常数据”的特征。例如在 One-Class SVM 中寻找出数据的边界,并以此边界作为衡量标准,在边界外的数据点就认为是异常值。离群点检测假设训练数据中包含异常值,即通过模型找到训练数据的中心模式,并且把训练数据中远离中心模式的数据点定义为异常数据。例如 Isolation Forest 中将分布稀疏且离高密度群体较远的点视为异常点,然后通过对数据空间进行不断切割确定孤立点。


3.3.2 缺失值补全


现实场景中,由于数据采集或者业务操作等原因,数据中往往存在缺失和断点的情况。为了确保建模过程中时序数据的完整性,减少后续销量预测的 badcase,需要对数据中的缺失值进行填充,常见的缺失值补全方法有三类:


  1. 基于统计的方法

    举例:线性插值、就近填充、均值/中位数

    特点:实现简单,计算复杂度低,准确率一般

  2. 传统机器学习方法

    举例:KNN、GBDT

    特点:用缺失点附近的数据作为特征,预测缺失数据,需手工做特征工程

  3. 深度学习方法

    举例:RNN、GAN

    特点:端到端的学习,无需人工进行特征处理,具有一定通用性


盒马缺失值补全的整体思路如下:方法上使用了 GBDT GAN 两类模型,并根据当日的缺货时段数据、促销和价格信息,以及历史相同时段的销量等信息分别对 APP 和 POS 渠道的缺货时段销量进行补全(下图给出了两个商品补全的例子)。此外,基于补全销量和当日价格信息可进一步预估缺货造成的 GMV 损失,该数据可提供给业务进行缺货影响分析:


其中 GBDT 属于监督学习方法,主要思路是筛选当日不缺货的样本,随机生成缺货打点时段,并将对应时段的真实销量作为 label,然后用历史相关数据构造特征进行模型训练。跟统计方法相比,GBDT 的补全准确率能有大幅提升。


GAN 属于无监督学习方法,其在没有 label 的数据集中也能适用,因此通用性更强。这里采用了 SSGAN 模型,SSGAN 中包含三个角色:生成器的任务是输入包含缺失值的时间序列,输出补全后的完整时序;判别器的任务是判断每个时刻的数据是真实的还是算法生成的;分类器的任务是对原始时序和算法补全的时序进行分类打标,帮助生成器关注于缺失时刻的补全。训练的过程主要是让生成器和判别器进行对抗,最终希望生成器能够产生以假乱真的补全数据。考虑到 GAN 的训练需要多个模型共同参与,训练过程不稳定,所以将模型调优拆解成了 4 个步骤,并对网络结构、训练策略、模块选择等进行了优化。从补全效果来看,SSGAN 的准确率比 GBDT 更高,并且将两类模型融合后能进一步提升准确性和稳定性,具体内容如下:


3.4 通用特征提取


特征工程在销量预测中,特别是在基于传统机器学习的建模方法中是比较关键的一个步骤。这部分往往需要结合数据的内在规律和业务场景的经验进行处理。目前盒马预测使用的基础特征包括商品属性、门店属性、促销信息、日期信息、天气信息、流量信息、历史销量和竞对信息八大类。


在基础特征之上进行空间维度的交叉组合,以及时间维度对齐操作可以生成各种衍生特征。进一步对衍生特征进行加权组合可产生更加丰富的特征,交叉的因素越多,特征也越复杂,涵盖的信息就越多。最后再通过特征重要性评估方法筛选出较为重要的特征进行使用。


四、模型构造


盒马销量预测涵盖了多种方法与多种场景,按照方法维度可以分为业务规则模型、传统机器学习模型、深度时序模型、时空图网络模型四大类。每类方法具有各自的特点,通过相互结合,一方面可以确保业务需求的快速响应,提高应对各种问题的灵活性,另一方面可以兼顾前沿技术的探索和建模方法的创新。


按照场景维度可以划分为替代品、时令品、日清品、促销、流量、X 会员等一系列场景,细分场景进行建模,一方面可以有效提高特定场景下的预测准确率,更好的支持业务应用,另一方面有助于提炼盒马销量预测的算法特色。


盒马预测算法的迭代路径如下,本节主要对销量预测的常见方法进行介绍。


4.1 传统时序方法


传统时序方法主要是在确定数学模型的基础上求解出模型参数,并利用求解出的模型进行预测。常见的模型例如 MA(Moving Average)、ARIMA(Auto-Regressive Integrated Moving Average)、Prophet 等。


MA 是一个实现简单且效果往往还不错的方法,因此经常作为 baseline 与其他方法进行比较。例如 SMA(Simple Moving Average)是直接对历史一段时间的观测值求等权重均值,但该方法存在的问题是滞后性较为明显,对近期数据不够敏感。因此进一步的改进思路是对历史数据求加权平均,即距离当前时间越近的数据权重越高。WMA(Weighted Moving Average)和 EMA(Exponential Moving Average)均属于此类方法,区别主要在于 WMA 的权重是按照线性递减,而 EMA 是按照指数递减。ARIMA 在传统时序方法中有着很高的知名度,其主要过程是先通过 d 阶差分运算将非平稳时间序列转化为平稳时间序列,然后再根据平稳时序的自相关系数 ACF 和偏自相关系数 PACF 确定自回归项 p 和移动平均项数 q,并对模型误差进行随机性检验确定最终模型。Prophet 是 Facebook 在 2017 年开源的模型,其主要思路是对时间序列进行分解(包括趋势项、季节项、节假日项和误差项)。其中趋势项表示时序非周期性的变化趋势,季节项表示周期性变化(一般以周或年为单位),节假日项表示时序中存在的特殊节日。Prophet 就是通过拟合这几项,然后把它们累加起来作为最终的预测值。


传统时序方法的主要优点是建模过程简单,并且可解释性强。但局限性在于无法有效利用外生变量,信息存在缺失,因此预测准确率难以达到比较高的水平;另外在使用时需要对每一条时序单独拟合和预测,对于数据量较大的场景,在执行上需要花费很长的时间。


4.2 传统机器学习方法


机器学习方法是销量预测普遍采用的建模方式,常见的模型包括线性回归、支持向量回归、决策树模型(GBDT、LightGBM)等。其基本流程包括数据集构造+特征工程+模型训练,并通过监督学习从历史数据中得到特征与目标之间的映射关系,从而进行时序预测。


这类方法弥补了传统时序模型无法考虑外生变量的问题,在信息丰富的情况下模型效果能有显著提升,并且能够应对大数据量的场景。不过在这类方法中,特征工程的质量往往决定了预测模型的上限,因此需要花费大量时间在特征构造环节。特征工程要求算法同学对业务场景有很好的理解,并能构造出和目标具有较高相关性的特征,这对于预测准确率的提升会带来直接帮助。另外为了确保预测结果的稳定性,特征构造时还需要考虑不同场景的对齐策略,特征值计算时的降级逻辑,特殊时间点的特征转换,以及历史特殊日期的自动还原或剔除等。除了人工构造特征的方式之外,也可以利用一些特征自动生成工具来产生更多的特征,例如 tsfresh、Featuretools 等。通常情况下,将自动生成的特征和人工经验的特征进行结合,效果会更佳。


一个值得注意的点是,不同于传统时序方法对每一条时序单独构建模型来预测,机器学习方法是把多种数据放在一起训练,得到一个全局的模型。但在实际场景中,不同时序表现出来的规律可能本身就不一样,例如不同类目或不同品牌的商品销量呈现不同的趋势性和周期性。因此将所有数据放在一起训练可能导致整体预测效果下降,所以通常还需要对数据进行适当分层后,再对每层数据单独训练模型。


4.3 深度学习方法


基于深度学习的时序预测方法是近年来的研究热点,由于深度学习在语音识别、计算机视觉和自然语言处理等领域已取得重要突破,相关方法也应用到了时间序列预测上。其主要思路是采用端到端的学习方式,输入较为原始的数据,并通过不同模型结构自动提取特征进行学习。这类方法的优化重点主要放在模型结构设计和参数调优上面。下面列举了一些经典的深度时序模型,包括 WaveNet、DeepAR、N-Beats、TFT。


WaveNet 是 Google DeepMind 在 2016 年提出的基于 CNN 结构的模型,一般 CNN 应用于长序列的局限性在于卷积提取的是局部信息,想要扩大感受野需要增大卷积核或增加模型层数。而 WaveNet 引入了空洞因果卷积(dilated causal convolution),一方面可以确保每个时刻不会接触到未来的信息,另一方面通过跳过一定长度的输入,可以在不增大模型层数的情况下获得更大感受野。DeepAR 是 Amazon 在 2017 年提出的基于自回归循环神经网络的概率预测模型,其学习的是概率分布的参数,输出为每个时刻目标值的概率分布。DeepAR 的一个亮点是可以在几乎没有历史数据的情况下执行冷启动预测,但受限于 RNN 结构,对于较长时间的周期季节等信息则难以补获。N-BEATS 是 Bengio 团队于 2020 年发表的基于时序分解思想的深度网络模型,其基本计算单元是 Block,多个 Block 通过堆叠形成一个 Stack,整个模型就是由多个 Stack 进一步堆叠而成。每个 Block 会输出前向和后向残差,后向残差作为下一个 Block 的输入进行拟合,前向残差之和作为对应 Stack 的预测值,将所有 stack 的预测值求和便得到最终的预测结果。TFT 是 Google 提出的多变量时间序列预测模型,其在输入数据的处理和网络结构的设计上考虑较为全面。在数据处理方面,TFT 采用 Variable Selection Network 计算每个特征的重要性,通过加权融合减少无关变量带来的影响;另外对类别特征进行单独建模,能更加有效利用 ID 类信息。在网络结构方面,TFT 同时考虑长短周期的时序信息(LSTM 提取局部时序信息,Self-attention 提取长期时序信息);并通过门控单元机制过滤掉不必要的模块信息,对于不同数据集实现网络结构的自适应。


总体来说,深度学习方法更加灵活,且端到端的学习方式能减少人工处理,具有更强的通用性。另外考虑到长距离的信息在 RNN 这类模型中会被弱化或遗忘,且 RNN 不能并行计算,所以在实际场景中更多会采用基于 attention 的方法。另一个值得注意的点是,由于机器学习方法大多采用的是聚合特征,对于时序信息的把握不足,而深度时序模型在这方面有天然优势,因此将深度时序模型和机器学习模型的结果进行融合往往能进一步提升效果


4.4 时空图网络方法


一些场景中,数据在时间维度和空间维度并非独立,算法一方面需要学习时间维度的相关性,另一方面也需要考虑不同时间序列在空间维度的关联关系。例如在商品替代性场景中,当某一款鸡蛋降价或缺货时,会导致其他鸡蛋的销量出现波动;又或者在营销活动配置场景中,每个商品所叠加的活动类型,以及每个活动的商品池范围均会影响商品最终的到手价。考虑到上面提到的方法在这类情况下存在局限性,因此需要引入时空图网络对具有空间相关性的时间序列进行建模。时空图网络方法目前已广泛应于交通规划、行人轨迹预测、金融分析等领域,并且在盒马的预测场景也取得了一些应用,例如关联替代性商品销量预测模型和营销到手价预估模型。


目前较为常用的是 STGAT 模型,STGAT 包含 Encoder 和 Decoder 两部分,在 Encoder 中首先利用 M-LSTM 对历史时序特征进行编码,得到每一个时刻的隐层特征;然后用 GAT 捕获每一时刻关系图中目标 sku 与邻居 sku 的空间关联性;再将 GAT 输出的隐层特征输入 G-LSTM 进行时序传导。中间态是将 M-LSTM 和 G-LSTM 输出的隐层特征和高斯噪声 Concat 起来,加入高斯噪声的目的是防止网络过拟合。Decoder 是一个双层 LSTM 结构,下层 D-LSTM 将中间态的隐层状态进行传导,上层 Cond-LSTM 加入了商品外生变量在未来时刻的变化信息,并将前一步的输出作为后一步的输入,实现多步预测。


五、结果后处理


结果后处理从计算方式上面可以归纳为以下五种类型,本节会对其中的主要模块进行介绍:


  • 预测结果融合:包括模型预测结果的异常值识别与拦截;多个模型的结果融合。


  • 预测结果调整:针对恶劣天气、特殊节假日的 lift 系数;连续缺货拉伸;预估白盒化干预等。


  • 预测结果转换:根据加工品和原料品的转换关系生成原料品的预测结果;日清商品交易口径转履约口径;切品时新老品的需求继承等。


  • 预测结果汇总:基于供货路由网络和店仓映射关系,汇总生成仓端销量预测结果,包括 FDC,B2C 仓,NB 仓、CDC 等,支持仓端自动补货。


  • 预测结果拆分:一店多仓场景下基于分仓比的预测结果拆分;基于销量预测的通用拆分能力,提供拆店、拆天、拆渠道的能力,支持仓端销售计划和生意计划的目标拆分等。


5.1 预测多模型融合


由于业务场景和建模方法都具有多样性,在两者的叠加影响下往往就会出现预测模型的多样性,例如下面列举出来的盒马销量预测常规模型和特殊场景模型总共就有十多个。所以这部分重点需要考虑的是:


1)如何有效的使用这些模型,让最终的预测结果能稳定提升;


2)如何让模型的管理更加便捷。这里主要从模型的融合策略和模型的上线流程两个方面进行设计:


在模型的融合策略方面,首先是根据预测目标筛选合适的模型组合,主要考虑的因素包括商品特性、是否特殊节假日、是否 X 会员日、是否有促销活动等。然后需要对模型的异常结果进行识别和拦截,这里主要采用的方法包括:


1)对比不同模型的预测结果,通过投票机制淘汰明显异常的模型;


2)对比同一个模型在当前周期和上一周期预测同一天的波动情况,对于出现异常波动的模型进行过滤;


3)基于历史统计指标的异常值过滤,例如均销,方差,周同期值等。


最后是对多个模型的预测结果进行融合,这里的方法包括基于固定权重的融合策略、基于历史准确率的融合策略,以及基于元学习的融合方法。


在模型的上线流程方面,需要考虑的问题包括:


1)降低维护成本,即减少每次增减模型在后处理环节的开发工作量;


2)能够方便地对不同模型和不同处理策略进行效果评估;


3)预测模型和后处理策略在上线过程中的风险控制。


具体做法是:首先需要选择合适的数据结构来保存所有模型结果,避免每次增减模型对下游表字段的频繁变更,另外可以通过编写统一的 udf 函数来实现各种策略,提高通用性。在新模型上线时,首先会将其加入到离线全量结果表中,该表包含所有模型的结果,便于对不同模型和融合策略的效果进行分析;接下来会筛选合适的模型和融合策略加入到离线仿真结果表中,该表按线上调度时间获取模型结果,并通过消融实验和线上结果进行对比,评估效果稳定后再更新到线上。


5.2 预测结果算法处理


5.2.1 季节性和节假日


盒马商品销量受季节性和特殊节假日的影响显著,例如端午的粽子,冬至的饺子,圣诞节的牛排和红酒,另外还包括各种应季的水果蔬菜等。季节性和节假日这两类场景的共同点在于:


1)消费者行为存在较大不确定性,商品维度的销量波动大;


2)历史近期数据无法反应未来销量趋势,需要考虑较长时间的信息;


3)部分建模方法需要对历史特殊点进行平滑,避免对预测造成负面影响。

此外,两者在结果上的不同点是:特殊节日的商品销量呈现单点脉冲式变化,而季节性商品的销量变化趋势具有连续性,幅度相对平缓。下面列举了常见的特殊日期:


针对季节性和节假日场景,算法上一般有两种思路:


  • 第一种是在预测模型层面去学习历史趋势,例如在 N-BEATS 中分别采用多项式函数和傅里叶级数对趋势性和季节性进行建模;或者利用日期和类别编码+attention 学习历史相似情况的销售趋势;或是将商品维度和类目维度的销量预测进行多任务学习,带动商品响应季节性趋势;另外在传统机器学习方法中可以通过特征构造来实现节假日特征的自动转换,以及历史数据中特殊日期的特征还原。


  • 第二种是在后处理环节对销量预测结果进行调整,首先通过一定方法计算出商品的季节性/节假日系数(例如统计历史特殊日期销量相较于平日的涨幅,或者计算类目销量预测值相较于商品预测值聚合到类目后的差异),然后直接作用在预测结果上。


盒马销量预测对于季节性和节假日的处理方法结合了上面两种思路,在后处理环节再次进行调整的目的是让预测结果更加灵活,可以快速响应业务的需求,另外该方法也具有较好的解释性。该环节引入了类目销量预测的能力,原因是类目销量预测的回看天数和预测天数均更长,能够更好的反应年维度的变化趋势,并且相较于 sku 维度销量波动大的问题,类目维度会更加稳定。具体方法是首先计算类目销量预测结果和商品预测结果聚合到类目后的差异,并计算出类目维度的调整系数;然后对同类目下的商品进行分层,并将类目系数按照分层拆分(例如头部品爆发力度可能大于尾部品),从而兼顾不同商品分层下销量爆发的差异性;最后就是将拆分后的系数作用在预测结果上。


5.2.2 恶劣天气


在遇到降雨/降雪,或者是温度突然下降的情况时,盒马的线上销量往往会出现明显增长,为了避免缺货,算法需要提前感知未来的天气情况,并在遇到特殊天气时调整预测结果。从下图的历史数据统计来看,降雨主要集中在夏季的 7-9 月份,而降温主要集中在 11-2 月份,并且这类天气对于销量有普遍的促进作用。目前对于天气的响应方案结合了业务的实际处理经验,主要思路是统计每个门店历史相似天气情况下的类目销量增长情况,计算出类目维度的天气系数,然后在后处理阶段作用到销量预测结果上。


5.2.3 特殊事件


当遇到特殊事件时往往需要人工介入处理。例如新冠疫情在全国各地频发,一方面业务需要手工干预接管补货,并且协同供应商、物流和采购进行拦截、改配和调拨等操作,工作量大且人手不足;另一方面算法遇到特殊事件时,难以跟踪和评估区域的影响情况,而且需要手动对脏数据进行打标处理,因此无法沉淀标准化的数据进行自动响应。特殊事件管理的目的就是为了更好的拉通从计划到执行各环节,沉淀出一套自动干预的方案,在特殊事件发生时能够有条不紊的应对。


盒马销量预测依托特殊事件供应链管理产品,针对异常事件进行处理和干预。当特殊事件发生时,区域业务同学可以录入事件类型、影响时间、恐慌程度、影响范围等信息。算法消费以上数据,一方面可以从全链路自动剥离特殊事件的影响,保障后续预测结果的稳定性,另一方面根据历史相同事件发生时的商品销售情况(例如疫情爆发时民生品的销量会大幅上涨),以及业务录入的需求、产能、履约影响等信息,计算商品的特殊事件影响因子,从而在预测上进行自动响应。


5.3 预测结果业务处理


该环节主要是根据业务规则对销量预测结果进行处理,包括按照 BOM 关系中的用量、出品率、成本换算率计算原料品的预测结果,并在补货推单的时候扣减成品和原料库存。比如下面这个例子中,原料“商品 C”有两个产成品“【鲜果切】商品 A”和“【鲜果切】商品 B”,并且原料品和产成品均可售,因此在对“商品 C”进行补货的时候,需同时考虑产成品和其本身的需求量:


此外,根据盒马供货路由网络和店仓映射关系,可将店销量预测结果进行汇总,生成 FDC 和 CDC 等仓端的需求预测结果,进一步支持仓端自动补货。


5.4 效果评估与分析


评估指标可以分为算法指标业务指标两类,算法指标包括 MAE、RMSE、WMAPE 等,用于衡量预测准确率;业务指标包括采纳率、缺货率、损耗率、周转等。其中算法指标偏向于过程,用于跟踪模型在不同品类和不同时间点上的变化趋势,分析诊断问题,并通过不断完善算法模型,最终带来业务价值;而业务指标更偏向于结果,是算法和业务同学共同希望达到的最终目标。


由于预测准确率本身会受计算口径、业态差异、商品销售量级等影响,因此不建议用单一指标来衡量所有业态和场景的预测效果。在算法指标设计时需尽量贴近业务场景,这样能更好的衡量算法提升对业务的影响。例如在计算准确率时考虑不同商品的 vlt,或是根据补货的具体场景 BY 店/BY 仓、BY 天/BY 周进行统计,另外也需要关注预测值的上偏和下偏情况。


在预测 case 的分析方面,首先需要及时发现问题,例如识别出每日高缺高损或预测误差较大的商品,以及业务订货时大幅改量且修改合理的 case;其次需要对影响商品销量的系统性因素进行分析,定位问题,并明确在 14 个步骤中的哪个模块进行优化解决。例如将影响销量的主要因素进行可视化展示,方便在 case 分析时快速定位原因,并且支持多模型下钻,方便比较各模型的预测情况。


5.5 提示与使用建议


该环节包括基于算法的历史预测良好率、商品特性以及未来大促等信息提示业务是否需要进行人工审核。另外通过在白盒化中展示算法考虑的因素,可实现与业务的有效协同。本章主要对预估白盒化进行介绍。


5.5.1 预估白盒化


预估白盒化的主要目的是将预测算法考虑的因素展示出来,并给业务提供干预销量预测值的能力。在遇到切区、大促等情况时,业务可以参考未来算法预测总量和业务预算之间的差异,结合算法对于各种因素的响应幅度来调整指定范围的商品预测值,从而在总量上达到业务预期。计划协同也是全自动补货的重要一环。


为了便于理解和分析,这里仅选择业务重点关心的因素进行展示,而不是罗列出所有特征的重要性。目前选取了促销、流量、天气、假日四种因素。白盒化系数的计算逻辑如下:算法依次在原始销量预测上剥离额外流量、促销、天气、节假日因素,得到剥离各个因素后的预测结果,然后再计算各预测结果的相对系数,从而得到算法对于特定因素的响应幅度。例如下面这个例子中,原始销量预测结果为 200,剥离额外流量的预测结果为 160,因此流量因素的系数就是 1.25,进一步剥离促销因素后的预测结果为 100,所以促销因素的系数就是 1.6,以此类推可计算出所有因素的影响:


六、链路稳定性与灵活性


盒马销量预测目前已服务于全国百家级店仓,每日百万量级 SKU 的补货作业,为了保障日常补货的稳定性,应对门店的快速扩张以及新业态的产生,销量预测整体链路沉淀了相应的降级策略和响应方案:


稳定性方面,除了保障任务本身的稳定性之外,针对异常突发情况制定了相应降级策略,目前降级分为四个等级:数据降级主要应对上游数据产出延迟的情况,部分数据可以取前一天分区;特征降级主要是在特征构造时可舍弃最近一天的信息,避免整体链路被单点阻塞;模型降级主要是针对个别模型运行出现问题的时候,有其他模型的结果可替用;在最后结果降级部分,算法每天会回流 T-1 的预测结果作为当天的备份数据,假如遇到更为严重的问题就会切换备份数据,进而从整体上提高抗风险的能力。


灵活性方面,包括兼容业务端的变更操作,例如商品的类目切换和部门切换,以及门店所属子公司的变换,切换前后的相关数据能够自动关联,避免对模型预测造成影响;另外,对于外部突发因素也可方便地进行干预,例如公共卫生事件,自然灾害等,实现结果的快速调整响应。


七、结束语


盒马业务目前处于持续快速发展当中,丰富的场景和业态对销量预测也提出了更高的要求,需要同时在具体场景和整体框架上进一步打磨:一方面销量预测需要更加贴近业务,发掘并深入研究其中的关键问题,让算法能更好的服务业务;另一方面需要研究更加通用的销量预测框架,流程上更加标准化,沉淀一套完善的解决方案。

发布于: 2022-08-16阅读数: 493
用户头像

阿里技术

关注

还未添加个人签名 2022-05-24 加入

阿里技术的官方号,专注分享阿里技术的丰富实践、前沿洞察、技术创新、技术人成长经验。阿里技术,与技术人一起创造成长与成就。

评论

发布
暂无评论
盒马销量预测核心算法的技术演进_大数据_阿里技术_InfoQ写作社区