检测相互偏离的两个数据流
Detect two data stream deviated from each other
前几天出现了一个有趣的问题。我有两个连续输出的数据流。比方说,A 和 B。(不同的值)
在理想世界中,A和B正好相反。如果A增加x%,那么B将减少x%,反之亦然。
然而,在我的世界里,它们并不是100%相对的。这意味着有时 A 可以增加 X% 而 B 只能减少 X- 0.Y%。当 B 增加时,反之亦然。差异很小但可以检测到。
我需要能够检测到任一数据流的减少量何时比另一个多 0.3%。例如,如果 A = 30,B = 100,A 的下一个数据点 = 33(增加 10%),B = 89.5(减少 10.5%)。然后我需要知道这已经发生了。因为两者之间的差异大于 0.3%。
现在,如果我知道它们的原始值,问题本身就很容易了。然而,这是一个连续的数据流,我没有参考点。我不需要绝对准确的答案,而是一个相对的答案。
例如,如果我们决定流式传输数据,我怎么能知道 "hey, buddy, they are going out of order, watch out" 而不知道它们曾经是什么?
记住两个流中的最后 N 个值
- 循环缓冲区非常适合这个
计算相关系数
检测相似度下降
- 例如这样的:
if (correlation_coefficient>-0.997) return "drop below 99.7%";
前几天出现了一个有趣的问题。我有两个连续输出的数据流。比方说,A 和 B。(不同的值)
在理想世界中,A和B正好相反。如果A增加x%,那么B将减少x%,反之亦然。
然而,在我的世界里,它们并不是100%相对的。这意味着有时 A 可以增加 X% 而 B 只能减少 X- 0.Y%。当 B 增加时,反之亦然。差异很小但可以检测到。
我需要能够检测到任一数据流的减少量何时比另一个多 0.3%。例如,如果 A = 30,B = 100,A 的下一个数据点 = 33(增加 10%),B = 89.5(减少 10.5%)。然后我需要知道这已经发生了。因为两者之间的差异大于 0.3%。
现在,如果我知道它们的原始值,问题本身就很容易了。然而,这是一个连续的数据流,我没有参考点。我不需要绝对准确的答案,而是一个相对的答案。
例如,如果我们决定流式传输数据,我怎么能知道 "hey, buddy, they are going out of order, watch out" 而不知道它们曾经是什么?
记住两个流中的最后 N 个值
- 循环缓冲区非常适合这个
计算相关系数
检测相似度下降
- 例如这样的:
if (correlation_coefficient>-0.997) return "drop below 99.7%";