许志城 印四华 朱成就
1(广东工业大学计算机学院 广东 广州 510006) 2(广东工业大学机电工程学院 广东 广州 510006)
我国是铝型材生产、出口和消费大国。2015年我国铝型材加工材产量达到26 000 kt/a,铝合金挤压材产量达到14 000 kt/a[1],居世界前列。进一步的数据统计显示,2017年中国挤压铝材产量继续攀升[2],达到了19 500 kt/a,占全球总产量的55%,拥有各种挤压力的现代化油压机约1 850台,约占全球总台数的70%。铝材生产与消费规模在不断扩大,对铝型材生产过程的进一步分析,已经成为促进铝材生产进一步发展的迫切需求。
传感器设备具有价格低廉以及非侵入性的特性,促使物联网技术正越来越多地被应用到工业大数据领域中。由于生产流程复杂,工业设备上的传感器数量众多且取样频率高,数据累积速度极快。产生的数据具有时间序列排布、数据维度高且存在大量无标签数据、机理模型复杂等特点,并且特殊工况的发生常常会带来较大的经济损失[3]。挤压机是铝型材生产线上的核心设备,在发展过程中其结构日趋于大型化、复杂化及自动化,若能对生产过程中出现的异常及时进行检测与分析,将会提高整个生产过程的效率,从而带来较大的应用价值。
异常检测一直以来都是数据挖掘领域的研究热点,被广泛应用于设备状态监测、网络入侵检测以及金融欺诈检测等领域。目前,面向工业生产的异常检测方法的研究主要集中在利用不同的异常检测方法解决不同工业生产环境下的特定问题上。为了避免发电厂汽轮机健康监测系统由于噪声问题出现不必要的假警报与故障误诊,Ajami等[4]应用主成分分析法(PCA)排除了次要的影响因素,提升了故障诊断的正确性和有效性;Kim等[5]结合无标签传感设备与边缘计算的场景提出了一种压缩卷积变分自编码器方法(SCVAE),用来解决无标签传感设备在小型生产工厂中的异常检测问题;在分切机运行质量管理与质量控制研究中,Kanawaday等[6]利用差分整合移动平均自回归(ARIMA)模型对分切机可能产生的错误和质量缺陷进行预测,优化了整个生产过程;针对挤压机设备异常原因复杂、检测方法时效性不足等问题,杨慧芳[7]结合专家知识提出了一种基于贝叶斯网络的铝型材挤压过程异常检测方法,极大地缩短了网络构建周期,提高了检测的效率。
深度结合专家知识、利用复杂的数学模型进行计算以及从整体数据的角度进行统计学分析,上述方法在一定程度上解决了工业场景中常见的各种问题。但在实际场景中,工业生产数据更多的是以流数据的形式表现的。流数据通常数量巨大、生成速度快,而且其分布可能会随着时间的推移而发生变化,即概念漂移现象[8]。因此面向流数据的异常检测模型必须及时更新,适应可能发生变化的数据,保证模型的有效性。
在众多机器学习算法中,集成学习算法具有易于更新、适应性强、性能较好的优点,是用于流数据处理最广泛的技术之一。孤立森林[9]是集成学习算法中的一类典型的无监督异常检测算法。该算法将异常数据定义为容易被孤立的离群点,即远离于高密度数据群体的孤立的点。其算法思想为,使用超平面划分的方式随机选择数据空间的某维度进行划分子空间,迭代地对子空间进行划分构造出子树,反复构造出多个子树形成孤立森林。在划分过程中,越是稀疏的数据点越早被划分开来,在子树中的深度也就越小,在孤立森林中的平均深度也越小。
孤立森林算法有效地解决了高维度数据集异常检测中的2个问题[10]:① 不需要计算数据点之间的距离,算法的时间复杂度为线性,不随维度的增加而增加;② 采用集成学习的策略,对大型数据集的检测性能好,子树越多,孤立森林的算法性能越稳定。同时,由于子树之间相互独立,子树的构造与使用不会受到其他树的影响,算法还可以部署在大型分布式系统上进行分布式并行计算。
基于以上分析,为了解决挤压机流数据中存在的噪声问题以及概念漂移问题,本文提出了一种基于孤立森林算法的挤压机流数据异常检测方法,所提出的算法主要用来检测挤压机在运行中可能存在的短时间状态异常,即异常检测中的序列异常。实验结果表明,本文所提出的算法不仅可以实时地检测出挤压机在运行中存在的状态异常,还具有较高的准确性。
本文所研究的对象为华南某大型铝型材生产企业挤压车间型号为SY-3600Ton的卧式液压直接传动型铝型材挤压机,该类型挤压机是目前铝型材生产企业广泛使用的一种中型挤压机,其基本结构如图1所示。
图1 挤压机基本结构图
铝型材挤压机主要由三部分组成[11],分别为电气控制系统、机械系统和液压系统。机械系统包括挤压机底座、张力柱、挤压杆、剪刀机和滑动模座等单元;液压系统包括油泵站、柱塞泵、液压控制阀、主缸、副缸、阀板和液压油管等;电气系统主要由显示屏幕、PLC可编程序控制器、操作台、上位工业控制机和供电柜等组成。在挤压工艺流程中,各个系统间产生的电能、机械能和液压能相互转换,共同完成工作。
挤压机目前的运作方式为半自动化运作,需要人工使用PLC操作台进行操作。完整的铝型材挤压工艺流程包括预热、挤压、压余、矫直、锯切、冷加工以及人工时效等步骤。挤压机负责铝材初期的塑性加工过程,参与了预热、挤压和压余三个阶段,其中包含了很多影响挤压产品质量的相关因素[12],如图2所示。在预热阶段,挤压机开始挤压前,需要利用多个加热子系统先对铝棒、模具以及盛锭筒进行加热,使温度达到工艺要求;在挤压阶段,为了保证挤压产品质量与最大化模具使用寿命,需要控制挤压速度,同时使用氮气控制模具的温度,使铝棒在挤压杆推力的作用下从挤压筒另一端的模具孔流出,得到与挤压模具孔形状尺寸相同的产品;在压余阶段,即挤压的最后阶段,使挤压垫片与模子保持一定距离,挤压筒外层金属向挤压垫再向模子流出,会形成“挤压缩尾”,需要挤压机利用剪刀机将含有杂质的缩尾进行剪切。挤压机的生产过程中各个子系统之间相互配合,其同一时刻的运行状态表示了挤压系统当前的运行状态。
图2 挤压机挤压过程相关影响因素
在实际生产中,挤压机设备不仅存在挤压杆变形、倾斜等人为可观察到的异常,还存在许多难以直接观察到的异常,如液压系统中的管道和挤压泵零件故障。若没有及时处理异常,极易引起其他相关异常。传感器设备在使用过程中,由于电流电压不稳定、通信异常等因素会导致部分采集点数据偏离于真实值,产生许多噪声,影响数据的质量。此外,设备部件的老化与更换、工况变化、挤压工艺改进以及气候状况等因素还会使得设备运行状态所隐含的概念发生改变,发生概念漂移现象。这些因素都严重影响了当前挤压机异常检测技术的有效性。因此,如何利用挤压机各个子系统的数据及时发现异常,同时克服噪声和概念漂移带来的检测困难是本文需要解决的关键问题。
为了检测挤压机在运行中可能存在的短时间状态异常,本文提出了一种基于孤立森林算法的挤压机流数据异常检测方法-多特征半空间孤立森林算法,简称MHSIF算法。本文所提模型进行异常检测的过程如图3所示。算法开始时,使用原始数据初始化模型。模型在初始化后在新的检测周期读入挤压机流数据进行实时异常检测;当周期结束后,若异常率大于阈值,表示存在概念漂移,则使用当前周期数据更新模型,保证模型的有效性。
图3 基于孤立森林算法的流数据异常检测过程
流数据可以认为是随时间变化不断增长的数据。通过提取数据子序列的特征来表示设备的状态,不仅可以充分利用时间序列数据连续相关的特性,还能在一定程度上避免点数据噪声对设备状态异常检测的影响。
定义1(多维流数据) 记一组n维时间序列流数据X=
均值是数据中心位置的一种度量,反映总体数据的一般水平,其计算式为:
(1)
方差反映了数据的变异程度,可以衡量一组数据离散程度,其计算式为:
(2)
偏度是统计数据分布偏斜方向和程度的度量。偏度小于0,表示当前数据分布为左偏态;反之,表示当前数据分布为右偏态。偏度的绝对值越高,表示数据分布的偏离程度越高,其计算式为:
(3)
峰度是描述总体序列中数据分布形态陡缓程度的统计量。峰度越大表示序列分布越陡峭,峰度越小表示序列数据分布越平坦,其计算式为:
(4)
Tan等[14]在孤立森林算法的基础上结合Ting等[15]的质量评估方法提出了半空间孤立森林(HS-Trees)算法。HS-Trees模型子树的建立过程主要分为子树构造与节点质量计算两个阶段。在子树的构造阶段,得到数据各维度的取值边界,随机选择某一维度,以该维度的中点作为划分点切割子空间。更新子空间的维度信息,再次对各子空间进行划分,迭代划分过程得到半空间树,如算法1所示。
算法1HS-Trees子树构建算法-BuildTree
输入:minArr & maxArr-每一维度中最大最小值组成的数
组,k-当前节点深度
输出:HS-Tree-子树的根节点
1. if k==最大深度then
2. return当前节点;
3. else
4. 随机选择某一维度q;
5. p←(maxArr[q]+minArr[q])/2;
6. temp←maxArr[q];maxArr[q]←p;
7. Left←BuildHS-Tree(minArr,maxArr,k+1);
8. maxArr[q]←temp;min[q]←p;
9. Right←BuildHS-Tree(minArr,maxArr,k+1);
10. return Node(Left,Right,p,q);
//返回切割维度为q,
//切割值为q以Left为左子树,Right为右子树的节点
11. end if
在节点质量计算阶段,记录子树各节点中一个检测周期内数据点经过的次数,将其作为对应节点的质量。子树建立完成后,使用评分函数计算新数据点的异常值,其表达式为:
(5)
式中:node表示在树T中x经过的所有节点;node.mass表示节点的质量,h为对应节点在树中的深度。
在HS-Trees算法中,称各子树异常值的均值为该数据点的异常值。异常值越小表示该数据点是异常数据的可能性越大,且异常值的大小随子树数量的增多趋于稳定。
与一般孤立森林算法的不同之处在于,HS-Trees算法中使用数据的维度属性构建子树结构,模型的结构在新的数据分布中仍具有适用性。同时,算法利用了质量评估方法计算数据的异常值,因此检测器可以快速适应并学习数据流中的变化而无需改变模型的基本结构,只需在新的检测周期中更新节点质量即可达更新模型。但是在对HS-Trees算法的分析中发现算法存在以下两个问题:① HS-Trees算法中判断出异常的方法为,在完成一个检测周期后对数据点的异常值进行排序,异常值最小的前n个数据点被认为是异常数据。异常结果的反馈存在延迟,并且检测效果严重依赖于对异常率的判断。在异常率大小存在波动的场景中容易出现错判,漏判的情况。② HS-Trees算法中,随着检测周期的切换,都会做一次节点权值更新,存在可能的重复的模型更新操作。
结合HS-Trees算法效率高、时间复杂度低的特点与时间序列数据连续相关的特性,本文针对挤压机流数据提出了一种多特征半空间孤立森林异常检测算法。本文算法以多维流数据子序列的统计向量作为基本检测单元,在算法开始阶段需要先对多维流数据子序列进行切割。经由统计特征提取算法转换成多种统计特征值后,再由对应的MHSIF异常检测模型计算出对应统计特征向量的异常值,其检测过程如图4所示。
图4 MHSIF算法异常检测过程
具体而言,多特征半空间孤立森林算法有3个重要组成部分,分别为统计特征值的提取、MHSIF模型的构建和使用MHSIF模型异常检测过程。
多维流数据统计特征值的提取过程如算法2所示,算法输出的结果为经过对应统计特征公式计算转换后的特征向量集合。具体的算法的处理过程为:① 通过统计特征名称得到预先定义好的统计特征计算函数;② 按照预先设置好的子序列长度截取多维流数据子序列,并使用统计特征计算函数计算出子序列的统计特征向量;③ 合并并输出多维流数据各个统计特征值计算结果。算法2计算了多维流数据子序列的不同统计特征值,并以集合的方式将计算结果输出供异常检测算法使用。
算法2统计特征值提取算法-TransData
输入:data-多维流数据,sub_size-子序列长度,columns-维度列名,feature_list-统计特征名称集合
输出:result-经对应函数集合转换后的统计特征向量集合
1. result←{};
//定义变量,保存统计特征提取结果
2. for feature_name in feature_list do
3. func←get_func(feature_name);
//通过统计特征名
//feature_name取出预先定义好的lambda函数
4. result_temp←{};
//定义临时变量,保存对应统计
//特征提取结果
5. for i←1 to len(data)/sub_size do
6. data_feature←get_feature(data,i,func,sub_size);
//使用lambda函数func计算数据流data的子序列统计特征值
7. result_temp←result_temp∪data_feature
8. end
9. result←result∪result_temp;
10. end
11. return result;
在HS-Trees算法的基础上,本文提出了MHSIF模型的构建方法,如算法3所示。为了在多个角度描述挤压机流数据的设备状态,MHSIF算法利用单个检测周期内多维流数据子序列的多种特征向量数据构建了一个多特征HS-Trees集合,本文将其称为MHSIF模型。由2.2节可知,MHSHF模型中子树的结构只需要构建一次即可,模型在检测过程中的更新主要是对树节点的质量进行重新计算。
算法3MHSIF模型构建算法-BuildMSHIF
输入:data-单周期历史特征向量数据集,tree_num-单个特征森林中子树的数量,feature_list-统计特征名称集合
输出:trees_list-特征向量子树集合
1. trees_list←{};
//定义变量,保存特征向量子树集合
2. for feature in feature_list do
3. max,min←get_side(data[feature]);
//取得每一维度最值组成的数组
4. for i←1 to tree_num do
5. t←BuildTree(max,min,0);
//构建HS-Tree子树
6. update_mass(t,data[feature]);
//计算节点质量
7. trees_list[feature]←trees_list[feature]∪ t;
//合并对应特征的半空间孤立森林子树
8. end
9. end
10. return trees_list;
基于HS-Trees算法的MHSIF异常检测模型需要解决一个关键问题,即HS-Trees算法检测异常存在反馈延迟问题。HS-Trees算法的反馈延迟问题的根源在于,在不同长度的检测周期中评分函数值域会发生改变,从而无法通过同一阈值对异常数据进行划分。为了使模型可以在不同长度的样本中具有通用性,文献[9]利用二叉树的特性对典型孤立森林的评分函数进行归一化。本文参照文献[9]中典型孤立森林评分函数的归一化公式对HS-Trees评分函数做了进一步改进,对计算出来的异常值进行归一化,使算法可以利用阈值判断实时反馈异常检测的结果。
设有任一统计特征向量x,对应的特征值森林T,T的检测周期为n,子树的最大深度为max_depth,则特征向量x在T中的异常值归一化计算公式如式(6)所示。
(6)
H(k)=ln(k)+ξξ=0.577 215 664 9
E(score(x,t))表示特征向量x在特征值森林中的平均异常分数;c(n)表示在特征值森林中查找失败的平均异常值;H(k)为调和数公式,ξ为欧拉常数。对归一化后的异常值,本文的判断异常数据的标准为:① 若特征向量的异常值小于或接近0.5,则认为其是正常实例的可能性较大;② 若特征向量的异常值远大于0.5,则认为其是异常的可能性很大。
流数据经算法3转换成特征向量后,即可使用MHSIF模型进行异常检测,其检测过程如算法4所示。利用MHSIF模型可以计算出同一数据序列不同特征向量的异常值,并且实时地记录与反馈数据序列的检测结果。具体的算法的处理过程为:① 在开始检测前,判断当前是否进入新的检测周期;进入新的检测周期前,若前一检测周期异常率高于阈值则认为模型出现概念漂移,使用前一周期数据更新模型节点质量并重置记录模型状态的相关变量;② 分别用对应的特征森林计算不同类别特征的平均异常值;计算出平均异常值后,使用式(6)进行归一化;③ 若某特征归一化后的异常值超过阈值则认为该特征可能存在异常;若数据序列中出现异常的特征数超过两种则认为该数据序列为异常数据序列。
算法4MHSIF异常检测算法-Predict
输入:trans_data-特征向量数据集,feature_list-统计特征名称集合,trees_list-特征向量对应的子树集合,threshold_outlier-异常值阈值,detecion_size-检测周期长度
输出:result-异常值计算结果
1. result←{};
//定义变量,保存异常值结果
2. for i←1 to len(trans_data) do
3. if当前检测数>=detection_size then
4. if异常率>=threshold_outlier then
5. 使用当前周期数据更新模型节点质量;
6. end if
7. cur_data←{};
//清空当前周期数据
8. 当前检测数及异常数归零;
9. end if
10. for feature in feature_list do
11. s←0;
12. for tree in trees_list[feature] do
13. s←s+score(trans_data[i],tree);
//计算特征向量在各子树的异常值
14. end
15 s←balance_score(s/trees_num);
//使用平衡函数归一化异常值的均值
16. result[feature]←result[feature] ∪s;
17. end
18. if scores中异常的特征数超过两种 then
19. 当前异常数加1;
20. end if
21. cur_data←cur_data∪trans_data[i];
//记录当前周期数据点
22. end
23. return result
本文的实验所使用的环境为Intel(R) Core(TM) i5- 7300HQ @ 2.5 GHz,16 GB RAM,Windows 10 64位系统,算法采用Python 3.7实现。
本文采用异常检测领域中最常用的三个指标,正确率、查全率以及精确率,对模型的异常检测性能进行验证。其中,正确率表示模型判断正确的数量占总数据的比例;查全率表示被正确检测出来的异常数目占实际异常总数的比例;精确率表示被正确检测出来的异常数目占被检测为异常的总数的比例。
为了评估MHSIF算法的有效性及检测效果,本文设计了两个实验:① 验证改进后的HS-Trees模型是否能在原始环境中有效地区分异常数据,解决原算法中异常结果反馈存在延迟的问题;② 验证异常检测算法在挤压机流数据的背景下的检测效果。实验使用文献[14]中HS-Trees模型设置的相关参数,将检测周期设置为250,森林子树数目为25,子树的最大深度设为15。
3.2.1实验一
实验一使用KDDCup99数据库中的HTTP与SMTP入侵检测数据集进行实验,文献[14]用其作为实验数据集用来验证HS-Trees模型的有效性。将HS-Trees算法中的评分函数替换为异常值归一化公式,即式(6),将判断异常的阈值设置为0.6。取数据集中各1 000条数据作为测试数据,使用替换评分函数后的HS-Trees算法对数据进行异常检测。
使用改进后的HS-Trees算法对HTTP测试数据集进行异常检测。计算后的异常值分布散点图和概率密度分布图如图5和图6所示。由图可知,算法成功将模型计算的异常值范围限制在0到1之间,并且标签为正常的数据的异常值主要集中在区间[0,0.5]内,标签为异常的数据的异常值主要集中在区间(0.5,1]内,表明使用本文所提的判断异常数据的标准可以有效地将异常数据识别出来。
图5 HTTP测试数据异常值分布散点图
图6 HTTP测试集异常值概率密度分布图
由表1可知,新的异常数据判断策略有效地检测出了HTTP数据集和SMTP数据集中的异常。使用异常值归一化公式计算异常值可以在保证算法检测性能不降低的前提下解决原算法中异常结果反馈存在延迟的问题。
表1 改进HS-Trees算法异常检测算法结果
3.2.2实验二
实验二使用的数据来源于华南某大型铝型材生产企业能源管理系统的数据库,本文选择挤压车间中型号为SY-3600Ton的挤压机设备在2018年1月至3月采集的生产数据。其中数据为每10秒采集一次的流数据,包含了挤压机、棒炉、冷床、模具炉以及风冷电柜等采集点的用电量、电流和电压数据。
在实验前,先对数据进行降采样,取得数据间时间间隔为1分钟的时序数据集,其中,将电量等累计数据进行偏移量计算,得到固定时间间隔的电量偏移量集合,其余数据进行时间间隔等距采样。设当周期内异常率超过3%时认为模型存在概念漂移,以是否更新模型作为变量条件,子序列长度设置为6,使用MHSIF算法进行实验。
由图7可知,随着检测周期的切换,挤压机流数据会发生概念漂移现象,没有采用更新策略的MHSIF模型的查全率在逐步降低。
图7 不同更新策略下MSHIF算法查全率对比图
由表2可知,与采用不更新策略的模型相比,采用更新策略的MHSIF算法在正确率、查全率以及精确率三个方面都有较大的优势。本文所提出的基于孤立森林算法的挤压机流数据异常检测算法可以有效地检测挤压机在运行中可能存在的设备状态异常。
表2 MHSIF算法异常检测算法结果
为了检测出挤压机在运行中可能存在的设备状态异常,本文提出了基于孤立森林算法的挤压机流数据异常检测方法。针对数据集中存在噪声无法正确反映设备状态的问题,算法抽取数据的序列特征用来表示设备在某一时间段的状态,避免了噪声数据对异常检测效果的影响。同时,本文在半空间孤立森林(HS-Trees)算法[14]的基础上做了改进,解决了原算法中存在的结果反馈延迟问题,使其能更好地适应流数据应用场景。实验显示,本文所提出的算法不仅可以实时地检测出挤压机在运行中存在的状态异常,还具有较高的准确性。