每日、每周和每月聚合


首页 » 资源 » 此处

2016 年 5 月更新:在对我们的概率预测引擎进行更卓越的设计后,已完全消除了此页中所述的各种复杂情形。强力建议您升级到这种新技术。

数据按日、按周或按月聚合的概念涉及到几个微妙的问题,首先是日、周和月的相应定义。本文介绍了 Lokad 在输入级别(历史数据)和输出级别(预测结果)处理这些聚合所采用的方法。本文还提供了如何处理不同数据聚合惯例的指导。


术语:项目和订单

项目订单是指 Lokad 的输入数据格式。在本文中,这些术语应按照 Lokad 的定义来理解。项目是指要预测的目标。项目可以是货物、产品、SKU、条码等等,取决于具体的情况。订单是指过去某个给定日期的项目的关联数量。订单可以是销售、发货、消耗,同样取决于具体的情况。

Lokad 定义的聚合

Lokad 采用的惯例如下:

  • 日从 00:00 开始,从早上算起,所以每日预测值涵盖从 00:00 开始直至 23:59:59 结束的这段时间。
  • 周从星期一开始,所以每周预测值涵盖从星期一(包括在内)开始直至星期天(包括在内)结束的这段时间。
  • 月从每月的第一天开始,所以每月预测值涵盖从每月第一天开始直至该月最后一天的这段时间。

在 Lokad 中不能更改这些惯例,但在下文我们将说明如何处理某些公司可能要求采用的其他惯例。

对输入聚合模式的兼容性

Lokad 在处理历史数据时力求兼容各种模式。尽管我们建议应用每日聚合(即对于指定日期中的指定项目,将所有订单求和作为当天唯一的数量),但其他情形对于 Lokad 也是可以接受的。

原始的分解历史记录

每日聚合减去要上载至 Lokad 的数据集大小,得到的就是原始的分解记录。此举并不会降低预测准确度。但是,如果数据集从一开始就相对较小,那么得到的结果大多是不相干的。因此,Lokad 还可以处理完全分解的历史记录,每条事务占据一行。在这种情况下,每日数量将作为指定日期的指定项目的订单值总和来计算。

每周或每月预先聚合的历史记录

有时企业系统中没有保存每日聚合的历史数据,其输入数据主要来源于每周或每月聚合的数据。Lokad 可以处理每周或每月预先聚合的订单。 如果数据是每周聚合的,Lokad 应当只采用传统的每周预测,不应当采用每日预测、每月预测或分位数预测,因为得到的统计结果没有意义。同样,如果数据是每月聚合的,Lokad 应只采用传统的每月预测。

预先聚合数据的主要缺点是会影响所生成预测的性质。另一个缺点是准确度略微降低。实际上,对于每周或每月预测,Lokad 可以利用每日预测模式来进一步精进预测结果。

开始预测的时机

要生成预测,Lokad 定义了一个表示当前(即预测开始日期)的阈值。在计算阈值时,Lokad 主要采用了以数据为中心的观点:在历史数据结束时开始预测。举个例子,如果历史数据在 5 月 15 日(包括在内)结束,那么每日预测将从次日即 5 月 16 日开始。

以数据为中心的观点非常便利,尤其是对于标杆分析。数据在过去的某个时间点处截断,Lokad 会生成已与(未截断的)历史数据进行了比较的预测结果,因为预测本身也是过去的一部分。

传统的每日预测与分位数预测表现相似:总是从输入数据集中最近订单之后的一天开始预测。

如果是进行传统的每周或每月预测,情况则更复杂。打个比方,假设历史数据(例如 Lokad 中的订单)于 5 月 15 日结束:那么是从 5 月 1 日开始还是从 6 月 1 日开始预测?Lokad 给出的答案是从 5 月 1 日开始预测。实际上,由于 5 月的数据仍只有一部分,Lokad 将把数据截断至 4 月的最后一天,因此可以针对 5 月执行常规的 (*) 传统每月预测。

(*) 严格说来,我们是可以设计能够利用部分周期数据的预测模式,但这样要求具备复杂的预测功能,因此 Lokad 目前尚不支持。

每周或每月聚合的数据

对于每月(或每周)聚合的数据,Lokad 的截断行为可能导致非预期的结果。假设我们有每月聚合的订单历史记录,每月第 1 天有一个订单。假设 2013 年 5 月 1 日是历史数据的最后一天。在本例中,Lokad 将把 5 月作为部分数据来解读;因此 5 月的数据会被截断,并从 5 月 1 日开始预测。5 月 1 日的数据点表示整个 5 月,这并非预期的行为。

为了避免截断,建议在表示当月最后一天的日期插入一个订单行 – 订单数量为 0。本例中在 5 月 31 日引入了一个订单行,将向 Lokad 表明 5 月是完整的,因此应从 6 月 1 日起预测。还有一种类似的方法,那就是插入一个数量为 0 的订单行,在考量每周预测时可以用于解决相同的问题。

添加这样的“虚拟”订单行会对 Lokad 中与传统每月预测并行执行的任何分位数预测产生不利影响。实际上,当对数据进行每月聚合时,不应对数据集应用分位数预测。

清理未来数据(以数据为中心的观点的例外情况)

以数据为中心的观点有一个例外:作为一项完整性检查,Lokad 会过滤掉未来 1 周之外的订单未来根据运行 Lokad 的机器的服务器时钟定义)。

实际上,我们经常发现有些客户最后会从系统中提取不同程度未来的伪像数据。这些行通常并非真实的销售或发货,而是利用公司系统在某个时间点执行的一些测试的结果。

显而易见,从企业的角度说,取用甚至并不存在的历史数据是根本没有意义的。因此,Lokad 会在数据清理过程中截去这类数据,然后再继续执行预测过程。

替代性的每月或每周聚合

在 Lokad 中,每月的周期总是从该月的第 1 天开始算起。但是,有些公司要求采取不同的惯例,例如每个周期从该月的第 25 天开始算起。 为了处理此类情况,我们建议针对目标周期预先聚合订单历史记录。在上例中,5 月 25 日到 6 月 24 日将聚合成一个订单行。这一行将表示项目自定义的每月值,并且每月的第 1 天应放在原始范围的前面(本例中为 5 月 1 日)。之后,Lokad 将把该月的第 1 天转换回原始惯例(例如每月的第 25 天),以此来生成预测。

务必使用日期范围之前的日期,否则得到的部分数据将属于未来,Lokad 会根据未来数据应被截断的策略(请参见上文的清理过程)来截断数据。