数据分析终极一问:指标波动多大才能算是异常?

2023-11-09 23:20

本文主要是介绍数据分析终极一问:指标波动多大才能算是异常?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好,我是小z,也可以叫我阿粥

先举个例子,体温37.4度vs体温36.5度,只有2.5%的波动,可如果有人在测温点被发现体温37.4度,估计马上就被拉走做核酸。为啥?因为人们不是怕2.5%的波动,而是怕新冠!

所以:指标波动不可怕,指标波动代表的业务场景才可怕!脱离业务场景谈指标波动就是耍流氓。

在各种业务指标中,数据往往不是静止不变的,尤其是当一些核心的指标发生了变化、波动时,就需要判断这样的波动是否属于异常的情况。那么波动了多大才能算是异常?本文将结合一些实际业务场景,来说明数据波动的异常判别方法。

指标数据波动,是各种业务场景下都会遇见的情况,如每日GMV、每日订单量等,都是在不断变化的。大多数情况下,变化是“正常”的波动,但有一些波动,源于突然发生的外部原因或其他未被预期的因素,导致其表现出不同于正常模式的异常状态。若能准确地识别异常波动,从而做出波动预警,并及时应对,就能一定程度上保证所关心的业务场景系统的整体稳定性。 

1

波动类型

数据波动绕不开时间特性。业务中最常遇到的就是今天的指标是什么样子?过去几天是什么趋势?未来一段时间会怎么样的变化?数据+时间构成了波动的两个基本属性。

根据时间的不同特征,常见的波动类型有:

一次性波动:偶发的、突然性的波动。一般是由于短期、突发的事件而影响的指标的波动,比如说某头部主播在某次直播里上了严选的商品、某明星的同款商品在严选有库存等,就会造成订单量临时性的超出预期的上涨。

这样的波动影响时间短,往往几天的时间便会恢复正常波动。举个单量的例子,在大促期间都是单量的爆发期,大促即为一次“偶发事件”,此时单量的波动即为一次性波动。其具有如下的特征图:

5e8ec6c8be8d992d9075f9723033e11f.png

周期性波动:这种波动和时间节点强相关,且经常以周或者季、年为循环节点。如羽绒服秋冬季节卖的比较好,到了春天销量就下降,夏天几乎没有销量,且每年几乎都是这样。

e705385438df0e84eaf6177f3b180de3.png

持续性波动:从某一时间开始,指标一直呈现上涨/下降趋势。如从今年4月开始,浴室香氛品类的销售量一直呈现上涨趋势,这就属于持续性波动。而持续性波动背后的原因往往是更深刻的,如订单结构的变化、环境因素的影响,从而出现了这种持续性趋势。

0f532f9caacae4bbb58d181f7446951f.png

2

异常识别

那么什么样的波动可以看作是“异常”呢?异常识别也可以认为是异常检测。这里主要从绝对值预警、相对值预警两个方面来说明。

2.1 绝对值预警

绝对值预警,即是通过设定一定的阈值,当指标低于/高于阈值的时候,就认为此时指标波动为异常,并进行预警。

举个例子,严选作为一个品牌,毛利是其核心的一个指标。对毛利可设置绝对值预警:当毛利为负时,就认为此时是异常的情况,需要探究其发生的原因,并解释这种异常的波动。通过对毛利的绝对值预警,严选及时发现了部分用户利用咖啡机进行薅羊毛、从而导致咖啡机毛利为负的行为,并完善了规则减少了严选的损失。

不仅可以设置低于某一个定值,也可以当指标高于某一定值的时候进行预警,比如在供应链中,某个大仓的分仓比高于40%,就会导致仓库负荷过重从而影响生产。

绝对值预警往往是一次性的波动,这样的异常判定比较简单,只需要设定对应的阈值即可。而阈值的设定可以根据具体的业务的不同和规则而变化。

目前在有数BI中可以直接设置绝对值预警:

6ec27fb57be2dc436f4f91c8a98b581e.png

2.2 相对值预警

然而实际业务中,绝对的阈值只能提供一个“底线”。除了一些非常确定性的业务场景外,在其他情况下,过高的“底线”就会导致误报,过低的“底线”可能会漏掉很多需要预警的情况。于是作为绝对值预警的补充,相对值预警可以根据历史数据及波动情况,来判断当前的波动是否为异常。

(1)同比环比

同比环比是业务场景中比较常用的一种异常检测方式,利用当前时间周期与前一个时间周期(同比)和过去的同一个时间周期(同比)比较,超过一定的阈值即认为该点是异常的。实际中常用周/日环比、年同比来进行比较。

3ae9c965e2897fc0f1639aa806805e99.png

如上图,(1)的数据为所要判断的值。当(1)的数值为百分比时,如来源于主站订单的比例,则同比环比一般为:

    环比:(1)-(2) pt

    同比:(1)-(3) pt

而当(1)的数值为非百分比时,如来源于主站的订单数量时:

    环比:((1)-(2))/(2) %

    同比:((1)-(3))/(3) %

根据值得正负来判断是上涨还是下降。通过与上周/昨天和去年同期的数据表现进行对比,计算波动值,再将波动值和阈值进行对比,从而得到当前时刻数值是否在正常的波动中(阈值的设定方法在后面介绍)。

如在上述的周期性波动的例子中,在11月环比波动都会较大,这时设置同比波动预警会比设置环比波动预警更为合理。于是在波动判别中,需要注意业务实际背景。

86a574c02422ba8f0b21fc5cbaaca968.png

(2)周期平滑

同比/环比仅使用1~2个时间点的数据,容易受到数据本身质量的影响:当历史同期或上个周期的数据本身就是“异常”的时候,用“异常”的数据来判断是否“异常”就不太合适。


一个很自然的想法就是将所参考的时间点拓展,利用多个时间点的周期数据进行平滑,得到当前时刻指标的对比值。如:

b86167f9fa600cdb4b2898c5e7fd712e.png

则比较值:

2f7f37a2d0dd5a17a47c37598a7e8e6d.png

a4cde44304d38669b95550f1f58be5dd.png

其中b477af023fbb467e2b718d515962f56b.png为平滑系数,当f6c7f093b660f3895fb99281432d8979.png都为相同的值的时候,此时即为平均值。也可越靠近所研究时间点,赋予更高的平滑系数。所选的时间点可以根据业务需求自行定义。

利用比较值b和所研究的值(1)对比,超过一定的阈值即可认为是“异常”,其波动需要关注。

(3)假设检验(3σ原则)

前面提到比较值需要和所研究的值进行对比,通过阈值来判断波动是否异常。阈值的定义方法和预警方法类似,分为绝对值阈值和自适应(相对值)阈值。

  • 绝对值阈值:根据历史正常情况下的数据波动情况,计算比较值和所研究的值之间的差异情况,从而定义一个上/下限值,即为阈值。

  • 自适应阈值:根据数据波动情况而变化的阈值,其理论基础为假设检验和大数定律,来判断是否为异常。

不妨假设当前时间点的指标数据为b,历史用于对比的指标数据为: 

4d5fafded9aa7651bf0dbba4982da792.png

其中:

7c327b1f30bce43bc50d3dbd86630bc4.png

分别表示对比数据的平均水平和波动情况。则根据大数定律和假设检验,当

3d444252c0b3769e917dfdbaa9380905.png

即可认为当前时间点的指标数据为异常波动。其中z为置信水平所对应的值,如当z=1.96时,置信水平为95%,即可认为在100次的波动下,有95次是在正常范围内波动的(置信水平及其对应的值可参考标准正态分布表)。当z=2.58,置信水平为99%,即为著名的“3σ原则”。

3.3 其他方法

除了以上所介绍的一些常用的、便捷的方法外,也可以通过时间序列、算法模型等来判断异常值。异常值判别是比较常见的研究场景,但由于实操的复杂性,这里仅做一个介绍。

(1)时间序列

业务上的数据往往具有时间属性,如单量随时间的变化、GMV随时间的变化等。那么在时间序列中,通过异常检测的方法,也可以对当前波动是否异常做出判断。常用的方法有:

  • 平均法:移动平均、加权移动平均、指数加权移动平均、累加移动平均等。和上述的“周期平均”的方法类似,可自定义窗口大小和加权系数。

  • ARIMA模型:自回归移动平均模型(ARIMA)是时间序列中一个基础模型,利用过去的几个数据点来生成下一个数据点的预测,并在过程中加入一些随机变量。使用该模型需要确定ARIMA所需的参数,即需要对数据点进行拟合。利用拟合后的方程确定下一个时间点的数据的区间,从而判断当前波动是否为异常。

  • 此外还有ESD、S-ESD、S-H-ESD、STL分解等算法,来检测异常点。

(2)算法模型

  • 基于分类方法:根据历史已有的数据,将其分为正常、异常的两类,之后产生的新的观测值,就可以使用分类的方法去判断新的观测值是否为异常。如使用距离判别的K-means算法、SVM算法等。

  • 神经网络方法:可以对具有时间特性进行建模的LSTM算法、用卷积神经网络来做时间序列分类的Time  Le-Net,以及各种的监督式模型,都是能够对异常数据进行识别的算法。

3

总结

在实际应用中,还需要结合业务背景来进行方法的选择。一般来说,判断异常的主要方法有:

a19a6b119d8ef78f7cfbe3214c5cf3cc.png

以上。

0ea54a5833671ca3c70010e146bf515f.gif

 
●模型融合方法总结!
●品牌知名度分析

这篇关于数据分析终极一问:指标波动多大才能算是异常?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/379051

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

Thymeleaf:生成静态文件及异常处理java.lang.NoClassDefFoundError: ognl/PropertyAccessor

我们需要引入包: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>sp

深入理解数据库的 4NF:多值依赖与消除数据异常

在数据库设计中, "范式" 是一个常常被提到的重要概念。许多初学者在学习数据库设计时,经常听到第一范式(1NF)、第二范式(2NF)、第三范式(3NF)以及 BCNF(Boyce-Codd范式)。这些范式都旨在通过消除数据冗余和异常来优化数据库结构。然而,当我们谈到 4NF(第四范式)时,事情变得更加复杂。本文将带你深入了解 多值依赖 和 4NF,帮助你在数据库设计中消除更高级别的异常。 什么是

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

JVM 常见异常及内存诊断

栈内存溢出 栈内存大小设置:-Xss size 默认除了window以外的所有操作系统默认情况大小为 1MB,window 的默认大小依赖于虚拟机内存。 栈帧过多导致栈内存溢出 下述示例代码,由于递归深度没有限制且没有设置出口,每次方法的调用都会产生一个栈帧导致了创建的栈帧过多,而导致内存溢出(StackOverflowError)。 示例代码: 运行结果: 栈帧过大导致栈内存

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

org.hibernate.hql.ast.QuerySyntaxException:is not mapped 异常总结

org.hibernate.hql.ast.QuerySyntaxException: User is not mapped [select u from User u where u.userName=:userName and u.password=:password] 上面的异常的抛出主要有几个方面:1、最容易想到的,就是你的from是实体类而不是表名,这个应该大家都知道,注意

C++第四十七弹---深入理解异常机制:try, catch, throw全面解析

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C++详解】 目录 1.C语言传统的处理错误的方式 2.C++异常概念 3. 异常的使用 3.1 异常的抛出和捕获 3.2 异常的重新抛出 3.3 异常安全 3.4 异常规范 4.自定义异常体系 5.C++标准库的异常体系 1.C语言传统的处理错误的方式 传统的错误处理机制:

argodb自定义函数读取hdfs文件的注意点,避免FileSystem已关闭异常

一、问题描述 一位同学反馈,他写的argo存过中调用了一个自定义函数,函数会加载hdfs上的一个文件,但有些节点会报FileSystem closed异常,同时有时任务会成功,有时会失败。 二、问题分析 argodb的计算引擎是基于spark的定制化引擎,对于自定义函数的调用跟hive on spark的是一致的。udf要通过反射生成实例,然后迭代调用evaluate。通过代码分析,udf在

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位 一、背景二、定位问题三、解决方法 一、背景 flume系列之:定位flume没有关闭某个时间点生成的tmp文件的原因,并制定解决方案在博主上面这篇文章的基础上,在机器内存、cpu资源、flume agent资源都足够的情况下,flume agent又出现了tmp文件无法关闭的情况 二、