异常检测别再用写死的阈值了——一个简单启发式,帮你处理传感器流
做IoT数据监控的时候,我最烦的就是给每个指标写死一个阈值。你永远猜不到流量高峰或者网络抖动时那个值会跳成什么样,固定阈值不是误报就是漏报,调一次阈值能折腾一下午。
下一篇
自学ML第9天:终于搞懂为什么逻辑回归的损失函数叫交叉熵了 →
我的场景是:实时传感器流,每30秒上报一次延迟和错误率。之前写了个脚本,延迟超过500ms或者错误率超过2%就告警。结果半夜3点网络一抖,阈值瞬间被打穿,告警刷屏。调低阈值吧,白天正常波动也误报;调高吧,真故障又漏了。
后来试了个笨办法:不用固定值,而是用滚动窗口的统计量做动态阈值。比如取过去10分钟数据,算平均数和标准差,超过均值加3倍标准差才报警。代码大概是:
import numpy as np
def flag(sensor_series, window=20):
if len(sensor_series) < window:
return False
avg = np.mean(sensor_series[-window:])
std = np.std(sensor_series[-window:])
return sensor_series[-1] > avg + 3 * std这个启发式我用了快两个月,误报率低了不少,因为阈值是动态的,能跟着数据本身的变化走。但注意,它不适合那种波动特别剧烈、没有稳定分布的指标,比如流量突刺那种,得先用别的方法平滑一下。
如果你也遇到硬编码阈值头疼的问题,可以试试这个思路。当然,更复杂的可以用概率模型或者AI预测,但先从这个简单的开始就行,我用下来感觉已经够用了。
AI工具与大模型实操经验整理在Claude实战技巧汇总,有不少直接可参考的案例。
