首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >向量自回归简介

向量自回归简介

作者头像
花落花飞去
发布2017-12-20 10:59:57
3.2K0
发布2017-12-20 10:59:57
举报
文章被收录于专栏:人工智能人工智能人工智能

本译文自 Alfonso C.https://dzone.com 发表的An Introduction to Vector Autoregression。文中版权、图像代码等数据均归作者所有。为了本土化,翻译内容略作修改。

通常,我们试图分析大量的数据来找到有用的信息或预测未来的事件。数据集中最重要的类型之一是时间序列。时间序列表示按时间顺序索引的一系列数据点。有很多模型来分析这种系列; 其中之一是矢量自回归模型。

向量自回归模型,更好地应称为VAR,是已被广泛应用于计量经济学时间序列模型。这个模型的主要思想是,一个时间点上变量的值线性地依赖于前一时刻不同变量的值。例如,一个特定月份的出生人数可以从九个月前的肥沃人口的价值中预测出来。

但是,这些模型具有重要的计算成本。幸运的是,和许多其他的机器学习方法一样,我们有必要的计算能力来将它们应用到巨大的数据集中。此外,我们不仅可以将其应用于计量经济学,而且还可以应用于不同的领域,如健康或天气,或简单地适用于任何时间序列的问题。

在本文中,我将解释VAR的基础知识,如何构建和评估这个模型,从给定的数据和参数中找到VAR模型的方法,以及为模型使用引导式搜索来进一步采用这种方法来寻找最佳配置的建议。

概观

VAR实际上是自回归模型(AR)的变体,我们将自回归方案扩展到多个变量之间,它们之间存在线性依赖关系。出于这个原因,对于这个解释,我们将从一个单变量AR开始,然后我们将它扩展到多个变量。

单因素

如果我们有一个变量x,我们可以试图在瞬间将变量Ĵ 的值表示为前一时间点的线性组合的变量值i 。 此外,我们增加一个常数c来更好地拟合数据。

图像标题
图像标题

好的,这就是模型的外观,但是我们怎么能找到定义我们模型的asc?在这种情况下,我们可以设计一个方程组,该方程组应该可以使用线性最小二乘法 LLS解决。 如果我们在时间点有X 的值,我们可以创建下面的最小二乘方程。

图像标题
图像标题

这个系统的解决方案是我们需要建立自回归模型的变量。

多元

一旦我们有一个变量的模型,我们可以考虑更多的变量 - 因为更有意思的是考虑到变量的值不仅取决于其以前的值,而且取决于其他变量的值。

因此,现在,而不是一个变量x,我们将有一个向量yd变量。所以我们的数据可以表示为一个矩阵。

图像标题
图像标题

如果每个变量的值取决于其他变量的值,我们将需要一个矩阵Ai 而不是一个变量aic 相同)。在这些变化之后,我们的表情将如此看待:

图像标题
图像标题

正如你所看到的,这个表达并没有太大的改变。我们基本上用矩阵来替换变量。所以LLS系统看起来像这样(注意向量和矩阵不扩展):

图像标题
图像标题

独立变量

我们再来看看 大多数情况下,假设所有的变量都可以用这种方法建模,那就太有雄心了。尽管如此,利用我们所有的变量对一些变量进行模拟将会更为常见。

例如,如果我们有关于温度和电力消耗的信息,也许我们可以从它自己的价值和温度的价值中预测后者。从电力消费的角度来预测温度是没有意义的(呃,这个意义不大)。

因此,我们必须考虑两个变量向量:

  • 依赖于其他变量的变量:y
  • 独立变量:z

再次考虑到这些变化,我们的模型将如下所示:

图像标题
图像标题

因为有变数我们不想预测我们的LLS系统看起来有点不同,但只在平等的右边。

图像标题
图像标题

评估模型

一旦我们有了我们的数据模型,分析我们如何评估其质量很重要。

残差

第一个选择是使用从LLS解得到的残差,它基本上是我们模型预测的值与实际值之间的平方差。然而,在我看来,这个选项太简单了,并没有真正告诉我们使用VAR模型时我们的模型有多准确。

一方面,我们不应该简单地使用所有残差的总和,因为它们与我们用来创建模型的数据量成正比。出于这个原因,我建议将残差除以时间乘以因变量的数量。

但这不是唯一的问题。在大多数情况下,数据不被标准化,所以如果我告诉你,我的模型的残差是2.3,你不能真正知道我的模型有多好。如果我使用的数据集大约有15,000个值,那么每个元素可能会有2.3个残差。但是,如果我测量的是0.8左右的值,那么2.3的残差是巨大的。因此,获得相对残差将是有趣的。例如,计算变量值的平均值,然后将残差表示为相对于平均值的百分比。

不过,相对残差的方便取决于具体情况。如果我们使用正面和负面的价值观,那么相对的残差可能是不连贯的。例如,如果我们有关于温度的数据,其中平均值为0的正值和负值就会产生非常大的相对残差。

最后,我们必须考虑如何使用多个变量来理解残差。如果我们得到相对残差,我们可以将不同变量的残差相加。但是,如果我们认为拟合某个变量比拟合其他变量更重要,我们应该考虑分别评估残差。

训练

当我们谈到残差时,我们一直认为我们正在使用所有的信息来设计模型。然而,如果我们使用所有的数据,我们的算法可能会过度拟合,只为我们所拥有的数据获得好的结果,但是对于具有相同行为的任何其他数据则不会。因此,我们没有评估我们的预测模型的质量。

出于这个原因,我们可以考虑不使用所有可用的信息创建模型的可能性,只要其中的一部分。通过比较预测值与实际值,我们可以使用其余的数据来评估我们的模型在预测方面的准确度。

但是请注意,不使用所有数据进行培训有一些缺点。主要的是我们可能需要模型的所有可用信息。试想一下,你每小时都能得到关于温度的信息,而这些值通常遵循一天中的值与前一天的值相似的模式。因此,如果我们只用了不到24小时的训练时间,就很难找到一个好的模型。因此,建议对数据集所代表的数据有一定的了解,以便选择将要用于训练模型的数据量。

寻找模型

历史上,选择正确变量的任务和变量所依赖的时间点的数量是由专家根据他们的经验亲手完成的。

然而,如果选择这些参数的任务是自动的,我们可以将模型应用于不同的数据集,而不必知道其数据的含义。在最好的情况下,我们会找到那个时间序列的最好的模型配置,在最坏的情况下,我们会发现我们的数据序列不能用向量自回归模型来表示。

然而,选择最佳参数是一个组合优化问题,在最坏的情况下需要指数时间。因此,即使我们的方法速度很快,我们也不能在大多数问题的实例中检查所有的可能性。幸运的是,我们期望我们对VAR模型的理解将允许我们开发一种算法来在多项式时间内找到最佳配置。

找到最佳模型的过程可以分为以下两个模块。

变量分类

正如我前面提到的那样,确定哪些变量可以用可用数据进行预测是非常重要的,以避免创建不一致的模型。由于组合的数目是指数,我们不能检查所有的可能性。我们可以将一个经过深入研究的通用元启发式算法应用于这个任务,尽管可能没有必要。

我们对这个模型的经验告诉我们,即使所有的变量都可以完美地预测出来,当只有一个变量作为从属而其余的都是独立的时候,最好的残差是可以得到的。其残差比考虑所有变量作为依赖所得的残差略低。这基本上是因为有更少的数据要安装。因此,我们必须推广具有更多因变量的模型。

此外,我们还注意到,以独立变量作为依赖的模型比那些没有犯这个错误的模型残差高得多。因此,我们可以找到一个残差阈值,告诉我们一个模型是否将一个独立变量作为一个独立变量来错误地进行处理 这可以让我们使用引导式搜索来分类变量。

根据我刚刚提到的,我们可以测试每个变量的配置,其中该变量被认为是依赖的,其余的是独立的。如果残差低于阈值,变量确实是相关的,否则变量是独立的。

而且因为我们说我们正在寻找能够尽可能多地依赖于因变量的模型,所以我们将把所有我们单独确定为变量的变量作为相关变量,并把它们放在一起。在大多数情况下,应该是基于上述启发式的最佳模式。

时间依赖性

我们必须选择的其他参数是变量所依赖的时间点的个数,称为i k

首先,我们应该注意到,如果我们使用一个好的LLS求解器,我们会注意到具有较高时间依赖性的模型总是会获得更好的残差。这基本上是因为我们添加更多的变量来适应模型。在最坏的情况下,实际模型只依赖于几个时间点,较高的时间依赖性仍然适合,因为算法将大部分依赖性设置为0。

但是,如果我们想了解数据的含义,我们不能简单地选择一个巨大的时间依赖性; 我们应该选择一个更合理的。出于这个原因,当模型已经合适时,我们应该避免使用更高的时间依赖性。

寻找最佳时间依赖性的最初方法是考虑变量依赖作为函数的先前时刻的数量。一旦模型开始慢慢改善,我们应该停止增加时间依赖。

计算

我是计算机科学家,所有这些方程系统都非常好 - 但是我们要如何解决呢?

那么,模型的最好的部分就是基本上是线性代数。因此,我们可以使用高性能的线性代数库来解决这个问题。我会建议任何基于BLASLAPACK的库。如果我们用这些图书馆做出合理的好的实施,就能够解决很大的问题。

矩阵分解

因为这个问题的计算量要求很高,所以我们应该把重点放在优化它。最好的方法之一是在求解系统之前分解矩阵,因为它将简化我们的矩阵,使得LLS求解器运行得更快。然而,  矩阵分解不是本文的主题,所以我只是选择一个我认为最好的选择:  QR分解。

排比

为了获得最高性能,使用并行算法尽可能快地解决最小二乘系统和分解是至关重要的。幸运的是,实现这些功能的大部分库很了解支持并行性的重要性。

但是,这不是全部。如果我们想检查模型的不同参数,那么并行运行这些尝试将是非常有趣的,从而导致两个层次的并行性。

代码

幸运的是,我们已经开发了一个初步实现来测试这些有前途的想法。

首先,我们创建了一个时间序列数据集生成器来测试我们的算法。这个发生器允许我们创建基于VAR模型的理想时间序列。

其次,使用LAPACK,我们已经实现了从给定参数中找到VAR模型的算法。为了测量质量,我们正在考虑残差,并使用考虑部分数据集的选项来训练模型,其余部分则对其进行评估。另外,最初的工作已经进行了发展和详尽的搜索,以找到最佳参数。

是项目库。

进一步的研究

有很多方法可以改进这种方法。一方面,与使模型更加强大和灵活有关的方法。例如,克服使用非线性关系或考虑VAR模型的线性模型的局限性可以随时间变化。

另一方面,性能可以通过增加对LLS求解器的约束或者利用类似于Toeplitz矩阵的矩阵结构来改进。

最后,不断改进测量模型质量的方法是非常重要的。

结论

在本文中,我们提出了一些有趣的想法,通过使用具有矩阵分解的高性能线性代数库来提高性能,同时自动找到模型的最佳配置,从而能够将VAR用作机器学习技术。但是,这只是一个初步的方法,还有很多研究尚待完成。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概观
    • 单因素
      • 多元
        • 独立变量
        • 评估模型
          • 残差
            • 训练
            • 寻找模型
              • 变量分类
                • 时间依赖性
                • 计算
                  • 矩阵分解
                    • 排比
                    • 代码
                    • 进一步的研究
                    • 结论
                    领券
                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档