1. 程式人生 > >微軟亞研院的AIOps底層演算法: KPI快速聚類

微軟亞研院的AIOps底層演算法: KPI快速聚類

導讀

智慧運維中存在海量時序資料(KPI)需要監控、檢測異常、關聯, 而AIOps的一個底層演算法就是把大規模時序資料快速準確地聚類成有限的若干類別,從而大大降低後續資料分析與挖掘工作的開銷。 其應用場景包括自動適配異常檢測演算法、輔助標註、輔助構建故障傳播鏈等。 本文介紹的案例是由微軟亞洲研究院發表在資料庫領域頂級會議VLDB 2015的文章《Yading: Fast Clustering of Large-Scale Time Series Data》。

簡介

在大資料時代,快速、大規模的分析技術的重要性日益凸顯,人們利用這些技術完成實時和互動性任務中的資料分析工作。運維中常見的KPI資料是一種時間序列資料,它具有資料例項多、維度高的特點。為了降低資料分析工作的開銷,提高分析效率,人們希望將海量的時序資料曲線分為若干類別,從而減少需要考察的曲線數目。因此,如何對大規模的時間序列資料進行快速、準確的聚類是一個關鍵性問題。

本文中,作者設計了一套端到端的時序資料聚類演算法Yading,實現了對大規模時間序列資料的高效、準確、自動化聚類。為驗證演算法效果,作者在公開資料集上將Yading與若干傳統時序資料聚類演算法進行對比,並在微軟的實際工業資料上對演算法進行了測試,證明了Yading的高效性和分類準確性。

時序資料聚類的挑戰

  • 時序資料數量大、維度高。運維中的時序資料集通常具有大量例項(如數百萬個),每個例項具有較高維度(如數千維),難以使用傳統的聚類方法進行快速聚類。
  • 時序資料例項間的相似性難以準確刻畫。不同於簡單的數值型、類別型資料,時間序列資料上通常存在著相位擾動和隨機噪聲,使得對時序資料例項之間的相似性刻畫較為困難。不恰當的相似性度量會大大降低聚類的準確性。
  • 聚類演算法引數難以確定。許多聚類演算法的效果和引數的選取有密切關係。面對大規模的時序資料,難以人工選取合適的引數。需要設計更智慧的引數選擇方法。

設計思想

為應對上述挑戰,本文設計了一套端到端的時序資料聚類演算法Yading,分以下三步實現大規模時序資料的快速、準確聚類,演算法框架如下圖所示。

  1. 輸入資料集取樣。對大量的時序資料進行隨機取樣,並使用逐段聚集平均(PAA)演算法縮減每條時序資料例項的維度。用取樣後的資料集作為聚類演算法的輸入。

  2. 在取樣後的資料集上進行時序資料聚類。使用L1距離作為時序資料曲線間的相似性度量。在基於密度的聚類演算法DBSCAN的基礎上,設計出多密度的聚類演算法Multi-DBSCAN,並使演算法能夠自動決定引數。

  3. 對大量資料採用分派(assignment)策略進行分類。對於取樣中未被選擇的大量時序資料曲線,採用分派策略將其分到與其L1距離最近的已聚類曲線所屬的聚類簇中。同時建立了有序鄰居圖(Sorted Neighbor Graph, SNG)輔助計算時序資料例項之間的距離,提高分派演算法的計算效率。

資料

1、輸入資料集取樣

大規模的時序資料集中通常含有數以萬計的時序資料例項,每個例項上含有大量的資料點,直接對整個資料集進行聚類將帶來巨大的計算開銷。因此,本文通過隨機取樣和維度縮減的手段降低需要考察的例項數目和維度,將取樣後的資料集作為聚類模組的輸入,降低計算開銷。

由於不需要對輸入資料的分佈作任何假設,隨機取樣(random sampling)是一種減少資料例項個數的有效手段。取樣過程中需要遵循兩個原則:(1)每個類別的資料均在取樣集中出現至少m次。(2)取樣集中各類別資料所佔比例與原資料集中的比例偏差不超過給定閾值ε。基於上述原則,作者採用數學方法推匯出取樣資料集大小的上界和下界,對原始資料集進行隨機取樣。

對於每個時序資料例項,使用逐段聚集平均(Piecewise Aggregate Approximation,PAA)進行維度縮減。具體的,對於一條長度為D的時序資料,PAA將其劃分為d個幀(d<D),將每個幀用一個值(例如該幀上資料點的均值)表示,從而將時序資料的長度從D減小為d,達到降維的目的。

通過上述兩項操作,能夠從規模為N*D的原始資料集中獲得規模為s*d的取樣資料集(s≤N, d≤D),且取樣集保持原資料集的分佈(underlying distribution)不變。用取樣集作為聚類模組的輸入,大大降低了計算開銷。

2、時序資料聚類

以取樣後的資料集作為輸入,文中使用L1距離作為時序資料例項間的相似性度量,採用多密度的DBSCAN(Multi-DBSCAN)演算法進行聚類。點(x1,y1)與點(x2,y2)的L1距離可表示為:L = |x1-x2|+|y1-y2|。L1 距離計算複雜度低,且對於脈衝噪聲具有一定的魯棒性,適合作為處理大規模時序資料的相似性度量。

時序資料集中的資料曲線模式多種多樣,每個類別中含有的曲線數量也有較大差異。面對這種情況,基於密度的聚類方法是一種很好的選擇。一般地,如果時序曲線a和b相似,b和c相似,則a、b、c很可能屬於同一類別。基於密度的聚類演算法正是根據這一思想將相似曲線逐步加入同一聚類簇中,從而能夠找出任意形狀的聚類簇。特別地,真實的時序資料模式較為複雜,在一個數據集中可能存在多種密度的聚類簇(如下圖所示)。因此本文中將基於密度的DBSCAN演算法改進為多密度的Multi-DBSCAN,提升聚類準確性。

資料
此外,密度估計(density estimation)是基於密度的聚類演算法的核心,已有工作中通常通過人工選擇或使用一些計算開銷較大的演算法得到合適的密度閾值。本文中,作者設計了一種高效演算法對密度進行自動估計,並使用數學方法證明了其合理性。具體的,該演算法計算輸入資料集中的每個資料物件到其k鄰近物件之間的距離k-dis,將k-dis值按照降序排列得到k-dis曲線,曲線上的最平坦點即為候選密度值(如下圖所示)。對於輸入的時序資料集,該演算法能夠自動檢測出不同聚類簇的密度,分別以每個候選密度值作為引數使用DBSCAN演算法進行聚類,即可將資料集劃分為若干聚類簇,同時識別出與大多數時序曲線均不屬於同一類別的異常曲線(outliers)。
時序資料

3、分派策略

在對取樣集進行聚類後,使用分派(assignment)策略對大量未分類時序資料曲線進行快速分類。具體的,對於一個未分類例項,找出與它相似性距離最近的已分類例項A。若二者的距離小於A所在聚類簇的密度半徑,則將該例項劃分至與A相同的類別中。否則,認為該例項是一個異常(outlier)。為提高計算效率,本文中還建立了有序鄰居圖,利用剪枝的方法加速尋找最鄰近例項的過程,實現對大量時序資料的快速分類。

文中使用標準化互資訊(Normalized Mutual Information, NMI)作為指標對聚類演算法的準確性進行評價。作者分別在15個時序資料集上將本文提出的演算法YADING與三種常用的聚類演算法DECLUE2.0、DBSCAN、CLARANS進行對比,在不同規模資料集上的計算時間及所有資料集上的平均NMI如下圖所示。可以看出,YADING在計算效率和聚類準確性方面均領先於幾種常用演算法。

微軟

YADING演算法已被微軟用於與實際業務相關的時序資料分析中。對於46000多條伺服器CPU利用率及記憶體利用率時序資料,YADING演算法僅用時4.5秒就完成了聚類工作(幾種主要類別如下圖所示),表現出極高的實際應用價值。

時序資料聚類

總結

本文介紹了一套快速、準確的時序資料聚類演算法,用於對大規模時序資料進行快速分類,是時序資料探勘與分析工作的重要手段。通過隨機取樣和維度縮減獲得規模較小的取樣集,從而大大減小聚類演算法需要考察的資料量,降低計算開銷。之後設計了一套基於L1 距離和Multi-DBSCAN演算法的時序資料聚類方案,並能夠自動進行密度估計,具有較高的魯棒性。對於大量的未分類時序資料,根據聚類結果採用分派策略進行快速分類。最後,文中分別採用理論推導與真實資料驗證的方式證明了該演算法在解決大規模時序資料聚類問題上的高效性和準確性,具有很好的實用價值。

此外,在NetMan實驗室今年十月份推出的智慧運維挑戰賽中,將提供來自網際網路公司的公開脫敏資料集,供大家嘗試自己的KPI聚類演算法。歡迎感興趣的朋友踴躍參與。

原文來自微信公眾號:智慧運維前沿