背景
最近要统计业务数据的波动情况,对于异常的波动进行报警。于是就需要找到过往业务数据的波动范围和规律,异常波动一般来说都是一些特殊情况,出现频率较低,因此用正态分布的置信区间来划定阈值是一个很好的方法。比如,数据的95%置信区间是1.1到2.2,那么不在这个范围内的可能性大约为5%,这种情况需要进行报警来查看。
重拾正态分布
上面这个思路很好,但是由于对正态分布已经很久不使用,已经不知道该怎么使用了。在网上查资料查了半天,终于有了些收获,记录一下。
什么是正态分布?
正态分布是数据的一种分布规律。是在统计学上对数据进行描述的一种模型。
正态分布是很常见的一种分布规律,形状如下图:
人群的身高、成年人的血压等都符合正态分布规律。
正态分布用什么用?
正态分布非常简单,正态分布的均值,模和中位数是相等的。我们只需要用均值和标准差就能解释整个分布。
为什么正态分布如此普遍?
有个“中心极限定理”,或许能解释这个现象。
置信区间
什么是置信区间,简单点说就是给出一个区间,数据取值落在这个区间的可能性(置信度)为某个值。常见的有95%置信区间,也就是取值落在这个区间的可能性为95%。
在知乎上看到很多对于置信区间的深入描述,说是平均值在这个区间内的置信度之类的,这种过于复杂化,或许是对的,但不利于使用,暂不深究。
有了置信区间的概念,我们就能解决一开始的问题了。比如我想知道业务的波动情况在95%的情况下是在什么范围内,其实就是基于业务数据的历史波动情况来求解95%的置信区间。
如何求解置信区间?
其实很简单,找到了一篇很靠谱的文章,简单总结如下:
(1)求数据的期望(也就是均值),标准差,方法如下(python提供了很丰富的类库可以直接计算出来)
(2)确定要求的置信度,我们这里选择的是95%
(3)计算误差范围
什么是误差范围呢?在第四步介绍。
这个公式里的 是置信度系数,其中a为置信度95%,置信度系数可以从正态分布表中查出来(这是数学家已经给我们计算好了的)。95%置信度系数是1.96。
(4)计算置信区间
置信区间其实就是下图公式:均值 误差范围。这个误差范围就是距离均值的偏差。
计算出置信区间,就可以直接去使用了。
数据集不符合正态分布怎么办?
如果不符合正态分布的数据强行套用是不可行的。看到一些说法是可以通过各种变换将数据转化为正态分布。
唉,其实我发现我统计的数据也不符合正态分布。我最终采用的是统计距离均值的距离,求这些距离的分位值,这种统计方法的前提是数据在均值两侧的分布比较均匀,才能更好的描述。但是如果分布比较均匀,感觉也能符合正态分布了。所以就先采用这种方法,胜在简单高效。
参考文章