如何检测时间序列数据中的重大变化/趋势?

as3*_*unt 26 algorithm statistics numerical signal-processing real-time

所以我有一个25个样本的阵列,我希望能够记录它是否从这25个采样时间间隔减少n或增加的趋势(基本上25个样本数组是我的缓冲区,每个说1毫秒填充).

请注意,这是我正在寻找的一般趋势,而不是单个衍生物(正如我将使用有限差分或其他数值微分技术获得).

基本上我希望我的数据有噪音,所以即使在进行过滤等操作之后也可能出现起伏.但这是我正在寻找的增加或减少行为的一般趋势.

我希望在每个ms中集成增加/减少行为以触发某个事件,这更多的是用户界面事件(闪烁LED),因此只要我能检测到一般趋势,它就不必非常延迟处理.

提前致谢!

Ass*_*him 28

正如已经指出的那样,你不是在寻找衍生品.你真的在寻找一个时间序列的"重大变化"检测算法.

你肯定想要一个平滑滤波器(移动平均滤波器很好 - 参见Bjorn对这部分的回答).

但除了平滑滤波器之外,您还需要一个决策标准或阈值选择器,在此之后您将决定滤波后的更改是否重要.

如果您的时间序列的基础统计数据是稳定的(固定时间序列),那么您可以使用固定的统计阈值,即与平均值的标准偏差.例如,如果您想要一个相当强的"警报"阈值,您可以选择2个标准偏差(想想仅在最强5%的回报上发出警报).

如果基本问题中没有任何内容表明您的时间序列是稳定的,即系列中是否有趋势,或者生成时间序列的基础流程可以在您监控时进行基金更改,那么您' 在信噪比(mu/sigma)的意义上,需要使用动态或自适应阈值.然后,您可以选择检测所有通过信号进行噪声测试的"有意义"元素.

  • @guckogucko:如果你有一个特定的时间序列,建议你添加一个新的问题,然后在这里的评论中发布该问题的链接,所以我们知道去了.你也可以通过这种方式获得更好的答案.(考虑在stats.stackexchange.com上发布,因为那里你会有大量的saavy统计员和数据头,但不管怎样,把链接放在这里我会看看.) (2认同)

Bjo*_*che 14

对我来说听起来并不像你想要衍生物一样.听起来你想要一个低通滤波器.低通滤波器可以简单地删除快速变化的数据,并留下更长,更慢变化的趋势.最直观的低通滤波器是移动平均滤波器,您可以在其中获取最后n个输入的平均值,其中n是根据噪声与您要查找的趋势大小确定的.这被广泛用于从音频数据到图像处理到失业数据(广泛引用的四周移动平均失业数字).

如果您认为有必要,可以使用递归技术开发更有效/更具选择性的过滤器.您可以使用本教程创建低通滤波器.它是为音频编写的,但它适用于大多数数据.它向您展示了如何编写钟形滤波器,但是低通滤波器更容易.

http://blog.bjornroche.com/2012/08/basic-audio-eqs.html


YBE*_*YBE 2

如果您了解信号统计数据并将其用作 n 步超前预测器,则可以使用维纳滤波器。然后,您可以轻松地根据维纳滤波器的预测来做出趋势决策。如果信号不是广义平稳的,并且您认为预测不能线性完成(非线性/非平稳过程),那么您可以使用自适应维纳滤波器,例如 LMS滤波器