统计分布算法是什么
统计分布算法(Statistical Distribution Algorithm):这种算法是根据数据的概率分布进行阈值设置的。比如,计算出数据的均值和标准差,通过均值加减若干个标准差来确定阈值。根据数据的分布情况,阈值的精度和敏感度较高,常见的应用场景有金融风控系统等。
统计分布算法是根据数据的概率分布来进行阈值设置的。具体步骤如下:
-
首先,需要计算数据集的均值和标准差。
-
然后,根据需要确定一个合适的标准差倍数k (通常取2或3)。
-
根据均值和标准差,计算上下界,公式为:upper_bound = mean + k * std_deviation; lower_bound = mean - k * std_deviation;
-
最后,设置阈值为upper_bound和lower_bound之间的某个值,根据实际情况和需求来选择。
统计分布算法是一种比较常用和实用的算法,适用于大部分的场景。但是不同的场景需要区别对待,具体的应用还需要结合实际情况来制定具体的数值
实践
当我们建立一个对项目的监控系统,在系统出现异常时会有想要及时被告知的需求。对于大部分监控系统,提供了监控报警功能,但其中的阈值该如何确定是一个值得思考的问题。
如果监控系统还没上线,大部分时候对于报警阈值往往是根据经验拍脑袋决定的,而对于已经上线获取到一定项目数据的监控系统,去确定报警阈值,可以使用统计学到一些方法根据历史数据确定一个值。
比如我们收集了项目的异常事件,并发送到 Sentry 监控。在收集了一段时间后项目异常后,我们并不能百分百解决所有存在的异常问题:有一些问题出现的原因是暂时无法定位的;有一些是偶发性问题,影响并不大,优先级并不高;还有一些是可预知的事件,比如在版本释放后,会有一些服务暂时下线不可用引起的异常。
那么监控系统里会经常驻留以上这些异常,这些异常对我们来说已经知晓,但暂无精力去解决,对于报警来说他们不算做系统异常情况。这时就需要根据这些异常值出现的数量确定我们的监控阈值该设定为多少合适。
我们可将历史的异常数量按一定的单位时间导出为一张 Excel 表,根据这些数值用 AVERAGE 函数算出平均值,再用 STDEV.S 算出标准差。理论上单位时间内,“正常”值应该在平均数上下一个标准差内波动的数值上正常情况,监控系统只关心的是上限,所以低于一个标准差的值是不用关心的。那么如果较为关心超过正常值的情况,可将报警阈值设置为平均数加上一个标准差为第一个报警阈值,而后根据情况设置增加几个标准差为第二个报警阈值,以及第三、第四个等。
根据正态分布和标准差的性质,我们从计算阈值要包含所有 0 开始的值,一个正标准差约覆盖 84.13% 的情况,两个标准差约覆盖 97.72% 的情况,三个标准差则为 99.87,之后发生的概率就是小于 1% 的发生概率了,那么也就是说可以根据这个思路,来确定我们该去设置几个标准差的值为报警阈值。
数据过滤
对于一些服务系统并不是全体 24 小时都有用户使用,所以对数据还需做一些过滤。比如过滤掉周末时间,过滤掉晚间无用户使用系统时间,然后对于过低和过高的值进行过滤
参考
百度百科. 标准差[EB/OL]. [2023-02-23]. baike.baidu.com/item/%E6%A0….
百度百科. 正态分布[EB/OL]. [2023-02-23]. baike.baidu.com/item/%E6%AD…