数据科学——衡量计量经济学模型的结构稳定性

231 阅读11分钟

时间序列预测的最简单最重要的想法

在这篇文章中,我想从数据科学家的书中抽出一页,探讨数据科学界作为其建模过程的一部分而实施的一个重要护栏--独立于模型性能来定义模型的稳定性。

随着大数据的兴起,可用于为特定问题建模的变量数量呈指数级增长。例如,用于识别歌曲或电影的模型不再只是使用通用变量,如 _以前看过的电影或喜欢的歌曲_等。现在,我们可以包括一系列的指标,使用户档案更加动态--一天中的时间天气历史潜在的情绪、_喜欢但没有再听过的歌曲_等等。这个列表可以永久地增长,而且可能会增长。每一天,我们都有最少的数据,我们将拥有最多的数据。每天都有更多的相关性被发现。有些是因果关系,有些则不是。

我们如何知道哪些变量要使用,哪些变量要忽略?如果有些变量对预测一个用户的行为有意义,但对另一个用户的行为却没有那么大的意义,怎么办?

幸运的是,数据科学提出了定义模型稳定性的想法。这是另一种定义模型性能的方式,但它并不完全取决于预测的准确性。"稳定性 "是一个如此不稳定的术语,其含义取决于手头的模型;更一般地说,它是衡量一个模型如何学习(稳定性)而不是学习什么(准确性)。在控制准确性的前提下,我们希望选择一个更 "稳定 "的模型--可以适用于大多数用户,能够持续地识别相关的变量集,并保持变量的相关度的正常性。所有这些都是说--在两个非常准确的模型之间,我们想选择一个可以更普遍地应用的模型,以及一个在我们稍微改变事情时也不会失控的模型。例如--如果证券价格变得高度波动,一个复杂、准确和务实的高频交易算法就会变得混乱不堪。以至于纳斯达克不得不实施电路断路器,以在这种事件发生时停止交易,而且它已经发生了。最近的一次爆炸发生在2020年3月9日。虽然有许多因素导致断路器被激活,但事实是,在某个阈值之后,模型不能被信任来做出准确或稳定的决定。因此,当数据科学有意识地将稳定性和准确性分开时,我想知道计量经济学是否应该积极努力建立模型,将准确性 以及 牢记稳定性。如果我们这样做,我们应该如何定义稳定性?

一旦我们开始定义稳定性,就很容易让它变得越来越细微。许多机器学习模型利用k-fold或n-fold交叉验证来衡量稳定性或选择的变量,我们可以很容易地将这些方法用于计量经济学建模。然而,由于计量经济学主要在 "频率 "领域工作,即用于训练模型的数据具有时间关系,因此,我们应该更仔细地研究我们如何在这个新的变量空间中定义稳定性。

首先,与k/n-fold交叉验证不同,我们不可能在不损失时间关系的情况下随机地对数据进行子集。我们用来预测的模型往往依赖于这样的假设:时间_t_ 的值可能与它的滞后_{t-1, t-2, ..., t-n}_ 有因果关系。此外,根据我们决定如何对这些时间关系进行建模,我们使用不同的时间序列结构表示--ARIMAX、指数状态空间、傅里叶基表示、径向基表示等。每种方法对时间关系的利用都略有不同。这意味着学习机制(稳定性)不能用一种通用的交叉验证技术来衡量。

在这篇文章中,我只想关注一种时间表示法--AR结构,以及R中的函数**"auto.arima "**所隐含的算法有多稳定。该函数是R语言包的一部分。 预测 包的一部分。我希望读者能提出如何为我提到的其他结构最好地定义稳定性的想法。

一个ARMA过程可以表示如下。

XEpsilon的每个滞后期的系数都可以被校准,使用信息准则(AIC),它的内在作用是减少误差(提高准确性)。然而,AIC不包含任何关于结构稳定性的信息,只评估一个模型在保留其训练的数据信息方面的效率。

如果AIC是系数值和滞后期的选择标准,那么也许我们可以通过观察.AIC来衡量ARMA模型的稳定性。

  1. 分配给每个滞后期的系数值--一个准确和稳定的模型应该能够计算出正确的系数,然后在我们每次添加另一个数据点进行训练时都能做到。
  2. 当我们向数据添加随机扰动时,模型的反应--如果我们试图通过添加与我们的训练数据不一样的数据来欺骗模型,理想情况下,一个稳定的模型不会那么容易被欺骗**,即使以准确性为代价**; ,它不应该尝试预测冲击。

稳定性测量的另一个重要特征是,所有的测量必须发生在同一样本数据的子集上。考虑到我们数据的时间性,我们必须对这些技术稍作调整,以保留我们模型的时间信息。一个解决方案是使用滚动验证。 通常我们使用 ,作为衡量样本外预测准确性的一种方式,但我们可以在这里利用同样的机器;只是让机器在工作时衡量不同的指标。

[关于滚动验证的快速补课,读者可以访问 Rob J. Hyndman的博客]

我们可以很容易地模拟一个AR过程。我们将预先知道滞后系数是什么。接下来,我们可以用滚动验证法来训练auto.arima算法,看看auto.arima算法有多快,多频繁地找到正确的滞后和系数。请看下面的AR过程的可视化表示。

上述过程有4个滞后期,系数向量={0.7,-0.2,0.5,-0.8},长度为1,000期。滚动验证/训练从n=20开始,下面是每次迭代时计算的系数的表示。至少对于这个模拟数据集,auto.arima算法需要大约400个数据点来接近一个数值稳定可接受的系数的精确解(图1)。但是请注意,即使在模型非常不稳定的前200个数据点上,校准模型的样本外准确度也与后来的数据点相当(图2);唯一的区别是,后来的校准模型对算法训练的每个新数据点都更加稳健

为了进一步推动准确性与稳定性的观点--时间序列预测中的另一个常见问题是,当训练数据包含随机不连续的时候,不一定遵循与时间序列本身相同的基本动态。通常情况下,如果我们能够准确地识别这些冲击,我们会寻求从训练数据中完全删除这些数据点,或者选择将其平滑化,以减少其对模型的偏见。然而,如果我们能够衡量我们的方法/算法的稳健性,我们就可以在对_原始数据进行修改_或对其进行工程设计之前做出更明智的选择。这并不是说特征工程是一种无效的建模方法,但我们必须停下来反思,它是否有助于我们改进模型,还是只是使其复杂化。在我看来,解析力不应该被用来换取复杂的声音模型,因为这些模型对我们的洞察力几乎没有任何改善。

为了测试auto.arima的稳定性,我们想通过添加随机冲击来轻微地扰动数据,这些冲击与我们希望预测的数据不属于同一分布。我们知道,对于这个数据集,auto.arima在400个数据点左右达到了稳定性;我们可以对同一时间序列的扰动版本进行滚动验证,看看它与没有被扰动的同级序列相比如何。请看下面的同一时间序列,但其中有随机的不连续因素。

而下面是auto.arima的准确度与我们之前未扰动的数据版本的比较(黄线表示加入不连续的地方)。

很容易看出,当我们随机冲击训练数据时,预测算法的准确性确实_相对_较低。人们往往忘记的是,虽然稳定性可能与准确性无关,但它直接影响到准确性。请看下面为这个新数据集计算的系数。

图例显示的是_真实的系数_ 值,我们知道在未受干扰的数据中,模型会收敛,而且是准确的。然而,当相同的数据被随机冲击时,它完全抛开了红线上明显的系数值。对数据的一些不相关的冲击完全改变了估计的模型表示。一个稳定的算法不应该被一个未经证实的对数据的冲击所影响,太多。

这里有趣的是,算法是_不_稳定的,因此在计算的系数方面都是_不准确_的--AR1、AR2、AR3和AR4的值与原始数据集非常不同,而且在计算的系数数量方面也是如此--原始数据没有MA1或MA2项,算法错误地给我们的扰动数据集分配了非零值。如果auto.arima选择了错误的模型表示(系数),那么根据结构,它使用这些系数产生的预测将比使用未扰动数据的模型更偏离实际值。

我希望读者停下来思考一下上面的结果--当你完成了一个预测练习,软件吐出了结果,你认为你的算法向你显示的是哪个值--黑线还是红线?因为我们只看到了最终的数值,而没有看到它是如何_收敛_的,所以稳定性的细微差别就被忽略了。你的答案将决定你需要采取的功能工程步骤,以确保你对计量经济学过程进行了负责任的建模。

在这种情况下,auto.arima牺牲了稳定性,反过来也牺牲了准确性。不幸的是,根据我的经验,把稳定性和准确性分开并不是传统计量经济学工作流程的一部分。如果我们把准确性和稳定性作为原始数据和处理过的数据的两个不同指标来衡量,那么我们就能在是否应该对原始数据进行工程化处理方面做出更明智的决定。有很多方法可以通过工程设计来减少单一测量的偏差,甚至有更多的算法可以选择来进行预测;当务之急是我们要有一个一致和严格的框架来帮助我们挑选。

请记住,通过这篇文章,我们只是触及了计量经济学稳定性的表面,但我们已经能够为许多建模决策提供充分和务实的支持,而这些决策往往是基于 "有根据的 "猜测,或者更糟的是--直觉。

我希望读者们能受到启发,想出更多新的方法来探索这个话题!

Vedant Bedi是万事达卡的分析师,在NAM组合开发团队工作。Vedant拥有纽约大学的数学和经济学学士学位(2019年以优异成绩毕业),对数据科学、计量经济学及其在金融领域的诸多应用抱有浓厚的兴趣。

Vedant也是Phi Beta Kappa(纽约市分会)的入会成员--这是美国最古老的学术荣誉协会。