之前因为 K8S 资源相关想做一个动态阈值异常检测的模块,但是看了 gpt 和国内文章感觉越来越被带偏,以下是个人理解不晓得对不对,综合这以下例子:
{
"InputTimeSeries": {
"0": 100, //请求时间 阈值
"1": 120,
"2": 150,
"3": 200,
"4": 180,
"5": 220,
"6": 300,
"7": 280,
"8": 240,
"9": 190
}
}
如果使用静态阈值,我们首先需要通过历史数据来判断该组件以往的请求值,设置阈值为 200 ,而被检测出来的异常是 t5-t8 。
而动态阈值选择前后对比的方式,通过对比值结果去进行检测:
它的差异是[20, 30, 50, -20, 40, 80, -20, -40, -50],根据差异的统计信息,例如均值为 15 ,标准差为 41.13 ,我们可以将动态阈值设置为均值加上两倍的标准差,即 15 + 2 * 41.13 = 97.26 。
也就说,差异值如果超过了 97.26 ,就会被认为是异常值,这里加入一个新的值 t10: 300 ,差异值超过 97.26 ,则认为 t10 是一个异常点。
97.26 是否可以理解成一个动态阈值算出来的固定阈值呢? 这是我对动态阈值的理解: 动态阈值是根据算法进行对比,比如说前后两个值的差异超过了阈值就会被认为是异常,但是阈值应该是不断变化的吧?
1
liuhuansir 2023-06-21 13:24:05 +08:00 1
你理解的没错,不过业务上不会取相邻数据去做动态阈值计算,而且取历史上同一时刻的值,比如计算下午 2 点的动态阈值,那么可以取过去一周或者一个月每天下午 2 点的值,均值+3 倍标准差算动态阈值,再对当天下午 2 点的实际值做动态阈值异常检测
|
2
Cola98 OP @liuhuansir 多谢大佬解答!
|