16

OneClick.ai销售预测使用指南

数据准备:

  • 尽可能多的历史数据以及尽可能细的颗粒度。以下是一个示例数据,记录了每支产品到天的销量,以及销售的区域和产品的一些其他特征(包括但不限于:产品描述,产品类别,产品包装大小,产品价格)

表一:基于OneClick.ai销量预测历史数据示意

sku dc_id date quantity item_first_cate_cd promotions price sku_description channel size
1 0 10/12/16 5 1 1 210 sparkling water 1 100ml
2 1 9/24/17 1 1 0 210 sparkling water 2 1000ml
  • 选择合适的预测区间。预测区间是关键,基于一年的数据是无论如何也无法做出五年的预测。我们推荐如果有三年以上的历史数据可以试验月度或者季度的预测,预测一年的销量也可以尝试,但颗粒度可能只能到产品或者总量。

平台参数选择:

  • 预测列:数据里面记录的销量(在表一的例子中,也就是quantity)。
  • 评估指标:选择模型的标准。我们推荐使用平均绝对值误差(MAE),这是因为这个精度对销量特别大的值不会特别敏感,同时也会考虑到小销量的产品。虽然大多数的供应链管理是用百分比误差,但百分比误差会关注预测销量小的产品,另外百分比误差如果真实销量为零是没有定义,所以一般不推荐使用。
  • 报告列:这是模型预测的颗粒度(例如,预测每个产品的销量,报告列可以选择产品;预测每个产品每个配送中心的销量,报告列可以选择产品和配送中心)。
  • 动态因子:对于有一些特征,在预测区间是可以提前知道,我们称这类型变量为动态因子,比如未来一段区间的温度,未来销售区间提前规划好的促销活动,产品的类别编码(对于新产品,由于没有任何历史销量信息,产品类别成为预测的关键,而在预测期间,产品的类别编码是可以提前知道的),市场营销计划(电视广告投入、互联网广告投入)(例如,我们可以选择item_first_cate_cd, promotions做为动态因子)。注意:如果您选择了动态因子,平台不再会自动生成预测结果,您需要上传预测区间的动态因子信息,然后在聊天机器人中输入命令:@eva, apply model #model_id/#task_id to data #data_id 得到预测结果。关于如何准备预测区间的动态因子信息请参考动态因子测试数据准备。
  • 时间段:预测的开始和结束时间。
  • 预测范围:所要预测的区间的总销量(例如,如果要预测的是月销量,预测范围选择1月;预测周销量,预测范围选择1周。注意:这里的预测范围和上面的预测时间段意义不一样,请不要混淆)。
  • 更新频率(每隔多久预测):这是从预测开始到结束每隔多久做一次预测的时间区间(例如,预测2018-01-01到2018-08-01每周的销量,就选择每隔1周预测一次)。

实例一:基于表一预测设置

实例:

一个电商平台希望预测每支产品在每个配送中心从2018-01-01到2018-03-31每天的销量来安排供货等,提供的数据见表一,其中sku是产品编码,dc_id是每个配送中心编码,sku_category是每个产品的类别(例如,iphone是“手机”类别里,手机又属于“电子产品”大类),sku_description为产品描述(如:“全新iphonexs 256G 金色”),channel是具体销售渠道的编码,另外还有价格和促销信息。预测的列是quantity。根据这个需求,我们的设置见实例一。

动态因子测试数据准备:

在创建模型的时候,如果您选择了动态因子,您需要上传文件来提供预测区间的动态因子。首先,您的文件需要包含如下必须的列:创建模型时候选择的报告列(例如 item_sku_id, dc_id ),时间列,以及动态因子列(例如promotions, item_first_cate_cd)。您需要提供从您上传的训练数据结束时间开始到您选择的预测结束期间的所有需要预测的产品的动态因子信息,如果其中有缺失值,平台会按照模型训练时候找到的最好的填充缺失值的方式填充。例如,对于上述例子,如果我们需要预测产品1,dc_id 为0的未来三个月的每天销量,我们需要提供如下测试集数据:

表二:测试数据示例

sku dc_id date promotions item_first_cate_cd
1 0 01/01/2018 0 1
1 0 01/02/2018 0 1
… … … … …
1 0 03/31/2018 1 1

动态因子QA: 

我可以预测训练数据期间的销量么?

不可以。由于您上传的训练数据中已经包含了动态因子,而这些因子暂时我们不支持更改,所以您只能预测训练数据结束时间以后的区间。例如,训练数据到2017-12-31号,您可以预测2018-01-01号以后的销量。

我上传的测试数据可以有缺失值么?

可以。但需要注意,如果您的预测区间和训练数据的结束时间有一段时间差,您在测试区间也仍然需要提供这段时间差期间的动态因子信息。比如,训练数据到2017-12-31号止,预测2018-02-01到2018-03-31的销量,在准备测试数据时,您需要提供从2018-01-01到2018-03-031号动态因子的值。

我可以预测超出建模选择的预测区间的销量么?

不可以。时序预测需要依赖于历史观测信息,目前平台暂时不支持更新观测数据,所以您只能预测您建模设置的预测区间。比如,建模预测2018-02-01到2018-03-31,测试区间也只能从2018-02-01到2018-03-31,您无法预测2018-03-31以后的销量。

我可以预测训练数据没有见过的报告列组合么?

可以。对于一些新产品,往往我们没有历史销量记录,但我们可以根据产品的其他特征来进行预测,准备和上面类似的测试数据,根据产品信息提供合适的动态因子信息,然后调用模型预测。

评估指标

  • 绝对值误差: $$\frac{1}{n}\sum_{i=1}^{n}|y_i-\hat{y}_i|$$
  • 均方根误差: $$\sqrt{\frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y}_i)^2}$$
  • 平均百分比误差: $$\frac{1}{n}\sum_{i=1}^{n}\frac{|y_i-\hat{y}_i}{y_i}$$
  • 销量加权百分比误差: $$\frac{\sum_{i=1}^{n}|y_i-\hat{y}_i|}{\sum_{i=1}^{n}|y_i|}$$
  • 销量加权预测精度: $$\sum_{i=1}^{n}\frac{y_i*\frac{min(y_i, \hat{y}_i)}{max(y_i, \hat{y}_i)}}{\sum_{i=1}^{n}y_i}$$

上述公式中,\(y_i\)是第i条销售记录的真实销量, \(\hat{y}_i\)是第i条销售记录模型的预测值。\(n\)是验证数据中的样本总量。 例如, 如果您有100产品三个月的月销量记录,那么 \(n=100*3=300\)。通常我们推荐用绝对值误差,因为绝对值误差对数据中的异常值不那么敏感,同时又关注销量大的产品。销量加权百分比误差是供应链领域用的比较多的指标,1-销量加权百分比误差通常就是供应链里面的精度,销量加权百分比误差会更加关注销量大的产品。

注意事项:

  1. 如果销售数据里面有负销量(可能由于退货产生),应尽量从原始数据中移除,因为退货这个事件往往是随机的,没有固定规律的。
  2. 确保时间格式正确。我们平台可以自动推导日期格式,所以通常所使用的格式平台都自动支持(比如:“YYYY-MM-DD”, “YYYY/MM/DD”, “DD/MM/YY”等。)。但我们强烈推荐用户上传数据时确保时间范围和您预期一致,避免因为时间不准确造成模型不准确。
  3. 如果是周度数据,一般建议使用一个固定的周天作为所有数据汇总,避免模型将不同周数据错误归总(例如:到周数据都以周一作为一周的开始,数据中所有的时间都应该是周一,不能人为将跨年度的周的日期调整为周五或周六等)。
  4. 平台预测会自动包括预测跨度的最后一个日期,所以可以不用考虑预测的真实结束日期。(例如,预测到2018年9月的月销量,预测结束只需要指定到2018-09-01既可。)
  5. 平台目前只支持一个时间列,如果数据的日期和时间是分开的,请合并为一列以后提交。(例如,数据两列“2017-01-01”与“12:00:00”,需要合并为一列“2017-01-01 12:00:00”。)

案例:

本案例基于Kaggle比赛:Rossmann Store Sales预测。数据可以到比赛页面下载:https://www.kaggle.com/c/rossmann-store-sales,也可以下载我们准备好的示例门店数据:https://s3-us-west-2.amazonaws.com/oneclick.ai-demo-date/rossmann_store_sales.zip

该数据包含Rossmann旗下1115个门店2013-01-01到2015-07-31号每天的总销量数据,数据中还包含了促销信息(0/1代表是否促销),门店开门信息(0/1代表是否开门),节假日信息(0/1代表是否是全国节假日,0/1代表是否是学校节假日),门店类别信息(a/b/c/d代表不同门店类别)。我们选择其中15个门店(门店1~15)做为演示,预留2015-06-13以前数据做为训练数据,预留2015-06-14到2015-07-31作为测试数据。上传数据到平台,选择如下参数建模(这里选择了DayOfWeek,Open,Promotion,StateHoliday,SchoolHoliday, StoreType, Assortment作为动态因子):

示例二:Rossmann Store销售预测设置

模型训练完成以后,上传测试区间的动态因子数据,调用聊天机器人来进行模型预测,示例如下:

下载预测结果可以进行必要的可视化分析,例如:

示例三:预测销售和真实销售对比

动态因子调优:

我们可以改变动态因子来查看模型给出的不同预测,从而确定最优的促销方案、营销策略等。这个例子中,如果我希望知道何时进行促销最优,可以通过改变预测区间每天是否进行促销来实现,比如在原始例子中,每隔一周做促销,如果我们完全不进行促销,预测会变成如下情况:

示例四:对比每隔一周促销和完全不做促销预测结果

Tags: No tags

Comments are closed.