陳適宜



摘要:為了提高異常檢測的準確性和高效性,提出了基于xgboost的異常檢測算法。首先對異常檢測當前遇到的挑戰進行分析,指出缺少樣本和模型泛化是異常檢測中的難點。在此基礎上設計了異常注入算法,利用3sigma原則對數據集進行擴充;然后設計特征提取器,針對正常數據和異常數據的特點設計相關特征;最后選擇xgboost模型對時序數據進行異常檢測。此異常檢測流程提高了異常檢測的準確性和泛化能力。通過在KPI公共數據集上進行實驗,驗證了該設計的準確性和有效性。
關鍵詞: 異常檢測; xgboost; 異常注入; 特征提取; 智能運維
中圖分類號: TP311? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2021)02-0188-02
Abstract:In order to improve the accuracy and efficiency of anomaly detection, an anomaly detection algorithm based on xgboost is proposed. First, analyze the current challenges of anomaly detection, and point out that lack of samples and model generalization are the difficulties in anomaly detection. On this basis, an anomaly injection algorithm is designed, and the data set is expanded using the 3sigma principle; then a feature extractor is designed to design related features according to the characteristics of normal data and abnormal data; finally, the xgboost model is selected to perform anomaly detection on time series data. This anomaly detection process improves the accuracy and generalization ability of anomaly detection. Through experiments on the KPI public data set, the accuracy and effectiveness of the design are verified.
Key words:anomaly detection; xgboost;anomaly injection;feature extraction;AIOPS
計算機硬件和軟件的飛速發展帶來了功能強大的應用,但是由于硬件、軟件和人為等原因,程序時刻都有可能發生故障。及時發現并快速介入故障,能最小化對用戶體驗的損害。為了能夠及時發現故障,需要對系統進行連續監控,系統監控從數據分析的角度來看,即意味著需要不間斷地監控大量時序數據,以檢測出潛在的異常。由于需要監控的時序數據規模很大,通過人工的方式是幾乎不可能的,這就要求我們使用機器學習和數據挖掘技術進行自動異常檢測。
異?;蛘弋惓|c是指與其他數據明顯不同的數據點,異常檢測旨在發現這些異常點。通常,時序數據是由一個或多個反映系統功能或業務能力的應用程序創建的,當這些應用程序發生行為異常時,就會產生異常點。準確的異常檢測可以快速準確的定位故障并進行故障排除,對入侵檢測、信用卡欺詐、醫療診斷等[1]等實際應用有重大意義。但是,當前時序數據的自動化異常檢測服務面臨著許多挑戰。
挑戰1:缺少樣本。在實際中,故障發生的概率較低,從而導致很難積累大量異常樣本。這就要求我們必須具備自動化構建樣本的能力以支持異常檢測模型的訓練。
挑戰2:模型泛化。時間序列有不同的模式:周期型、穩定型和無規律波動型,系統需要能夠對這些不同模式的時間序列識別出異常。
為了解決上述問題,本文開發了一種準確、高效、通用的異常檢測方法,解決了樣本缺少與模型泛化問題。本文重點研究了針對時間序列數據的異常檢測服務的機器學習算法,包括樣本增強,樣本特征設計和基于xgboost的異常檢測。
1 基于3sigma原理的異常注入算法
基于機器學習的異常檢測算法缺乏訓練數據,數據集中包含的異常點比例總是遠遠少于正常點,這阻礙了算法的訓練和實用性,同時,依賴人工標注異常數據工作量大且不易完成。雖然可以通過傳統的機器學習過采樣或欠采樣來動態調整正負樣本比例,但是過采樣會使異常樣本過于單一,最終導致分類器過擬合。因此,本文開發了一種自動異常注入算法,在保證異常注入的隨機性和多樣性的同時有效地擴充數據集。
1.1 3sigma原理
3sigma原則[2]是一種最常使用的處理異常值數據的方法。3sigma原理可以簡單描述為:若數據服從正態分布,則異常值被定義為一組結果值中與平均值的偏差超過三倍標準差的值。即在正態分布的假設下,距離平均值三倍標準差之外的值出現的概率很小,因此可認為是異常值。數值分布在[(μ-3σ,μ+3σ)]中的概率為0.9973其中,[μ]為平均值,[σ]為標準差。
一般可以認為,數據的取值幾乎全部集中在[(μ-3σ,μ+3σ)]區間內,超出這個范圍的可能性僅占不到0.3%,這些超出該范圍的數據可以認為是異常值。
1.2 基于3sigma原理的異常注入算法
根據3sigma原理,我們可以根據原始數據生成異常數據,生成的異常數據插入原始數據中可以生成異常樣本。通常異常的產生會持續一段時間,然后逐步恢復,恢復過程會影響異常兩側的值。異常注入算法步驟如下:
首先給定一段時序值S,確定注入的異常個數N,將時序數據劃分為N塊;對每一塊數據X進行異常注入:
①隨機選定一個點Xi作為異常種子;
②設定異常點數目范圍[2,15],基于此范圍,產生隨機異常點數anomaly_count;
③異常點隨機分布在異常種子兩側,左側和右側的數目均隨機產生;
④異常數據的產生基于異常種子點兩側的值,設定種子點兩側范圍區間為[15,30],兩側的數目由上述區間隨機產生,異常點的基礎數據anomaly_base_data。
接下來確定異常點的數據,基于3sigma原理,異常點的大小計算如下:
①產生一個隨機數,若為奇數,該次為異常上漲,否則異常下跌;
②利用異常基礎數據產生異常值。根據數據波動范圍的不同,可將數據分為不同的類型比如成功率、延時型和0值突刺型,三種類型數據特征如下:成功率型,取值范圍大多在40-100之間,少部分在0.5-1之間,數據波動小,標準差較小,經常為0;延時型,在一定范圍內波動,波動較小,標準差基本不隨時間變化;0值突刺型,多為0值,偶有突刺,突刺不一定是異常值。根據不同類型的數據取不同的均值和方差生成異常數據。
異常點會引起異常兩側的值有波動,設定一個影響范圍,隨機產生影響的范圍大小,使用3sigma原理生成異常點附近的波動值。
確定好左右兩側影響范圍后,隨機產生異常衰減的方式,分三種:簡單移動平均、加權移動平均、指數加權移動平均。左側影響的值的產生由其右側的值移動平均產生,對于右側影響范圍的值的確定,直接由左側的值移動平均產生。
2 特征提取
2.1 孤立森林
孤立森林,由周志華教授等人于2008年提出[3]。在孤立森林中,認為異常是“少且不同于其他值”,因此異常值更容易被隔離。在生成隨機樹的過程中,遞歸隨機地重復進行數據集的化分,在這種隨機分割的策略下,異常點通常具有較短的路徑。
2.2 特征設計
由于數據值大小、波動情況均有所不同,設計提取數據特征是提高異常檢測泛化能力的前提。騰訊Metis[4]將其分為三種特征,一是統計特征,包括方差、均值、偏度等統計學特征;二是擬合特征,包括如移動平均、指數加權移動平均等特征;三是分類特征,包含一些自相關性、互相關性等特征。參考Metis的特征提取方法,本章設計了一套特征工程,區別于上述特征提取方法,本文對提取的結果用孤立森林進行了一層特征抽象,使得模型的泛化能力更強,所選擇的特征及說明如表1所示。
3 基于xgboost的異常檢測
Xgboost[5]是基于決策樹的集成機器學習算法。2015年Kaggle發布的29個獲勝方法里有17個用了Xgboost。Xgboost具有高可擴展性和高計算速度,廣泛被應用在實際中。使用Xgboost進行異常檢測流程如下圖所示。
在訓練階段,首先將進行異常注入的數據集標注好,然后通過章節2設計的特征提取器構建特征數據集,再將特征數據集輸入xgboost模型訓練,最后保存訓練好的模型。在測試階段調用保存好的xgboost分類模型進行預測,最終得到異常檢測結果。
4 實驗結果
我們使用KPI數據集來評估我們的模型。KPI由AIOPS數據競賽發布[6-7],通常用于評估時間序列異常檢測的性能。該數據集由多個KPI曲線組成,這些曲線從各個互聯網公司(包括搜狗,騰訊等)收集。異常點被標記為正樣本,正常點被標記為負、正樣本。本章從精確性、召回率和F1分數來表示模型的準確性。
首先,將KPI數據集分為訓練集和測試集,訓練集和測試集比例為7:3。經過章1的異常注入算法處理訓練集并標注,特征提取后輸入xgboost進行訓練。測試集使用FFT[8]、Twitter-AD[9]、xgboost異常檢測模型結果如表2。
5 總結
智能化以及數據化是未來 IT 運維的總體趨勢,互聯網業務的連續性保障的方方面面將依靠智能運維。異常檢測是智能運維的首推場景。本文首先介紹了基于3sigma原理的異常注入算法,接著介紹了異常檢測的特征提取器,最后確定基于xgboost異常檢測的整體流程。將設計的特征提取器應用到數據集上得到特征數據集,特征數據集輸入xgboost進行訓練和測試,與現有模型相比獲得了更好性能。
參考文獻:
[1] C. Aggarwal. Outlier Analysis. Springer New York, 2013.
[2]? https://www.cnblogs.com/hellochennan/p/6706884.html.
[3]? Liu, Fei Tony, Kai Ming Ting, and Zhi-Hua Zhou. “Isolation forest.” Data Mining, 2008. ICDM08. Eighth IEEE International Conference on. IEEE, 2008.
[4]? https://github.com/bchretien/metis4.
[5] Chen T , Guestrin C . XGBoost: A Scalable Tree Boosting System[J]. 2016.
[6]? [n. d.]. http://iops.ai/dataset_detail/?id=10.
[7] [n. d.]. http://iops.ai/competition_detail/?competition_id=5&flag=1.
[8] Faraz Rasheed, Peter Peng, Reda Alhajj, and Jon Rokne. 2009. Fourier transform based spatial outlier mining. In International Conference on Intelligent Data Engineering and Automated Learning. Springer, 317–324.
[9] Owen Vallis, Jordan Hochenbaum, and Arun Kejariwal. 2014. A Novel Technique for Long-Term Anomaly Detection in the Cloud. In 6th USENIX Workshop on Hot Topics in Cloud Computing (HotCloud 14). USENIX Association, Philadelphia, PA.
【通聯編輯:唐一東】