瓦斯浓度流数据实时异常检测方法∗
2019-06-01吴海波施式亮念其锋
吴海波 施式亮 念其锋
(1.中南大学资源与安全工程学院 长沙 410083)
(2.湖南科技大学煤矿安全开采技术湖南省重点实验室 湘潭 411201)
(3.湖南科技大学资源环境与安全工程学院 湘潭 411201)
(4.湖南科技大学煤炭资源清洁利用与矿山环境保护湖南省重点实验室 湘潭 411201)
1 引言
瓦斯事故是造成矿井特重大事故的主要灾害之一。为了预防瓦斯灾害,矿井通过安装瓦斯监测监控系统采集井下瓦斯实时环境数据,分析和挖掘矿井瓦斯实时环境数据中的安全信息,以进行瓦斯风险的实时识别和评价是预防瓦斯灾害的关键。由于井下环境的复杂性,监测系统实际监测到的瓦斯浓度流中必然有一定的异常[1]。因此,如何从海量瓦斯浓度数据实时分析与发现瓦斯浓度异常信息就成为了提高瓦斯风险评价准确率的先决条件。目前,检测异常数据的方法大都以统计和机器学习为主[2]。因此,瓦斯浓度异常数据的检测方法也大多基于机器学习方法[3~6],包括神经网络技术和支持向量机也被广泛采用[7~8]。而随着传感技术的发展与物联网在矿井的普及,矿井采集的瓦斯浓度数据呈指数级增长,呈现流式大数据特征,也使得瓦斯浓度流数据异常检测具备实时应用的特点:处理数据与输出结果都必须是实时的[9]。因此,基于流数据的瓦斯浓度异常数据实时检测技术不宜采用需要大量学习时间的离线机器学习来识别异常数据[10],而应基于自动的,无监督的机器学习方法来完成。目前针对流数据的异常检测技术包括简单阈值、统计和聚类等技术[11~13]。这些技术在处理瓦斯浓度流数据异常检测中仍然存在异常模型更新周期长,达不到秒级实时处理时间等问题。
针对瓦斯浓度数据流的特点,为实现异常检测模型实时更新且达到秒级响应时间的瓦斯浓度流数据实时异常检测,本文利用流式机器学习的方法,基于流回归预测算法与基于正态统计分析技术来建立瓦斯浓度流数据异常检测模型,并以此模型为基础,构建基于Spark Streaming的瓦斯浓度流数据异常实时检测系统。Spark Streaming是基于内存的分布式计算框架Spark的流计算组件,既能利用Spark的大数据机器学习能力,也能处理实时数据流。因此,基于Spark Streaming的瓦斯浓度流数据异常实时检测系统能利用流回归算法定期更新瓦斯浓度预测模型,并将模型同步运用到异常检测的统计分析中,动态更新异常检测模型,达到实时、准确分析瓦斯浓度流数据中异常数据的目的。
2 瓦斯浓度异常检测模型
瓦斯浓度异常检测模型由瓦斯浓度流回归预测算法和基于正态统计分布的异常检测算法两部分组成。模型首先通过流式线性回归算法来实时预测瓦斯浓度,然后根据预测值与实测值之间的统计关系来检测异常值。
通过统计和挖掘矿井关键测点瓦斯浓度流数据,分析其相关性,可以发现瓦斯浓度流数据在短期内具有较强的线性相关性,因此,可用线性回归算法来建立煤矿瓦斯浓度预测模型。而线性回归算法简单有效,非常适用于大数据流的建模和预测[14]。给定关键测点在某个时间周期t内的实时监测数据为{ }y1,y2,…,yt,则可根据线性回归方程:
则最优回归系数α应使损失函数S()α达到最小。因此,可采用最小二乘法或梯度下降法来求解最优回归系数α。由于异常检测系统是采用Spark Streaming流回归算法,在求解最优回归系数α时采用的是梯度下降法。
瓦斯浓度异常检测算法由单变量的正态统计分布概率来实现。定义x为瓦斯浓度流回归预测值 yˉ与实测值y之差的绝对值:
来预测t+1时间的瓦斯浓度数,其中,α为线性回归系数,ε为白噪声。通过求解线性回归系数α,就可根据前一个时间周期的历史数据来预测下一时刻瓦斯浓度数。定义损失函数S()α为预测值yˉ与实测值 y之差的平方和:
设ρ( )xn+1为异常检测函数。根据正态分布的统计规律,可定义异常检测阈值∈,如果ρ( )xn+1<∈,则可判定数据点xn+1为异常点,反之则为正常数据。
3 基于Spark Streaming的瓦斯浓度流数据异常实时检测系统
整个瓦斯浓度异常实时检测系统是以Spark Streaming为核心构建的。Spark Streaming是基于内存的分布式计算框架Spark的流计算组件,是通过将流数据转化为批处理作业来进行流计算的。Spark Streaming流系统结构如图1所示。Spark Streaming使用DStreams来将流数据分解成RDD,并可利用Spark提供的机器学习库MLlib在RDD上进行机器学习与建模,从而实现流式机器学习。Spark Streaming的分布式计算能力与流式机器学习非常适用于实时大数据流计算。
图1 Spark Streaming系统结构[15]
基于Spark Streaming的瓦斯浓度异常实时检测系统如图2所示,系统分为三层,包括流处理层、建模层和存储层。各层的功能如下:
1)流处理层采用Spark Streaming来完成。Spark Streaming不保存任何历史数据,利用基于内存的运算来处理流数据,可使得瓦斯浓度流数据处理时间达到实时数据流的时间跨度数百毫秒到数秒之间[16]。流处理层Spark Streaming实时接收瓦斯浓度流数据,读取异常检测模型以判定异常,并将异常结果写入分布式存储系统HBase中。因此,基于Spark Streaming来构建流回归瓦斯浓度异常实时检测系统能在流计算中进行机器学习,同时兼顾流计算的实时性。
2)异常检测系统的建模层利用Spark从HDFS中读取瓦斯浓度历史数据,并用利用MLlib来建立异常检测模型,并定期将模型写入HBase进行保存供流处理调用。整个模型的建立、保存定期运行,以保证模型的实时性。Spark Streaming处理实时浓度数据流时,会从HBase中取出建模层最近更新的模型用来检测流数据异常,并将异常数据写入存储系统作为输出。
3)存储层采用与分布式计算相匹配的、支持快速读写的、高扩展性的NoSQL系统HBase来实现,在实现模型的存取的同时,还提供异常结果的查询处理。
由图2可知,瓦斯传感器中的瓦斯浓度数据通过网络以流的方式传入检测系统,瓦斯浓度流数据既可直接写入HDFS中,也可通过流的方式注入至流处理层中。流处理层读取瓦斯浓度流数据,根据时间戳读取存储层里最新检测模型进行异常检测,并以实时流的方式将异常结果写入存储层。建模层主要负责异常模型的建立,通过读取HDFS中的前一周期的瓦斯浓度数据来进行异常检测模型的建立,即求解检测模型的各种参数,包括回归系数α、均值μ和方差σ2。模型的建立可根据用户指定的周期进行,并定期写入存储层,以确保异常检测模型的实时性。存储层负责检测模型的保存和异常结果的检索与输出。
4 仿真实验及分析
实验数据来自河南某煤矿监测监控系统采集的3102综采工作面回风隅角瓦斯传感器(编号001A08)的瓦斯浓度实测数据。001A08传感器以采样速率0.2Hz收集瓦斯浓度数据,将连续采样4h的瓦斯浓度数据流作为实验数据。通过统计与分析,该监测点瓦斯浓度数据最大值为1.47%,最小值为0.02%,平均值为0.3114%,标准差为0.0835。其中实时瓦斯浓度数据与前60s内采集的浓度数据之间的Pearson相关系数如表1所示,从表1可知,瓦斯浓度流数据间相关系数都大于0.5,呈现出较强的线性相关关系,因此,利用一定历史时间的数据作为训练数据集,建立线性回归模型,并利用流回归算法定期更新预测模型,预测当前瓦斯浓度是可行的。
表1 瓦斯浓度pearson相关系数
为定期更新检测模型,系统流处理层采用Spark Streaming的窗口计算来周期性的收集瓦斯浓度流数据,并利用建模层的机器学习组件MLlib进行动态流回归建模。在Spark Streaming的窗口计算中,窗口长度指定采集的训练数据的大小。滑动距离则指定基于流回归异常检测模型的更新周期。
为评价异常检测建模窗口长度对异常检测数的影响,将异常检测建模窗口长度分别设为7m、5m、3m和1m,阈值分别设为0.15、0.10和0.05时,通过检测系统检测的异常数如图3所示。当窗口长度为3m,阈值为0.15时,异常检测数最大为518个,而当窗口长度为3m,阈值为0.05时,异常数为最小210个。由图3可知,在相同的窗口长度下,异常阈值设置越大,检测的异常数更多。而当窗口长度太短,建模数据集不能完全反映数据集的统计规律;窗口长度过长,异常检测模型的参数拟合较差,这些都导致异常检测的准确性有所下降。而窗口长度为3m和5m时,异常检测数大致相等。因此,选择窗口长度为3m或5m时,系统检测的异常数据量和准确率更利于瓦斯风险评价。
图3 建模窗口长度对异常检测的影响
表2 不同滑动距离的预测误差
本次实验窗口长度设为3m,表2展示了窗口长度为3m,滑动距离分别为60s、45s、30s和15s时,流回归预测的误差对比。由表2可知,预测平均RMSE随着滑动距离的缩短而减少,而总体RMSE则是滑动距离为45s时最小。从实验结果分析可知,异常检测模型更新周期宜采用45s,既可避免由于异常模型更新周期过长,瓦斯浓度流数据波动较大导致的统计结果的扰动性,也能使得异常检测模型更为合理、有效。图4则给出了窗口长度为3m时,滑动距离为45s时,流回归预测算法进行实时预测的瓦斯浓度预测值与实测值的对比。
图4 流回归预测值与实测值对比图
从建模窗口长度为3m的流数据统计结果分析,在窗口长度内的数据集X服从正态分布。因此,在指定的异常建模窗口长度内,可以使用基于正态分布的异常检测算法来判断异常。图5、图6、图7分别给出了异常检测模型统计周期即窗口长度为3m,更新周期即滑动距离为45s,异常阈值分别0.15、0.10和0.05的瓦斯浓度流数据异常判定结果。
图5 异常检测结果(∈=0.15)
图6 异常检测结果(∈=0.10)
图7 异常检测结果(∈=0.05)
由检测结果可知,阈值为0.15、0.10和0.05时,检测到的异常点数分别为518、374和210。随着阈值的减小,异常数也随之减少。
为评价异常检测系统的准确性,可采用箱线图异常分析法来进行异常检测与之对比。箱线图异常分析法是通过周期性的绘制图形来进行检测数据集中的异常。当箱线图统计周期为5m时,异常数是233个;统计周期为3m时,异常数为210个;统计周期为1m时,异常点为138个。从结果可知,当箱线图分析法的统计周期与异常检测模型的更新周期同为3m时,二者的异常检测数一致。虽然箱线图异常分析法能静态统计异常数,但跟数据集的统计周期关联大,只能根据数据的范围来确定异常数据,且箱线图分析法的更新周期与统计周期一致,检测时间只能达到分钟级,不能实现秒级实时判断数据异常,不适合流数据实时处理。而基于流数据的瓦斯浓度数据流异常检测模型更新周期可达45s,判定异常不仅仅跟浓度数据大小的空间有关,还与统计周期的时间长度有关,从而从时空两方面判断异常,使得异常检测更为实时高效。
5 结语
1)为检测瓦斯浓度数据流中的异常数据,以提高瓦斯风险评价的准确性,在分析与挖掘瓦斯浓度流数据的特征和规律的基础上,构建基于流回归的浓度预测算法与基于正态统计分布的异常检测算法相结合的瓦斯浓度异常实时检测模型,并给出了基于该检测模型的瓦斯浓度异常实时检测系统原型。
2)基于Spark Streaming的瓦斯浓度异常实时检测系统以Spark Streaming为核心,通过Spark Streaming的流式窗口计算,能指定异常检测模型的更新周期,并可根据最新检测模型来实时检测流数据中的异常,提高了瓦斯风险评价的准确性和时效。
3)由实验可知,异常检测窗口长度为3m、滑动距离为45s、异常阈值设为0.05时,异常检测数与统计周期为3m的箱线图异常分析法异常检测数相等,但检测响应时间达到秒级,说明基于瓦斯流数据异常实时检测模型是有效可行的。
4)瓦斯浓度流数据异常实时检测方法采用流数据处理技术,解决了流数据中大数据机器学习处理和实时性问题,为瓦斯风险的实时、准确判断提供了保障。