You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kusto中排除异常离群数据 避免影响p95、p5等统计指标

Kusto 排除异常数据点的常用实现方案

以下是3种适配不同场景的处理方案,可根据你的实际情况选择:

1. 固定阈值过滤(最适配你的场景)

你提到异常值可达正常值的5倍,可先基于业务正常范围确定阈值,直接过滤超出阈值的数据:

// 示例:过滤响应时间超过5000ms的异常数据后计算p5、p95
network_query_log
| where response_time < 5000 // 替换为你业务正常值的5倍阈值
| summarize p5=percentile(response_time, 5), p95=percentile(response_time, 95)

如果日志中存在明确的调试流量标识(比如请求带调试标记、来源为开发者IP段),可以直接过滤这类请求,准确性更高:

network_query_log
| where is_debug == 0 // 假设日志中is_debug字段标记是否为调试请求
| summarize p5=percentile(response_time, 5), p95=percentile(response_time, 95)

2. 动态百分位截断

如果没有明确的固定阈值,可先计算极端百分位(比如p99.9)作为动态阈值,过滤超出该值的极端数据:

// 先计算全量数据的p99.9作为阈值,再过滤后统计
let threshold = toscalar(network_query_log | summarize percentile(response_time, 99.9));
network_query_log
| where response_time < threshold
| summarize p5=percentile(response_time, 5), p95=percentile(response_time, 95)

3. 使用内置Winsorize函数处理极端值

Kusto提供percentilewinsorize()函数,可直接将低于低百分位、高于高百分位的极端值替换为对应百分位数值,无需提前过滤,适合不想丢失数据总量的场景:

// 示例:将response_time中低于p1、高于p99的数值替换为p1、p99的值后统计
network_query_log
| extend cleaned_response_time = percentilewinsorize(response_time, 1, 99)
| summarize p5=percentile(cleaned_response_time, 5), p95=percentile(cleaned_response_time, 95)

内容的提问来源于stack exchange,提问作者Subodh Nijsure

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:54:05