Kusto series_outliers()函数异常分数计算逻辑详解
Kusto series_outliers() 函数异常分数计算详解
核心逻辑
series_outliers() 采用Tukey图基围栏法识别数值数组中的异常值,并计算对应异常分数。默认以25%/75%分位数作为Q1(低四分位)、Q3(高四分位),同时支持自定义分位数范围(比如你示例中用的10%/90%)。
完整计算步骤
1. 计算指定分位数(Q1、Q3)
根据自定义的分位范围,统计数组的低百分位(Q1)和高百分位(Q3):
- 你的示例中Q1=2.4(10%分位),Q3=15(90%分位)
2. 计算四分位距(IQR)
IQR是Q3与Q1的差值,用于量化数据的离散程度:
IQR = Q3 - Q1 = 15 - 2.4 = 12.6
3. 定义异常判定围栏
基于Tukey法,异常值的边界由IQR缩放得到:
下围栏 = Q1 - k * IQR 上围栏 = Q3 + k * IQR
其中k为缩放系数,默认值为1.5,可根据业务需求调整。
4. 计算单个数据点的异常分数
分数计算规则如下:
- 若数据点
x落在**[Q1, Q3]区间内**,异常分数为0(表示非异常); - 若
x < Q1,异常分数 =(x - Q1) / (k * IQR)(结果为负,反映点低于正常区间的程度); - 若
x > Q3,异常分数 =(x - Q3) / (k * IQR)(结果为正,反映点高于正常区间的程度)。
你的示例分数推导
你提供的数组中,仅-3、2.4、15、16四个点的分数非零,其余数据均落在[2.4, 15]区间内,因此分数为0。
结合你给出的异常分数反推,示例中应该使用了自定义的k值(而非默认的1.5):
- 对于
x=-3:代入公式(-3 - 2.4)/(k*12.6) = -1.904,可算出k≈0.2857(即1/3.5); - 对于
x=16:(16 - 15)/(0.2857*12.6)≈0.278,与你给出的1.670存在偏差,推测是示例中Q1/Q3为手动指定值,或分位数计算采用了特殊插值方式,但核心计算逻辑仍符合上述步骤。
内容的提问来源于stack exchange,提问作者superdense23
相关产品推荐
相关产品推荐

