异常和离群值检测在数据分析中的关键作用

2024年01月19日 由 alex 发表 549 0

介绍


在数据分析领域,异常或离群值检测就像是在大海捞针。这些罕见的、意料之外的数据偏差或异常现象可以预示着从突破性发现到迫在眉睫的危机的一切事情。随着各个领域数据的指数级增长,高效地识别这些异常不仅有益,而且至关重要。本文深入探讨了异常和离群值检测的重要性、方法论和应用,强调了其在将原始数据转化为有意义见解中的关键作用。


1


探测异常和离群值的意义


异常或离群值是与数据集内的常态明显偏离的数据点。探测这些数据点至关重要主要有两个原因。首先,异常可能表明数据中的错误或噪音,例如测量不准确或数据输入错误。识别并解决这些异常对于保持数据的完整性至关重要。其次,也许更为重要的是,异常可能是重要底层现象的先兆。在网络安全、金融和卫生保健等领域,识别这些离群值可能意味着及时干预与成本高昂的反应性措施之间的差异。


异常和离群值检测方法


  1. 统计方法:这些传统方法基于对数据分布的统计假设。像z-score和IQR这样的技术用来识别与统计平均值距离异常的数据点,将其标记为潜在的离群值。
  2. 机器学习方法:机器学习的出现彻底改变了离群值检测。无论是监督学习还是无监督学习的算法,都被训练用以检测复杂数据集中的偏差。像神经网络和支持向量机这样的方法尤其擅长处理高维数据。
  3. 基于邻近性和密度的技术:这些方法关注数据点之间的空间关系。基于邻近性的方法,例如k-最近邻,通过评估一个点与其邻居的接近程度来识别离群值,而基于密度的方法像DBSCAN则寻找数据密度低的区域。
  4. 降维:像PCA这样的技术减少了数据的复杂性,使异常值更容易被发现。通过将数据转变为低维空间,这些方法可以突出显示在原始高维空间中可能隐藏的异常。
  5. 可视化工具:像散点图和箱形图这样的简单而强大的可视化工具为离群值检测提供了直观手段。它们特别适用于初始数据探索,并能补充更复杂的分析技术。


各种领域中的应用


异常检测的多功能性在其广泛的应用范围中得到了体现:


  • 金融领域的欺诈检测:识别异常交易有助于早期检测欺诈行为,从而可以节省数百万潜在损失。
  • 网络安全:在网络安全领域,离群值检测算法能够识别异常的网络流量,这可能意味着网络攻击。
  • 健康监测:在患者数据中检测离群值,可以导致早期疾病诊断或识别医疗读数错误。
  • 工业质量控制:在制造过程中进行异常检测,确保通过识别有缺陷的产品或流程偏差来达到质量和安全标准。


代码


创建一个完整的Python代码进行异常或离群值检测涉及数个步骤,包括生成合成数据集,应用异常检测方法以及可视化结果。在这个示例中,我会使用隔离森林方法,它对高维数据集效果良好,且适用于数值和分类数据。它特别适用于异常检测,因为它隔离异常值而不是对正常数据点进行分析。


以下是分步指南:


import numpy as np
import pandas as pd
from sklearn.ensemble import IsolationForest
import matplotlib.pyplot as plt
# Generate synthetic data
rng = np.random.RandomState(42)
X = 0.3 * rng.randn(100, 2)
X_train = np.r_[X + 2, X - 2]
X_outliers = rng.uniform(low=-4, high=4, size=(20, 2))
# Fit the model
clf = IsolationForest(max_samples=100, random_state=rng)
clf.fit(X_train)
y_pred_train = clf.predict(X_train)
y_pred_outliers = clf.predict(X_outliers)
# Visualize the data
plt.figure(figsize=(10, 7))
# Plot the line, the samples, and the nearest vectors to the plane
xx, yy = np.meshgrid(np.linspace(-5, 5, 50), np.linspace(-5, 5, 50))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.title("IsolationForest")
plt.contourf(xx, yy, Z, cmap=plt.cm.Blues_r)
b1 = plt.scatter(X_train[:, 0], X_train[:, 1], c='white', s=20, edgecolor='k')
b2 = plt.scatter(X_outliers[:, 0], X_outliers[:, 1], c='red', s=20, edgecolor='k')
plt.axis('tight')
plt.xlim((-5, 5))
plt.ylim((-5, 5))
plt.legend([b1, b2],
           ["Regular observations", "Outliers"],
           loc="upper left")
plt.show()


2


这段代码将生成一个图表,在图表中常规观测点被标记为白色,而异常点被标记为红色。背景颜色的深浅表示孤立分数,颜色越深表明区域越孤立,也就越有可能包含异常值。请记住,异常检测的有效性在很大程度上取决于你数据的性质以及算法的具体参数设置。对于不同的数据集,你可能需要调整孤立森林算法的参数。


结论


异常和离群值的检测是一个动态发展的领域,在各种数据分析领域都至关重要。随着数据量和复杂性的增加,检测这些异常的方法也在不断进步。异常检测提供的关键洞见不仅有助于维护数据的完整性,还在预防性问题解决和创新中起着关键作用。在数据驱动的时代,掌握在平常中发现不常见的艺术不仅是一项技能,更是一种必需。


文章来源:https://medium.com/ai-mind-labs/unveiling-the-unusual-the-critical-role-of-anomaly-and-outlier-detection-in-data-analysis-fff710538417
欢迎关注ATYUN官方公众号
商务合作及内容投稿请联系邮箱:bd@atyun.com
评论 登录
热门职位
Maluuba
20000~40000/月
Cisco
25000~30000/月 深圳市
PilotAILabs
30000~60000/年 深圳市
写评论取消
回复取消