李云霞,姚建國(guó),萬定生,趙 群
(1.河海大學(xué) 計(jì)算機(jī)與信息學(xué)院,江蘇 南京 211100;2.淮河水利委員會(huì)水文局,安徽 蚌埠 233001)
時(shí)間序列數(shù)據(jù)是一種序列值按照時(shí)間發(fā)生先后順序排列的特殊數(shù)據(jù),在時(shí)間序列大量的數(shù)據(jù)中,有些極個(gè)別的子序列與其他子序列有著明顯的不同,這些子序列稱為異常模式。近年來,異常檢測(cè)占據(jù)著非常重要的地位,受到了越來越多的關(guān)注。然而直接在原始時(shí)間序列上進(jìn)行異常檢測(cè)效率低、可靠性差,因此時(shí)間序列表示是必要的。常用的時(shí)間序列表示法主要有符號(hào)化表示法、頻域表示法[1]、奇異值表示法[2]、分段線性表示法[3]。Obuchowski在文獻(xiàn)[1]中通過傅里葉變換,將時(shí)間序列從時(shí)域映射到頻域,但傅里葉變換會(huì)平滑掉有重要特征的點(diǎn),對(duì)非平穩(wěn)的時(shí)間序列不適用。奇異值表示法將時(shí)間序列看成一個(gè)矩陣,利用Karhune-Loeve技術(shù)實(shí)現(xiàn)高維時(shí)間序列向低維數(shù)據(jù)的轉(zhuǎn)化,缺點(diǎn)是奇異值表示法的時(shí)空復(fù)雜度高。分段線性表示法通過首尾相連的線段將時(shí)間序列分割成多個(gè)子序列,具有良好的數(shù)據(jù)壓縮和噪聲過濾的作用,是使用較多的時(shí)間序列數(shù)據(jù)表示方法之一。
異常檢測(cè)方法大致分為四類:基于統(tǒng)計(jì)的方法[4]、基于距離的方法[5]、基于密度的方法[6-7]和基于聚類的方法[8]等。
根據(jù)水文時(shí)間序列具有的高維性、海量性等特征,提出一種兩階段的水文時(shí)間序列異常檢測(cè)方法,該方法主要包括三個(gè)步驟:時(shí)間序列分段線性表示、層次聚類、異常模式檢測(cè)。文獻(xiàn)[9]也采用了兩階段異常檢測(cè)方法,但其方法與文中方法相差很大,文中方法在異常檢測(cè)前對(duì)時(shí)間序列進(jìn)行分段線性表示,且兩階段檢測(cè)方法中的聚類方法以及判定異常的方法都不同。
給定長(zhǎng)度為n的時(shí)間序列t=(t1,t2,…,tn),對(duì)時(shí)間序列進(jìn)行等長(zhǎng)分割,然后用子序列的極值差、斜率、均值表示這段子序列[10],其中子序列的極值差是子序列中各特征值的最大值和最小值的差值,利用極值差可以表示子序列的起伏程度大小,可以判斷這段序列是否平穩(wěn);斜率是子序列的實(shí)際斜率,可以很好地表現(xiàn)分段子序列的變化趨勢(shì);均值是每段子序列的均值,能代表子序列值的一般水平,描述子序列值的集中程度。所以用這三個(gè)值能準(zhǔn)確地表示子序列的特征。異常檢測(cè)將用極值差、斜率、均值表示的子序列進(jìn)行計(jì)算,由于三個(gè)特征值的值域差別很大,因此要對(duì)三者的值域進(jìn)行規(guī)范化。
設(shè)t1=(t11,t12,…,t1n)為一個(gè)子序列,則利用式1將該組特征值規(guī)范到0至1之間。
(1)
其中,tmax和tmin分別表示子序列每個(gè)特征值的最大值和最小值。
算法1:時(shí)間序列分段線性表示算法。
輸入:時(shí)間序列(t1,t2,…,tn),子序列長(zhǎng)度l;
輸出:規(guī)范化的子序列。
Step1:將時(shí)間序列按長(zhǎng)度l進(jìn)行分段,設(shè)m=n/l。
t={t1(t1,t2,…,tl),t2(tl+1,tl+2,…,t2l),…,tm(tn-l,tn-l+1,…,tn)}
Step2:計(jì)算子序列的極值差、斜率、均值。
for(i=1 tom){
avgi=sum(ti)/len(ti)
xlvi=(tin-ti(n-1))/len(ti)
edi=timax-timin}
Step3:輸出規(guī)范化的子序列。
t={(ed1,xlv1,avg1),(ed2,xlv2,avg2),…,(edm,xlvm,avgm)}
在對(duì)時(shí)間序列進(jìn)行分段線性表示之后進(jìn)行層次聚類,層次聚類方法包括凝聚的層次聚類和分裂的層次聚類[11-12]。凝聚的層次聚類是自底向上形成的,這種方法最初將每個(gè)對(duì)象作為一個(gè)簇,然后這些簇尋找距離最近的簇進(jìn)行合并,不斷重復(fù),直至達(dá)到定義的簇的數(shù)目。
分裂的層次聚類是自頂向下形成的,這種方法首先將所有對(duì)象看成一個(gè)簇,然后逐步分為一個(gè)個(gè)小簇,直到達(dá)到某個(gè)結(jié)束條件。層次聚類具有可以發(fā)現(xiàn)類的層次關(guān)系,不需要預(yù)先制定聚類數(shù),距離和規(guī)則的相似度容易定義,限制少等優(yōu)點(diǎn)。文中采用凝聚的層次聚類方法進(jìn)行實(shí)驗(yàn)。
流程如下:
輸入:t={(ed1,xlv1,avg1),(ed2,xlv2,avg2),…,(edm,xlvm,avgm)};
輸出:類簇C1,C2,…,Ci。
Step1:將每個(gè)對(duì)象看作一個(gè)初始簇;
Repeat:
Step2:計(jì)算兩兩類之間的距離,找到距離最小的兩個(gè)類簇C1和C2;
Step3:合并C1和C2為一個(gè)新類;
Until:達(dá)到定義的簇的數(shù)目。
異常檢測(cè)是在類與類之間距離的基礎(chǔ)上算出異常因子,通過判斷異常因子是否超過給定的閾值來判斷模式是否異常,因?yàn)楫惓R蜃覱F(Cj)度量了Cj與其他類之間的距離,距離越大,說明該類與整個(gè)數(shù)據(jù)集的差異程度越大,從而說明該模式異常。其中,在較短時(shí)間內(nèi)某站流量數(shù)據(jù)突然暴漲或突然下降的事件認(rèn)定為異常事件,可用于驗(yàn)證檢測(cè)結(jié)果是否準(zhǔn)確。
算法2:異常模式檢測(cè)。
輸入:C1,C2,…,Ci,d;
輸出:異常模式。
Step1:計(jì)算類與類之間的距離[13],設(shè)Ci的質(zhì)心為p=(xp,yp,zp),Cj的質(zhì)心為q=(xq,yq,zq)。
(2)
Step2:計(jì)算異常因子。
(3)
Step3:判定異常模式。
if(OF(Cj)≥d){
輸出Cj}
選取山西省龍門站2002年1月1日至2016年12月31日共15年的汛期小時(shí)流量數(shù)據(jù)作為實(shí)驗(yàn)數(shù)據(jù),共7 892條。原始時(shí)間序列如圖1所示。
分別用文中提出的異常檢測(cè)方法和相關(guān)性分析的檢測(cè)方法[14-15]對(duì)龍門站的數(shù)據(jù)進(jìn)行檢測(cè),通過多次實(shí)驗(yàn)發(fā)現(xiàn),相關(guān)性分析的方法當(dāng)e1=0.6,e2=0.03時(shí)檢測(cè)結(jié)果最好,檢測(cè)結(jié)果如表1所示。
比較表1可以看出,兩種方法都檢測(cè)出五個(gè)異常模式,但是其中有兩個(gè)異常模式是不同的,為了證明檢測(cè)的正確性,分別將檢測(cè)出來的異常模式單獨(dú)畫圖,驗(yàn)證其是否異常。圖2中的(a)至(f)表示兩種方法檢測(cè)出來的異常模式。
圖1 龍門站2002-2016年汛期流量數(shù)據(jù)時(shí)間序列
表1 文中方法與相關(guān)性分析方法實(shí)驗(yàn)結(jié)果對(duì)照(實(shí)測(cè)數(shù)據(jù))
圖2 異常序列(1)
利用人工合成數(shù)據(jù)進(jìn)行實(shí)驗(yàn),其中人工合成數(shù)據(jù)是在原始數(shù)據(jù)的基礎(chǔ)上增加了三個(gè)異常模式,增加的三個(gè)異常模式分別為2005年6月13日至2005年6月21日、2014年9月12日至2014年9月16日、2009年7月18日至2009年7月28日,人工合成數(shù)據(jù)時(shí)間序列如圖3所示。
分別用文中的異常檢測(cè)方法和相關(guān)性分析的檢測(cè)方法進(jìn)行實(shí)驗(yàn),通過多次實(shí)驗(yàn)發(fā)現(xiàn),相關(guān)性分析的方法當(dāng)e1=0.6,e2=0.03時(shí)檢測(cè)結(jié)果最好,檢測(cè)結(jié)果如表2所示。
圖3 人工合成數(shù)據(jù)時(shí)間序列
表2 文中方法與相關(guān)性分析方法實(shí)驗(yàn)結(jié)果對(duì)照(合成數(shù)據(jù))
圖4 異常序列(2)
通過實(shí)驗(yàn)表明,用實(shí)測(cè)數(shù)據(jù)進(jìn)行實(shí)驗(yàn)時(shí),文中方法檢測(cè)出來的五個(gè)異常模式,從圖2(a)~(e)可以看出該站的流量突然暴漲或者突然下降,這與該站的流量模式不符合,故判定其為異常模式,但相關(guān)性分析的檢測(cè)方法沒有檢測(cè)出2010年9月19日至2010年9月20日這段序列存在異常,從圖2(e)可以看出,該段序列的流量快速上升又快速下降,屬于異常模式;圖2(f)表示2016年6月3日至2016年6月9日這段序列,在該序列中該站流量基本保持不變,不屬于異常模式。用人工合成的數(shù)據(jù)進(jìn)行實(shí)驗(yàn)時(shí),文中方法檢測(cè)出八個(gè)異常模式,從圖2(a)~(e)和圖4(a)~(c)可以看出這八個(gè)模式均屬于異常模式,其中圖4(a)~(c)的異常模式與人工增加的異常模式吻合,相關(guān)性分析的方法只檢測(cè)出六個(gè)異常模式,其中人工合成的三個(gè)異常模式,該方法只檢測(cè)出一個(gè),所以文中的異常檢測(cè)方法要優(yōu)于相關(guān)性分析的方法。
文中提出一種兩階段的水文時(shí)間序列異常檢測(cè)方法。該方法通過分段線性表示、層次聚類、異常模式檢測(cè)三個(gè)步驟來檢測(cè)時(shí)間序列中存在的異常模式。為驗(yàn)證該算法的準(zhǔn)確性,采用另一種相關(guān)性分析的異常檢測(cè)方法進(jìn)行對(duì)比,通過實(shí)驗(yàn)發(fā)現(xiàn),文中方法能準(zhǔn)確檢測(cè)出異常模式,而且要優(yōu)于相關(guān)性分析的檢測(cè)方法。但文中方法利用閾值確定異常模式,使得該閾值對(duì)檢測(cè)結(jié)果有一定影響,閾值的確定方式缺少靈活性,有待進(jìn)一步改進(jìn)。