草稿

本文未来可能会扩展或重写。

背景#

什么是时间序列预测?#

一般来说,预测只是指对未来事件进行预估。简单地说,在时间序列预测中,我们希望预测给定时间序列的未来值。

例如,在电力生产中,需求和供应的平衡非常重要。因此,生产商会预测消费者的电力需求,并相应地规划生产能力。换句话说,生产商依靠对消费者电力需求的准确时间序列预测来生产刚好足够的供应。

在预测中,存在一个隐含的假设,即过去那些影响时间序列值的可观察行为将持续到未来。回到电力示例:人们通常在晚上比白天消耗更少的能源,主要在晚上看电视,并在夏季炎热时使用空调。

../_images/electricity-10w.png

绘制在一起的十周数据 – electricity 数据集。#

自然地,预测不可预测的事情是不可能的。例如,在 2019 年试图预测 2020 年的出行需求时,几乎不可能考虑到因 Covid-19 疫情导致的出行限制的可能性。

因此,预测的前提是产生时间序列值的潜在因素在未来不会发生根本性变化。它是预测常规事物而不是意外事物的工具。

换个角度看:模型实际上是训练用来预测过去的,只是我们用模型来预测未来。

目标和特征#

我们称要预测的时间序列为 target 时间序列。过去的目标值是模型进行准确预测所能使用的最重要信息。

此外,模型还可以利用特征,即对目标值产生影响的额外数值。我们将特征区分为“静态”特征和“动态”特征。

动态特征在每个时间点可能不同。例如,这可以是产品的价格,也可以是更一般的信息,如室外气温。在内部,我们会为时间序列的“年龄”或星期几等信息生成动态特征。

重要

大多数模型在进行预测时,需要未来时间范围内的动态特征可用。

相比之下,静态特征独立于时间描述时间序列。如果我们预测不同商店的不同产品,可以使用静态特征来标记每个时间序列,包括商店和产品标识符。

我们进一步区分分类特征和连续(实数)特征。连续特征的意义在于数值本身,例如将价格用作特征时。而分类特征则不具备这种属性:商店 012 是不同的实体,并没有“更高层级商店”的概念。

概率预测#

GluonTS 的一个核心思想是,我们不产生简单的数值作为预测结果,而是实际预测分布。

一个直观的理解方式是,想象对一个时间序列进行 100 次预测,每次返回一个不同的时间序列样本,这些样本在其周围形成一个分布——只不过我们可以直接输出这些分布,然后从中抽取样本。

分布的好处在于它们提供了一个可能值范围。想象一下你是一位餐馆老板,不知道要买多少食材;如果买得太少就无法满足顾客需求,买得太多又会造成浪费。因此,当我们预测需求时,如果模型能告诉我们需求可能在 50 份左右,但不超过 60 份的可能性不大,那将非常有价值。

../_images/forecast-distributions.png

预测 24 小时,显示 p50p90p95p98 预测区间。#

注意

预测的分布并非权威:预测的第 90 百分位数并不意味着只有 10% 的实际值会更高,而是模型对这条线位置的猜测。

局部模型和全局模型#

在 GluonTS 中,我们使用局部模型和全局模型的概念。

局部模型针对单个时间序列进行拟合,并用于对该时间序列进行预测;而全局模型则跨多个时间序列进行训练,一个全局模型用于对数据集中的所有时间序列进行预测。

训练全局模型可能需要很长时间:长达数小时,有时甚至数天。因此,将其作为预测请求的一部分进行训练是不可行的,它是一个单独的“离线”步骤。相比之下,拟合局部模型通常快得多,并且作为预测的一部分“在线”完成。

在 GluonTS 中,局部模型可以直接作为预测器使用,而全局模型则作为需要先进行训练的估计器提供。