【问题标题】:How to calculate continuous smooth event rate based on event times?如何根据事件时间计算连续平滑事件率?
【发布时间】:2012-07-31 00:59:45
【问题描述】:

基于连续的实时事件流(每个事件的时间很容易知道,但每个事件没有价值,它们都是相同的),如何编写一个过滤器/过程来输出连续平滑的事件率?所谓连续,我的意思是它可以例如绘制成一个图表,而不是每个事件的时间,而是提供有关每个特定时间的估计事件发生率的信息。 我知道“平滑”可能是模棱两可的,但我正在寻找最简单的方法来使结果图看起来平滑。例如,每个事件不应该有任何大的峰值。

【问题讨论】:

    标签: algorithm


    【解决方案1】:

    通过平均。例如,每次您收到一个事件时,都将一个事件添加到一个。每秒删除 1/60 的 a。它会给你一个简单的平均值,滑动窗口约为一分钟。

    【讨论】:

    • “每次你得到一个事件都加一个” - 这会在每个事件发生时产生峰值,我提到的那些我想避免。
    • 很少出现峰值,除非您的事件非常罕见。
    • 如果你想要一个花哨的解决方案,也许设计一个卡尔曼滤波器来近似事件率?
    • 这个解决方案根本不起作用。除非您从 a 的良好近似值开始,否则将需要许多事件才能收敛到正确的速率。假设您每秒有一个事件,并且从 a = 0 开始,您将需要 350 个事件,直到您获得正确速率值(即 1/秒)的 3% 以内。
    【解决方案2】:

    这可以通过移动平均线来实现。取最后 N 个事件,其中 N 是平均窗口的大小。计算这 N 个事件中的第一个和最后一个事件之间的时间差。如果您以秒为单位测量并且想要每分钟的事件速率,您可以将 60 秒除以以秒表示的时间差,然后乘以 N-1。

    currentAvgRate = (N-1) * 60 /(最近 N 个事件之间的时间差)

    N 值越大,曲线越平滑,但对局部变化的反应越小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 2010-10-28
      • 2019-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-07-03
      相关资源
      最近更新 更多