Contents

去除数据异常值

问题

在数据的世界里,我们常常会遇到各种各样的“怪兽”——异常值。这些异常值就像捣乱的顽皮鬼,总是试图扭曲我们对数据的理解。但别担心,今天介绍一个强大的魔法工具——quantile_over_time,它能帮助我们驯服这些顽皮鬼,找到数据的“中坚力量”。

/removec1.png

方案

在我的ORP数据检测中,有时候会出现一个有趣的现象:ORP在393和394之间来回跳跃,但是摄像头因为光线的缘故,会拍摄成399,这是一个典型的错误数据,我也可以用代码去除这个不正常数字,但是最后发现用Prometheusquantile_over_time是最佳的解决方案。

quantile_over_timePrometheus 中的一个强大工具,它可以根据指定的时间范围计算数据的分位数。分位数是一种统计工具,可以帮助我们更好地理解数据的分布情况,而不受异常值的影响。

首先我们要理解分位数,它是一种将数据分成若干等份的值。例如:

  • 0.5 分位数(中位数):表示数据中有一半的值小于或等于这个值,另一半的值大于或等于这个值。
  • 0.1 分位数:表示数据中有 10% 的值小于或等于这个值。
  • 0.9 分位数:表示数据中有 90% 的值小于或等于这个值。
1
2
3
# 0.5 表示计算中位数。
# ORP[15m] 表示过去 15 分钟内的数据。
quantile_over_time(0.5, ORP[15m])

具体使用

假设过去 15 分钟内的ORP数据是:

1
393, 394, 399, 394, 393

排序后的数据,中位数(0.5 分位数)为第 3个值:394

1
393,393,394,394,399

结果

使用 quantile_over_time(0.5, ORP[15m]),你得到的结果是 394 。这个值完全忽略了异常值 399 。最终曲线非常的丝滑:

/removec2.png