摘要:2020GDE全球開發者大賽-KPI異常檢測告一段落,來自深圳福田蓮花街道的「原子彈從入門到精通」有幸取得了 總榜TOP1的成績,在這裏跟你們分享深圳福田蓮花街道在本次比賽的解決方案。
背景介紹
核心網在移動運營商網絡中佔據舉足輕重的地位,其異常每每會致使呼叫失敗、網絡延遲等現網故障,對全網的服務質量帶來重大的負面影響,多則影響十數萬用戶,並引起大面積投訴[1]。所以須要快速及時地發現核心網的異常風險,在影響擴大以前及時消除故障。
KPI是一類可以反映網絡性能與設備運行狀態的指標,本賽題提供某運營商核心網的KPI真實數據,數據形式爲KPI時間序列,採樣間隔爲1小時,選手須要使用[2019-08-01,2019-09-23)的數據進行建模,使用訓練好的模型對將來7天的數據進行預測,識別將來一週KPI序列中的異常點。git
評估指標:
本賽題採用F1做爲評估指標,具體計算公式以下:github
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周級別異常統計ide
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》,原文做者:就挺忽然 。