我正在处理大量的时间序列数据。 这些时间序列基本上是每隔10分钟收集的网络测量,其中一些是周期性的(即带宽),而另一些则不是(即路由流量的数量)。
我需要一个简单的算法来进行在线“异常值检测”。基本上,我想在内存中(或者硬盘上)保存每个时间序列的整个历史数据,并且在实时场景中检测任何异常值(每次捕获新样本时)。 如何最好地实现这些结果?
我目前正在使用移动平均值以消除一些噪声,但是接下来该怎么做呢?像标准差、mad等简单方法对整个数据集并不起作用(我不能假设时间序列是稳定的),我希望有更“准确”的东西,理想情况下是一个黑盒子:
double outlier_detection(double* vector, double value);
其中vector是包含历史数据的双精度数组,返回值为新样本"value"的异常分数。