智能预警:如何自动化识别异常数据?了解下产品化设计
“ 今天和朋友们聊聊数据分析、数据产品设计中经常面临的场景:异常判定,并看看如何进行预警相关的产品设计。”
关于BI系统,之前分享过 阿里的Quick BI, 微信公众平台的看板设计,以及 数据图表相关设计。今天和大家聊聊常见的场景:异常数据的识别,以及预警相关功能的产品化设计。
01、场景概述
我们在做数据分析的时候,有一个重要的环节,就是发现目前运行数据的异常,然后基于异常寻找原因、提出意见和建议。
如果是人工判断异常数据的话,往往通过恰当的可视化图形就能很好地发现,比如下面数据走势的异常:
或者下面的数据关系的异常,通过回归曲线很容易发现右下角的异常点。
但是对于机器而言,想要识别异常数据,就比较麻烦了。这就是咱们今天将重点展开讨论的内容:如何通过系统化的规则或者算法,识别异常数据。
由于数据的类型多种多样,我们针对不同数据类型分别展开。
02、时序异常数据识别
时间序列相关的异常判定,应该是我们最常见的异常识别情景。尤其是在数据产品中,我们关注的大部分内容都是和时间序列有关系。
大家可以仔细回想一下你平时看到的数据监控看板等等,无论形态如何,基本都涉及了时间维度。但凡涉及时间维度,那么异常的识别都是基于时间来识别的,且识别的是最新一段时间是否异常(用最新数据鉴定历史数据异常并没有任何业务意义)。
了解了上面的内容,下面我们聊聊都有哪些时序异常数据的识别方法。
(1)基于固定数值
这个比较好理解,就是直接按照固定的数值进行异常判定。逻辑简单、容易实现与理解。
比如上图中,我们设定固定数值是[3800-5600],在这个区间范围内的数据,我们认为是正常数据;低于或者高于该区间的数据,认为是异常数据。
固定数值判断异常的方法,核心在于如何取合理区间的上下限。如果有明确的业务红线,可以将业务红线设为上下限;如果没有业务限制,可以使用分位数进行取值,比如历史5%-95%分位认为是正常的。
对于一个发展比较稳定业务而言,设定固定的绝对数值是没啥问题的。但是对于一个快速发展期的业务,很明显,固定数值并不适用。
随着时间的变化,合理的区间也相应发生了变化。这种情况不适合用固定数值进行异常判定,而是需要相对值。
(2)基于相对数值
上面讲到了固定数值方法的缺点。因此,我们考虑相对数值的方法。提到相对值,主要就是同比和环比(关于同比和环比可参考历史文章)。
由于同比通常的定义指的是与去年同期比较,因此针对单天,我们往往是与上周进行对比。如此,上周的数值就是基准值,再增加一个波动区间范围即可。比如上周二的新增用户数200,波动范围设定[-10%,10%],那么本周二如果新增用户数在180-220则认为是正常的;超出该范围则判定异常。
该方法也有明显的缺点。如果上周二就是一个异常值(假设数值异常低),而本周二数据是恢复正常了。那么根据相对值得判定逻辑,很容易把本周二判定为「异常高」。这是点对点对比的缺点。
(3)基于统计分布
如何能避免单个异常点对后续判断的影响呢?这里就可以基于统计分布进行规则建立。
这里我们可以采取 均值±标准差×3 的方式。这里的均值可以采取当天之前一段时间的均值,比如90天、30天;标准差也选取相应时间段的标准差;倍数可以基于情况设置。
由于均值是一段时间内的均值,不是某一个具体点。因此通过这种方式,能消除异常数据对于后续的异常判定。
(4)基于时序模型
最后,还可以基于时间序列模型进行异常判定。
在统计模型中,有一类模型是专门针对时间序列进行建模的,用以预测未来一段时间的数据走势。我们可以建立相应的ARMA模型等,基于实际值和预测值的差异,判定是否异常。
关于时间序列模型,我们这里就不展开了,后续会专门针对时间序列统计模型详细分享相关基础知识。
03、预警功能产品化设计
最后,我们一起看看预警功能的产品设计,这里主要以神策为例,看看预警功能的设计思路。
(1)预警设置
神策将预警功能和事件分析进行了结合,在做事件分析相关功能时,可以直接添加「预警」,进行预警配置。
下面是点击「预警」后的配置界面:
配置基本信息中包括了规则名称、监控指标、维度等;预警设置中包括监控时间粒度、监控时间、预警方式、触发规则、通知方式等。
(2)预警触发规则
预警配置中,最核心的一步就是进行预警规则的设置了。神策支持了两种预警方式:智能预警和自定义预警。
这里的智能预警并未明示具体的逻辑,我猜主要就是基于统计分布和时序模型进行的所谓智能预警。而自定义预警主要包括了对比特定值(即固定值)以及历史某期(即相对值)进行预警规则设置。
当然,自定义预警的阈值是用户自行填写的,没有给出提示。
(3)预警通知
预警的通知配置,也是整个预警功能中必不可少的一部分。这里主要支持三种方式:系统通知、企业群通知、邮件通知。
关于时序预警相关的方法,以及产品化的介绍,就分享这些。这里强调一点,虽然数据看板的时序数据占了大多数,但是仍然有非时序的数据呈现。关于非时序的异常数据该如何鉴定异常呢?这个我们后面找时间再详细分享。