Python异常检测-3Sigma

系列文章目录

Python异常检测- Isolation Forest(孤立森林)
python异常检测 - 随机离群选择Stochastic Outlier Selection (SOS)
python异常检测-局部异常因子(LOF)算法
Python异常检测- DBSCAN
Python异常检测- 单类支持向量机(One-Class SVM)



前言

3Sigma原理,又称为拉依达准则或三西格玛准则,是统计学中的一个重要概念,尤其在质量控制和数据分析中应用广泛‌。

一、 3Sigma基本原理

3Sigma是指基于正态分布的特性,在一组正态分布或近似正态分布的数据中,约有99.73%的数据值会落在平均值加减三个标准差的范围内。如果一个数据的值大于平均值加上3倍标准差或者小于平均值减去3倍标准差,那么这个数据就可以被认为是异常值,3sigma准则实际就是将超过3sigma的数据视为异常点。
正态分布具有两个关键参数,均值(μ)和标准差(σ):

  • 均值(μ):均值,又称平均数,它反映了一组数据的集中趋势

  • 在这里插入图片描述

  • 标准差(σ):标准差是衡量数据变化程度的指标,他反映了数据的离散程度,计算公式如下:
    在这里插入图片描述

二、3Sigma实现步骤

3Sigma原则是一种常用的识别异常值的方法,具体操作步骤如下:

(1)计算数据的均值和标准差;

(2)计算数据与均值的差值大小,

(3)如果差值大于3倍的标准差,则可认为该数据点是异常值;基于计算的结果将数据标记为异常点。

该方法的优点是简单易行,但是它假设数据服从正态分布,如果数据不服从正态分布,则该方法可能会误判正常数据为异常值。

三、3Sigma优缺点

  1. 3Sigma原则的优点
  • 简单易懂:3Sigma原则基于标准差的观念,提供了一个直观且易于理解的判断标准。通过计算数据的平均值和标准差,并与3σ进行比较,可以快速判断数据是否处于正常范围内。
  • 科学性和客观性:由于3Sigma原则基于统计学原理,其判断具有一定的科学性和客观性。它依赖于数据的统计特性,而不是主观的、经验性的判断。
  • 有效检测异常值:根据正态分布的特性,大约有99.73%的数据落在u±3σ范围内。因此,当一个数据点落在这一范围之外时,可以初步判断为异常值。
  1. 3Sigma原则的缺点
  • 对样本量的依赖:3Sigma原则的有效性依赖于样本量的大小。当样本量较小时,使用3σ原则进行异常值检测可能不够可靠。因为小样本数据可能无法准确反映总体的分布特性。
  • 对非正态分布数据的限制:3σ原则主要适用于具有正态分布或近似正态分布特性的数据。对于非正态分布的数据,3Sigma原则可能无法有效检测异常值,甚至可能出现误判。

四、python实现

import pandas as pd
import numpy as np

# 定义3Sigma法则识别异常值函数
def three_sigma(Ser1):
    '''
    Ser1:表示传入DataFrame的某一列。
    '''
    rule = (Ser1.mean()-3*Ser1.std()>Ser1) | (Ser1.mean()+3*Ser1.std()< Ser1)
    index = np.arange(Ser1.shape[0])[rule]
    outrange = Ser1.iloc[index]
    return outrange
# 导入csv文件数据并读取一列数据后调用three_sigma
df = pd.read_csv('./data.csv',encoding= 'gbk')
three_sigma(df['counts']).head()


参考资料
统计学必知!「标准差&方差」之间不得不说的关系
[数学基础–均值、方差、标准差、协方差]
图像处理知识点5:基于3sigma的阈值分割(异常值判断)
【数据挖掘】3σ原则识别数据中的异常值(附代码)
异常值检测算法–3sigma模型和置信空间

### Python 实现 3&sigma; 算法 3&sigma;原则(也称为三西格玛法则)用于统计学中识别异常值。该方法假设数据服从正态分布,其中大约99.7%的数据位于平均数加减三个标准差范围内。 以下是基于给定数据集应用3&sigma;准则检测离群点的一个Python实现: ```python import numpy as np class ThreeSigmaOutlierDetector: def __init__(self, data): """ 初始化函数接收待分析的一维数组作为输入参数 参数: data (list or array-like): 输入数值型一维序列. """ data = np.array(data) mean_value = np.mean(data) # 计算均值 std_deviation = np.std(data) # 计算标准偏差 lower_bound = mean_value - 3 * std_deviation upper_bound = mean_value + 3 * std_deviation self.bounds = (lower_bound, upper_bound) def detect_outliers(self, new_data=None): """返回超出上下限范围之外被认为是异常的新观测值""" if isinstance(new_data, type(None)): raise ValueError("new_data cannot be None") bounds = self.bounds outliers = [] for value in new_data: if not(bounds[0] <= value <= bounds[1]): outliers.append(value) return outliers # 测试案例 data_points = [6, 8, 12, 14, 15, 16, 18, 20, 22, 24, 26, 28, 30] detector = ThreeSigmaOutlierDetector(data=data_points) test_values = [-5, 10, 15, 20, 35, 40] outliers_detected = detector.detect_outliers(test_values) print(f"Detected Outliers: {outliers_detected}") ``` 此代码定义了一个名为`ThreeSigmaOutlierDetector` 的类来封装计算逻辑,并提供了一种简便的方法来进行新样本的异常检测[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值