如何测试生成时间序列的过程是否随时间变化

机器算法验证 时间序列 假设检验 高斯过程 模型比较 结构变化
2022-03-31 03:53:19

问题

我有一台机器在两个不相交的时间段内生成的时间序列数据——大约是 2016 年的一个月和 2018 年的另一个月。

领域专家假设在每个时间步,观察到的变量可以用另一组观察到的变量来解释。tYtX1t,,Xdt

我如何测试这个过程是否随着时间的推移而改变?请注意,我并不是要测试变量的分布是否随时间变化。我想测试之间的关系是否随着时间而改变。YXiY

目前的方法

假设我在 2016 年的数据上拟合了一个时间序列模型(例如,高斯过程)来预测给定作为对生成的基础过程进行建模的一种方式。YtX1t,,XdtYt

领域专家建议,也许我们可以尝试使用这个模型来预测给定 s并以某种方式使用残差来推断该模型(代表 2016 年的过程)是或正在2018 年不再一样。我不确定在此之后如何继续。YtXt

我在考虑什么

  1. 我应该测试 2016 年和 2018 年的残差是否来自同一分布,还是使用 Kolmogorov-Smirnov 测试之类的方法进行拟合优度测试?我对这种方法的担忧是,2018 年的样本外数据可能比 2016 年的样本内训练数据具有更大的误差,因此该测试可能会产生误报。有没有办法调整/解释这种影响?

  2. 我应该安装两个模型,一个用于 2016 年,另一个用于 2018 年,并使用某种方式来测试这两个模型是“相同”还是“不同”?例如,一种可能性是计算分别在 2016 年和 2018 年数据上拟合的 2 个高斯过程之间的 KL 散度。这种方法还有其他建议或问题吗?

  3. 我看到了一些关于协整的帖子。但我并不完全理解这个概念。这相关吗?

一般来说,如何解决这类问题?我试过在网上搜索这个,但可能是由于我的查询不够精确(我对这个领域不熟悉),我没有得到很多相关的结果。我什至感谢对要搜索的主题/关键字或要浏览的书籍/论文的简单提示/评论。

请注意,我正在寻找有原则的(最好是统计的)方法,而不是基于启发式的方法。很好的例子是建议下面的 Chow 测试及其变体的答案。

4个回答

不仅可以通过@John Stax Jakobsen 提到的 Chow 测试来测试结构变化。

还有很多其他测试,尤其是波动测试系列通常效果很好。

在这里,您可以很好地介绍计算它们的R包。strucchange如果您不是R用户,请仅阅读理论,那里对此进行了很好的描述。

如果用线性回归对关系建模是合理的,那么测试结构中断的一种简单方法是 chow 测试。

在此处查看 wiki 文章

首先,我只适合一些直接考虑时间变量的黑盒模型(例如 GBM 或随机森林) ,例如的各种粒度可能会有所帮助,例如以日历年(2016 年、2018 年)、自 2016 年以来经过的月份等测量。然后,为了评估的重要性,可以查看可变重要性图(参见例如,在Elements of Statistical Learning中的“15.3.2 变量重要性”部分)或简单地删除变量,重新拟合模型并比较模型性能。TYt=F(Xt1,,Xdt;T)TTT

或者,您可以坚持您的模型(高斯过程)并比较 2016 年和 2018 年的残差。我同意您的直觉,即样本内(2016 年)和样本外(2018 年)残差分布的比较会产生误导性结果。但是,可以通过如下方式对数据进行分区来快速解决此问题:将 2016 年的数据拆分为训练子集(用于拟合模型)和验证子集(用于评估模型的质量),还可以使用以下子集定义第二个验证数据集2018 年数据。然后,只需使用训练子集拟合您的模型,并在两个验证子集(2016 年和 2018 年)上测试性能(计算残差、MSE 等)。为了排除机会(您的结果可能会因为运气不好而有所不同),您可能需要重复整个练习(拆分数据,拟合模型,

此外,正如您所提到的,您可以拟合两种不同的模型(一个基于 2016 年数据,另一个仅基于 2018 年数据)。在这种情况下,我还将每年的数据拆分为训练和验证子集,并根据验证子集评估模型性能。作为相似度的度量,您可以使用:RMSE、QQ 图、您提到的统计测试或计算来自两个模型的预测的置信区间并检查置信区间是否重叠。

我放入我最喜欢的预测包中的功能之一是 CHOW 测试,用于调查参数中最重要的断点。在我这样做之前,我必须治疗/调整脉冲/季节性脉冲。

当然,如果存在已识别的电平转换或时间趋势,则绕过此测试。

CHOW 测试假定每组中的独立错误是他使用的 F 测试所要求的。

我的实现包括 GLM 中当代和/或滞后的用户指定因果关系的可能性。