数据清洗:异常值识别和处理方法

异常数据识别

异常数据是数据分布的常态,处于特定分布区域之外的数据通常会被定义为异常或”噪音”。产生数据”噪音”的原因很多,例如业务运营操作、数据采集问题、数据同步问题等。对异常数据进行处理前,需要先辨别出哪些是真正的数据异常。

从数据异常的状态看分为两种:

  • 一种是”伪异常”,这些异常是由于特定的运营动作产生,其实正常反映了业务状态。
  • 一种是”真异常”,这些异常并不是由于特定的业务动作引起,而是客观反映了数据本身的分布异常。

如何判断异常值

对于有固定业务规则的可直接套用业务规则,而对于没有固定业务规则的,可以采用常见的数学模型进行判断。比如基于概率分布的模型(例如正态分布的标准差范围)、基于统计的方法(例如分位数法)、基于聚类的方法(例如KMeans)、基于分类的方法(例如KNN)、基于密度的方法(例如LOF)等。异常值的定义带有较强的主观判断色彩,具体需要根据实际情况选择。

示例如下:

导入pandas库
import pandas as pd

生成异常数据,120较为异常
df = pd.DataFrame({'col1': [1, 120, 3, 5, 2, 12, 13],
                   'col2': [12, 17, 31, 53, 22, 32, 43]})
print(df)

数据清洗:异常值识别和处理方法

查看异常值:

通过Z-Score方法判断异常值,阙值设置为正负2,阙值的设置主要看业务需求或数学模型

复制一个用来存储Z-score得分的数据框,常用于原始对象和复制对象同时进行操作的场景
df_zscore = df.copy()
cols = df.columns
for col in cols:
    df_col = df[col]
    z_score = (df_col - df_col.mean()) / df_col.std()  # 计算每列的Z-score得分
    df_zscore[col] = z_score.abs() > 2  # 判断Z-score得分绝对值是否大于2,大于2即为异常值
print(df_zscore)

数据清洗:异常值识别和处理方法

丢弃处理

大多数数据挖掘工作中,异常值都会在数据的预处理过程中被认为是噪音而剔除,以避免其对总体数据的影响。

剔除异常值所在的行
print(df[df_zscore['col1'] == False])

数据清洗:异常值识别和处理方法

以下任意一种场景,我们无需丢弃异常值:

  • 异常是由于业务特定运营动作产生。该异常是由业务部门的特定动作导致的,如果抛弃异常值将导致无法正确反映业务结果。
  • 异常检测模型的应用。异常检测模型是针对整体样本中的异常数据进行分析和挖掘,以便找到其中的规律,这种数据应用围绕异常值展开,异常数据本身是目标数据,因此不能直接丢弃。异常检测模型常用于客户异常识别、信用卡欺诈、贷款审批识别、药物变异识别、恶劣气象预测、网络入侵检测、流量作弊检测等。
  • 包容异常值的数据建模。如果数据算法和模型对异常值不敏感,那么即使不处理异常值也不会对模型本身造成负面影响。例如在决策树中,异常值本身就可以作为一种分裂节点。

参考资料:《Python数据分析与数据化运营》宋天龙

Original: https://blog.csdn.net/sinat_41928169/article/details/124422587
Author: 大哇唧
Title: 数据清洗:异常值识别和处理方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/601129/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球