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

在Azure Data Explorer中过滤坏数据,确保Max()返回正确有效值

处理数据集异常值:精准过滤无效数据并正确计算最大值

针对你遇到的问题——用百分位数方法会误过滤有效值,而需要剔除像100000这类极端坏数据后取最大值,这里提供几个实用的解决方案:

方法一:改进四分位距(IQR)法(推荐)

IQR是比简单百分位数更稳健的异常值识别方法,能避免误删合理的高值。以你的数据集为例:

  1. 先对数据排序:1, 2, 8, 10, 20, 25, 55, 95, 98, 99, 100, 100000
  2. 计算下四分位(Q1):前1/4数据的中位数,即第3个和第4个数的平均值 (8+10)/2=9
  3. 计算上四分位(Q3):后1/4数据的中位数,即第9个和第10个数的平均值 (98+99)/2=98.5
  4. 计算四分位距:IQR = Q3 - Q1 = 98.5 - 9 = 89.5
  5. 设定异常值上限:Q3 + 1.5*IQR = 98.5 + 1.5*89.5 = 232.75
  6. 过滤掉超过上限的数值,剩下的有效值最大值就是100

用Python实现的代码示例:

data = [1, 2, 8, 10, 20, 25, 55, 100, 100000, 98, 99, 95]
sorted_data = sorted(data)
q1 = sorted_data[len(sorted_data) // 4]
q3 = sorted_data[3 * len(sorted_data) // 4]
iqr = q3 - q1
upper_limit = q3 + 1.5 * iqr
filtered_data = [x for x in data if x <= upper_limit]
print(max(filtered_data))  # 输出:100

方法二:基于领域知识设定范围

如果你明确知道数据的合理取值边界(比如你的场景里正常数据不会超过100),直接设定过滤范围是最高效的:

data = [1, 2, 8, 10, 20, 25, 55, 100, 100000, 98, 99, 95]
filtered_data = [x for x in data if x <= 100]
print(max(filtered_data))  # 输出:100

方法三:中位数绝对偏差(MAD)法

适合数据分布偏斜的场景,比IQR更抗极端值干扰:

  1. 计算数据集的中位数:(25+55)/2=40
  2. 计算每个数据与中位数的绝对偏差
  3. 计算这些偏差的中位数(MAD):(15+20)/2=17.5
  4. 设定阈值(通常取3倍MAD):3*17.5=52.5
  5. 偏差超过阈值的数值判定为异常值(这里100000的偏差是99960,远大于阈值,会被过滤)

为什么百分位数方法会失效?

常规的百分位数截断(比如取95%分位数)会把接近分位数的有效值误删——你的数据集里100处于高值但属于正常范围,若用95%分位数,可能会把它和100000一起过滤,而IQR或MAD方法能区分合理高值和极端异常值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:50:24