Advertisement

数据预处理—数据清洗(2)—异常值(极值)处理

阅读量:
3.1.2异常值(极值)处理
  • 处于特定分布区域或范围之外的数据通常会被定义为异常或“噪音” 。产生数据“噪音”的原因很多,例如业务运营操作、数据采集问题、数据同步问题等。对异常数据进行处理前,需要先辨别出到底哪些是真正的数据异常。从数据异常 的状态看分为两种:

    • 由于业务特定运营动作产生的,正常反映业务状态,而不是数据本身的异常规律。
    • 不是由于特定的业务动作引起的,而是客观地反映了数据本身分布异常
  • 大多数情况下,异常值都会在数据的预处理过程中被认为是噪音而剔除,以避免其对总体数据评估和分析挖掘的影响。但在以下几种情况下,我们无须对异常值做抛弃处理。

    • ※异常值由运营活动导致,正常反映了业务运营结果

      • 公司的A商品正常情况下日销量为1000台左右。由于昨日举行优惠促销活动导致总销量达到10000台,由于后端库存备货不足导致今日销量又下降到100台。在这种情况下,10000台和100台都正确地反映了业务运营的结果,而非数据异常案例。
    • ※异常检测模型

      • 围绕异常值展开的分析工作,如异常客户(羊毛党)识别,作弊流量检测,信用卡诈骗识别等
    • ※对异常值不敏感的数据模型

      • 如决策树
  • 处理方式

    • 保留
    • 删除
    • 用统计量或预测量进行替换
3.1.3异常值(极值)处理API
复制代码
    dataframe.mean()  #计算平局值
    dataframe.std()   #计算标准差

判断异常值方法:Z-Score

计算公式 Z = X-μ/σ 其中μ为总体平均值,X-μ为离均差,σ表示标准差。z的绝对值表示在标准差范围内的原始分数与总体均值之间的距离。当原始分数低于平均值时,z为负,以上为正。

复制代码
    import pandas as pd  # 导入pandas库
    # 通过Z-Score方法判断异常值
    df_zscore = df.copy()  # 复制一个用来存储Z-score得分的数据框
    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.2  
    # 判断Z-score得分是否大于2.2(自定义),如果是则是True,否则为False
复制代码
    # 删除异常值所在的行
    df_drop_outlier = df[df_zscore['col1'] == False]
    print(df_drop_outlier)
  • 异常值处理的关键:如何判断异常
    • 有固定该业务规则的直接利用业务规则
    • 没有固定业务规则的,可以使用数学模型进行判断,如正态分布的标准差范围,分位数法等

全部评论 (0)

还没有任何评论哟~