导入
加权平均值
学习如何使用加权平均来提高异常检测的准确性。
使用 z 分数进行异常检测是一种快速入门异常检测并立即看到结果的简单方法。但这种方法并不总是最佳选择,如果你发现该方法未能产生理想的告警,可以尝试一些改进方案或其他仅使用 SQL 的方法。
我们的系统使用均值来确定一个合理的基准值,并通过回溯周期来决定计算均值的时间范围。在本例中,我们基于一小时前的数据计算了均值。
这种计算均值的方法对一小时前发生的记录和刚刚发生的记录赋予相同的权重。为了更关注近期数据,可以适当降低历史数据的权重。新的加权均值将对近期数据更加敏感,从而可能更快地识别出异常。
为了给近期数据赋予更高权重,可以使用加权平均:
1SELECT 2 status_code, 3 avg(entries) as mean, 4 sum( 5 entries * 6 (60 - extract('seconds' from '2020-08-01 17:00 UTC'::timestamptz - period)) 7 ) / (60 * 61 / 2) as weighted_mean 8FROM 9 server_log_summary 10WHERE 11 -- 最近60个时间段 12 period > '2020-08-01 17:00 UTC'::timestamptz 13GROUP BY 14 status_code;
你可以在结果中观察到每个状态码的均值与加权均值之间的差异。
加权平均是股票交易员常用的常见指标之一。我们使用的是线性加权平均,但也可以尝试指数加权平均等其他形式。