2024年SPL工业智能:发现时序数据的异常_工业时序数据分析(1),2024年最新开发人员必学

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

SPL有很强大的集合运算能力,实现区间上的阈值计算很方便。这段代码仅是个示意,并不完整,其中还调用了计算阈值的函数,而这个函数在不同场景要使用不同的计算方法,很难通用起来。这个问题足够大,值得专门撰文讨论,但并不是本文重点,所以就不再列出了,这并不影响理解其中的原理。

计算结果示例如下:

图中Value是数据,Value_up是动态上限,Value_low是动态下限,warn是异常度。从图中可以看出,算法准确发现了值过小的异常。

如果观察变化率,大体的SPL代码:

A
1=file(C1).import@tci()
2=A1.((ss=if(#<=D1,[0:D1],[-D1:0]),slope(ss)))
3=A2.(if(#<=D2,threshold(~[-D2:0],“up”,3)))
4=A2.(0)
5=A2.m(D2+1:)
6=A3.m(D2+1:)
7=A4.m(D2+1:)
8=A5.(max(0,-A6(#),A7(#)-)/(A6(#)-A7(#)))

类似地,A2中使用了动态计算“变化快慢”这一数学量的方法,后续的代码和前面判断值的异常度时类似。

“变化快慢”发现异常结果如下:

从图中证明算法是有效的,变化过快的地方可以准确发现。

值和“变化快慢”甚至更多特征数据都可以用来发现异常,可以单独使用也可以综合使用,只要通过某种数学方式将他们合并成一个表征综合异常度的量即可。

关联问题

工业生产过程中,有些仪表之间是相互关联的,比如温度升高、压力上升;阀门开度增加、流量增大等等。有时只看单个仪表并不能说明整体异常了,需要观察相互关联仪表的异常情况,才能确定整个系统是否真的出问题了。就好比打喷嚏、嗓子疼、流鼻涕、发烧同时发生时,我们就可以说这个人感冒了,如果只是单一症状,如嗓子疼,可能只是因为这个人大声说话喊破嗓子了,并不能断定这个人感冒了。

我们已经可以计算单个仪表的异常度了,将相互关联的仪表看成一组,同时观察他们各自的异常度,用某种数学方式将他们的异常度聚合起来,就可以得到这组仪表的异常度了。

算法思路

如何将一组仪表的异常度聚合呢?

先来看一组数据:

这里有五个仪表的曲线,红色部分为该仪表异常的部分。

还是先来看看人对时段①②③异常的分析情况:

时段①:只有1个仪表异常且异常度不大,该时段聚合后的异常度应该不大;

时段②:有3个仪表异常,但强度不大,聚合的强度应该也不大;

时段③:有4个仪表异常,而且强度较大,报警强度应该大。

将一组仪表的异常度聚合起来,容易想到的办法就是将所有仪表的异常度平均。但是这意味着对所有仪表一视同仁,即各个仪表同等重要。实际上可能并不是这样,还以感冒为例,发烧这一症状要比嗓子疼和打喷嚏重要得多,需要给它赋予更高的权重。仪表也是类似的,有些仪表测量的指标非常关键,有些可能不太重要,为每个仪表分别赋予权重才能得到更准确的聚合异常度。

那么,权重从何而来?

简单有效的办法是工艺专家提供,可有时专家也不确定各个仪表权重的具体数值,如果能由计算机自动算出各个仪表的权重就更好了。

那么,又怎么自动算权重呢?

先来看个故事:

上图是二战时盟军返航飞机弹孔分布图,从图中可以看到,这些弹孔分布并不均匀,翅膀上比较多,引擎上比较少。当时军方普遍认为,应该减少装甲总量,然后在受攻击最多的部位增加装甲,这样飞机可以轻一点,但是防护作用不会减弱,因为防御的效率提高了。但是,这些部位需要增加多少装甲,他们并不清楚,于是找到瓦尔德(哥伦比亚大学的统计研究学家),希望得到答案。但是,瓦尔德彻底否定了他们的想法,给出了相反的答案。

瓦尔德认为,需要加装装甲的地方不应该是留有弹孔的地方,反而是没有弹孔的地方,即飞机的引擎。

瓦尔德说,飞机各部位被击中的概率应该是均等的,但是引擎上的弹孔却比其余部位少,这说明那些被击中引擎的飞机根本没有机会返航。我们看到的数据,都来自成功返航的飞机,这说明即便翅膀被打得千疮百孔,仍能安全返航。

军方马上按照瓦尔德的建议改进了飞机,取得了良好的效果。

这就是“幸存者偏差”。我们不能只考虑看到的数据(返航的飞机),更应该考虑看不到的数据(未返航的飞机)。

为了避免幸存者偏差,各仪表权重的分配方法应该遵循这样的原则:历史上经常异常且异常度大的仪表(相当于机翼)权重小不常发生异常且异常度小的仪表(相当于引擎)权重大。根据这样的原则,使用一些数学方法计算各仪表的权重,最后利用权重与各仪表的异常度计算出聚合后的异常度。

实践效果

用SPL实现上述算法的关键代码:

A
1=file(“Adata.csv”).read()
2=A1.(~.array())
3=A2.(if(#<=100,null,weight(A14,~[-100:0])))
4=A2.to(101:)
5=A3.to(101:)
6=A4.((~**A5(#)).sum())

这里,A3中计算权值的方法也是要随情况而定的。

计算结果示例如下:

最下面一条曲线是五个仪表聚合后的异常度,其中粉色部分表示异常,从图中可以看出异常基本符合我们的判断,即异常仪表数量越多且异常度越大,聚合后的异常度越强。

进一步的关联问题

多仪表的异常度可以利用单仪表的异常度来聚合计算,如果所有仪表异常度都是0,那么聚合后的异常度肯定也是0。那是不是就说明设备工作很正常呢?

试想这样一种情况,有两个关系密切的仪表A和B,仪表A上升时B也上升,A下降B也下降,如果两个仪表都在各自正常的范围内,但是出现了A上升B却下降的情况,此时是不是也应该被认为是异常呢?如下图:

图中红框就是这种情况,这肯定要算作异常,可是前面说的聚合办法并不能解决这类问题,需要换一个角度来思考如何解决这类问题。

既然一组仪表之间存在某种关系,那么多数情况下都会保持这种关系,只有少数情况下会失去关系,回到我们单仪表发现异常的思路上——没出现或者不常出现的情况是异常。那么,只要有办法表征多个仪表共同状态中不常出现的程度,也就可以发现这种关联的异常了。

算法思路

还是先让人来观察仪表形成曲线图

观察后,人能给出红框中的数据大体属于异常数据。但是,两个曲线是否有关联关系,从这个图中是观察不到的。统计学知识告诉我们,可以用散点图来观察曲线之间的关联性,如下:

图中横纵坐标分别是两个仪表的数值。这样就一目了然了,两个仪表的数据多数都聚集在一起,只有少数分散在边缘。根据我们的判断标准——没出现或者不常出现的情况是异常,就可以判定图中红圈中的数据为异常。然后,只要利用数学方法把这些散点找出来并算出他们的异常度即可。

实践效果

用SPL实现的关键代码:

A
1=file(“Jdata.csv”).read()
2=A1.(~.array())
3=A2.(if(#<=100,join_o(~[-100:0],0.7,1.5)))
4=A3.to(101,)
5=A4.(if((1)>(2),0,((2)-(1))/~(2)))

A3格中关联方法同样要根据情况来确定。

计算结果示例如下:

先来看我们造的那组数据:

图中红色部分是多仪表联合算法发现的异常。

相应的散点图是这样:

图中红色点就对应前面走势图中的红色曲线部分,也就是异常数据。

再来看刚才的实际数据:

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

5231095971)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值