如何筛选异常值并处理它们?

machine learningdata sciencepython

简介

在数据集中,与大量其他数据点不同的数据点称为异常值。它们会扭曲统计测量并掩盖数据中的潜在趋势,从而对数据分析、建模和可视化产生不利影响。因此,在开始任何研究之前,识别和处理异常值至关重要。

在本文中,我们将介绍处理异常值的不同方法以及如何检查它们。

筛选异常值

我们必须首先识别异常值才能处理它们。以下是一些识别异常值的常用技术 -

1.视觉检查

使用图形和图表(例如箱线图、散点图和直方图)可视化数据是查找异常值的一种方法。与大部分其他数据点有很大差异的数据点称为异常值。通过分析图表,我们可以确定异常值是真实的还是由错误或损坏的数据造成的。

2. Z 分数

称为 z 分数的统计指标计算数据点偏离平均值的标准差数。我们可以通过计算每个数据点的 z 分数来找到与大多数其他数据点有很大差异的数据点。z 分数为 3 或更低通常被视为异常。

3.四分位距 (IQR)

数据的第 25 个百分位数 (Q1) 和第 75 个百分位数 (Q3) 之间的间隔称为四分位距。我们可以通过计算 IQR 并将其乘以 1.5 倍来找到与大多数其他数据点有显著差异的数据点。任何低于 Q1 或高于 Q3 且为 IQR 1.5 倍或更多倍的数据点通常被视为异常值。

处理异常值

找到异常值后,我们必须确定如何处理它们。以下是处理异常值的几种典型方法 -

1. 移除

从数据集中删除异常值是处理它们的最简单方法。但是,应谨慎使用这一策略,因为消除过多的异常值可能会对数据集的统计测量产生重大负面影响并掩盖关键趋势。在执行此操作时,记录删除异常值的过程和理由至关重要。

2. 转换

使用对数、指数或幂函数等数学函数转换数据是解决异常值的另一种策略。通过使用此方法,数据集统计测量的极值将影响较小,模式将更容易发现。

3. 插补

插补是用估计值替换缺失或异常数据的过程。可以使用多种技术来插补数据,包括均值插补、中位数插补和回归插补。虽然这种方法会增加数据集的偏差并影响研究的准确性,但应谨慎使用。

4.分割

分割数据集的过程包括根据各种特征或属性将其分成更小的组。我们可以独立研究每个组,并通过分割数据找到每个组独有的模式。当处理有效但反映数据不同部分的异常值时,此策略可能会有所帮助。

示例

import pandas as pd
import numpy as np
from scipy import stats

# 创建示例数据集
data = pd.DataFrame({'value': [10, 9, 8, 7, 6, 555, 999, 5, 6]})

# 计算数据集中每个值的 z 分数
z_scores = np.abs(stats.zscore(data))

# 将 z 分数大于 3 的任何值标识为异常值
outliers = data[z_scores > 3]

# 用数据集的中值替换异常值
data[z_scores > 3] = data['value'].median()

# 打印更新后的不含异常值的数据集
print(data)

输出

  value
0     10
1      9
2      8
3      7
4      6
5    555
6    999
7      5
8      6

解释

  • 使用一个名为 value 的列和 10 个值(包括一个值为 100 的异常值),生成一个样本数据集。

  • 统计数据用于确定数据集中每个值的 z 分数。来自 SciPy 包的 Z 分数函数。数据点的 Z 分数表示它与平均值的标准差是多少。

  • 使用打印功能,可以打印新的数据集(不包含异常值)。

  • 鉴于我们只关心偏离平均值的大小而不是其方向,因此使用 np.abs 函数获取每个 z 绝对分数的值。

  • 标准 z 分数 > 3 用于将 z 分数高于 3 的任何值标识为异常值。

  • 使用值的中值函数,将异常值替换为数据集的中值。

代码使用 z 分数方法定位异常值并将其从数据集中消除。数据集的中值用于替换已识别的异常值。当样本量很大或数据呈规则分布时,此策略会很有用。

重要的是要记住,还有其他方法可以处理异常值,本例中使用的方法只是其中之一。修剪、缩尾和利用可抵抗异常值的机器学习算法是进一步的典型技术。最佳方法将取决于数据集的特定特征和调查目标。

结论

总之,异常值会对数据分析、建模和可视化产生负面影响,因此在开始任何研究之前发现并处理它们至关重要。我们可以通过使用目视检查、z 分数和 IQR 检查异常值,然后使用移除、转换、归纳或分割来处理它们,从而确保我们的分析准确且有见地。然而,谨慎使用这些方法并记录过程至关重要。


相关文章