用于发现测量列表中的“大”值变化的算法

时间:2013-02-21 09:38:54

标签: algorithm statistics

我有一个测量液体体积的传感器。 这种液体将被缓慢消耗并在需要时重新填充。 我想要检测的是这种液体“被盗”或填满的时间。 被盗是指液体体积突然下降。相反的将被视为填充。从传感器获取的值具有较小的尖峰,如果有足够的测量值,则应该忽略这些尖峰。

是否有任何统计方法(文档)或编程算法(任何语言)或更好的sql函数/查询(任何数据库)执行上述方案?

enter image description here

3 个答案:

答案 0 :(得分:1)

您通常希望发现outliers

  1. 您是否有想要保留的基线值,或者您想要与当前的平均值进行比较?

  2. 你认为突然下降是什么 - 它是绝对的术语(如5l)还是相对的(当前音量的5%)。

  3. 如果您依赖的是运行平均值,这是一个近似的描述。

    on volumeChange do
        calculate new runningAverage
        if (runningAverage outside allowedRange(oldRunningAverage)) then raise warning
        oldRunningAverage := runningAverage
    

    您需要知道的是:

    • 如何进行测量(你可以依赖它们来定期)
    • 如何定义allowedRange

    以下是5次测量的简单移动平均线(红色)的示意图(蓝色):

    SMA(5)

答案 1 :(得分:0)

或许你值得一看Microsoft StreamInsight

  

正如Microsoft SQL Server旨在管理静态数据一样,   StreamInsight旨在分析动态数据。至   StreamInsight,流是一系列具有时间关联的数据   用它。例子是提供商品的股票代码流   交易所中不同股票的价格随着时间的推移而变化,或者   温度传感器流,提供报告的温度值   传感器随着时间的推移。

     

StreamInsight程序通过一组查询传递流   分析数据,观察有趣的信息。然后呢   输出从查询中派生的信息,例如警报   是因为查询识别出异常而生成的。

答案 2 :(得分:0)

计算关于时间的一阶导数应该可以为您提供所需的信息。使用时间增量> 1个样本应该有助于消除小跳跃。