时间序列的统计相似性

机器算法验证 时间序列 分类
2022-01-29 12:49:42

假设一个人有一个时间序列,可以从中进行各种测量,例如周期、最大值、最小值、平均值等,然后使用这些来创建具有相同属性的模型正弦波,是否有任何统计方法可以用来量化实际数据与假设模型的拟合程度如何?系列中的数据点数量在 10 到 50 个点之间。

我的一个非常简单的第一个想法是为正弦波的方向运动赋予一个值,即 +1 +1 +1 +1 -1 -1 -1 -1 -1 -1 -1 -1 +1 +1 +1 +1,对实际数据做同样的事情,然后以某种方式量化定向运动的相似程度。

编辑:更多地考虑了我真正想用我的数据做什么,并且根据对我最初问题的回答,我需要一个决策算法来在相互竞争的假设之间进行选择:即我的数据基本上是线性的(或趋势)带有可能具有循环元素的噪声;我的数据基本上是循环的,没有方向性的趋势可言;数据本质上只是噪音;或者它正在任何这些状态之间转换。

我现在的想法是结合某种形式的贝叶斯分析和欧几里得/LMS 度量。这种方法的步骤是

从数据测量中创建假设的正弦波

将 LMS 直线拟合到数据

导出欧几里得或 LMS 度量标准,用于偏离上述各项的原始数据

根据这个指标为每个人创建一个贝叶斯先验,即 60% 的组合偏离附加到一个,40% 附加到另一个,因此支持 40%

沿着数据滑动一个窗口一个数据点并重复上述操作以获得这个略有变化的数据集的新百分比指标 - 这是新的证据 - 进行贝叶斯分析以创建后验并更改有利于每个假设的概率

使用此滑动窗口(窗口长度 10-50 个数据点)沿整个数据集(3000+ 个数据点)重复。希望/意图是确定数据集中任何点的主要/有利假设以及它如何随时间变化

欢迎对这种潜在方法的任何评论,特别是关于我如何实际实施贝叶斯分析部分。

4个回答

欧几里得距离是机器学习中的常用度量。以下幻灯片很好地概述了该领域以及参考资料:

另请参阅 Keogh 基准页面上有关时间序列分类的参考资料:

如果您有要比较的特定模型: 我建议将最小二乘法作为一种度量,以最小化和对特定数据集的可能参数值进行评分。您基本上需要做的就是插入您的参数估计值,使用它们生成预测值,并计算与真实值的平均平方偏差。

但是,您可以考虑稍微改变一下您的问题: “哪种模型最适合我的数据?” 在这种情况下,我建议对正态分布的误差项做出假设——有人可能会说这类似于最小二乘假设。然后,根据您选择的模型,您可以假设您认为其他模型参数的分布方式(分配贝叶斯先验),并使用 R 中的 MCMC 包之类的东西从参数的分布中采样。然后,您可以查看后验均值和方差,以了解哪个模型最适合。

您对仅定性表示定向运动的“简单化的第一想法”在精神上类似于 Keogh 用于比较时间序列的 SAX 算法。我建议您看一下:Eamonn Keogh 和 Jessica Lin:SAX

根据您的编辑,听起来您现在正在考虑以不同的方式解决问题,但您可能会发现 SAX 提供了一个难题。

虽然我参加聚会有点晚了,但如果您正在考虑任何正弦曲线,小波变换也是一个很好的工具。理论上,您可以使用小波变换将序列分解为各种“部分”(例如,不同形状/频率的波、趋势等非波分量等)。大量使用的一种特定形式的波变换是傅立叶变换,但在这方面有很多工作。我很想能够推荐一个当前的包,但我已经有一段时间没有做信号分析工作了。然而,我记得一些支持这种功能的 Matlab 包。

如果你只是想在循环数据中寻找趋势,另一个方向是像 Mann-Kendall 趋势测试。它被广泛用于检测天气或水质变化等具有强烈季节性影响的事情。它没有一些更高级方法的花里胡哨,但由于它是一个经验丰富的统计测试,它相当容易解释和报告。