数据预处理—数据清洗(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)
还没有任何评论哟~
