关于序列异常点监控的那些事

之前写过一篇如何使用R语言解决可恶的脏数据(点击查看),文中讲到如何识别离群点及这样的数据该如何处理。本文继续讲一讲异常点的那些事,只不过本文的异常点将考虑时间因素,即有序数据异常点监测。


异常点监控的前提条件是指标无明显趋势,且不会经常发生大幅度的波动,可以认为指标值是服从正态分布的


监控异常点,首先需要明白什么样的点才能算是异常点,我们来看看关于正态分布的第n倍sigma图:

0?wx_fmt=png
一般比较常用的就是这3类sigama,根据行业的不同,对产品质量监控严格度会有所不同,有看到使用6sigma的质量控制。质量控制图一般以下图的形式展现,CL为中心线;UCL为上限;LCL为下限:

0?wx_fmt=png
关于质量控制图的使用,行业里有这样的基本标准:

1)UCL和LCL之间的点属于正常点,而之外的点就归为异常点

2)如果近3个点中有2个高于2倍标准差下的UCL或低于2倍标准差下的LCL;或近5个点中有4个高于单倍标准差下的UCL或低于单倍标准差下的LCL,则说明该指标出现异常趋势

3)如果连续8个点均高于或低于中心线,则称其为有偏向性

4)如果连续6个点呈上升或下载趋势,则称其有明显的偏向趋势

5)如果连续14个点在中心线的上下交替出现,则认为其有周期性或不稳定性


这里介绍几种常用的控制图,即P控制图、单值-均值控制图和均值控制图。有关控制图的绘制可使用qcc包中的qcc()函数,下面我们就来介绍这几种控制图。


一、P控制图

原理:根据中心极限定理,当样本量足够大时,二项分布服从均值为p_bar=mean(p), 标准差为sqrt(p_bar*(1-p_bar)/n)的正态分布。什么时候需要用到P控制图呢?当你需要求解某个比例时,如成功率;达成率;响应率等,就需要用到这里的P控制图了。我们举个简单的例子来说明一下:

0?wx_fmt=png
上图是计算P控制图中CL、UCL和LCL值的公式。


```{r}

#网页浏览人数

views <- c(10231,12874,11229,9870,11804,11652,13259,11891,12876,14562,12933,13548,15230,13815,15766)

#注册人数

register <- c(201,229,231,201,237,224,236,167,213,240,259,241,256,276,248)


#绘制P控制图

library(qcc)

res <- qcc(data = register, sizes = views, type = 'p')

```

0?wx_fmt=png
上图很明显反馈了第8个点为红色点,表面该点低于默认的3倍标准差下的LCL,为一个异常点。而且你会发现,LCL和UCL是两条折线,而非直线那是因为每天的网页浏览量不一致,即可以认为每次试验中,样本量是可变的,这就导致下图中LCL和UCL值随nk的变换而变换。如果想绘制2倍标准差下的LCL和UCL线,只需将qcc()函数中的参数nsigmas设置为2,如图所示:


```{r}

res2 <- qcc(data = register, sizes = views, type = 'p', nsigmas = 2)

```

0?wx_fmt=png
这样你就会发现有两个点成为了异常点,即第8个点和第15个点。


二、单值-均值控制图

如果需要监控的对象是一维序列值,这个时候就需要绘制单值-均值控制图了,有关该控制图的原理见下图:

0?wx_fmt=png
与P控制图不同的是,3倍标准差采用了3*(平均移动极差/1.128),下面就以某门店的月度客单价为例,说说单值-均值控制图:


```{r}

ATV <- c(234,278,253,245,302,228,256,272,300,286,242,222)

res <- qcc(data = ATV, type = 'xbar.one', nsigmas = 2)

```

0?wx_fmt=png
上图中显示,在2倍标准差内,没有出现异常值,即认为这12个月内的门店客单价比较稳定。而且图中还详细列出了中心线CL、上限UCL、下限LCL和标准差的值。


三、均值控制图

均值控制图与单值-均值控制图基本类似,所不同的是,单值-均值控制图可以理解为每次试验只有1个样本点,而均值控制图可以是多个样本点。具体原理可见下图:

0?wx_fmt=png
对于每组样本量相同的情况,可以将数据集存储为k行n列,直接使用qcc()函数实现均值控制图的绘制,具体如下:


```{r}

set.seed(1234)

df <- data.frame(x1 = rnorm(25,2,3), x2 = rnorm(25,2,4), x3 = rnorm(25,3,2))

res <- qcc(data = df, type = 'xbar')

```

0?wx_fmt=png

如果每组样本量不等时,就不能直接使用qcc绘制均值控制图了,而需求对原数据做变换,通过计算每组均值,使得一组一值,从而回到绘制单值-均值控制图中。具体案例如下:


```{r}

#近一个月每日用户客单价监控

set.seed(1234)

Feb <- paste('2.',1:29,sep = '')

date <- rep(Feb, round(runif(29, 100,200)))

ATV <- round(rnorm(length(date), mean = 222, sd = 10))

df <- data.frame(date = date, ATV = ATV)


#对每天数据计算平均客单价

library(dplyr)

group_by_date <- group_by(.data = df, date)

summarise_df <- summarise(.data = group_by_date, mean(ATV))

head(summarise_df)

0?wx_fmt=png
#绘制单值-均值控制图

res <- qcc(data = summarise_df[,2], type = 'xbar.one')

```

0?wx_fmt=png

上面介绍了比较常用的异常点的监控图,这里需要再次说明的是监控图不适合非正态分布的数据,如果你的数据存在明显偏态或非正态分布,建议使用《如何使用R语言解决可恶的脏数据》一文的异常点检验方法。


参考资料

《R语言与网站分析》


每天进步一点点2015

学习与分享,取长补短,关注小号!

0?wx_fmt=jpeg
     长按识别二维码à马上关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值