段金鳳,張曉穎
(長春大學理學院,吉林 130022)
網絡釣魚常常通過創建虛假網站來獲取用戶隱私信息,且存在更新速度快、周期較短等特點。如何及時高效地對釣魚網站進行識別是當今面臨比較棘手的問題。隨著機器學習深度學習算法的發展,國內外研究人員利用其對網絡釣魚網站識別開展了許多研究。Aggarwal 等[1]提出使用Twitter 上特有特征結合UTL 特征來構建釣魚網站識別模型,達到了92.52%的準確性;Liew 等[2]提出了基于隨機森林算法的預警機制,在11個最佳特征上準確率達到了94.75%;胡向東等[3]提出一種結合網頁敏感文本和logo圖像特征的檢測方法,其召回率為97%;周傳華等[4]提出了一種過濾式方法和封裝式方法混合特征選擇模型FSIGR,在特征降維和提高分類精確度方面均有很好的表現;畢青松等[5]提出一種基于最大相關最小冗余和隨機森林相結合的特征選擇,并利用XGBoost 算法來構建釣魚網站檢測模型,精確度達到90.25%,其AUC值為0.87。
為了能更高效識別釣魚網站,本文提出一種基于Stacking 模型融合的釣魚網站識別方法,主要包含以下幾個方面:使用XGBoost算法篩選出最優特征子集,在此基礎上選取RF、ET、XGBoost、LightGBM 作為Stacking 第一層基分類模型,最后利用GBDT 算法作為Stacking 第二層元分類模型,對釣魚網站進行識別。該方法構建基模型進行特征學習,提高釣魚網站識別準確率。
XGBoost 是一種集成樹模型,是GBDT 的改進boosting 算法,具有訓練速度快、預測精度高等優點[6]。其簡單目標函數如下:
為了將目標函數化簡,將常數項抽離出來,使用泰勒公式進行近似展開,得到如下目標函數:
其中:gi表示對?(t?1)的一階導數;hi表示對?(t ?1)的二階導數。在式(3)中使用函數f(x) 來表示樹模型,模型的優化求解本質上是求解參數,為了對模型優化求解,需更進一步對樹模型參數進行優化。定義樹的復雜度主要從每棵樹葉子節點數和葉子節點權重兩個方面,可得到Ω(ft)表達如下:
其中:T表示葉子節點數;wj表示第j個葉子節點的權重。將式(4)帶入目標函數中,由于常數并不影響參數優化,可得如下:
為了使目標函數最小,令其導數為0,解得每個葉子節點的最優預測權重為
代入式(5)目標函數,解得最小損失為
XGBoost 利用了二階梯度對節點進行劃分,相對于其他GBM 算法精度更高;利用局部近似算法對分裂節點的貪心算法優化;在損失函數中加入L1/L2正則項,控制模型復雜度,提高了模型的魯棒性,提高并行計算能力。
LightGBM 是基于決策樹模型的Boosting 算法,由于GBDT尋找合適分割點,需要遍歷所有數據去計算信息增益,對于大量數據而言,計算復雜度和時間急劇增加。LightGBM 提出針對此問題進行優化,采用了基于梯度單邊采樣(GOSS)和互斥特征合并(EFB)兩種方法[7]。
基于梯度單邊采樣在梯度小的數據上進行隨機采樣,保留梯度大的數據,EFB 將許多互斥特征變成低維稠密,減少不必要特征計算,LightGBM 使用這兩種方法去平衡準確率和效率,減少了計算和時間成本。
隨機森林(random forest, RF)是由很多決策樹分類模型組成的組合分類模型,是利用boot?strap 重抽樣方法從原始樣本中抽取多個樣本,對每個bootstrap 樣本進行決策樹建模,然后組合多棵決策樹預測,通過投票得出最終預測結果。具有比較高的預測準確率,對異常值和噪聲有很好的容忍度且不容易出現過擬合。
極端隨機樹(extremely randomized tree,ET)中每棵樹都使用所有訓練樣本,隨機選擇分叉特征。與隨機森林算法類似,但是ET 采用隨機特征,分裂隨機減少了信息增益比或者基尼指數的計算過程,多棵決策樹組合在一起,也可以達到比較好的預測效果。
梯度提升樹(gradient boosting decision tree,GBDT)的基本思想是根據當前模型損失函數的負梯度信息來訓練新加入的弱分類器,然后將訓練好的弱分類器以累加形式結合到現有模型中。采用決策樹作為弱分類具有比較好的解釋性和魯棒性,能夠自動發現特征間高階關系,并且不需要對數據進行特殊預處理,既能處理連續值也能處理離散值。
Stacking 集成算法是由Wolpert[8]在其論文Stacked Generalization 中所提出的,其實際上是一種串行結構的多層學習系統。不同于Bagging和Boosting 集成算法,是分為兩層將不同基礎學習器組合起來進行模型學習[9]。Stacking 先將原始數據K?折交叉驗證法分成不交叉的K份,K?1份作為訓練集,一份作為測試集;其次利用多種分類器作為第一層基分類模型,得出每個分類器預測的結果,每個分類器預測結果取K?折交叉驗證的平均值“生成”一個新數據集;最后將新數據集作為第二層的輸入特征,使用第二層分類器進行預測。Stacking算法如下:
在文本中第一層基分類模型為隨機森林(RF)、極端隨機樹(ET)、XGBoost 和LightGBM 四種分類器,梯度提升決策樹(GBDT)作為Stacking 集成結構的第二層,也就是對釣魚網站識別的最終分類器。

圖1 Stacking集成學習框架
本文實驗數據來自于UCI 數據庫中的phish?ing 數據集,數據集總條數為11055,其中釣魚網站數據量為4898,占比約為44.4%;非釣魚網站為6157,占比約為55.6%。總計包含30 個屬性特征,包括URL_Length、Shortining_Service、SSLfinal_State、SFH等主要特征。實驗環境如下:實驗平臺為Pycharm;Python 版本為3.8.6;一些常用機器學習庫Pandas、Matplotlib、Sklearn等。
對于分類問題,模型評價指標主要有準確率(accuracy)、精準度(precision)、召回率(recall)、F?score和ROC?AUC曲線。
AUC 是ROC 曲線下的面積,統計意義為從所有正樣本中隨機抽取一個正樣本,從所有負樣本中隨機抽取一個負樣本,當前score 使得正樣本排在負樣本前面的概率,取值在0.5 到1 之間,越靠近1表示模型性能越好。
本文數據集有30 個屬性,將數據80%劃分為訓練集,20%劃分為測試集。特征選取過多或過少都會影響到模型的精確度,使用XGBoost進行特征篩選,圖2為精確度隨選擇特征重要性閾值和特征個數k變化的曲線,可知在特征重要性閾值為0.07,k為24時,模型精確度最高。圖3 為24 個重要特征排序結果。所以最終選取SSLfinal_State、URL_of_Anchor、Prefix_Suffix 等24個重要特征進行建模。

圖2 最優特征集選取

圖3 24個重要特征排序
為了檢驗本文提出的釣魚網站識別模型是否有效,先利用篩選出的最優特征集使用XG?Boost、LightGBM 等五種單一學習器對釣魚網站進行識別預測。為了提高模型的魯棒性,本文采用Sklearn 庫中StratifiedKFold 對訓練數據集進行五折分層交叉驗證,StratifiedKFold 可以讓每一折中都保持著原始數據中各個類別的比例關系,使得驗證結果更加可信。同時使用Grid?SearchCV 對參數進行調節,提高模型預測能力,其網格搜索得到最優參數。
表1是不同分類器模型在最優特征集上對釣魚網站識別的結果,使用XGBoost的準確率可以達到96.89%,召回率為95.74%,其AUC 的值為0.9651;LightGBM 對釣魚網站識別的準確率為97.21%,召回率、F1 指標和AUC 的值都比XG?Boost 模型高;RF 和ET 的召回率都可以達到98%左右,但是F1 指標和AUC 的值相對而言并不高。本文提出的Stacking集成模型準確率達到了97.96%,召回率為96.24%,F1 指標和AUC的值也比其余五個單一分類器高,可見使用Stacking 集成模型對釣魚網站進行識別是非常有效的,而且綜合性能也比RF、ET、XGBoost 等單一學習器高,盡管它們的預測能力已經比較高了。

表1 不同分類模型實驗結果
為了能更直觀展示本文各個釣魚網站識別模型的預測能力,圖4 給出了XGBoost、RF、GBDT 和Stacking 集成模型的ROC 曲線以及AUC值,AUC 的值越靠近1 說明模型預測能力更好,由圖4 可知,使用Stacking 集成模型識別釣魚網站是最好的。

圖4 不同分類器的ROC曲線
隨著互聯網的快速發展,快速、有效地識別釣魚網站是非常有必要的。盡管已有文獻已經從不同的角度進行了研究,但大多研究僅是使用單一機器學習方法,且精確度不高。本文提出一種Stacking集成結構的方法,將RF、ET、XGBoost 和LightGBM 四種不同集成決策樹模型預測結果進行融合,然后基于GBDT模型進行釣魚網站識別。此外本文在對釣魚網站進行識別之前,利用XGBoost進行特征篩選,去掉冗余特征,得到24 個重要特征組成最優特征集。結果表明,Stacking 集成模型F1 指標和AUC 值評價指標都高于XGBoost、LightGBM 等五種單一算法。可見本文提出的Stacking集成模型對于釣魚網站的識別效果較好,但本文針對Stacking集成模型并沒有詳細調參,如何篩選最優特征集和參數調節來提高預測準確率是今后研究方向。