箱线图与四分位距(IQR)

Python 中的异常检测

Bekhruz (Bex) Tuychiev

Kaggle Master, Data Science Content Creator

箱线图回顾

  • 箱线图:
    • 是"五数概括"的增强可视化
    • 展示数据位置、离散与偏度
    • 指示是否存在离群值

带注释的示例箱线图。

Python 中的异常检测

箱线图组成部分

一个箱线图,用箭头与文字标注了第25、第75百分位数和箱体。

Python 中的异常检测

须(Whiskers)

另一个箱线图,标注了更多组件:中位数、示例离群值、上下离群限。

Python 中的异常检测

四分位距(IQR)

  • IQR:四分位距
  • IQR = Q3 - Q1
  • 须长 = IQR 与系数的组合

与上一页相同但更小的箱线图。

Python 中的异常检测

计算须长

  • 系数 = 1.5
  • 下限:$Q1 - 1.5 * IQR$
  • 上限:$Q3 + 1.5 * IQR$

与上一页相同的箱线图。

Python 中的异常检测

绘制箱线图

import matplotlib.pyplot as plt

plt.boxplot(sales)
plt.xlabel("Product sales")

产品销量的箱线图,许多离群值在上限之上形成一条黑线。

Python 中的异常检测

控制须长

plt.boxplot(sales, whis=2.5)
plt.xlabel("Product sales")

产品销量的箱线图,上须之上离群值更少。

Python 中的异常检测

代码中的 IQR

# Calculate the percentiles
q1 = sales.quantile(0.25)
q3 = sales.quantile(0.75)


# Calculate IQR IQR = q3 - q1 # Set Multiplying factor factor = 2.5
Python 中的异常检测

用 IQR 查找离群值

# Calculate the limits
lower_limit = q1 - (IQR * factor)


upper_limit = q3 + (IQR * factor)
# Create masks
is_lower = sales < lower_limit
is_upper = sales > upper_limit


# Filter outliers = sales[is_lower | is_upper] # Print the # of outliers print(len(outliers))
29
Python 中的异常检测

方法的灵活性

  • 箱线图与 IQR 过滤具有很高的灵活性
  • 可自定义标记离群值的规则
Python 中的异常检测

让我们来练习!

Python 中的异常检测

Preparing Video For Download...