曹志英,曹 偉,張秀國
(大連海事大學(xué) 信息科學(xué)技術(shù)學(xué)院,遼寧 大連 116026)
KPI異常檢測有著其特殊性[1]?,F(xiàn)有的方法缺乏一定的普適性,在不同類型的KPI序列中異常檢測的效果差別很大?;诮y(tǒng)計的異常檢測方法的缺點在于事先需要知曉數(shù)據(jù)分布[2];基于距離的異常檢測方法的局限性是復(fù)雜度高,難以兼顧數(shù)據(jù)集的維度和可擴(kuò)展性,且難以檢測出數(shù)據(jù)集中存在多種分布的異常情形[3,4];基于密度的異常檢測方法雖然能較好地檢測出局部異常點,但是異常因子閾值等參數(shù)對模型影響很大,缺乏簡單有效的參數(shù)確定方法[5]。文獻(xiàn)[6]提出的基于核密度估計的聚類方法沒有考慮數(shù)據(jù)的前后時間關(guān)聯(lián)。Zhang等[7]提出一種基于BP神經(jīng)網(wǎng)絡(luò)的異常檢測方法,該方法將挖掘的6個局部特征作為神經(jīng)網(wǎng)絡(luò)的輸入,通過神經(jīng)網(wǎng)絡(luò)的輸出來進(jìn)行KPI的異常檢測,但是該方法對樣本數(shù)據(jù)的平衡性較敏感。文獻(xiàn)[8,9]針對周期型KPI進(jìn)行分解,然后根據(jù)指定的異常指標(biāo)對分解的序列進(jìn)行計算,從而判斷出當(dāng)前KPI是否異常;文獻(xiàn)[10]通過“時間窗口”與平滑預(yù)測技術(shù)分析時序數(shù)據(jù),能夠消除異常數(shù)據(jù)出現(xiàn)的隨機(jī)波動性,反映出序列的整體規(guī)律性,然而此類方法比較適用于穩(wěn)定類型的時序數(shù)據(jù);Hu等[11]提出基于元特征的方法,該方法能夠較好地捕捉單元時間序列和多元時間序列的異常,然而異常檢測的準(zhǔn)確度還不夠高。
對此,本文提出一種基于多維度特征分析的異常檢測方法,該方法能有效地在未知數(shù)據(jù)集分布的情形下挖掘出數(shù)據(jù)的局部特征和總體特征,適應(yīng)多種類型的KPI數(shù)據(jù),具有較好的普適性。
根據(jù)文獻(xiàn)[12]的定義,KPI數(shù)據(jù)是(timestamp,va-lue)的時間序列集合,其具體格式見表1,設(shè)為Q={q1,q2,…,qn}。在進(jìn)行KPI異常檢測時,首先需要進(jìn)行特征提取,良好的特征有利于異常檢測模型逼近異常值檢測的上限。由于KPI隨時間會呈現(xiàn)出穩(wěn)定型、波動型和周期型的變化,不同類型的序列隱含的特征類型與特征數(shù)目也不同,因此特征提取的方法不能單一。對于特征提取,本文首先對Q歸一化得到數(shù)據(jù)V,然后為保證提取的特征能夠涵蓋序列局部與整體變化的細(xì)節(jié),再對V進(jìn)行多維度的特征提取生成特征集A;進(jìn)而使用主成分分析對A降維得到特征集B,以避免一些無關(guān)項的干擾;最后基于小波能很好地處理B中的非線性數(shù)據(jù),本文使用小波對B進(jìn)行特征修正,最終得到特征集C。
表1 KPI數(shù)據(jù)示例
歸一化使不同量級的數(shù)據(jù)轉(zhuǎn)化為同一種量級,保證數(shù)據(jù)間的可比性。本文采用的歸一化方式為z-score標(biāo)準(zhǔn)化。若Q的均值為μ,標(biāo)準(zhǔn)差為σ,則z-score標(biāo)準(zhǔn)化公式具體如下
(1)
數(shù)據(jù)預(yù)處理完,然后進(jìn)一步挖掘出KPI數(shù)據(jù)不同類別的特征,本文主要挖掘KPI數(shù)據(jù)的原始特征、統(tǒng)計特征和擬合特征。原始特征為歸一化后的數(shù)據(jù)。統(tǒng)計特征主要描述數(shù)據(jù)間的離散程度和變化趨勢,有別于文獻(xiàn)[7]定義的6個統(tǒng)計特征,本文使用一階差分、占據(jù)比和凹凸性3個統(tǒng)計特征。擬合特征基于“滑動窗口”,考慮到序列整體間的前后關(guān)聯(lián),彌補(bǔ)了對單個數(shù)據(jù)點考慮的缺陷。根據(jù)文獻(xiàn)[12],擬合特征主要有變異系數(shù)、峰態(tài)系數(shù)、移動平均線、差分移動平均線和指數(shù)加權(quán)移動平均線。
根據(jù)文獻(xiàn)[12]的定義,歸一化后的數(shù)據(jù)集設(shè)為V={v1,v2,…,vi,…,vm},從V中獲取滑動窗口為w的數(shù)據(jù)如式(2)所示
Vw(i)=[vi,vi+1,…,vi+w-1],i=1,2,…,m-w+1
(2)
根據(jù)文獻(xiàn)[12],原始特征、一階差分、占據(jù)比等特征的具體定義如下
原始特征:fi=vi,i=1,2,…,m
(3)
一階差分:di=vi+1-vi,i=1,…,m-1
(4)
其中,di為相鄰value值之差,描述了相鄰數(shù)據(jù)間的單調(diào)性
(5)
其中,ri表示當(dāng)前的value值與整體序列中最小value值之差占整體最大最小值之差的比例
凹凸性:Si=vi+2-2vi+1+vi,i=1,2,…,m-2
(6)
其中,Si表示連續(xù)相鄰value值間凹凸性的變化情況
(7)
其中,Ki(w)為時間序列相對于正態(tài)分布是重尾還是輕尾,用于檢測突然的尖峰或驟降。w表示時間窗,μ為長度為w的滑動窗中的均值
(8)
Ci(w)描述一個時間窗中序列的離散度。w表示時間窗口的大小σ表示滑動窗口的標(biāo)準(zhǔn)差,μ表示滑動窗口的均值
(9)
Gi(w)描述了滑動窗所經(jīng)過序列的平均值。移動平均線通過削弱時間序列的不規(guī)則變化來揭示序列的變化趨勢。
差分移動平均線
(10)
Ji(w)從單調(diào)性上揭示了數(shù)據(jù)的變化趨勢。它主要通過計算相鄰value之間的差分值,然后再求固定時間窗口的移動平均值。
指數(shù)加權(quán)移動平均線
Ti(w)=λvi-1+(1-λ)Ti-1,i=2,3,…,m-w+1
(11)
Ti(w)反映序列近期變化的趨勢,其根據(jù)加權(quán)下降系數(shù)呈指數(shù)型迭代,λ表示加權(quán)下降的速率。
由文獻(xiàn)[12]可知,原始特征和統(tǒng)計特征,可根據(jù)式(3)~式(6)從數(shù)據(jù)集中直接計算得到。對于擬合特征,由于窗口的大小會影響提取特征的精度,因此本文通過對滑動窗口的值進(jìn)行多次設(shè)定,計算得到不同大小滑動窗口下的擬合特征。設(shè)有n個窗口的取值,滑動窗口的大小w1 得到上述特征后,將上述特征中的特征項組合成A。因為滑動窗口有一定的長度,所以擬合特征中特征項的長度會比原始特征和統(tǒng)計特征中特征項長度小,為保證A縱列長度的一致性,本文將原始特征和統(tǒng)計特征在進(jìn)行特征項組合時舍去了部分?jǐn)?shù)據(jù)。A的具體形式如下 其中,wn為滑動窗口所取的最大尺度,特征集A的大小為(m-wn-1)*(4+5n)。 由于特征集A的維度較高,這可能會影響后續(xù)模型異常檢測的正確率;同時高維度的數(shù)據(jù)集消耗的資源較大,不利于模型的訓(xùn)練。PCA因為能夠去除數(shù)據(jù)之間的相關(guān)性,所以被廣泛用于降維。其主要思想是將高維度空間中的數(shù)據(jù)投影到低維度空間從而形成主元特征分量達(dá)到降維的效果。 根據(jù)文獻(xiàn)[12]定義,首先對A的每行進(jìn)行零均值化處理,然后計算A的協(xié)方差矩陣,根據(jù)協(xié)方差矩陣求得A的特征值λi(i=1,2,…,q) 及其對應(yīng)的單位正交向量pi(i=1,2,…,q),則A的第i個主成分向量為yi=Api(i=1,2,…,q)。將A的特征值由大到小進(jìn)行排序并定義第i個特征值與各特征值之和的比值為第i個特征值的特征貢獻(xiàn)率,選取前r(1≤r≤q)個特征值計算其累加特征貢獻(xiàn)率g(λr)。g(λr)定義如下 (12) 上式中,若存在r=R使得g(λR)>ζ,0<ζ<1,則這R個特征向量為A降維后的特征向量。 將這R個特征向量組合成特征集B,如下所示 其中,yR(m-wn-1)表示特征向量yR的第m-wn-1個分量值。 由于降維后的特征屬于非平穩(wěn)特征,具有突變性、隨機(jī)性的特點,這些特點不易被獲取。而小波可以利用其分辨率的特性,通過伸縮與平移,可以對非平穩(wěn)特征的序列在時域和頻域上進(jìn)行分析。本文通過小波分析將B中的分量yi分解到不同的頻率通道上,從而變?yōu)轭l率單一的信號。原始分量yi通過高頻濾波器和低頻濾波器后被分解成兩組系數(shù):細(xì)節(jié)系數(shù)和近似系數(shù)。細(xì)節(jié)系數(shù)保留yi中的高頻成分,高頻成分反應(yīng)了突變、驟降等隨機(jī)抖動因素對主體趨勢的影響,是yi中的隨機(jī)性部分;近似系數(shù)保留yi中的低頻成分,低頻成分保留了原始特征的大部分特征,是yi中的主體趨勢部分??紤]到細(xì)節(jié)系數(shù)中隨機(jī)性特征的提取易受到分解尺度的影響,因而三層是小波分解的最佳尺度。此外,本文選用的基小波函數(shù)是Haar小波函數(shù)。 為表示方便,把yi記作f(t),f(t)表示yi在時間戳t上對應(yīng)的值。根據(jù)文獻(xiàn)[12]定義,小波變換對f(t)分解的公式如下 (13) 其中 Ai=HAi-1,Di=GAi-1,i=1,2,…,j (14) 式中:H表示低通濾波器;G表示高通濾波器;j表示分解的尺度;Aj為第j層的低頻信息,表達(dá)序列的大致趨勢;Di為第j層的高頻信息,表達(dá)序列細(xì)節(jié)上的差異。經(jīng)過處理,原始特征序列從原先的一維特性轉(zhuǎn)變成低頻和高頻的二維特性。 本文通過使用Haar小波函數(shù)分別對f(t)的低頻系數(shù)和高頻系數(shù)進(jìn)行單支重構(gòu),將低頻系數(shù)和高頻系數(shù)重構(gòu)為與原始序列相同長度的單支序列,記為低頻分量L(t)和高頻分量H(t)。小波低頻系數(shù)重構(gòu)的曲線可以實現(xiàn)原始特征分量yi的還原,而且更加光滑,易反映其趨勢特征[13]。小波重構(gòu)的公式如下 Ai=H*Ai+1+G*Di+1,i=j-1,j-2,…,0 (15) 式中:H*和G*分別為H和G的對偶算子。 本文通過使用小波將B中各列向量的低頻特征和高頻特征提取出來,然后將它們組合成C,C如下所示 其中,LR(m-wn-1)表示對f(m-wn-1)重構(gòu)得到的低頻分量值,HR(m-wn-1)表示對f(m-wn-1)重構(gòu)得到的高頻分量值。 KPI異常檢測的另一個關(guān)鍵是基于提取出的特征集,選擇合適的模型進(jìn)行異常檢測。XGBoost是基于樹或線性分類器的集成算法,它整合若干個弱分類器,形成一個具有更好分類效果或回歸效果的強(qiáng)分類器,在各大數(shù)據(jù)競賽中有著廣泛的應(yīng)用。本文選用XGBoost進(jìn)行異常檢測,首先對提取的特征集進(jìn)行樣本標(biāo)記,然后分割訓(xùn)練樣本和測試樣本,接著對訓(xùn)練樣本均衡化處理得到平衡樣本,使用平衡的樣本集訓(xùn)練XGBoost得到最優(yōu)模型,最后使用最優(yōu)模型對測試樣本進(jìn)行異常檢測。 由于數(shù)據(jù)集中正常樣本與異常樣本的比例極度不平衡,為提升模型的檢測性能、使模型異常檢測能夠達(dá)到預(yù)期的效果,本文采用SMOTE和隨機(jī)欠采樣相結(jié)合的算法對訓(xùn)練樣本進(jìn)行均衡化處理[14]。根據(jù)文獻(xiàn)[12]設(shè)C的每行特征xi對應(yīng)的樣本標(biāo)記為zi(zi∈R),由于C的列數(shù)為2R,行數(shù)為m-wn-1。為簡便起見,令d=2R,g=m-wn-1,因此帶標(biāo)簽的數(shù)據(jù)集D={(xi,zi)}(|D|=g,xi∈Rd,zi∈R),其中Rd表示d個特征的集合空間,R表示對應(yīng)的標(biāo)簽集合。均衡化的具體流程是取D中的前β(0<β<1)作為訓(xùn)練集,使用SMOTE算法對訓(xùn)練集中的異常樣本進(jìn)行過采樣,再用隨機(jī)欠采樣方法對訓(xùn)練集中的正常樣本進(jìn)行冗余樣本去除,最終得到的主要樣本信息作為新的數(shù)據(jù)集Dnew={(ai,zi)}(|Dnew|=θ,ai∈Rd,zi∈R,θ=β*g)。 (16) 其中,Γ表示所有決策樹集合,φk表示第k次從Γ中取出的決策樹。對于給定數(shù)據(jù)集,將其用決策樹中的決策規(guī)則分類為葉子,通過相應(yīng)葉子中的得分求和來計算最終預(yù)測。 為了防止模型過擬合,將L2正則化引入到XGBoost中,最終模型的目標(biāo)函數(shù)為 (17) 其中 (18) 綜合以上分析,基于小波分析和XGBoost的KPI異常檢測算法的具體步驟描述見表2。 表2 基于小波分析和XGBoost的KPI異常檢測算法步驟 為驗證本文特征提取對異常檢測效果的有效性,分別選取數(shù)據(jù)的原始特征、文獻(xiàn)[7]提取的特征和文獻(xiàn)[11]提取的特征進(jìn)行對比。本文共選取16種類型的KPI數(shù)據(jù),數(shù)據(jù)集來自http://iops.ai/dataset_list。實驗中滑動窗口選取的值為分別為5、10、15和20,訓(xùn)練集與測試集的比例為7∶3。首先對訓(xùn)練集均衡采樣,然后對平衡樣本進(jìn)行10折交叉驗證選取XGBoost的最優(yōu)模型參數(shù),最后使用調(diào)參好的模型進(jìn)行異常檢測。XGBoost的主要參數(shù)設(shè)置見表3。 表3 XGBoost參數(shù)設(shè)置 本文實驗使用的機(jī)器內(nèi)存為8 GB,處理器為Intel i5-6200U,機(jī)器學(xué)習(xí)框架為Scikit-Learn。 為評估本文模型異常檢測的效果,采用查全率、查準(zhǔn)率和準(zhǔn)確度3個評價指標(biāo),公式具體如下: (1)查全率(Recall),記作Rc (19) (2)查準(zhǔn)率(Precision),記作Pc (20) (3)準(zhǔn)確度(Accuracy),記作Ac (21) 上式中,真正例(TP)表示正確診斷為異常的異常點數(shù)量,真反例(TN)表示正確診斷為正常的正常點數(shù)量,假正例(FP)表示錯誤診斷為異常的正常點數(shù)量,假反例(FN)表示錯誤診斷為正常的異常點數(shù)量。Rc表示模型正確檢測到的異常數(shù)量占真實異常數(shù)量的比重,Pc表示模型正確檢測到的異常數(shù)量占模型檢測到的異常數(shù)量的比重,Ac表示模型整體分類的正確度[12]。 由于測試集的正負(fù)樣本比例不平衡,根據(jù)上述3種評價指標(biāo)無法表明學(xué)習(xí)器的泛化能力,因此引入AUC[17]來研究學(xué)習(xí)器的泛化性能,進(jìn)而驗證本文方法的有效性。 本節(jié)分別從查全率、查準(zhǔn)率、準(zhǔn)確度和AUC四方面對比基于原始特征、本文方法提取的特征、文獻(xiàn)[7]方法提取的特征和文獻(xiàn)[11]方法提取的特征,采用XGBoost模型檢測在16個KPI序列上的異常檢測效果,具體見表4~表7。由表4~表7可見,本文方法的查全率和準(zhǔn)確度普遍高于其它3種方法,在KPI2上查全率甚至接近1,這表明模型具有較好的普適性。此外,查準(zhǔn)率在KPI2、KPI3和KPI9-KPI12也略高于其它方法,這表明模型的異常檢測的精度比較高。最后,本文方法的AUC也均達(dá)到0.8,這進(jìn)一步表明模型的泛化性能較好,能適應(yīng)類別不平衡的數(shù)據(jù)集。 表4 4種方法的查全率對比 表5 4種方法的查準(zhǔn)率對比 表6 4種方法的準(zhǔn)確度對比 表7 4種方法的AUC對比 由圖1可知,本文方法在KPI1、KPI4、KPI8和KPI16數(shù)據(jù)集上的ROC曲線明顯優(yōu)于其它方法,在其余KPI數(shù)據(jù)集上與文獻(xiàn) [7]和文獻(xiàn) [11]方法的ROC大致相同,但波動幅度是最小的。總體來說,對比16張子圖的ROC曲線,本文方法的異常檢測效果更加穩(wěn)定、更具有普適性。 圖1 16種KPI數(shù)據(jù)集上的4種方法ROC曲線對比 異常點檢測圖形象地展示了異常檢測的結(jié)果。圖2~圖17中分割線左邊為采樣前的訓(xùn)練數(shù)據(jù),分割線右邊為測試數(shù)據(jù)。黑色的叉表示一個原始異常點,而空心圓圈表示一個預(yù)測的異常點,若圓圈與叉重合,表示本文方法正確地檢測出該異常。 圖2 KPI1異常檢測 圖2和圖3可以看出,KPI1、KPI2波動的范圍比較小,序列整體上比較有規(guī)律,屬于穩(wěn)定型序列。兩張圖中的異常點以離群點為主,極少數(shù)分散在序列的抖動處。本文的方法能較好地檢測出穩(wěn)定型序列中的異常點,且誤判的數(shù)量較少,有一定的適用性。 圖3 KPI2異常檢測 圖6~圖8看出,KPI5、KPI6和KPI7與其它KPI序列明顯不同,其值的分布極不均勻,波動幅度較大,無穩(wěn)定趨勢,異常點所在的位置也沒有規(guī)律,屬于典型的非平穩(wěn)波動型序列,通過多維度的特征分析所獲得的特征能夠在波動型序列中取得比較好的異常檢測效果。圖7與圖8由于訓(xùn)練集中的異常點數(shù)量較少,導(dǎo)致采樣后的樣本缺乏一定的平衡性,因此模型檢測出的效果相比圖6存在較多的誤判。然而從整體的異常檢測效果看,本文的方法大多能檢測出波動型序列中所出現(xiàn)的異常點,對波動型序列也有一定的適用性。 圖4、圖5和圖9~圖17可知,KPI3、KPI4和KPI8-KPI16相比其它的序列具有明顯的周期性特征,因此歸屬于周期型序列。圖4、圖5、圖10、圖11和圖13序列中的噪聲點較少,曲線比較光滑,異常點大多分散在序列上下側(cè),差異大不;而圖9、圖12和圖14~圖17序列中的噪聲點比較多,曲線比較粗糙,異常點除了以離群點呈現(xiàn)之外,還有一些分布在正常序列之中。觀察檢測效果,本文的方法能有效識別噪聲并檢測出序列中的異常點,但在噪聲點較多的周期型序列中,其異常檢測效果會差一些,原因可能是分布在正常序列中的異常點加大了模型識別的難度。 圖4 KPI3異常檢測 圖5 KPI4異常檢測 圖6 KPI5異常檢測 圖7 KPI6異常檢測 圖8 KPI7異常檢測 圖9 KPI8異常檢測 圖10 KPI9異常檢測 圖12 KPI11異常檢測 圖13 KPI12異常檢測 圖14 KPI13異常檢測 圖15 KPI14異常檢測 圖16 KPI15異常檢測 圖17 KPI16異常檢測 通過上述分析可知,本文的方法適用于穩(wěn)定型序列和平滑的周期型序列,而在波動型序列與噪聲數(shù)較多的周期型序列上存在一些漏判和誤判,但是總體檢測效果上是優(yōu)于其它兩種算法的。因此,本文的方法對穩(wěn)定型、波動型和周期型序列的異常檢測具有一定的普適性。 針對KPI異常值檢測較難且大多數(shù)方法只針對某種特定類型的數(shù)據(jù),缺乏一種普適性的異常檢測方法。本文提出一種基于小波分析和XGBoost的異常檢測方法,該方法兼顧KPI周期型、穩(wěn)定型和波動型的變化特性,多維度地提取特征,并利用小波分析加以修正。實驗結(jié)果表明,本文的方法在16種KPI數(shù)據(jù)集上,其查全率、準(zhǔn)確度和AUC整體優(yōu)于其它3種方法,有較好的普適性。研究中我們發(fā)現(xiàn)數(shù)據(jù)集中正負(fù)樣本的平衡程度對異常值的檢測有一定的影響,在今后的工作中,我們將研究KPI均衡采樣的方式以獲得更平衡的樣本,進(jìn)一步提高異常檢測的普適性。1.2 基于PCA的特征降維
1.3 基于小波分析的特征修正
2 基于XGBoost的異常檢測
2.1 樣本均衡處理
2.2 基于XGBoost的異常檢測模型
2.3 異常檢測算法步驟
3 實驗分析
3.1 實驗評價指標(biāo)
3.2 實驗結(jié)果及分析
4 結(jié)束語