学习机器学习算法时,经常会碰到数理统计中置信区间、置信度,虽然学习过相关课程,但是每次遇到它总是懵懵懂懂,似懂非懂。为了对这两个概念有深入的了解,这里做了相关的介绍。为了不老是纠缠于数理统计理论,或者学习了概念之后又无法应用的情况发生,这里以一个机器学习特征工程中常用的异常值检测算法--3sigma模型,来解释这两个概念,这样你既学会了一种异常值模型,又弄懂了这个概念,这个买卖划得来。

异常值检测算法场景

最近也是疲于完成一个项目,做企业污染源检测,为了检测传感器是否正常,或者企业排放污染异常,你需要对传感器值做异常值的检测,假设企业每天排放污染是独立的,那么就可以使用简单粗暴的3sigma模型来检测。



3sigma准则 python 3sigma算法_数理统计



估计这个算法很多场景中都可以遇到。具体做法是以一个月排放为样本数据,检测这一个月中排放是否正常。根据一个月的样本,估计出均值与方差。如果某天的值落在

之外,就可以认为这个值是异常值。


3sigma准则 python 3sigma算法_方差_02



算法很简单,但是背后的原理却很容易让人产生困惑,为什么这样就可以检测出异常了呢?为什么是3sigma,不是5或6sigma呢?

置信度与置信区间

要知道企业的污染物排放是跟一个企业生产有关系的,如果一个企业正常生产那么污染物的排放量是不会相差太多。也就是说企业污染物排放量,会在一个范围内波动。对一个月的排放量,做一个简单的柱状图统计,x轴为排放量,y轴为排放次数。



3sigma准则 python 3sigma算法_数据_03



通过图可以观察出,本月的排放还是挺符合正态分布的。如果取一个月的排放量为样本,那么就是样本容量为30,如果扩大采样数,进行统计的话。




3sigma准则 python 3sigma算法_数据_04



很明显可以看出,36.8为均值。

采样估计

现在让你去评估该企业一天正常排放量是多少?假设企业真实污染物正常一天排放量为36.8。然后我们随机抽取一天,结果为30.2,你就说该企业正常排放量为30.2,这样显然不能让人认同。但是如果做了多天的样本抽样得出,[20,50]这个区间为污染物正常一天排放量的范围,显然这样更容易让人接受。但是能够让人多大程度接受呢?假设为95%,那么这里就引入置信区间[30.2,38.3]与置信度95%的概念。
显然把所有天的排放量都采集回来做正常排放量估计是不合适的,因为每天都有新的数据加入,所以只能够以样本估计整体。

置信区间置信度案例解释

置信区间相信你有个大概想法,就是为认为这个排放量是正常的区间呗,那就是真实企业污染物正常排放量36.8,落在这个区间的概率吗?答案是否定的。为了帮助你理解这个拗口的话,错误的理解计算置信度的方式是,统计在区间[30.2,38.3]的排放量的总个数除36.8的排放天数,结果为95%。实际上正确的求解置信度的方式是,假设样本容量1000天,重新计算均值与方差,得到置信区间 。反复取这样的样本容量为1000 天 100次,那么就得到量100个置信区间,这100个置信区间有95次包含了真实值36.8,95/100=95%,所以就得到置信度为95%。但是这里又有个疑问,平时做置信区间的时候没有做100次啊,一般做一次,就得出了置信度为95%的置信区间为。引入一个例子,把置信区间比喻为黑箱子里的球,有黑白两种颜色,抽样100次,统计得出95%为黑球,5%为白球。现在找另外一个人重黑箱子中抽一个球,问这个求是黑球的概率是多少?答案很显然 95%,所以我们经常只做一次抽样,得到置信区间就可以说,这个置信区间有95%的概率包含真实值。
那么异常值检测的思路就很清晰了,抽取一个月的数据,计算出置信区间,也就是说如果某天的排放量不在这个区间内,那么就可以说这天的值只有5%是一天正常的排放量,可能性很小那么就认为它是异常值。