• SPL工业智能:发现时序数据的异常


    工业生产过程中会产生大量的数据,比如电压、温度、流量等等,它们随时间推移而不断产生,这些数据在多数情况下是正常的,否则生产无法正常进行;少数情况下,数据是异常的,生产效率会降低甚至发生事故。在重大事件(如事故)发生之前,通常会在运行数据上有所体现,比如电流突然上升,后续很可能断电,造成一些不必要的损失,如果及时发现电流增大这一信号,及时找到原因并处置则可以将损失降到最小。因此及时发现异常数据并报警,提醒操作人员进行相应的操作,可以提高生产效率并避免事故发生。

    当前工业界常用的异常发现机制很简单,一般是凭经验设置一个范围,当仪表超过该范围时就认为是异常。这种方式过于简单粗暴了,经常会发生漏报(范围设置过宽)或误报(范围设置过窄)。因为生产过程是动态的,产生的数据也是动态的,简单的设置范围不可能适用于所有的生产状况,如下图:

    左侧平稳期和右侧平稳期都是正常状态,如果左侧出现点1,右侧出现点2,它们都应该被判定为异常点,但如果简单的用固定范围来判断,这两个点都在固定范围内(图中的上下限),判断就会出错,所以需要动态的去判断某个点是否异常。

    动态的判断异常,容易想到的方法是利用机器学习方法来动态发现异常。但机器学习是有监督方法,需要大量已知的异常数据,而实际场景通常并没有这些现成的数据,还需要人工标记出来。但是工业仪表产生的数据量对于人来说是个天文数字,依靠人工来标记不现实,而且人工标记也很难保证正确性,还要再去校对,工作量无比巨大,结果也就没有可操作性。所以只能使用无监督学习方法完成异常发现任务。

    算法思路

    没有标记好的异常数据,无监督方法怎么定义“异常”呢?

    先来看一份数据:

    先来看人是怎么发现异常的。

    人观察这段数据后,发现的异常如上图,各段原因如下:

    ① 变化过快;

    ② 值过小。

    异常大致是这几类:值过大或过小和变化过快。它们有个共同的特点,出现的情况比较少。我们不难得出一个抽象的说法:经常出现的情况是正常,没出现过或者很少出现的情况可以定义为异常。

    那么发现异常的任务就转换为发现不常出现的情况,判断数据是否不常出现,就是看当前数据相较于之前一段时间内的数据是否不常出现。利用之前一段时间数据学出一个模型E,用它来判断当前数据是否异常。比如之前一段时间的数据在1~10内,那么当前时刻的数据在这个范围内就认为是正常,如果当前时刻的数据不在该范围内(比如等于11或0),则认为是异常。而1~10这个范围就是通过历史数据学出的模型E。拿着模型E就能算出当前数据是否异常了,即:

    这样数据过大或者过小的异常就可以被发现了。

    但是这种方法不一定能发现变化过快的异常数据,如下图:

  • 相关阅读:
    vulnhub靶机hacksudoLPE中Challenge-1
    C++ 14 常用新特性
    File “build/make/tools/fileslist_util.py“, line 62, in main
    22.11.25打卡 2022河南萌新联赛第(二)场:河南理工大学 AFJL
    CrownCAD 2023发布的背后,国产软件如何破局突围?
    如何利用数据仓库进行业务分析:一名大数据工程师的视角
    基于单片机的智能考勤机(论文+源码)
    React Native for Arcgis 地图开发 GraphicCtrl (十三)
    【mindspore】【faster_rcnn】pad补齐之后的数据,如何将补齐的0那部分去掉
    axios和SpringMVC数据交互(一维二维数组,JSON/form形式,@RequestBody/@RequestParam)
  • 原文地址:https://blog.csdn.net/Cr1556648487/article/details/126873977