当前位置:首页>python>Python-33-异常值

Python-33-异常值

  • 2026-09-21 13:19:56
Python-33-异常值
异常值,也称离群点(Outlier),指的是个别数据和其它正常数据的分布差异很大。
异常值的出现主要有两类原因:
  • 一类是真实极端事件:数值如何业务逻辑(例如双十一的促销活动导致销售额的急剧增加),这类数据不能直接删除,需要单独分析,结合当时的情景来看。
  • 一类是人为误差:数据录入时的错误,设备故障导致数据存储异常,单位写错等,这类异常值需要进行清洗/修正。

处理思路:
  1. 先进性业务过滤(比如年龄不可能为负值)
  2. 先用其它方法找出异常值(箱型图四分位法、3σ原则)
  3. 判断这“异常值”是否属于真实业务可能出现的情况
  4. 对异常值进分析/处理

方法一:箱线图四分位法(IQR)
适用于所有分布,不受正态分布约束。
将一组数据从小到大排序,
  • q1,即下四分位数,25分位数,有25%数据值≤q1
  • q2,即中位数,50分位数,有50%数据的值≤q2
  • q3,即上四分数,75分位数,有75%数据≤q3
  • IQR,四分位距=q3-q1(箱线图中间的矩形的纵向距离)
  • 将数据超过上限和低于下限的值,判断为异常值。
方法二:Z-score(数据标准化法)
这个方法仅适用于数据近似正态分布。
原理:衡量距离均值有多少个标准差。Z=(X-μ)/σ
该图表示:
  1. 数据落在均值附近±1个标准差的概率是68.27%,
  2. 落在2个σ内的概率是95.45%,
  3. 落在3个σ内的概率是99.73%。
  4. 当|Z|大于3时,就可认为是异常值了。
直接调用series的mean(),std()方法求值μ=s.mean()σ=s.std()z=(series-μ)/σoutlier=np.abs(z)>3 #异常值

找到异常值后,判断不属于业务真实情况,处理的方式有几种方式:
    • 直接删除,不要这组数据了。
    • 替换,超过边界值的部分直接设置为边界值
    • 用中位数/均值/分位数进行填充覆盖异常值。
    • 新增一列标记是否异常,后期建模时单独处理。

Day 33
#Python #异常值 
晚风知我意,天涯共此时。

最新文章

随机文章