检测数据的重大变化

时间:2015-05-24 15:05:16

标签: c# algorithm graph statistics

我有一个图形输入,其中X轴是时间(向前)。 Y轴通常是稳定的,但在不同的点上有大的下降和升高(标记为下面的红色箭头)

Significant changes in graph

视觉上显而易见但我如何从代码中有效地检测到这一点?我不确定我应该使用哪种算法,但我希望尽可能简单。

1 个答案:

答案 0 :(得分:2)

一种简单的方法是计算每两个相邻样本之间的差异,例如diff = abs(y [x point 1] - y [x point 0])并计算所有差异的标准偏差。这将按顺序对差异进行排序,并且还有助于消除如果您只是采样最大差值而获得的随机噪声。

如果您的上/下值超过几个x周期(例如每分钟绘制的温度),则计算N个样本的差异,从N个样本中获取最大值和最小值。如果您想要5个样本作为检测周期,则获取样本0,1,2,3,4并提取最小/最大值,将其用于diff。重复样品1,2,3,4,5等。由于太多样本开始影响stddev,您可能需要使用它。

另一种方法是通过二次取样并选择有趣的斜率和长度来计算图表上/下部分的斜率。虽然这对于自动检测更准确,但要深入描述算法要困难得多。

我已经处理过类似的问题,并建立了图表分类器,但我真的很喜欢这方面的研究参考。

当你实现这一目标时,你可能还想查看运营研究中的“控制图”,他们会根据你的图表确定几种可能值得检测的模式。