如何基于事件时间计算连续平滑事件率?

4
基于连续的实时事件流(每个事件的时间容易获知,但每个事件都没有值,它们都是相同的),如何编写一个过滤器/处理器,以输出连续平滑的事件速率?所谓连续,是指可以将其绘制为图形,而不仅仅是每个事件的时间,它会在特定时间提供有关估计事件速率的信息。 我知道“平滑”可能有歧义,但我正在寻找最简单的方法来使生成的图表看起来平滑。例如,在每个事件中不应该有任何大的峰值。
2个回答

2

通过取平均值。例如,每次出现事件时将a加1,每秒钟减去1/60的a。这将给您一个简单的平均值,滑动窗口约为一分钟。


每次收到一个事件,就将a加1 - 这将在每个事件发生时产生峰值,我希望避免这些峰值。 - Cray
除非您的事件非常罕见,否则很少会出现尖峰。 - Markus Mikkolainen
2
如果你想要一个高端的解决方案,也许可以设计一个卡尔曼滤波器来近似事件率? - Markus Mikkolainen
这个解决方案根本不起作用。除非你从一个好的近似值a开始,否则需要很多事件才能收敛到正确的速率。假设你每秒有一个事件,并且你从a = 0开始,你需要350个事件才能在3%内接近正确的速率值,即每秒1次。 - scharette

2

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

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

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


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