本文主要阐述预测技术在电商业务的应用场景, 实践思路和技术挑战. 一方面它列举了预测相关的业务场景和目标, 便于技术方案与业务目标保持高度契合; 另一方面它从技术的角度阐述了预测的方法和实践, 方便业务方了解技术的效果和瓶颈, 从而更好地利用预测数据.
业务场景
假设我们是一家自营电商. 基本的业务模式是向供应商采购商品, 然后通过自有渠道(例如APP和线下店)向用户出售商品. 在这个过程中, 我们负责商品的采购, 库存管理和销售. 下面我们描述预测技术在该业务中的一些应用场景.
商品采购
如果商品采购量远大于实际需求, 不仅占用采购资金, 而且增加库存成本; 反之, 采购量太少则会造成销售损失. 如果能预知商品在未来一段时间的需求量, 则会降低投资的机会成本和库存成本, 并增加收益. 因此, 在商品采购的业务中, 销量预测是实现降本增收的关键. 我们把销量预测问题简要描述如下.
预测问题. 预测商品未来某个时段的总销量, 其中预测时段的长短决于商品采购的 提前期(Lead time).
一般来说, 商品采购的提前期取决于商品的生产周期和最小起订量(短则数周, 长则数月).
站在业务的角度, 我们希望预测的准确度越高越好. 但在实际中, 面临的挑战非常多:
-
销量的可预测性. 影响销量的因素错综复杂, 例如商品的口碑, 促销玩法, 展示的位置, 市场推广, 节假日, 天气, 以及用户的心情等. 因此, 销量预测的可预测性从某种程度上取决于业务自身的属性, 例如业务规模, 业务的变化, 业务需要预测的粒度(SKU/商品/品类等).
-
历史数据的质量. 商品属性, 可售状态, 实际售价, 库存量, 补货状态, 活动信息等. 实际的历史数据往往存在大量难以清洗的脏数据, 而且它们对预测效果的影响是关键的.
-
季节性商品. 服装类目基本都是季节性商品. 预测这类商品不仅需要有较长的历史数据, 而且要求业务相对稳定, 否则历史的销售规律对未来的参考意义较低.
-
促销活动和节假日. 它们对销量的影响非常大, 但难点在于促销活动一般不具有重复性, 例如活动主题, 玩法, 资源投放, 定价一般都不相同. 这样一来, 促销活动信息难以结构化, 能利用的数据非常有限.
-
商品更新换代. 新品替代老品之后的销售规律很有可能发生较大变化, 从而增加不可预测性.
原材料采购
假设我们不考虑商品的制造过程, 那么电商业务中的原材料主要是包材, 例如纸箱, 塑料袋, 包装填充材料等. 包材采购与商品采购业务相比有如下不同:
- 包材占用的存储空间较小, 因此存储成本相对较低.
- 包材缺货造成的损失较小. 以纸箱为例, 当小箱型缺货时可以用大箱型替代.
- 包材的提前期较短(一般不超过一个月), 而且可以对订单加急.
预测问题. 预测包材在未来某个时段的消耗量.
站在业务的角度, 预测的准确度不是首要目标, 而是要保证预测结果的稳定性和可靠性. 即, 预测误差在某个可接受的范围内且预测结果不会出现异常值.
活动定价
策划一个促销活动一般包含四个基本要素: 主题, 玩法, 选品和定价. 其中定价决定了营销带来的销量和销售额. 如果能预知不同折扣下的商品销量, 我们就能选择最优的价格, 从而最大化销售额.
预测问题. 输入商品的售价, 预测商品活动期间的销量.
它的预测要求与商品采购业务中的预测问题是相同的, 即预测越准越好. 但这里的预测问题更难. 因为促销活动的重复性非常低, 导致可用的数据不多且规律性较弱.
库存管理
自营电商一般有多个仓库, 分布在全国不同的地区, 目的是为了降低配送成本和缩短配送时效. 为了保证各仓库中商品的库存水位, 一般的做法是预估商品未来1-2周的需求量, 然后对仓库之间的商品进行主动的调拨. 我们面临的预测问题如下:
预测问题. 预测未来某个时段每个仓库中商品的出库量.
下面我们简单分析一下预测对业务的影响:
- 如果每个仓支持全国发货, 那么库存平衡策略不会影响销售. 因此预测偏差只会对配送成本和时效造成影响. 一般来说, 这个成本是可控的.
- 如果各仓只负责固定的区域, 那么库存平衡策会影响销售. 虽然如此, 但我们认为应该主要通过优化采购策略来解决问题(而不是库存平衡策略).
综上所述, 站在业务方的角度, 我们希望保证预测结果的稳定性和可靠性.
人力安排
电商业务的部分人力需求是通过招聘外包人员满足的, 例如仓库作业人员和客服人员. 这些人力在平时需求不大, 但是在大促期间的需求比较多. 因此我们通过预估 业务量 来提前实施招聘和培训工作. 考虑到招聘和培训的耗时, 一般需要预测未来3个月的业务量.
预测问题.
- 预测未来某个时段总的订单量.
- 预测未来某个时段总的(客服)咨询量.
如果预测偏低则导致服务水平的降低, 例如客户体验差. 预测偏高则会导致人力成本的增加. 一般来说, 外包的人力成本占比不高, 因而造成的损失可控. 因此, 站在业务的角度, 我们希望订单量和咨询量的预测值不要宁可偏高, 而不能偏低.
预测问题分类
按预测结果的不同我们把上述预测问题分为三类:
-
点预测. 预测结果为 值. 点预测在实际业务中使用最广泛. 优点在于容易理解和使用. 缺点是决策时对预测风险的抵抗力弱. 换句话说, 当预测偏差较大时可能对业务造成较大的损失.
-
区间预测. 预测结果为 区间. 区间预测是点预测的拓展. 由于预测结果是一个范围, 其覆盖真实值的概率大大增加. 因此, 如果决策时考虑区间预测可以降低由于预测不准确所造成的业务损失.
-
概率分布预测. 预测结果为 概率分布. 概率分布预测是区间预测的拓展. 它不仅能输出一个区间, 而且能给出不同区间的可能性(即, 置信度). 决策时我们可以考虑所有的置信区间, 从而全面地考虑预测风险, 进而降低损失.
Remark 点预测简单易用, 因此在业务中使用最广泛, 但其带来的业务风险最大. 而概率分布预测可以理解为输出 所有可能的预测值. 决策时使用概率分布预测的本质是枚举所有可能性, 并选择收益最大的策略. 因此, 在风险大的业务决策中应该尽可能使用概率分布预测(例子可以参考文章<为什么需要考虑销量的随机性?><报童问题 (The Newsvendor Problem)>).
按预测结果的时效性可以分两类:
-
离线预测. 离线预测一般预测的需求是固定的(输入参数不变). 例如计算未来30天商品的日销量. 预测服务每日更新预测结果即可.
-
实时预测. 它包含两个方面: 一是预测时段的实时性, 例如预测当天每个时刻的订单量; 二是预测结果计算的实时性. 例如模型根据用户输入的参数实时给出预测结果.
按预测的维度和颗粒度进行分类如下:
维度 | 示例 |
---|---|
来源 | 主站APP/线上渠道/线下店/全站 |
实体 | SKU/商品/三级类目/二级类目/一级类目/所有商品 |
时段 | 天/周/日/月/季/年 |
预测模型分类
预测模型的输入是一维或多维的时序数据, 而具体模型的输出根据用户的要求而定, 例如点预测, 区间预测, 概率分布预测. 根据前文描述的业务场景, 我们按 用户输入参数 的不同对模型进行粗略的分类.
时序模型
- 用户输入: 预测的起始日期.
- 应用场景: 商品和原材料采购, 库存管理, 销售计划等.
- 特点: 研发难度适中; 对数据量要求低.
价格模型
- 用户输入: 预测的起始日期和对应的售价.
- 应用场景: 商品定价.
- 特点: 研发难度偏高; 对数据量要求高.
活动模型
- 用户输入: 预测的起始日期和对应的售价, 活动信息(流量, 活动类型等)
- 应用场景: 运营活动的选品和定价.
- 特点: 研发难度非常高; 对数据量要求非常高.
预测实践
预测模型的研发和迭代一般是个长期的过程, 原因是:
- 业务的变化会导致数据规律的变化.
- 业务系统的更新迭代会影响数据的质量.
- 模型的预测效果需要在实际业务中进行验证.
- 模型的改进需要结合实际的业务经验.
预测模型研发的基本流程如下图所示.
下面强调一下研发流程中需要注意的事项.
可靠性
虽然业界有完善的测试方法来保障软件的质量, 但是对预测软件而言, 保障软件功能只是第一步, 更关键的是保障 数据质量 的可靠性. 具体来说, 我们希望做到:
- 自动验证模型输出结果的正确性;
- 自动检测输入数据(包含训练数据)中的异常值;
- 自动检测输出结果的异常值;
评估
评估工作主要考虑两个方面: 一是对预测结果的评估; 二是对预测模型自身的评估. 评估工作产出的是评估报告, 其作用相当于一份预测数据使用说明书, 用来向业务方告知使用风险.
-
预测偏差的评估.
评估指标的选择应该与业务目标保持契合. 以业界常用的误差指标MAPE(Mean absolute percentage error)为例. 当预测偏低时, 误差的上界为100%; 反之, 当预测偏高时, 误差的上界是无穷大. 换句话说, MAPE值对预测偏高的惩罚较大. 因此, 使用MAPE作为评价指标容易造成预测值偏低. 在这种情况下, 如果用MAPE值来评估话务量预测是不合适的, 因为业务方不希望话务量的预测值偏低. 更多关于评价指标的讨论可以参考<销量预测中的误差指标分析>. 此外, 区间预测和概率分布预测如何评估? (感兴趣的读者可以参考<概率预测的评估方法简介>)
-
预测模型的评估.
评估预测模型的目的是为了模型的研发和迭代. 由于业务会发生变化, 对同一个模型而言, 它在不同业务阶段的表现也会有差异. 为了避免由于业务变化带来的差异性影响模型评估, 我们可以考虑两个方法:
-
制定标准数据集. 需要根据模型的特点筛选出合适的数据集. 例如季节性数据集, 一维时序数据集, 多维时序数据集, 节假日数据集, 促销活动数据集等.
-
制定基准的模型. 基准模型一般是结合业务现状而制定的规则模型. 它容易理解, 易于实施且有很好的解释性. 制定基准模型的目的是为了对比当前模型. 我们要求新上线的模型效果必须好于基准模型.
-
可解释性
用户在使用预测数据时可能会发现一些不符合预期的结果. 此时预测服务应该需要对产出的数据给出一些合理的解释. 具体来说, 可以尝试考虑如下措施:
- 输出模型考虑的特征, 并分析特征与输出结果之间的对应关系.
- 输出历史数据和预测数据的统计规律, 例如均值, 中位数, 方差等.
- 使用可解释的预测模型.
可预测性
前文提到预测模型的研发和迭代是一个长期的过程. 一般来说, 随着迭代次数的增加, 预测效果的提升越来越不显著. 这个时候我们不禁要问: 是预测问题本身的极限达到了? 还是我们自身的研发能力不够? 换句话说, 我们要回答如下问题:
给定历史时序数据和需要预测的时段长度. 我们预测的准确率最高能达到多少?
由于影响预测结果的因素是复杂的, 对这个问题我们很难给出理论证明. 我们的思路是先做一些适当的假设, 然后基于假设给出预测的极限.