在进行数据科学项目的数据预处理时,经常会遇到一个棘手的问题:数据集中的极端值是否应该保留在分析中,或者是否应该从数据集中删除。让来探讨一下自然异常值和非自然异常值之间的区别。非自然异常值通常是由测量误差、数据收集错误或数据输入错误引起的,而自然异常值可能是银行数据中的欺诈交易等情况。无论在数据收集过程中多么警惕,每个数据分析师都曾感受到发现异常值时的挫败感。异常值是在进行机器学习建模时几乎每次都会遇到的问题之一。
答案是“不是”,因为异常值与噪声数据是不同的。噪声被认为是测量变量中的随机误差或方差。噪声的去除过程应该在异常值检测之前进行。
在统计学中,异常值可以被定义为“与其他所有观测值显著不同的观测值”。从这个定义中,可以得出结论,异常值是某种“与众不同”或“与群体不同的”东西。一些统计学家正式将异常值定义为“与其他观测值具有不同底层行为的观测值”。或者,异常值是那些与其他观测值显著不同的观测值。
现实生活中的异常值类比,例如:在一个班级中,有100名学生,其中一名学生的成绩总是比其他学生高,并且他的成绩与考试的难度水平关系不大。在这里,将这个学生视为异常值。另一个例子是,当试图计算一群人的平均薪水时,不小心将像比尔·盖茨或埃隆·马斯克这样的人加入了这个群体。那么,现在新群体的平均薪水就不再是一个真实的代表了,因为异常值的存在。
异常值并不总是对问题陈述构成危险。实际上,异常值有时可以是有帮助的指标。它们代表测量中的错误、数据收集不当(在数据收集时不小心)或者简单地显示了在收集数据时未考虑的变量。许多数据分析师直接倾向于删除异常值。然而,这有时对预测分析来说是错误的选择。在收集数据时,人们无法识别异常值;在开始分析数据之前,不会知道哪些数据点是异常值。由于一些统计测试对异常值敏感,因此检测它们并相应地处理它们是数据分析的重要组成部分。
让考虑以下三种不同的情况:第一种情况是,有人口年龄的数据,其中一个人的年龄是356岁,知道这个年龄值是不可能的,因此这个数据点被认为是异常值,不知道应该用什么值来替换这个值。因此,必须从数据集中完全删除这个数据点。第二种情况是信用卡欺诈检测的用例,异常值分析变得重要,因为在这里,例外而不是规则可能是分析师感兴趣的。第三种情况是回归问题,其中学习小时数是自变量,分数是因变量。有一些异常值存在,因此它们吸引了回归线的一侧。为了解决这个问题,可以创建一个IQ列,然后异常值行为可能可以从IQ列中得到合理化。
让逐一讨论每个统计数据,平均值:它是唯一受到异常值影响的中心趋势度量,因为它是通过将观测值的总和除以观测总数来计算的。由于在平均值的表达式中包含了总和,并且由于异常值,有一些异常值,即异常值将影响这个总和。例如,如果异常值具有比其他值更大的正值,那么总和将足够大,以至于平均值也会略大;而如果异常值具有非常小的值,那么平均值也会略小。因此,数据集中的异常值存在可以大大影响平均值。
// 假设有一个数据集,想要计算平均值
let dataset = [1, 2, 3, 4, 5, 100]; // 包含一个异常值100
let mean = dataset.reduce((acc, val) => acc + val, 0) / dataset.length;
console.log(mean); // 输出将受到异常值的影响
标准差(SD):它是通过数据集中的每个观测值来计算的。它是一个敏感的度量,因为它会受到异常值的影响,因为标准差是通过取样本案例与平均值之间的差异来计算的,异常值会影响标准差。中位数:中位数被定义为特定分布中的中间值。它是一半观测值在上面,一半观测值在下面的数据点。它不受异常值的影响,因此在分布具有极端观测值时,中位数是首选的中心趋势度量。四分位距(IQR):IQR是75%和25%百分位之间的差异。IQR对异常值更有抵抗力。IQR的定义只涵盖数据的中间50%,因此异常值远在这一范围之外,小数量的异常值不太可能显著改变这一点。如果添加了一个异常值,IQR会改变到另一组数据点,这些数据点可能与之前的不太相似(在大多数数据集中),因此它是“抵抗”变化的。特别是对于大型数据集来说更是如此。
// 计算IQR的示例代码
let quartiles = require('quartiles');
let q = quartiles(dataset);
let iqr = q.Q3 - q.Q1;
console.log(iqr); // IQR的计算不受异常值的影响
范围:最容易受到异常值的影响,因为它是数据集中最大值和最小值之间的差异。