检测数据中的显著变化

3
我有一个图形输入,其中X轴是时间(向前走)。Y轴通常稳定,但在不同点有大幅度的下降和上涨(如下面标记为红色箭头)。
可视化很明显,但我该如何在代码中高效地检测到这一点?我不确定应该使用哪些算法,但我希望尽可能保持简单。

只需跟踪最近N个样本的值增量,并选择适当的N即可。 - Pieter Geerkens
如果N个点的平均斜率大于某个阈值,则这是一个“显著”的差异。 - Ron Beyer
1个回答

2
一种简单的方法是计算相邻两个样本之间的差异,例如diff= abs(y[x point 1] - y[x point 0]),并计算所有差异的标准偏差。这将为您排列差异,并帮助消除随机噪声,如果您仅采样最大的diff值,则会获得该噪声。
如果您的上/下值跨越多个x周期(例如每分钟绘制的温度),则应在N个样本上计算差异,并从N个样本中获取最大值和最小值。如果您想要5个样本作为检测期,则获取样本0,1,2,3,4并提取min/max,使用它们进行diff。对于样本1,2,3,4,5重复此操作,以此类推。您可能需要调整样本数量,因为太多的样本会影响stddev。
另一种替代方法是通过子采样计算图表的上/下部分的斜率,并选择有趣的斜率和长度。虽然这可以更准确地进行自动检测,但深入描述算法要困难得多。
我曾经处理过类似的问题并构建了一个图表分类器,但真的很想了解这方面的研究参考文献。
当您开始使用此方法时,您可能还想查看运营研究中的“控制图表”,它们可以识别几种可能值得检测的模式,具体取决于您的图表类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接