时间序列预测作为回归

在本书的前一部分,我们建立了对时间序列的基本理解,并掌握了分析和可视化时间序列的工具和技术,甚至生成了我们的第一个基准预测。到目前为止,本书主要涵盖了经典和统计技术。现在,让我们涉足现代机器学习,学习如何利用这个相对较新的领域来进行时间序列预测。机器学习是近年来飞速发展的领域,能够将这些新技术用于时间序列预测是当今世界一项宝贵的技能。

本章涵盖以下主要主题:

理解机器学习的基础知识

我们希望使用机器学习进行时间序列预测。但在开始之前,让我们花些时间确立什么是机器学习,并建立一个框架来展示它的作用(如果你已经非常熟悉机器学习,可以随意跳到下一节时间序列预测作为回归,或者留在这里和我们一起复习这些概念)。1959年,阿瑟·塞缪尔将机器学习定义为“赋予计算机无需明确编程就能学习的能力的研究领域”。传统上,编程是一种范式,我们根据一组规则/逻辑来执行操作,并对给定的数据执行该操作以得到我们想要的输出。但机器学习颠覆了这一思路。

在机器学习中,我们从数据和输出开始,然后要求计算机告诉我们从数据中获得期望输出的规则:

图5.1 – 传统编程与机器学习

图5.1:传统编程与机器学习

机器学习中有许多类型的问题设置,如监督学习、无监督学习、自监督学习等,但我们将专注于监督学习,这是最常见且最适用于本书内容的一种。监督学习指的是我们已经在范式转换示例中提到的程序、数据和输出。我们使用一个包含输入和期望输出配对示例的数据集,并要求模型学习它们之间的关系。

让我们从一个小点开始讨论,逐步构建到整个示意图,该图涵盖了监督机器学习问题的大多数关键组成部分:

图5.2 – 监督机器学习示意图,第1部分 – 理想函数

图5.2:监督机器学习示意图,第1部分——理想函数

如前所述,我们对机器学习的期望是从数据中学习并得出一套规则/逻辑。在数学中,与逻辑/规则最为类似的是函数,它接收输入(这里是数据)并产生输出。数学上可以表示为:

y = g(X)

其中X是特征集,g理想目标函数(在图5.2中记为1),它将X输入(示意图中的2)映射到目标(理想)输出y(示意图中的3)。理想目标函数在很大程度上是一个未知函数,类似于我们在第1章《时间序列入门》中看到的数据生成过程DGP),它不受我们控制。

图5.3 – 监督机器学习示意图,第2部分 – 学习到的近似

图5.3:监督机器学习示意图,第2部分——学习到的近似

但我们希望计算机学习这个理想目标函数。这个理想目标函数的近似用另一个函数h(示意图中的4)表示,它接收相同的特征集X,并输出预测目标$\hat{y}$(示意图中的5)。$\Phi$是函数h的参数(或模型参数):

图5.4 – 监督机器学习示意图,第3部分 – 整合在一起

图5.4:监督机器学习示意图,第3部分——整合在一起

那么,我们如何找到这个近似函数h及其参数$\Phi$呢?通过示例数据集(示意图中的6)。监督机器学习问题基于这样的前提:我们能够收集一组示例,这些示例显示了特征X和相应的目标y(在文献中也称为标签)。正是从这组示例(数据集)中,计算机学习近似函数h和最优模型参数$\Phi$。在上述示意图中,唯一未知的实体是理想目标函数g。因此,我们可以使用训练数据集D为数据集中的每个样本获得预测目标。我们已经知道所有示例的理想目标。我们需要一种方法来比较理想目标和预测目标,这就是损失函数(示意图中的7)的作用。这个损失函数告诉我们近似函数h与真实情况相差多远。

尽管 h 可以是任意函数,但通常从一组已知的函数类 H 中选择。 H 是能够拟合数据的有限函数集。这个函数集就是我们通常所说的 模型。例如, h 可以从所有线性函数或所有基于树的函数中选择,等等。从 H 中选择 h 是通过超参数(由建模者指定)和模型参数(从数据中学习)的组合完成的。

现在,剩下的就是遍历不同的函数,找到最佳逼近函数 h,它能使损失最小化。这是一个优化过程,我们称之为 训练

让我们也看一下几个关键概念,这些概念在我们后续的所有讨论中都将很重要。

监督式机器学习任务

机器学习可以用来解决各种各样的任务,例如 回归分类推荐。但由于分类和回归是最常见的问题类别,我们将花一点时间来回顾它们是什么。

分类任务和回归任务的区别非常简单。在机器学习示意图(图5.2)中,我们讨论过目标 y。这个目标可以是实数值,也可以是类别。例如,我们可以预测下周的股票价格,或者只预测股票是上涨还是下跌。在第一种情况下,我们预测一个实数值,这称为 回归。在另一种情况下,我们在两个类别(上涨下跌)中预测其中一个,这称为 分类

过拟合与欠拟合

机器学习系统的最大挑战是,我们训练的模型必须在新且未见过的数据集上表现良好。机器学习模型执行这一任务的能力称为模型的 泛化能力。机器学习中的训练过程类似于数学优化,但有一个微妙的区别。数学优化的目标是在给定数据集中达到全局最大值。但在机器学习中,目标是通过使用训练误差作为代理来实现低测试误差。机器学习模型在训练误差和测试误差上的表现与过拟合和欠拟合的概念密切相关。让我们用一个例子来理解这些术语。

机器学习模型的学习过程与人类的学习方式有很多相似之处。假设三个学生 ABC 正在为考试复习。 A 是个懒鬼,前一天晚上去泡吧了。 B 决定加倍努力,从头到尾背诵课本。 C 在课堂上认真听讲,理解了考试的主题。

不出所料,A 考试不及格,C 得了最高分,B 成绩还行。

A 考试不及格是因为学得不够。这种情况也发生在机器学习模型上,当它们没有学到足够的模式时,这称为 欠拟合。其特点是训练误差高,测试误差也高。

B 的成绩没有预期那么高;毕竟他们确实逐字逐句地背下了整本课本。但考试中的许多问题并非直接来自课本,而 B 没能正确回答。换句话说,考试中的问题是 新且未见过的。因为 B 记住了所有内容但没有努力理解基本概念,所以 B 无法将所学知识 泛化 到新问题上。这种情况在机器学习中称为 过拟合。其特点通常是训练误差和测试误差之间的差距很大。通常,我们会看到非常低的训练误差和较高的测试误差。

第三位学生 C 学到了正确的方法,理解了基本概念,因此能够泛化新的、未见过的问题。这也是机器学习模型的理想状态。其特点是测试误差相当低,并且训练误差与测试误差之间的差距很小。

我们刚刚看到了机器学习中两个最大的挑战。现在,让我们看看可以用来应对这些挑战的几种方法。

模型的容量与欠拟合或过拟合之间存在密切关系。模型的容量是指其灵活适应多种函数的能力。低容量模型可能难以拟合训练数据,导致欠拟合。高容量模型可能会因过多记忆训练数据而过拟合。为了理解容量的概念,让我们看一个例子。当我们从线性回归转向多项式回归时,我们为模型增加了容量。模型不再只拟合直线,还可以拟合曲线。

当模型的容量与当前学习问题相匹配时,机器学习模型通常表现良好。

图5.5 – 欠拟合与过拟合

图5.5 展示了一个用来说明过拟合和欠拟合的非常经典的例子。我们使用一个已知函数生成一些随机点,并尝试通过这些数据样本来学习该函数。我们可以看到,线性回归作为最简单的模型之一,通过在这些点上画一条直线而欠拟合了数据。多项式回归是线性回归,但具有一些高阶特征。现在,你可以将从线性回归到更高阶多项式回归的转变视为增加模型容量。因此,当我们使用4阶时,学习到的函数很好地拟合了数据,并与我们的理想函数匹配。但是,如果我们继续增加模型容量,达到 degree = 15,我们会发现学习到的函数仍然通过训练样本,但学习到了一个非常不同的函数,即对训练数据过拟合。找到学习泛化函数的最佳容量是机器学习的核心挑战之一。

虽然容量是模型的一个方面,但另一个方面是正则化。即使容量相同,模型也可以从所有函数的假设空间中选择多个函数。通过正则化,我们尝试在假设空间中偏向于某组函数。

虽然所有这些函数都是可以被选择的有效函数,但我们以某种方式引导优化过程,使得最终得到我们偏好的那种函数。尽管正则化是一个通用术语,用于指代我们为降低学习函数复杂度而施加的任何约束,但它更常见的形式是权重衰减。让我们以线性回归为例,即通过学习每个特征对应的权重来将直线拟合到输入特征。

线性回归模型在数学上可以写成如下形式:

$$\hat{y} = c + \sum_{i=1}^{N} w_i \times x_i$$

这里,N 是特征数量,c 是截距,xi 是第 i 特征,wi 是与第 i 特征相关的权重。我们通过将这个问题视为一个最小化 $\hat{y}$ 与 y(真实输出)之间误差的优化问题来估计正确的权重 ( L )。

现在,通过正则化,我们在 L 中添加一个额外的项,迫使权重变得更小。通常,这是通过 L1L2 正则化器完成的。L1 正则化器是将权重的绝对值之和添加到 L,而 L2 正则化器是将权重的平方和添加到 L

$$L + \lambda \sum_{i=1}^{N} w_i^2$$

其中 $\lambda$ 是正则化系数,决定了我们对权重的惩罚强度。L2 正则化是指将绝对权重之和加到损失函数中。

$$L + \lambda \sum_{\{i=1\}}^{N} |w_i|$$

在这两种情况下,我们都倾向于较小的权重而非较大的权重,因为这可以防止函数过度依赖机器学习模型所使用的任何一个特征。正则化本身就是一个完整的话题;如果你想了解更多,请前往《进一步阅读》部分,那里提供了关于正则化的一些资源。

另一个非常有效的减少过拟合的方法就是简单地用更多的数据来训练模型。有了更大的数据集,模型过拟合的可能性就会降低,因为大数据集能够捕捉到极为丰富的多样性。

那么,我们如何调节参数以在欠拟合和过拟合之间取得平衡呢?我们将在下一节中探讨这个问题。

超参数和验证集

几乎所有的机器学习模型都有一些与之相关的超参数。超参数是模型参数中那些不是从数据中学习到的,而是在训练开始前就设置好的参数。例如,正则化的权重就是一个超参数。大多数超参数要么帮助我们控制模型的容量,要么对模型应用正则化。通过控制容量或正则化,或者两者兼而有之,我们可以在欠拟合和过拟合模型之间的边界上移动,最终得到一个恰到好处的模型。

但是,由于这些超参数必须在算法之外设置,我们如何估计最佳的超参数呢?尽管这不是核心学习过程的一部分,我们也从数据中学习超参数。但是,如果我们仅仅使用训练数据来学习超参数,它会选择最大可能的模型容量,从而导致过拟合。这时我们需要一个验证集,即训练过程无法访问的那一部分数据。沿用我们之前看到的类比,验证集就像是学生参加的模拟考试,用来检查他们是否学得足够好。但是当数据集很小(不是数十万个样本)时,单个验证集上的表现并不能保证公平的评估。在这种情况下,我们依赖交叉验证。一般的技巧是在原始数据集的不同子集上重复训练和评估过程。一种常见的方法是k折交叉验证,即将原始数据集分成k个相等、不重叠且随机的子集,每个子集在训练完所有其他子集后进行评估。我们在进一步阅读部分提供了一个链接,如果你想了解更多关于交叉验证的技术。在本书后面,我们也会从时间序列的角度讨论这个主题,这与标准的交叉验证方式有一些不同。

建议阅读

尽管我们在本书中只是浅尝了机器学习,但还有很多内容,为了能更好地理解本书的其余部分,我们建议对机器学习有更深入的了解。我们建议从斯坦福大学的《机器学习》(Andrew Ng)开始:https://www.coursera.org/learn/machine-learning。如果你时间紧迫,Google的《机器学习速成课程》也是一个不错的起点:https://developers.google.com/machine-learning/crash-course/ml-intro

近年来,机器学习取得了长足的进步,随之而来的是能够从数据中学习复杂模式的强大模型。当我们将这些模型与时间序列预测的经典模型进行比较时,可以发现这些新类别的模型潜力巨大。但是机器学习和时间序列预测之间存在一些根本性的差异。在下一节中,让我们了解如何克服这些差异,将机器学习用于时间序列预测。

将时间序列预测视为回归

第1章时间序列简介》所述,时间序列是按时间顺序依次采集的一组观测值。通常,时间序列预测就是试图预测这些观测值在未来会是什么。给定任意历史长度的观测序列,我们预测未来至任意时间跨度。

我们看到,回归(即用于预测连续变量的机器学习)基于一个由样本组成的数据集,每个样本包含一组输入特征和目标值。我们可以看出,回归的任务是根据一组输入预测单一输出,这与预测任务从根本上不兼容——在预测中,我们被给出一组历史值并要求预测未来值。时间序列与机器学习回归范式之间的这种根本性不兼容,正是我们无法直接使用回归进行时间序列预测的原因。

此外,时间序列预测本质上是一个外推问题,而回归大多是内插问题。使用数据驱动方法解决外推通常更加困难。回归问题中的另一个关键假设是训练样本是独立同分布iid)的,但时间序列也打破了这一假设,因为时间序列中相继的观测值表现出显著的依赖性。

然而,为了利用机器学习的各种技术,我们需要将时间序列预测转化为回归问题。幸运的是,通过引入一些特征向机器学习模型添加记忆,我们可以将时间序列转换为回归问题并克服独立同分布假设的限制。让我们看看如何实现。

时间延迟嵌入

我们在第4章建立强基线预测》中讨论了ARIMA模型,并看到了它如何成为一种自回归模型。我们可以使用相同的概念将时间序列问题转化为回归问题。让我们通过下图来阐明这一概念:

图5.6 – 使用滑动窗口将时间序列转换为回归

图5.6:使用滑动窗口将时间序列转换为回归

假设我们有一个具有L个时间步的时间序列,如图中所示。我们有T作为最新观测值,T - 1T - 2等依次向前,一直到T - L。在理想情况下,当我们进行预测时,每个观测值都应依赖于所有之前的观测值。但这并不实际,因为L可能任意长。我们通常将预测函数限制为仅使用序列中最近的M个观测值,其中M < L。这些被称为有限记忆模型或马尔可夫模型,而M称为自回归阶数、记忆大小或感受野。

因此,在时间延迟嵌入中,我们假设一个任意长度的窗口M < L,并通过在整个时间序列长度上滑动窗口来提取固定长度的子序列。

在图中,我们采用了记忆大小为3的滑动窗口。因此,我们可以提取的第一个子序列(如果从最近开始向后)是T – 3T – 2T - 1。而T是该子序列之后紧接着的观测值,这成为我们数据集中的第一个样本(图中表格的第1行)。

现在,我们将窗口向左(时间上向后)滑动一个时间步长,提取新的子序列 T – 4T – 3T - 2。对应的目标将变为 T - 1。我们重复这个过程,一直回溯到时间序列的开头,在滑动窗口的每一步,我们都向数据集添加一个样本。

最终,我们得到一个对齐的数据集,其特征向量大小固定(等于窗口大小),并且只有一个目标变量,这就是典型机器学习数据集的样子。

现在我们有了一个包含三个特征的表,让我们也为这三个特征赋予语义含义。如果我们观察图中表格的最右列,可以看到该列中的时间步总是落后目标一个时间步。我们称之为 滞后1。右边第二列总是落后目标两个时间步,这被称为 滞后2。推广开来,特征中观测值落后目标 n 个时间步的,我们称之为 滞后 n

这种使用 时间延迟嵌入 从时间序列到回归的转换,以标准回归框架可以利用的方式编码了时间序列的自回归结构。另一种考虑使用回归进行时间序列预测的方法是执行 时间回归

时间嵌入

如果在自回归模型中依赖先前的观测值,那么对于时间嵌入模型,我们依赖时间的概念。核心思想是,我们忽略时间序列的自回归性质,假设时间序列中的任何值仅依赖于时间。我们从与时间序列相关联的时间戳中推导出捕捉时间、时间流逝、时间周期性等特征,然后使用这些特征通过回归模型预测目标。有多种方法可以实现这一点,从简单地加入一个单调且均匀递增的数值列来捕捉时间的流逝,到复杂的 傅里叶 项来捕捉时间中的周期成分。我们将在第6章《时间序列预测的特征工程》中详细讨论这些技术。

在结束本章之前,我们还要讨论一个在时间序列预测领域稳步发展的关键概念。本书大部分内容都拥抱这一新的预测范式。

全局预测模型——范式转变

传统上,每个时间序列被孤立地处理。因此,传统预测在拟合预测函数时只关注单个时间序列的历史数据。但近来,由于当今数字优先世界中数据收集的便捷性,许多公司开始从相似来源或相关时间序列收集大量数据。

例如,沃尔玛等零售商收集了数千家门店数百万种产品的销售数据。优步和Lyft等公司收集了城市各区域的出行需求数据。在能源领域,收集了所有消费者的能源消耗数据。所有这些时间序列集具有共同的行为,因此被称为 相关时间序列

我们可以认为相关时间序列中的所有时间序列来自不同的数据生成过程,从而对它们分别建模。我们称这些为 局部 预测模型。另一种方法是假设所有时间序列来自同一个数据生成过程。我们不单独为每个时间序列拟合各自的预测函数,而是为所有相关时间序列拟合一个统一的预测函数。这种方法在文献中被称为 全局跨学习。大多数现代深度学习模型以及机器学习方法都采用全局模型范式。我们将在接下来的章节中详细探讨这些内容。

参考文献核实

术语全局David Salinas等人DeepAR论文(参考文献1)中引入,跨学习Slawek Smyl(参考文献2)引入。

我们之前看到,更多数据会降低过拟合的可能性,从而降低泛化误差(训练误差与测试误差之差)。这是局部方法的缺点之一。传统上,时间序列并不长,而且在许多情况下,收集更多数据既困难又耗时。在小数据上拟合机器学习模型(具有其全部表达能力)容易过拟合。这就是为什么传统上使用施加强先验的时间序列模型来预测此类时间序列。但这些限制传统时间序列模型拟合的强先验,也可能导致一种欠拟合并限制精度。

强大且表达力强的数据驱动模型,如机器学习中的模型,需要更多数据才能得到对新数据泛化良好的模型。时间序列本质上与时间绑定,有时收集更多数据意味着等待数月或数年,这是不可取的。因此,如果我们不能增加时间序列数据集的长度,我们可以增加时间序列数据集的宽度。如果我们在数据集中添加多个时间序列,我们就增加了数据集的宽度,从而增加了模型训练所用的数据量。

图5.7直观展示了时间序列数据集宽度的增加概念:

图5.7——时间序列数据集的长度与宽度

这有利于机器学习模型,因为在拟合预测函数时具有更高的灵活性,并且有更多数据可用,机器学习模型可以学习比传统时间序列模型更复杂的预测函数,这些函数通常以完全数据驱动的方式在相关时间序列之间共享。

局部方法的另一个缺点涉及可扩展性。在我们之前提到的沃尔玛案例中,有数百万个时间序列需要预测,不可能对所有模型进行人工监督。从工程角度来看,训练和维护生产系统中的数百万个模型会让任何工程师感到噩梦。但在全局方法下,我们只为所有这些时间序列训练一个单一模型,这大大减少了我们需要维护的模型数量,同时仍能生成所有所需的预测。

这种新的预测范式已经获得关注,并在多个时间序列竞赛中持续显示出优于局部方法的效果,尤其是在相关时间序列数据集中。在Kaggle竞赛中,如Rossman Store Sales(2015年)、Wikipedia WebTraffic Time Series Forecasting(2017年)、Corporación Favorita Grocery Sales Forecasting(2018年)和M5 Competition(2020年),获胜者都是全局模型——要么是机器学习,要么是深度学习,要么是两者的结合。Intermarché Forecasting Competition(2021年)的获胜提交也是全局模型。这些竞赛的链接在进一步阅读部分提供。

尽管我们有大量实证结果表明全局模型在相关时间序列上优于局部模型,但全局模型仍然是一个相对较新的研究领域。Montero-Manson和Hyndman(2020年)展示了一些非常有趣的结果,表明任何局部方法都可以用具有所需复杂度的全局模型来近似,他们提出的最有趣的发现是,即使对于不相关的时间序列,全局模型也会表现得更好。我们将在第10章全局预测模型中进一步讨论全局模型及其策略。

参考文献核实

Montero-Manson和Hyndman(2020年)的研究论文在参考文献中列为参考文献3

小结

我们已经开始了超越基线预测方法的旅程,并初步涉足了机器学习的世界。在简要回顾机器学习,了解了过拟合、欠拟合、正则化等关键概念后,我们看到了如何将时间序列预测问题转化为机器学习中的回归问题。我们还从概念上理解了不同的嵌入方法,如时间延迟嵌入和时间嵌入,这些方法可用于将时间序列问题转化为回归问题。最后,我们学习了一种新的时间序列预测范式——全局模型,并在概念层面上将其与局部模型进行了对比。在接下来的几章中,我们将开始将这些概念付诸实践,并了解特征工程技术以及全局模型的策略。

参考文献

以下是本章使用的参考文献:

  1. David Salinas, Valentin Flunkert, Jan Gasthaus, Tim Januschowski (2020). DeepAR: 使用自回归循环网络进行概率预测. International Journal of Forecasting. 36-3. 1181–1191: https://doi.org/10.1016/j.ijforecast.2019.07.001
  2. Slawek Smyl (2020). 一种用于时间序列预测的指数平滑与循环神经网络混合方法. International Journal of Forecasting. 36-1: 75–85 https://doi.org/10.1016/j.ijforecast.2019.03.017
  3. Pablo Montero-Manso, Rob J Hyndman (2020), 时间序列群体预测的原则与算法:局部性与全局性. arXiv:2008.00444[cs.LG]: https://arxiv.org/abs/2008.00444

延伸阅读

你可以查看以下资源进行拓展阅读: