趙春生 梅松 張雙江 郭超
(1.中華人民共和國南京海關 江蘇省南京市 210001 2.南京大學 江蘇省南京市 210093)
海關由于機構特殊性,工作過程中擁有數量龐大的監控服務器,海量監控數據和數據之間的錯綜復雜的聯系增加了海關運維人員的壓力。運維人員需要自行設置報警閾值,而且持續監測資源使用情況,及時協調資源以確保系統正常運行。
目前大多數監控系統普遍采用設置固定閾值的方式檢測異常,由于不同監控服務器之間的差異性與各個監測指標的相似性,使用上述方法誤報和漏報會頻繁出現。此外,對異常的趨勢預測功能還不健全,系統問題和資源瓶頸問題時常發生,對監控數據的異常檢測和趨勢預測的研究分析效果十分不理想。
本文設計了一個基于XGBoost 和LSTM 的智能監控系統,使用孤立森林算法完成數據標注預處理工作,引入XGBoost 算法進行異常檢測,采用LSTM 神經網絡進行趨勢預測,該系統不斷迭代更新數據標簽并重置模型,以此提高異常檢測和趨勢預測的準確率,以滿足新時代新海關智能監控工作的需要。
孤立森林(簡稱iForest)一種異常檢測方法[1],是一種無監督學習算法,主要針對于連續程度高的結構化數據。該算法距離與密度無關,所以它無需負擔距離和密度計算成本。在iForest 算法中,異常點被定義為"隔絕的孤立點”,指的是分布稀疏且跟樣本中大多數據不一樣的點。假設一個區域范圍內只有上述分布稀疏的點,在統計學意義上可以認為這個區域范圍內的數據是異常的。iForest算法時間的復雜度為線性,對空間的需求少量而且較為恒定,能夠快速處理大數據集并具有解決高維數據的能力。
極端梯度提升(簡稱XGBoost)是一種集成學習且基于弱學習器的算法[2]。假設應用于分類問題上,分類器的分類精度大于半數的分類器就可認為是弱分類器。弱分類器定義為分類精度略好于隨機預測,但是準確率不過分高。XGBoost 算法核心在于不斷進行特征分裂添加樹,用來擬合預測的殘差。XGBoost 由很多分類回歸樹的集成組合,以期獲得更強的泛化能力[3]。機器學習領域中的決策樹主要為兩類:一類是分類樹;另一類是回歸樹。分類樹和回歸樹的總稱為CART,事實上分類與回歸問題本質是一致的,都是根據樣本特征和標簽得到某種映射關系,只是結果類型不同。
長短期記憶人工神經網絡(簡稱LSTM)是對循環神經網絡(簡稱RNN)的改進算法,由Hochreiter 等人在1997年提出,被用來解決長期依賴問題[4]。與RNN 相比,為了解決長期依賴問題,LSTM 加入了隱藏神經元結構,可以記憶長期的信息。LSTM 算法通過長期時間序列之間的關系,可以準確預測發展趨勢。因此趨勢預測的研究廣泛使用LSTM,如預測降雨量、預測疾病、預測人體軌跡情況等。
在海量的系統日志數據中,通常異常數據稀疏分布在數據中,難以對異常數據進行獲取并捕獲異常數據的特征,這直接導致數據標注不平衡。為了解決此問題,本文使用iForest 算法先對數據預處理,且進行標注作為數據基礎。異常檢測和趨勢預測中,需要進行預處理數據標注對每個數據標定對應的標簽,并通過迭代替換更新標簽不斷提高異常檢測和趨勢預測的效率。
XGBoost 被用于訓練異常檢測模型,歷史數據對模型進行訓練,而后用模型進行異常檢測,從而大量提高工作人員設置大量參數的工作效率,提高異常檢測的準確率,減少失誤和遺漏。
XGBoost 算法模型包含大量參數,設置恰當的參數是決定數據異常檢測準確率的關鍵。通過模型訓練確定XGBoost 算法模型最適參數,降低異常檢測的遺漏率。訓練數據集選取某服務器2020年2月25日至2020年5月15日共150217 條和CPU 使用率與內存使用率的數據。使用iForest 進行數據標注預處理,將數據集進行劃分10 份,3 份作為測試集,7 份作為訓練集。訓練中數據集不會改變,因此數據的一致性會得到保證。
在實驗進行之前,必須設定初始參數,并在實驗中對參數進行逐步調整。設定模型初始參數如表1 所示,設置booster 助推器選用gbtree 解決分類問題。verbosity 參數表示模型運行的信息數量。objective 參數闡述了是二元邏輯回歸,數據劃分為兩種。max_depth 表示樹的最大深度。subsample 是指子樣本占全部樣本的比例。evals 參數表示模型的效果,min_child_weight 參數是樹中葉子的最小權重,min_child_weight、lambda、gamma 和eta 進行模型控制,防止過擬合。
3.1.1 設定最優迭代次數
模型訓練過程中創建多少棵樹的數量等于迭代次數,準確率低代表迭代次數不夠,次數過多則會過擬合。根據經驗設置模型第一次訓練的迭代次數為10000 次,參數early_stopping_round 設置為1000,如果測試集的錯誤率在連續1000 次迭代中都沒有降低,即可確定最優迭代次數。結果顯示,算法模型從166 到1166 次迭代的測試集錯誤率都沒有降低,因此確定算法模型最優迭代次數為166。
3.1.2 設定樹的最大深度
樹的最大深度max_depth 的取值尤為關鍵,如果深度太大會造成過擬合狀態,如果深度太小而會分類不完全。實驗時首先使用控制變量,通過比較不同的max_depth 的取值對模型準確率的影響,得出max_depth 最優取值。實驗中選擇本文研究比較關注的精確率、召回率和f1 值作為判斷的依據。由經驗可知max_depth 一般取值為[3,10],表2 展示不同max_depth 的實驗結果,結果顯示當max_depth 為7 時模型準確率最高。
3.1.3 設定步長
步長參數用于降低數據特征權重,預防過擬合。由經驗可知eta 取值范圍為[0.01,0.3]。使用控制變量法固定其他參數的取值(max_depth 設置為7),通過對比精確率、召回率和f1 值得出eta參數的最優取值。表3 表明,最優eta 參數值為0.20。
重復實驗過程,并為最終確定最佳參數設定,所有參數表4,通過多次訓練模型應用與其他數據集,發現模型效果相近,所以表4 中的參數作為異常檢測模型采用的最優參數。
本文采用LSTM 神經網絡算法對數據進行趨勢預測,提供準確的趨勢預測功能。LSTM 是一種對RNN 進行改進的算法,主要是為了解決長期依賴問題。趨勢預測是使用某監控項指標最近一段時間的值,通過此刻的指標計算,進行預測,直到預測出未來時間點的值時停止。此外,還可以為不同的監控項建立不同的趨勢預測模型,模型之間相互獨立。通過預測監測數據的變化,工作人員可以預測服務器的未來資源發展方向,預先調整服務器資源,提高系統效率和用戶使用體驗。
為了應對服務器集群中不同異常檢測和趨勢預測,最終訓練不同的模型群,特定模型適應與特定服務器數據,從而達到模型解耦。模型使用中,可以進行重置模型,并且數據重新進行數據標注,不斷調整模型提高模型的質量。
本文以異常檢測的準確率來評估異常檢測效果,區別于傳統固定閾值報警,對本文研究的異常檢測進行評估。以真實趨勢走向評估預測結果。
評估異常檢測優劣的標準是準確率和漏報率。60 天內系統報警情況展示于表5。
表5 展示,60 天范圍內,采用固定閾值報警產生了178 次報警,其中準確率為55.06%,遺漏69 次。而加農系統產生了162 次報警,其中準確率為84.57%,遺漏38 次。通過對比可以得出,智能監控系統減少了31 次漏報,減少了44.93%漏報,提升了29.51%的準確率。
系統正常運行時,選擇了六個數據集進行檢測,查看異常檢測的精確率、召回率和f1 值。表6 是對6 個數據集的異常檢測結果。
由表6 可知,智能監控系統對隨機挑選的6 個數據集的異常檢測結果的f1 值都可以達到0.85。綜合表5 和表6 可見,智能監控系統可以準確地對實時監控數據進行異常檢測,提高異常報警準確率,減少誤報和漏報。
評估系統趨勢預測的準確率。選擇8 個數據集進行預測,計算每次數值的均方根誤差,衡量準確性。表7 展示的是數據集的趨勢預測值與真實值之間的均方根誤差值。
表7 顯示8 個數據集的趨勢預測值與真實值之間的均方根誤差值平均為12.12,該值較小。由此可見,本文所設計系統能較為準確的預測趨勢。
對比上述實驗結果可以證明,本文研究的智能監控系統可以提供準確的異常檢測與趨勢預測功能,提高異常檢測和趨勢預測的準確率。
本文提出了一個基于XGBoost 和LSTM 的智能監控系統,具有監控項異常檢測和對監控項指標進行趨勢預測的功能。實驗證明,此智能監控系統可以提高異常檢測的準確率,減少誤報和漏報,并可以提供較好的趨勢預測功能。但是其中仍然存在一定的問題,主要包括四點:
(1)研究中我們主要對單個維度進行異常檢測,單維度相較于多維度檢測的結果更不具說服力,可采用多維度檢測提高異常檢測的準確率,例如同時采用內存使用率和CPU 使用率兩個維度的數據進行異常檢測;
(2)研究中的XGBoost 算法采用level-wise 生成決策樹,同時分裂同一層的葉子,從而進行多線程優化,這樣會帶來很多不必要的開銷,可以使用LightGBM 算法解決XGBoost 的開銷問題;
(3)異常檢測這一技術的表現效果與實際的運用場景有較大關系,有可能檢測的 “異常”未必符合實際場景中的真正異常的定義,因此在特征選擇時,要盡量過濾不相關的特征,增加類似于時間的維度特征以保證異常檢測的準確率;
(4)數據取樣的量級不足會產生同真實情況的偏差,對于數據不足的情況,可以采用數據擴增技術基于已有數據生成更多的有效數據,以解決數據取樣過少的問題。
雖然提出的智能監控系統還存在亟待解決的問題,但是隨著海關監控數據的日益劇增,智能監控系統采用異常檢測和趨勢預測的方式,對海關監控數據進行準確的異常報警以及風險預測仍具有重要的現實意義。

表1:XGBoost 算法初始參數值

表2:max_depth 參數實驗

表3:eta 參數實驗

表4:XGBoost 算法在該模型的最優參數值

表5:異常檢測效果對比表

表6:異常檢測結果表

表7:趨勢預測效果表