王 耀, 趙 炯, 周奇才, 熊肖磊, 陳傳林, 張 恒
(1. 同濟大學 機械與能源工程學院,上海 201804;2. 同濟大學 浙江學院,浙江 嘉興 314051;3. 上海地鐵盾構設備工程有限公司,上海 200233)
“工業(yè)4.0” 背景下,生產(chǎn)制造過程、工程裝備狀態(tài)監(jiān)測等環(huán)節(jié)產(chǎn)生了海量數(shù)據(jù)[1-2]。工業(yè)大數(shù)據(jù)的分析與應用為企業(yè)的生產(chǎn)、管理,裝備的智能控制、故障診斷提供了可靠的決策依據(jù)[3-4]。工業(yè)數(shù)據(jù)的分析效果又與數(shù)據(jù)質(zhì)量緊密相關[5],然而在工業(yè)環(huán)境中,采集的數(shù)據(jù)受環(huán)境、可靠性、通信等因素影響,缺失值、異常值、冗余等[6]臟數(shù)據(jù)已成為常態(tài)。使用含有異常的數(shù)據(jù)進行數(shù)據(jù)分析、建模等應用,會直接影響決策結果,導致模型失效[2,5],因此數(shù)據(jù)在應用前需進行必要的清洗。而工業(yè)數(shù)據(jù)的清洗又獨具特點,工業(yè)大數(shù)據(jù)區(qū)別于傳統(tǒng)互聯(lián)網(wǎng)大數(shù)據(jù),時序性、關聯(lián)性、周期性是工業(yè)大數(shù)據(jù)的顯著特點[7-8],同時工業(yè)數(shù)據(jù)來源于實際的工程裝備,采集的數(shù)據(jù)具有物理含義。工業(yè)數(shù)據(jù)的時序性、關聯(lián)性已成為工業(yè)數(shù)據(jù)清洗系統(tǒng)設計的關鍵因素[9],對實時性較高的控制系統(tǒng),還要求數(shù)據(jù)可實時處理。雖然異常數(shù)據(jù)會導致模型的不準確,但工業(yè)場景的異常值往往成為狀態(tài)檢測和健康評估的重要依據(jù),如故障分析應用中異常數(shù)據(jù)價值較高,數(shù)據(jù)清洗系統(tǒng)還應當為異常數(shù)據(jù)的保留或修復提供妥善的選擇。
目前,常見的工業(yè)數(shù)據(jù)清洗模式為離線清洗。離線清洗系統(tǒng)對實時數(shù)據(jù)先存儲、后清洗,如Kumar等人[10]針對數(shù)據(jù)庫設計的離線清洗系統(tǒng),傳統(tǒng)的離線方法無法適用于較高實時性的工業(yè)環(huán)境。在新興分布式框架流行后,實時流式清洗系統(tǒng)逐漸成為工業(yè)數(shù)據(jù)處理的主流系統(tǒng),陳志云[11]等人提出了一種基于Storm 的工業(yè)流水線實時分析系統(tǒng),該系統(tǒng)采用Storm + Kafka + Flume + HBase的實時流處理框架,證實了此類系統(tǒng)具有較好的可靠性與并行度。Geng[12]等人也利用Flume,Kafka,Hbase等框架搭建了工業(yè)數(shù)據(jù)分析系統(tǒng),并證實了主流分布式框架能滿足工業(yè)現(xiàn)場的數(shù)據(jù)采集、分析需求。
流式數(shù)據(jù)清洗系統(tǒng)通常集成了高精度、低偏差的清洗算法。工業(yè)時序數(shù)據(jù)的清洗算法通常以處理缺失值、錯列、異常值等為目標[13-14]。其中異常值又分為連續(xù)異常、單點異常、平移異常等類型[15]。在來源于工程裝備的時序數(shù)據(jù)中,單點異常是常見的一種。所謂單點異常,是指觀測值和真實值具有較大偏差,且這種大偏差在一組時序數(shù)據(jù)中不連續(xù)出現(xiàn)。單點異常是工業(yè)現(xiàn)場較普遍的類型,常用的清洗方法有①基于平滑方法的清洗。利用數(shù)據(jù)擬合去除時間序列中的異常值,如移動平均法(SMA),加權平均法(WMA)等[16]。Jeffery 等人基于滑動窗口法設計了在線數(shù)據(jù)流清洗系統(tǒng)[17]。通常平滑算法能夠在時序數(shù)據(jù)清洗中發(fā)揮良好的效果,但清洗準確率較低,清洗時會影響部分正常數(shù)據(jù)導致整體清洗偏差增大。②基于約束的清洗。通過設計某種規(guī)則,調(diào)整異常數(shù)據(jù)使其滿足設定的約束。Zhang等人[9,13]提出了速度約束清洗算法,通過限制一個時間段內(nèi)的兩個點數(shù)值的變化率,從全局或局部識別違反約束的點,利用異常點前后時刻的值對異常點修復。Song 等人[18]在速度約束研究的基礎上擴展了基于加速度約束的數(shù)據(jù)清洗方法。這種基于速度約束的清洗方法處理單點異常值具有很好的效果。但該方法在處理周期性數(shù)據(jù)時或周期跳變數(shù)據(jù)時產(chǎn)生數(shù)據(jù)失真,無法適用強周期性工業(yè)數(shù)據(jù)的清洗需求。③基于機器學習的清洗。通過構建聚類、回歸、神經(jīng)網(wǎng)絡等模型識別并修復異常值[19-20],機器學習的清洗算法雖然高效,但數(shù)據(jù)集中異常值偏少時,類別不均衡,對標簽集的修復結果受樣本特征影響,含有較多異常值的樣本集會降低修復質(zhì)量。
本文為了高效清洗具有時序性、周期性等特點的工業(yè)數(shù)據(jù),設計了一套面向周期性工業(yè)時序數(shù)據(jù)的流式清洗系統(tǒng)和清洗算法,使系統(tǒng)在處理周期性突變數(shù)據(jù)時,也具有良好的數(shù)據(jù)修復效果。首先,利用Flume、Kafka 等組件,構建一套流式數(shù)據(jù)處理系統(tǒng),克服傳統(tǒng)離線清洗系統(tǒng)先存儲、后清洗的實時性差問題;其次,在構建的流式清洗系統(tǒng)基礎上,使用基于速度約束的清洗方法[9,13],并綜合數(shù)據(jù)的時序性、周期性、物理意義,對速度約束模型做周期性數(shù)據(jù)的適應性優(yōu)化,解決傳統(tǒng)算法在清洗距離、準確度方面的不足,提升速度約束算法在周期性工業(yè)數(shù)據(jù)的適應性。最后通過試驗驗證所提周期性數(shù)據(jù)清洗算法的先進性。
為滿足工業(yè)數(shù)據(jù)先清洗、再存儲的實時處理需求,本文使用主流的大數(shù)據(jù)框架,搭建了一套用于工業(yè)時序數(shù)據(jù)清洗、存儲的流式處理系統(tǒng)。整套系統(tǒng)包括數(shù)據(jù)匯集組件,連接組件,緩存組件,清洗組件,存儲組件,系統(tǒng)框架如圖1所示。
圖1 清洗系統(tǒng)組件和架構Fig.1 Component and architecture in the cleaning system
數(shù)據(jù)匯集組件選用Mosquitto MQTT Broker,其位于系統(tǒng)下層,使用MQTT協(xié)議實現(xiàn)底層采集裝置和數(shù)據(jù)清洗系統(tǒng)的通信。采集的數(shù)據(jù)須包含時間戳以及至少一列的有效觀測數(shù)據(jù)。Mosquitto匯集并封裝采集的數(shù)據(jù),隨后數(shù)據(jù)被發(fā)往數(shù)據(jù)連接組件進行后續(xù)流轉。
數(shù)據(jù)連接組件選用Flume框架,其在清洗系統(tǒng)中的位置和業(yè)務邏輯如圖1所示。匯集的數(shù)據(jù)由MQTT Source轉入Interceptor組件做簡單過濾,修復明顯的異常值,并將初步清洗后的數(shù)據(jù)嵌入PreCleaned標簽,由Sink送入緩存組件。過濾時任何不符合格式的數(shù)據(jù)、類型錯誤數(shù)據(jù)被嵌入Error標簽直接進入存儲組件。使用Memory Channel和多路復用結構,不同標簽的數(shù)據(jù)分別發(fā)往Kafka進行清洗或直接存儲。
數(shù)據(jù)緩存組件由Kafka集群組成,用于待清洗數(shù)據(jù)的緩存和系統(tǒng)解耦,適配高速產(chǎn)生的數(shù)據(jù)和清洗組件較慢的處理速率。圖1右側展示了其業(yè)務邏輯,每個數(shù)據(jù)采集裝置使用一個Topic,每個Topic包含一組特定的時間序列數(shù)據(jù)。Producer為Flume組件的Sink端,用于將可用數(shù)據(jù)轉入到緩存組件。Consumer為數(shù)據(jù)清洗組件,其周期性地從Kafka消費數(shù)據(jù),完成對數(shù)據(jù)的清洗工作,結果寫入數(shù)據(jù)存儲組件。
數(shù)據(jù)清洗組件是數(shù)據(jù)清洗系統(tǒng)的核心部分。清洗組件從Kafka持續(xù)獲取指定Topic下的數(shù)據(jù),完成基于速度約束的數(shù)據(jù)清洗工作。消費者每隔一定間隔從Kafka消費數(shù)據(jù),依據(jù)數(shù)據(jù)格式進行預處理,把原始數(shù)據(jù)封裝成可清洗數(shù)據(jù)集;隨后經(jīng)過處理算法完成異常值檢測和異常數(shù)據(jù)修復工作。
數(shù)據(jù)存儲組件由HDFS、Hive、HBase 構成。清洗組件依據(jù)Flume 連接階段數(shù)據(jù)標簽的差異,調(diào)用不同API寫入存儲組件。清洗系統(tǒng)修復所有不滿足約束的異常數(shù)據(jù),并存儲修復結果。但被清洗組件檢測為異常的數(shù)據(jù)以及被連接組件標記為Error 的數(shù)據(jù),會被冗余存儲,方便應用于故障檢測等工業(yè)應用;存儲組件同時存儲修復前異常值和修復后結果,為數(shù)據(jù)清洗后的數(shù)據(jù)分析工作提供保障。
清洗系統(tǒng)由上述組件構成,作為清洗算法的載體,能夠?qū)崿F(xiàn)海量數(shù)據(jù)的流式處理和清洗任務,相比傳統(tǒng)清洗系統(tǒng)具有低耦合、可擴展、易維護、大緩沖等特點。
首先給出速度約束的概念:一組時序數(shù)據(jù)中,若兩個時序點數(shù)值的變化率限制在一定范圍內(nèi),則稱兩點滿足速度約束。圖2a展示了一組時間序列,設時間序列X=x[t1],x[t2],x[t3],……其中ti為時間戳,x[ti]是時間為ti時的數(shù)值,簡記為xi。
圖2 時間序列和速度約束示意[9]Fig.2 Time series and speed constraints
考察圖2a 中左側時間間隔為w的兩個數(shù)據(jù)點,若兩個數(shù)據(jù)點的值xn,xm之間滿足式(1),則稱兩個數(shù)據(jù)點在窗口w內(nèi)滿足速度約束s= (smin,smax)。由于機械結構或運動構件具有慣性,正常工作時其物理數(shù)值通常不能劇烈跳變,變化率會被限制在某范圍內(nèi),因此速度約束在工業(yè)場景中普遍存在。
式中:xn,xm為兩個點的數(shù)值;tn,tm為數(shù)據(jù)點對應的時間戳;smin,smax分別為兩點速度約束的下限和上限。
現(xiàn)有的速度約束清洗方法[9,13],使用了約束模型的中位數(shù)近似求解方法??疾靾D2a時間序列X中在時間窗口w內(nèi)的兩個點xi和xk,其中xk為待修復的異常點。
根據(jù)速度約束條件,xk應當在xi的約束s所限制的范圍內(nèi),圖2a中短線表示的范圍邊界是數(shù)據(jù)點xk在前時刻數(shù)據(jù)點xi約束下的最大取值和最小取值,最大取值和最小取值構成的邊界限制了xk的取值范圍。
再考查圖2b 中待清洗的數(shù)據(jù)點xk,以xk為起點的窗口w內(nèi)有m個數(shù)據(jù)點。若已知k+1 時刻,k+2時刻…k+m時刻的數(shù)據(jù)點,則可以依據(jù)速度約束回溯xk的值。圖2b中星號標記表示了xk后面m個的數(shù)據(jù)點回溯xk范圍的上限xkmin和下限xkmax。
將xk本身和xk前時刻點約束范圍端點以及后時刻點xk+1,xk+2,…,xk+m的回溯結果成候選結果集,記作Xk,則
為了滿足最小修復距離原則,位于候選集Xk中間的數(shù)值通常具有較小的修復距離。把候選結果集Xk的中位數(shù)記作xmidk,xmidk就作為xk數(shù)據(jù)點的修復結果,圖2b中點xk即為修復結果,其滿足速度約束。
通常情況下,該方法能完成大多數(shù)清洗任務[13],但在部分工業(yè)環(huán)境中,機械裝備或運動構件往往具有周期運轉特性,采集的數(shù)據(jù)也呈現(xiàn)周期變化;往復運動的組件,其數(shù)值會有周期突變,例如圖3a展示的盾構機油缸行程數(shù)據(jù),在一個掘進周期中,油缸以設定的速度推進,完成一環(huán)任務時,油缸迅速返回,并為下一環(huán)的推進工作做好準備。
圖3 盾構機樣本數(shù)據(jù)和清洗結果Fig.3 Sample data of a tunnel boring machine and the cleaning results
而速度約束方法用于此類設備的數(shù)據(jù)清洗時,不能獲得良好的清洗結果。速度約束方法會把每個工作周期的數(shù)據(jù)按照連續(xù)數(shù)據(jù)清洗,導致兩個周期間、周期末尾的數(shù)據(jù)點發(fā)生較大失真,見圖3b。這是由于當清洗窗口包含兩個周期的數(shù)據(jù)時,每個周期最后時刻的突變點會被視作窗口內(nèi)的異常值,速度約束算法會將其修改為 “合理值” ,而實際上是油缸的回退時造成了該數(shù)據(jù)的突變,這些數(shù)據(jù)應被作為真實數(shù)據(jù)而不能被清洗和修復。
為提高速度約束算法的適用性,對周期性數(shù)據(jù)清洗前,應先識別并劃分數(shù)據(jù)的周期,限制窗口范圍。以油缸行程數(shù)據(jù)為例,應僅對盾構推進時的數(shù)據(jù)進行清洗,油缸回退時的數(shù)據(jù)不應當參與速度約束求解。
算法1描述了本清洗系統(tǒng)中周期性數(shù)據(jù)速度約束清洗算法(Periodic Data Cleaning Based on Speed Method)的流程。數(shù)據(jù)清洗算法主要面向時序數(shù)據(jù)中的單點異常值,異常值的識別依據(jù)式(1),不滿足式(1)約束的被視作為異常值。清洗算法按照最小修復原則[6],使得清洗后的序列X’內(nèi)的所有點能夠滿足約束,并且清洗后的值與原始數(shù)據(jù)值盡可能接近。即在滿足速度約束s條件下,為周期性時間序列X尋找修復距離最小的修復序列X’,其中修復距離指原始時間序列X中的點x和修復后的數(shù)據(jù)點x’的差別,記作Δx,如圖2a所示。
算法模型以Kafka Consumer身份接入系統(tǒng)并作為清洗組件。清洗組件先依據(jù)Kafka 配置連接到Kafka 集群,再通過Kafka 主題訂閱待清洗數(shù)據(jù)。清洗組件每隔一段間隔調(diào)用數(shù)據(jù)拉取函數(shù)從集群中獲取一批數(shù)據(jù),記作DatasRecords。
隨后,清洗組件調(diào)用預處理函數(shù)對每條數(shù)據(jù)Record 做格式轉換等預處理,預處理方式按照不同數(shù)據(jù)格式定制,預處理后的數(shù)據(jù)被暫存到RangofResult隊列中等待清洗;當RangofResult中的數(shù)據(jù)達到一定窗口時進行數(shù)據(jù)清洗工作。數(shù)據(jù)清洗工作通過調(diào)用清洗周期時間序列函數(shù)完成,清洗后的結果被記錄在CleanedDatas集合中。
算法1中的清洗周期時間序列函數(shù)會先用調(diào)用判斷函數(shù)對隊列RangOfResult的數(shù)據(jù)逐條判斷,判斷數(shù)據(jù)是否屬于同一周期。周期判斷的方法應依據(jù)現(xiàn)場數(shù)據(jù)進行特性化設計。本例中,有效工作周期和非工作周期數(shù)據(jù)間有明顯的突變,對圖3a所示的油缸行程數(shù)據(jù)可使用閾值判斷法,大于特定值的數(shù)據(jù)屬于同一周期。當檢測到周期突變數(shù)據(jù)時,終止檢測,并將終止前的一個切片數(shù)據(jù)記錄在OneSplitPeriod隊列中。本例還可通過數(shù)據(jù)跳變檢測,數(shù)據(jù)突變檢測等方式對數(shù)據(jù)進行周期性劃分。對于周期性明確的數(shù)據(jù),可通過限制清洗窗口來劃分清洗周期。
數(shù)據(jù)被劃分為周期片段后,調(diào)用算法2 清洗周期片段函數(shù)清洗每一個切片數(shù)據(jù)。最后,清洗組件將算法2的返回結果寫入存儲系統(tǒng)。
算法1數(shù)據(jù)清洗組件
Algorithm1 DataCleaningModule
輸入 待處理的周期性時間序列
輸出 清洗后的時間序列
主函數(shù) 數(shù)據(jù)清洗{
數(shù)據(jù)清洗消費者 = 新的Kafka Consumer(Kafka配置);
數(shù)據(jù)清洗消費者. 連接和訂閱(待清洗數(shù)據(jù)主題);
循環(huán){
DatasRecords = 數(shù)據(jù)清洗消費者. 從Kafka拉取數(shù)據(jù)(一段間隔);
對于DatasRecords中的每一個Record{
如果Record不為空{
Result = 預處理(Record);
RangofResult. 添加(Result);}}
如果RangofResult. 大?。?窗口大?。?/p>
CleanedDatas = 清洗周期時間序列(RangofResult);
清空RangofResult;}
寫入數(shù)據(jù)存儲組件(CleanedDatas );}}
函數(shù) 清洗周期時間序列(RangofResult){
對于RangofResult中的每一個Record{
歸屬的周期 = 判斷(Record );
OneSplitPeriod. 添加(歸屬的周期, Record );}
如果(OneSplitPeriod 不為空){
清洗后的序列片段 = 清洗周期片段(OneSplitPeriod);
返回 清洗后的序列片段;}}
單個周期片段數(shù)據(jù)的速度約束清洗流程如算法2 所示[9],先依據(jù)xk的前時刻數(shù)據(jù)點xk-1,計算前時刻點的約束集再依據(jù)xk后時刻m個點xk+1,xk+2,…,計算xk的后時刻回溯集。由前時刻點的約束集和后時刻點的回溯集組成候選集Xk,從候選集中求出中值xmkid。最后再判斷中值與的包含關系選出xk的數(shù)據(jù)清洗結果。候選值xmkid與約束范圍只能有以下幾種關系:屬于關系則清洗結果為xmkid;超過上限清洗結果為;低于下限清洗結果為
算法2清洗周期片段
Algorithm2 CleanAFragmentofTimeSeries
輸入 一個時間序列片段;
輸出 清洗后的時間序列片段;
清洗后的時間序列片段 = 新建 一個列表;
對于 一個時間序列片段 中的每一個xk{
候選集Xk= 新建 一個列表;
m個后續(xù)點 = 獲取xk后的m個數(shù)據(jù)點;
對于m個后續(xù)點 中的每一個xnkex{t
xk的清洗結果 = 判斷包含關系(候選集Xk的中位數(shù),xmaxk,xmink);
清洗后的時間序列片段. 添加(xk的清洗結果);}
返回 清洗后的時間序列片段。
為了測試周期性數(shù)據(jù)清洗算法用于周期時序數(shù)據(jù)的有效性,試驗選取了來源于上海申通盾構集團的中鐵CREC929-932 系列盾構機掘進數(shù)據(jù)集進行模擬實驗。原始樣本集包含油缸行程、油缸推力等200維數(shù)據(jù),選取周期性明顯的A組油缸行程數(shù)據(jù)為清洗對象,再從此列數(shù)據(jù)中選取2 500個時序點組成原始序列,如圖4所示。該組數(shù)據(jù)記錄了盾構機的8環(huán)掘進過程,圖4 中8 個上升階段為每個推進過程,圖4中的迅速下降階段為油缸的回退過程。
圖4 油缸行程數(shù)據(jù)和異常值點示例Fig.4 Cylinder stroke data and outliers
所有實驗程序用Java 實現(xiàn),其中數(shù)據(jù)生成程序會模擬工業(yè)現(xiàn)場底層采集單元的數(shù)據(jù)上傳。系統(tǒng)中各組件和算法程序運行在Intel(R) Xeon(R) CPU E5-2603 v4 @ 1.70GHz 的CPU 和8GB 內(nèi) 存 的PC上,操作系統(tǒng)為CentOS Linux Release 7.8。5 臺上述規(guī)格的PC 組成實驗集群,編號為PC1~PC5,集群配置如表1 所示,其中Zookeeper 用于輔助Kafka集群管理元數(shù)據(jù)信息。
表1 集群配置信息Tab.1 Cluster configuration information
實驗選用移動平均法SMA、加權平均法WMA、速度約束法[9,13]、隨機森林、神經(jīng)網(wǎng)絡與周期性數(shù)據(jù)速度約束清洗算法(簡記為周期性清洗算法)對比。其中機器學習模型對照組以待清洗的A組油缸行程為標簽集建模。模型評價指標包括:異常數(shù)據(jù)修復距離和,修復結果偏差和,清洗準確度,指標含義見3.2節(jié)。
本實驗中,因盾構推進中途油缸不可回縮,油缸行程的速度約束值下限選取為0。速度約束的上限依據(jù)施工組織方案中的施工計劃設定,油缸推進速度最大為80mm·min-1。對于無特定限制的其他系統(tǒng)可以采用統(tǒng)計方法選取合理的速度約束值。
實驗使用異常點替換原始序列中的部分樣本點,來模擬工業(yè)現(xiàn)場采集到異常數(shù)據(jù)的場景,驗證系統(tǒng)的可用性和算法的有效性。異常點的位置會對數(shù)據(jù)的清洗效果產(chǎn)生影響,清洗系統(tǒng)面向周期性數(shù)據(jù),系統(tǒng)會檢測并劃分一組數(shù)據(jù)的不同周期,本實驗中異常數(shù)據(jù)只被添加在油缸每個工作周期的推進行程中。
為體現(xiàn)算法在不同異常值分布下的泛化性,實驗使用均勻分布和偏態(tài)分布模擬工程裝備運轉時出現(xiàn)的異常值。均勻分布用于模擬裝備在正常工作階段時普遍出現(xiàn)的異常值。異常數(shù)據(jù)的位置服從均勻分布,樣本集中每個數(shù)據(jù)點等可能地出現(xiàn)異常;手動添加的均勻分布異常點與原本正常點數(shù)值上存在20%~30%的偏差。偏態(tài)分布用于模擬裝備啟動階段的高概率異常。周期運轉的大型裝備,在工作循環(huán)的啟動階段,由于環(huán)境復雜,交叉作業(yè)多,易發(fā)生信號干擾,初始階段異常值的出現(xiàn)概率高,正常工作階段異常概率相對較低。在該場景下,實驗使用Zipf分布模擬這種偏態(tài)分布;手動添加的偏態(tài)分布異常點與原本正常點數(shù)值上存在20%~30%的偏差。
首先直觀地對比在兩種分布下使用不同方法的清洗效果,分別在原始序列中添加1%的服從均勻分布的異常點和5%的服從偏態(tài)分布的異常點,圖中圓點為手動添加的異常點,如圖4所示。
清洗系統(tǒng)運用不同算法清洗序列的結果如圖5和圖6所示。移動平均算法會將每個油缸推進周期末尾的突變數(shù)據(jù)及其臨近點做平滑處理,影響了部分正常數(shù)據(jù),如圖5a、5b和圖6a、6b所示。圖5c和圖6c為周期性數(shù)據(jù)清洗算法結果,算法通過數(shù)據(jù)切片,識別有效工作階段的數(shù)據(jù),在保留原始數(shù)據(jù)突變趨勢的條件下較好地完成異常值的清洗。普通速度約束算法未對數(shù)據(jù)的周期性進行識別,當清洗窗口跨越不同周期時,窗口內(nèi)周期末尾的突變會被判斷為異常值,并受到速度約束(速度大于0)的限制,被速度約束方法修復,導致清洗結果偏離,見圖5d 和圖6d。圖5e、5f和圖6e、6f展示了兩種機器學習方法的清洗效果,機器學習方法能較準確地識別異常值,但對部分異常值的修復結果偏差大。
圖5 系統(tǒng)應用不同清洗算法的直觀清洗結果(含服從均勻分布的1%異常值)Fig.5 Cleaning results of different algorithms applied to the system (Including 1 % outliers obeying uniform distribution)
圖6 系統(tǒng)應用不同清洗算法的直觀清洗結果(含服從偏態(tài)分布的5%異常值)Fig.6 Cleaning results of different algorithms applied to the system (Including 5 % outliers obeying skewed distribution)
為了測試周期性數(shù)據(jù)清洗算法在不同異常數(shù)據(jù)占比時的清洗效果,對比各算法在異常點比例為1%、2%、5%…25%的8組樣本條件下的異常數(shù)據(jù)修復距離和,修復結果偏差和,清洗準確度3種指標。
異常數(shù)據(jù)修復距離是指修復前數(shù)據(jù)與修復后數(shù)據(jù)的距離;修復距離越小,則系統(tǒng)越能反應數(shù)據(jù)原有的變化趨勢,修復距離和是指所有點的修復距離加和,如圖7所示。修復結果偏差是指修復后的數(shù)據(jù)點和真實數(shù)據(jù)點的距離,用于判斷系統(tǒng)修復后的點和真實數(shù)據(jù)的偏差,偏差和距離越小,則系統(tǒng)清洗后的結果越能反應真實數(shù)據(jù)。清洗算法的準確度用被改動的數(shù)據(jù)比例表示,比例越少則說明清洗系統(tǒng)的修復結果對原本正常數(shù)據(jù)的影響越小,其清洗準確程度越高。
圖7 修復距離和、結果偏差和示意[9]Fig.7 Repair distance and result distance
清洗系統(tǒng)使用不同算法的修復距離和如圖8a和圖8b 所示。其中修復距離隨著異常點的增多而增加,但周期性清洗算法比平滑算法SMA,WMA 具有更小的修復距離,修復距離約為平滑算法的1/3或更低,能夠更好的反應數(shù)據(jù)原有的變化趨勢。普通速度約束算法的清洗結果由于偏差較大沒有在圖中展示。機器學習方法受異常值點分布位置的影響,當異常值服從均勻分布時,機器學習方法清洗含10%異常樣本的修復結果高于含15%異常樣本的結果,這是由于部分異常點位于周期突變處,產(chǎn)生了大偏差;當服從偏態(tài)分布時,異常值多數(shù)分布在前半周期,機器學習方法在異常值較少時具有較好的修復距離,當錯誤數(shù)據(jù)增加時修復距離明顯增加。在兩種異常值分布條件下,周期性清洗算法均比其他算法具有較小的修復距離。
圖8 清洗系統(tǒng)應用不同算法的修復質(zhì)量指標對比Fig.8 Comparison of repair quality indicators for different algorithms used in the cleaning system
所有被修復的數(shù)據(jù)點和真實數(shù)據(jù)點的偏差值如圖8c和圖8d所示,結果偏差隨著異常點比例的增加而增加。運用平滑類方法時,周期末尾的突變數(shù)據(jù)放大了平滑方法的修復偏差,異常點的臨近點會被清洗,增加了結果偏差。機器學習方法的結果偏差和受異常值分布影響大,不同異常分布時修復結果波動大。周期性清洗算法其偏差和約為平滑算法的1/3或更低,證實了通過周期切片的優(yōu)化可較大程度上避免對正常數(shù)據(jù)的影響。周期性清洗算法在不同異常值分布下均具有較小的修復結果偏差,具有更好的泛化性。
不同算法導致數(shù)據(jù)變化的比例如圖8e和圖8f所示。平滑方法會將異常點和突變點的臨近點清洗,導致了數(shù)據(jù)清洗的準確度降低;但平滑方法使用均值逐個修復數(shù)據(jù),在不同異常比例時均具有穩(wěn)定的準確率,平滑方法對數(shù)據(jù)集的影響程度約23%。普通的速度約束方法,會修復每個窗口內(nèi)未滿足約束的值,導致周期突變的原始數(shù)據(jù)被大量修改,對數(shù)據(jù)集樣本點的影響率80%。機器學習方法能較為準確的修復異常數(shù)據(jù),但修復距離偏大。周期性數(shù)據(jù)速度約束算法克服了普通速度方法對突變值的缺陷,能較為準確的對錯誤數(shù)據(jù)進行清洗,當錯誤率增加時仍對樣本數(shù)據(jù)影響較小。
綜上,周期性數(shù)據(jù)清洗算法在用于周期性的工業(yè)數(shù)據(jù)修復時,且具有良好的泛化性,能用于不同類型的異常值分布。周期性數(shù)據(jù)清洗算法比平滑方法和普通速度約束方法有更小的修復距離,且修復結果能更好的反應數(shù)據(jù)變化趨勢。通過周期識別與切分,提高了周期性清洗算法的準確度,對原本正確的數(shù)據(jù)影響較小。機器學習方法在異常值較少時清洗效果好,隨著異常值比例增多修復效果波動大偏差增加,且受異常數(shù)據(jù)分布影響,而周期性清洗算法在不同數(shù)據(jù)分布下均有良好的清洗效果。
本文搭建了一套面向工業(yè)時序數(shù)據(jù)的流式清洗系統(tǒng),系統(tǒng)以Mosquitto作為底層采集單元的匯集中心,通過Flume 連接Mosquitto 和Kafka 實現(xiàn)整套系統(tǒng)的數(shù)據(jù)流轉,將清洗后的數(shù)據(jù)進行存儲或進分析。該系統(tǒng)相比傳統(tǒng)的離線時序數(shù)據(jù)清洗系統(tǒng),具有高吞吐,緩沖,解耦等優(yōu)勢。
本文還設計了一種基于速度約束的周期性數(shù)據(jù)清洗方法,在速度約束算法基礎上將周期性數(shù)據(jù)進行周期識別和數(shù)據(jù)分片,解決速度約束算法用于周期突變數(shù)據(jù)的清洗失效問題,更好地完成具有周期性的工業(yè)數(shù)據(jù)清洗任務。最后通過實驗驗證了本系統(tǒng)在處理周期性工業(yè)數(shù)據(jù)時的可用性,驗證了周期性清洗方法比原有速度約束、平滑算法有更小的修復距離和結果偏差,驗證了周期性數(shù)據(jù)清洗算法對原始數(shù)據(jù)的影響比例更小,修復結果能更好的反應真實數(shù)據(jù)和現(xiàn)有數(shù)據(jù)的變化趨勢;在不同異常數(shù)據(jù)分布和占比條件下,周期性數(shù)據(jù)清洗方法仍具有較好的泛化性。
作者貢獻聲明:
王 耀:進行系統(tǒng)構建和算法設計,論文撰寫;
趙 炯:擬定研究方向,項目規(guī)劃和指導,論文修改和定稿;
周奇才:指導系統(tǒng)構建,指導論文修改;
熊肖磊:幫助數(shù)據(jù)分析;
陳傳林、張恒:提供樣本數(shù)據(jù),分析實驗場景,協(xié)助數(shù)據(jù)分析。