摘要:2020GDE全球開發者大賽-KPI異常檢測告一段落,來自深圳福田蓮花街道的“原子彈從入門到精通”有幸取得了總榜TOP1的成績,在這里跟大家分享深圳福田蓮花街道在本次比賽的解決方案。
背景介紹
核心網在移動運營商網絡中占據舉足輕重的地位,其異常往往會導致呼叫失敗、網絡延遲等現網故障,對全網的服務質量帶來重大的負面影響,多則影響十數萬用戶,並引發大面積投訴[1]。因此需要快速及時地發現核心網的異常風險,在影響擴大之前及時消除故障。
KPI是一類能夠反映網絡性能與設備運行狀態的指標,本賽題提供某運營商核心網的KPI真實數據,數據形式為KPI時間序列,采樣間隔為1小時,選手需要使用[2019-08-01,2019-09-23)的數據進行建模,使用訓練好的模型對未來7天的數據進行預測,識別未來一周KPI序列中的異常點。
評估指標:
本賽題采用F1作為評估指標,具體計算公式如下:
P = TP/(TP+FP)
R = TP/(TP+FN)
F1 = 2*P*R/(P+R)
數據探索
數據**有20個不同的KPI,不同的KPI物理意義不同,代表了不同的核心網指標,由於賽題需要對未來7天的數據進行預測,因此對於建模樣本也進行周級別的分布查看。從Fig1中可以明顯看到訓練集中前三周的異常率顯著低於后續幾周。進一步分析可以發現雖然賽題提供了[2019-08-01,2019-09-23)的全部數據,但2019-08-15之前所有20個KPI均毫無異常,第一個異常點是從2019-08-15 02:00:00開始出現的(Fig2),因此推測8.15前的數據分布不同於后續樣本,或8.15之前存在標注異常的問題。實驗中剔除8.15之前的樣本建模效果也優於保留該時間段樣本,進一步驗證了該推測。
Fig1. KPI周級別異常統計
Fig2. 異常與否的最早數據時間
時間序列圖對於快速理解數據及業務有着重要的作用,對20個時間序列進行觀察后,將異常粗分為4類,如Fig3所示。
Fig3. 異常分類(時間序列中紅點為異常,藍點為正常)
1.邊界型異常
如Fig3中a部分(紅框)所示,邊界型異常中異常樣本的取值范圍與正常值取值完全不同,即存在明確的決策邊界可以完全分離異常點。
2.趨勢破壞型異常
如Fig3中b部分(綠框)所示,正常樣本點的走勢往往沿着一個趨勢,而趨勢破壞型的異常點會偏離這個趨勢,但取值范圍可能仍然在正常樣本的取值范圍內,這類異常與相鄰點的差異較大,與相同時刻正常點的取值差異也較大。
3.0值型異常
如Fig3中c部分(橙框)所示,此類異常取值直接為0,根據對業務的理解,正常的KPI不應出現0值,根據分析,20個KPI中有19個正常取值均不應為0,僅1個KPI正常取值為0,非0則為異常。
4.其他型異常
如Fig3中d部分(紫框)所示,此類異常往往既沒有破壞趨勢,取值也在正常的范圍內,但可能會偏離相同時刻的正常取值。
解題思路
賽題有20個不同的KPI,KPI物理意義不同且異常的種類也多種多樣,若將所有KPI作為一個整體建立一個統一的二分類模型,模型效果差強人意,難以進入前排,但若對每個KPI單獨建模,則需要建立並維護調優至少20個不同的模型,維護成本過高,因此思路是將KPI或異常進行分類建模。
1)邊界發現
決策樹會根據目標的分布將樣本划分在不同的特征空間范圍內(如Fig4 所示),非常適合用於邊界的發現與確定。因此針對邊界型異常,即好壞樣本取值完全不同的異常,決定采用決策樹進行邊界的自動發現與確定,具體如下:
遍歷20個KPI,若僅使用時間序列取值建立的單變量淺層簡單決策樹在訓練集中的F1score=1,便認為該KPI為邊界型異常KPI,並使用該決策樹的預測結果作為決策邊界,對相同KPI的未來樣本進行預測。
Fig4. 基於決策樹的邊界發現
對KPI進行遍歷后可知,存在7個KPI所有異常均為邊界型異常,即7個KPI在訓練集中的所有異常取值范圍均不同於正常樣本。最終結果也表明,該方案不僅在訓練集中能100%識別邊界型KPI的異常,在測試集中也能100%識別相關異常。
2)非邊界型異常探索
非邊界型異常往往KPI走勢存在一定的周期,若將時間周期剝離出來進行分析,則可以從二維的角度對時間序列進行觀察。
Fig5. 時間序列的二維展示
以kpi_id= 9415a… 為例,若將日期信息剝離,x軸僅為一天中的第幾小時,y軸仍然為時間序列取值,則會得到如Fig5的展示。此時整個時間序列被呈現在一個二維空間中,且異常值(紅點)多與正常值(藍點)偏離較遠,一個朴素的思路便是采用無監督方法識別圖中的異常。事實上,在實際的生產環境中,多達5000+原始KPI,300+衍生KPI,難以獲得有異常標注的時間序列,因此在生產環境中往往使用統計方法或無監督算法進行異常檢測[1,2]。但在當前有標簽的賽題下,經多次嘗試,無監督算法如iForest,DBSCAN以及時間序列分解方法如Prophet均無法勝過有監督機器學習算法。因此,對於非邊界型異常,最終決定使用有監督機器學習算法進行建模。
3)KPI類型划分在
1)中基於簡單決策樹發現了7個邊界型異常KPI,但剩余的13個KPI物理意義各不相同,需要進行分組建模。分組最基本的思想便是相似的KPI應該分在相同的組中。Pearson相關系數是最熟悉的相關性指標,其物理意義是表示兩個變量同向或反向變動的程度,非常適合用於時間序列的相似性分析。通過對剩余13個KPI的相似性分析可以發現,以下兩組id間的兩兩相關系數在0.9或以上。cluster1=[9415a…, 600a5…, ed63c…]
cluster2=[b3842…, bb6bb…, 3fe4d…]
Fig6. cluster1時間序列對比示例
以cluster1為例(Fig6.),可以看到相似性分組中不同KPI的時間序列不僅走勢接近,而且往往當分組內一個KPI產生異常時,其他KPI也會同步異常,表現出非常高的聯動性。因此對於相似性分組的模型建立非常關鍵,往往異常的召回和誤報均為3倍,也就是對一個則3倍上分,錯一個則3倍掉分,賽程中段快速上分的核心點便是這部分模型的建立。
對於剩余的7個KPI,最終依據是否包含周期,將其划分為3小類進行分組建模:半周期型:cluster3_1 = [4f493…]無周期型:cluster3_2 = [29374…,8f522…]強周期型:cluster3_3 = [681cb…, 0a9f5…,355ed…,3e1f1…]其中,半周期型KPI僅在部分時間段表現出周期趨勢,其他時間段取值幾乎完全相同。無周期型KPI取值與時間無明顯關聯,強周期型KPI取值隨時間不同產生周期性波動。
特征構造
根據前文分析以及對時間序列問題的理解,本賽題中構造了以下5種類型的變量。1.基礎變量:一天中的第幾小時,星期幾,kpi_id的各種編碼如label encoder,target encoder等等;2.差分變量:一階差分,二階差分,三階差分;3.平移變量:上n個時間點該kpi_id的value或差分的取值及其簡單衍生,如24小時前的value取值等;4.滑窗變量:過去n段時間該kpi_id的各類統計變量及其簡單衍生,如過去24小時value的均值等;5.強相關窗口統計:如過去7天內該時間點上下兩小時內介於該取值0.95-1.05范圍內樣本的總個數等等;
模型方案
鑒於本賽題難以建立一個能夠應用於全部KPI的統一模型,而解題過程中有較多模型需要建立與調優,為提高效率,在早期進行不同模型的若干次嘗試后便決定使用訓練速度較快且效果較好的LightGBM為各個分組建立二分類模型。
在實際的建模中發現僅用[2019-08-15,2019-09-08]的數據建模效果優於全部數據或使用更接近測試集樣本的后幾周數據,結合Fig1中異常率在后幾周大幅持續降低的現象,判斷[2019-09-09,2019-09-22]的異常分布可能不同或存在部分標注問題。在進一步探索后發現嫁接學習的引入能夠充分的使用到全部異常數據並取得更好的效果。
嫁接學習是遷移學習的一種,用來描述將一個樹模型a的輸出作為另一個樹模型b的輸入的方法(a,b往往數據分布不同或完全屬於不同產品,與同分布數據的常規融合有着本質區別),此種方法與樹木繁殖中的嫁接類似,故而得名[3]。在IJCAI2018廣告算法大賽中,前六天和最后一天數據分布不同,於是大部分人用同分布的第七天上半天的數據預測下半天,而植物大佬用前六天的數據訓練了一個模型,預測第七天得到的分數作為第七天模型的特征,再用第七天上半天的數據預測下半天,最后輕松得到solo冠軍,事后植物說這是他玩的最容易的比賽,畢竟人家用半天數據,植物用的是六天半的數據[3,4,5]。其他數據分布不同的場景下TOP方案中亦有嫁接學習的身影,如螞蟻金服ATEC支付風險識別TOP1方案[6],CCF BDCI 2018 個性化套餐匹配TOP1方案[7]等[3] 。
在若干次嘗試后,最終確定了以存在異常日期樣本為1層模型樣本, [2019-08-15,2019-09-08]樣本結合1層模型分數作為2層模型輸入的方案,模型框架如Fig7.所示,該框架的引入在本賽題中提分明顯,是上分的關鍵點之一。
Fig7. 模型框架
結合前文的內容,最終建模方案如Fig8所示,先進行KPI邊界的自動發現,解決7個邊界型KPI的異常,對於剩余的13個KPI,先根據相似性將其拆解為相似群組(6個KPI)和不相似群組(7個KPI),相似群組由組內相關系數較高的cluster1和cluster2構成,不相似群組按照是否包含周期划分為半周期群組cluster3_1,無周期群組cluster3_2和強周期群組cluster3_3,再對不同的群組分別建模,最后匯總生成最終結果。最終該方案取得了線上最高分及答辯最高分的成績。
Fig8. 建模方案
鳴謝
非常感謝希旭哥,苕芸博士,素顏姐,小愛姐等人在比賽過程中的幫助與指導,希旭哥還是一如既往的熱情,總能在第一時間為大家答疑解惑。
感謝廬山大佬賽后的精彩分享[2],讓人受益匪淺。以前沒看過華為雲開發者沙龍的分享,這次看完后覺得可針不戳,以后每期都不能錯過。
最后祝華為及NAIE蒸蒸日上,再創輝煌!
Reference
[1] 網絡AI-KPI異常檢測,利器大揭秘https://bbs.huaweicloud.com/videos/103579
[2] DevRun開發者沙龍—火遍網絡的KPI異常檢測到底什么https://vhall.huawei.com/fe/watch/6658
[3] 嫁接學習簡述https://zhuanlan.zhihu.com/p/98728768
[4] 結構化數據的遷移學習:嫁接學習https://zhuanlan.zhihu.com/p/51901122
[5] IJCAI-2018 TOP1分享https://github.com/plantsgo/ijcai-2018
[6] ATEC支付風險大賽Top1解決方案https://zhuanlan.zhihu.com/p/45826529
[7] CCF BDCI 2018 個性化套餐匹配TOP1方案https://github.com/PPshrimpGo/BDCI2018-ChinauUicom-1st-solution
本文分享自華為雲社區《揭開KPI異常檢測頂級AI模型面紗1》,原文作者:就挺突然 。