【漫话机器学习系列】264.内距(又称四分位差)Interquartile Range
深入理解内距(Interquartile Range,IQR)——数据分析中的异常值利器
在日常的数据分析中,我们经常需要识别和处理异常值(Outliers),而内距(Interquartile Range,简称 IQR)是一个非常实用的工具。本文将通过一张直观的图示,深入讲解 IQR 的概念、计算方法及其在异常值识别中的重要作用。
一、什么是内距(IQR)?
内距(Interquartile Range) 又称 四分位差,是描述数据分布集中趋势和离散程度的一种重要统计量。
它定义为:
其中:
-
Q1:第一四分位数(25%分位数)
-
Q3:第三四分位数(75%分位数)
IQR 表示的是中间 50% 数据的跨度,即从 25% 到 75% 之间数据的范围,能有效排除极端值的影响。
二、图示解读:IQR 与箱型图的关系
下面是 Chris Albon 的一张经典图解,非常直观地展示了 IQR 在箱型图(Boxplot)中的作用。
图中关键说明:
-
中间的盒子部分 表示从 Q1 到 Q3,即 IQR 范围。
-
盒子中间的竖线 表示中位数(Q2),也称第 2 四分位数。
-
左侧边缘线 是 Q1 - 1.5 × IQR,称为“下边缘值”。
-
右侧边缘线 是 Q3 + 1.5 × IQR,称为“上边缘值”。
-
边缘线以外的值 即为可能的异常值(Outliers)。
三、IQR 异常值判断准则
使用 IQR 判断异常值的方法,是统计分析中最常见也最稳健的方法之一:
-
异常值判定区间:
-
低于 Q1−1.5×IQR
-
高于 Q3+1.5×IQR
-
更严格时,可以使用:
-
极端异常值判定:
-
低于 Q1−3×IQR
-
高于 Q3+3×IQR
-
这种方法相比于标准差法(均值 ± n × 标准差)更不容易受极端数据的影响,尤其适合非正态分布的数据集。
四、IQR 实战应用场景
-
数据清洗
利用 IQR 自动识别并剔除异常值,提高数据质量。 -
可视化分析(箱型图)
快速判断数据是否偏态、是否存在离群点。 -
机器学习特征工程
对离群值进行截断处理或归一化前的预处理,提升模型鲁棒性。
五、代码实操(以 Python 为例)
import numpy as np# 示例数据
data = np.array([10, 12, 13, 14, 15, 16, 100])# 计算 IQR
Q1 = np.percentile(data, 25)
Q3 = np.percentile(data, 75)
IQR = Q3 - Q1# 异常值上下界
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR# 找出异常值
outliers = data[(data < lower_bound) | (data > upper_bound)]print("IQR:", IQR)
print("异常值:", outliers)
输出结果会识别出 100
这个远离其余数据点的异常值。
六、总结
-
IQR 是一种稳健的离散度量,适合用于非正态分布的数据。
-
在数据分析、可视化和特征工程中都有广泛应用。
-
搭配箱型图使用,能非常直观地识别异常点。