張銀杰,揣錦華,翟曉惠
(長(zhǎng)安大學(xué) 信息工程學(xué)院,陜西 西安 710064)
集成學(xué)習(xí)算法是近些年來(lái)較為流行的基于樹的機(jī)器學(xué)習(xí)方法[1],常用于數(shù)據(jù)挖掘領(lǐng)域的分類或回歸預(yù)測(cè)任務(wù)[2-4]。在此背景下,該文選擇kaggle平臺(tái)的開源數(shù)據(jù)集,對(duì)計(jì)算機(jī)感染惡意軟件這一主題進(jìn)行二分類預(yù)測(cè),以探究集成學(xué)習(xí)算法在網(wǎng)絡(luò)安全相關(guān)的多維數(shù)據(jù)預(yù)測(cè)過(guò)程中的應(yīng)用[5]。主要關(guān)注集成學(xué)習(xí)在特征選擇與預(yù)測(cè)模型建立中的實(shí)際運(yùn)用。對(duì)原始數(shù)據(jù)進(jìn)行預(yù)處理,提出利用原有特征進(jìn)行時(shí)間戳特征的構(gòu)建使得原數(shù)據(jù)在時(shí)間上有序,也為數(shù)據(jù)集提供了時(shí)間維度的特征。
如何盡可能地展現(xiàn)出原數(shù)據(jù)集中的有效信息并建立二分類模型,實(shí)現(xiàn)對(duì)計(jì)算機(jī)是否感染惡意軟件的預(yù)測(cè)目標(biāo)是該文研究的主要內(nèi)容。
文中數(shù)據(jù)來(lái)源于kaggle開源數(shù)據(jù)集,記錄了千萬(wàn)臺(tái)Windows計(jì)算機(jī)的信息,包括計(jì)算機(jī)所屬地理區(qū)域、硬件、防衛(wèi)軟件、操作系統(tǒng)設(shè)置等多維信息,共計(jì)82個(gè)屬性。預(yù)測(cè)標(biāo)簽為屬性HasDetections,其包含兩個(gè)數(shù)量相當(dāng)?shù)念悇e0和1,當(dāng)其數(shù)值為1時(shí)表示感染惡意軟件,為0時(shí)表示未感染惡意軟件。為探究集成學(xué)習(xí)算法在本數(shù)據(jù)集上的分類預(yù)測(cè)作用,采用前200萬(wàn)條數(shù)據(jù)進(jìn)行研究。
原始數(shù)據(jù)集存在大量屬性字段,經(jīng)過(guò)初步的數(shù)據(jù)探索性分析[6],發(fā)現(xiàn)屬性字段不同值對(duì)預(yù)測(cè)標(biāo)簽的影響是不同的。例如圖1為Census_OSInstallTypeName字段屬性值HasDetections率的分布。該字段共包含九個(gè)類別值,每個(gè)類別值的數(shù)量如圖中條形圖所示,感染惡意軟件的概率用折線圖表示,可以看出類別之間的感染率存在著差異,部分安裝類型下感染率明顯超過(guò)了0.5均值,說(shuō)明通過(guò)這些安裝方式安裝操作系統(tǒng)的計(jì)算機(jī)更容易感染惡意軟件。通過(guò)對(duì)所有屬性列的分析,證明了對(duì)該數(shù)據(jù)集進(jìn)行分類預(yù)測(cè)的可行性。
圖1 不同操作系統(tǒng)安裝類型下“HasDetections”率分布
原始數(shù)據(jù)集中需要進(jìn)行初步的數(shù)據(jù)清洗。例如,類別型字段SmartScreen,該字段記錄了注冊(cè)表中SmartScreen的字符串值,該值的設(shè)置影響防衛(wèi)軟件的部分防衛(wèi)功能。在原始數(shù)據(jù)集中該字段含有如“Off”、“off”、“OFF”含義相同的類別值,經(jīng)處理后合并為同一類。
通過(guò)以上過(guò)程,對(duì)所有類別型字段進(jìn)行標(biāo)簽編碼以簡(jiǎn)化數(shù)據(jù)。數(shù)據(jù)集中的數(shù)值型字段存在部分不符合常理的異常值,如標(biāo)識(shí)顯示器尺寸的數(shù)值字段存在負(fù)值和0值,負(fù)值剔除負(fù)號(hào),0值直接視為無(wú)效信息,并以該字段眾數(shù)填充。對(duì)于布爾型字段,則確保有效值只有0和1兩個(gè)變量。
特征工程(feature engineering),是一系列與特征相關(guān)的工程活動(dòng)的總稱。其作用是盡可能地在原始數(shù)據(jù)基礎(chǔ)上挖掘出適合于預(yù)測(cè)模型的特征。文中的特征從原始數(shù)據(jù)的各屬性列提取,預(yù)處理階段將原始數(shù)據(jù)集轉(zhuǎn)換為模型可以輸入的格式后,需進(jìn)行特征工程以調(diào)整特征數(shù)量,有助于模型發(fā)揮更好的預(yù)測(cè)性能。
將文中使用的數(shù)據(jù)集中所有的字段轉(zhuǎn)換為原始特征,共計(jì)53個(gè)類別型特征(如特征CityIdentifier,反映計(jì)算機(jī)所屬城市的標(biāo)識(shí)),10個(gè)數(shù)值型特征(如特征AVProductsEnabled,數(shù)值表示可以使用防衛(wèi)軟件數(shù)量),18個(gè)布爾型特征(如特征Census_IsTouchEnabled,用0或1變量表示是否為可觸屏設(shè)備)。
數(shù)據(jù)集中的每一臺(tái)計(jì)算機(jī)信息是微軟公司于2018年抽取的真實(shí)計(jì)算機(jī)脫敏數(shù)據(jù)。按照傳統(tǒng)思維,軟件版本越新,對(duì)惡意軟件的防衛(wèi)就越強(qiáng),計(jì)算機(jī)感染惡意軟件概率就越低。為構(gòu)造出更能反映時(shí)間差異信息的特征,該文對(duì)AppVersion、AvSigVersion、Census_OSVersion三個(gè)含有時(shí)間信息的特征進(jìn)行拆分。例如AppVersion代表防衛(wèi)軟件APP版本號(hào)(例如4.18.1807.18075)由四個(gè)數(shù)據(jù)組成,其中第二、第三、第四個(gè)數(shù)字具有版本信息差異,因此對(duì)原特征拆分,得到新的三個(gè)拆分特征,如AppVersion2代表版本號(hào)的第二個(gè)數(shù)字,文中此特征為18時(shí)代表相關(guān)軟件已更新到最新版本。同理基于AvSigVersion的第二、第三個(gè)數(shù)字和Census_OSVersion的第三、第四個(gè)數(shù)字得到4個(gè)新的拆分特征。共計(jì)得到7個(gè)拆分特征。
此外,設(shè)計(jì)了如表1所示的三個(gè)時(shí)間戳特征,用版本最新號(hào)減去相應(yīng)版本信息,以衡量不同計(jì)算機(jī)之間的軟件版本差異。表中AppVersion2_3指APP版本號(hào)第二和第三個(gè)數(shù)字的小數(shù)組合,AvSigVersion2_3指防衛(wèi)軟件sig版本號(hào)第二和第三個(gè)數(shù)字的小數(shù)組合,Census_OSVersion3_4指操作系統(tǒng)版本號(hào)第三和第四個(gè)數(shù)字的小數(shù)組合。
表1 時(shí)間戳特征的構(gòu)建
以上時(shí)間戳特征可以確定計(jì)算機(jī)防衛(wèi)軟件或操作系統(tǒng)與最新版本的差異程度。在對(duì)時(shí)間戳特征不同區(qū)間下的HasDetections率變化分析過(guò)程中發(fā)現(xiàn),防衛(wèi)軟件版本的差異確實(shí)會(huì)影響計(jì)算機(jī)感染惡意軟件的概率。例如特征lag1在1~5區(qū)間內(nèi)HasDetections率只有30%~40%,明顯低于所有區(qū)間的感染平均值50%。
經(jīng)過(guò)時(shí)間戳相關(guān)特征的構(gòu)造,文中數(shù)據(jù)集的特征數(shù)達(dá)到91個(gè)。
對(duì)上述過(guò)程構(gòu)建的所有特征進(jìn)行重要性分析,以判斷每個(gè)特征是否與最終的預(yù)測(cè)標(biāo)簽相關(guān)。集成學(xué)習(xí)算法可以快速地判斷每個(gè)特征與預(yù)測(cè)標(biāo)簽的相關(guān)性,并給出每個(gè)特征的重要性分?jǐn)?shù)。該文選擇隨機(jī)森林算法評(píng)價(jià)特征重要性[7]。
隨機(jī)森林是多重決策樹算法集成組合的算法,內(nèi)部決策樹由隨機(jī)特征構(gòu)成的決策樹生成,最終預(yù)測(cè)結(jié)果綜合考慮各個(gè)決策樹的預(yù)測(cè)結(jié)果確定,解決了單個(gè)決策樹經(jīng)常產(chǎn)生的過(guò)擬合問(wèn)題[8]。在處理分類問(wèn)題時(shí),隨機(jī)森林采用大部分決策樹選擇的分類結(jié)果[9]。在不需要設(shè)置過(guò)多的超參數(shù)的基礎(chǔ)上,隨機(jī)森林即可判斷各個(gè)特征與預(yù)測(cè)標(biāo)簽的相關(guān)性。將文中的91個(gè)特征與預(yù)測(cè)標(biāo)簽HasDetections作相關(guān)性分析,在總特征分?jǐn)?shù)為100的前提下,得到各個(gè)特征的重要性分?jǐn)?shù),如圖2所示。
圖2 隨機(jī)森林算法計(jì)算出的特征重要性分?jǐn)?shù)
由圖2可見,絕大部分原始特征和文中新構(gòu)建的特征都與預(yù)測(cè)標(biāo)簽有相關(guān)性,但是重要性分?jǐn)?shù)參差不齊,說(shuō)明每個(gè)特征的影響程度有所差異[10]。在上文中構(gòu)造的兩個(gè)新特征,包括拆分特征AvSigVersion3與時(shí)間戳特征lag2都有較高的分?jǐn)?shù),在91個(gè)特征中排到了前5位,其余新構(gòu)建的特征也都有一定的重要性,說(shuō)明文中新特征的構(gòu)建是有效和合理的。分?jǐn)?shù)最高的前5位特征還包括硬盤總?cè)萘?、處理器型?hào)以及SmartScreen字符串值三個(gè)特征,這也為惡意軟件的防范提供了啟示。另外,有4個(gè)特征的特征重要性為0,說(shuō)明其與預(yù)測(cè)標(biāo)簽無(wú)相關(guān)性。后文中將依據(jù)特征重要性分?jǐn)?shù)討論特征數(shù)量對(duì)預(yù)測(cè)模型的影響。
3.1.1 二分類算法
二分類算法的實(shí)現(xiàn)是機(jī)器學(xué)習(xí)的一大重要應(yīng)用。二分類算法通過(guò)自我訓(xùn)練按照一定的規(guī)則將所有樣本分為兩類,從而可用于未知類別數(shù)據(jù)的預(yù)測(cè)。構(gòu)建分類算法需要借助訓(xùn)練集與測(cè)試集,訓(xùn)練集負(fù)責(zé)分類模型的建立過(guò)程;測(cè)試集負(fù)責(zé)對(duì)已建立的模型進(jìn)行測(cè)試,將得到的預(yù)測(cè)結(jié)果與實(shí)際結(jié)果相比對(duì),并借助相關(guān)指標(biāo)判斷模型的準(zhǔn)確性。
決策樹屬于常見的分類算法,基本的有ID3、CART算法等。集成學(xué)習(xí)算法包括隨機(jī)森林、GBDT、Lightgbm、Xgboost算法等。這些算法的集成方式包括Bagging和Boosting兩種,基模型都是決策樹模型,近些年來(lái)集成學(xué)習(xí)模型在機(jī)器學(xué)習(xí)領(lǐng)域應(yīng)用較為廣泛,其中部分也常用于數(shù)據(jù)挖掘中的二分類預(yù)測(cè)[11]。
3.1.2 二分類模型評(píng)估指標(biāo)——ROC曲線與AUC值
在二分類模型中,可將所有樣本劃分為正樣本和負(fù)樣本。該文將感染惡意軟件的計(jì)算機(jī)標(biāo)注為正樣本,未感染惡意軟件的計(jì)算機(jī)標(biāo)記為負(fù)樣本。
ROC曲線(receiver operating characteristics curve)和AUC(area under curve)現(xiàn)在常用于評(píng)估機(jī)器學(xué)習(xí)模型的性能。ROC曲線依靠假正率和真正率兩個(gè)指標(biāo)形成,兩個(gè)指標(biāo)含義如下。
ROC曲線橫坐標(biāo)為假正率,假正率(FPR)公式如下:
其中,F(xiàn)P是被模型錯(cuò)誤預(yù)測(cè)為正類的負(fù)樣本數(shù)量,TN是被模型正確預(yù)測(cè)為負(fù)類的負(fù)樣本數(shù)量,兩者之和為負(fù)樣本總和。
ROC曲線縱坐標(biāo)為真正率,真正率(TPR)公式如下:
其中,TP是被模型正確預(yù)測(cè)為正類的正樣本數(shù)量,F(xiàn)N是被模型錯(cuò)誤預(yù)測(cè)為負(fù)類的正樣本數(shù)量,兩者之和為負(fù)樣本總和。
假正率和真正率在不同的閾值下形成不同的ROC空間點(diǎn),最終標(biāo)注點(diǎn)連接形成ROC曲線。形成的ROC曲線代表一個(gè)分類器的性能。在大多數(shù)情況下,ROC曲線經(jīng)過(guò)(0,0)和(1,1)并在兩點(diǎn)連線之上。
AUC指的是ROC曲線下的面積。對(duì)于一個(gè)分類器來(lái)說(shuō),其ROC曲線越趨向于左上角,則其AUC值越接近于1。AUC較ROC曲線有更直觀的數(shù)值表達(dá)方式,也不受ROC曲線中閾值的影響,因此該文采用訓(xùn)練集與測(cè)試集的AUC值作為評(píng)估二分類模型的主要指標(biāo)。
3.2.1 基于LightGBM的預(yù)測(cè)模型
LightGBM是一種基于Boosting集成的方法,內(nèi)部各個(gè)基學(xué)習(xí)器順序?qū)W習(xí),后續(xù)學(xué)習(xí)器的算法重點(diǎn)關(guān)注前面算法的錯(cuò)誤[12]。作為一種分布式梯度提升框架,LightGBM算法具有運(yùn)算速度快,支持直接輸入類別特征的優(yōu)勢(shì)。將前文中得到的91特征數(shù)據(jù)集劃分為訓(xùn)練集與測(cè)試集,訓(xùn)練集與測(cè)試集的劃分比例為1∶1。將訓(xùn)練集輸入LightGBM算法訓(xùn)練,建立預(yù)測(cè)模型[13]。在Python的sklearn環(huán)境下,設(shè)置算法參數(shù)n_estimators為3 000,colsample_bytree設(shè)置為0.2,其余參數(shù)保留默認(rèn)值。
最終得到的訓(xùn)練集與測(cè)試集的ROC曲線如圖3所示。從圖3可以看出,測(cè)試集的AUC值達(dá)到0.73,雖然低于訓(xùn)練集的AUC值0.78,但過(guò)擬合程度并不嚴(yán)重。說(shuō)明通過(guò)LightGBM算法實(shí)現(xiàn)數(shù)據(jù)集預(yù)測(cè)惡意軟件感染的可行性。
圖3 LightGBM算法下的訓(xùn)練集與測(cè)試集ROC曲線
3.2.2 基于隨機(jī)森林的預(yù)測(cè)模型
隨機(jī)森林算法是一種基于Bagging集成的方法,內(nèi)部各個(gè)基學(xué)習(xí)器互不影響,在訓(xùn)練時(shí)并行化處理。在分類建立預(yù)測(cè)模型的過(guò)程中,算法內(nèi)部的每棵決策樹的構(gòu)成過(guò)程都會(huì)隨機(jī)選取特征與樣本,最后采用投票決定最終的分類結(jié)果。這使得隨機(jī)森林是高度泛化的集成學(xué)習(xí)模型。在默認(rèn)參數(shù)下使用訓(xùn)練集建立隨機(jī)森林分類預(yù)測(cè)模型,得到訓(xùn)練集與測(cè)試集的ROC曲線,如圖4點(diǎn)劃線所示??梢钥闯?,默認(rèn)參數(shù)下生成的隨機(jī)森林預(yù)測(cè)模型過(guò)擬合嚴(yán)重,訓(xùn)練集的AUC值已近似于1,測(cè)試集AUC值為0.66。為提高預(yù)測(cè)模型的泛性,需對(duì)隨機(jī)森林算法進(jìn)行調(diào)整,以降低過(guò)擬合現(xiàn)象[14]。
圖4 隨機(jī)森林算法下的訓(xùn)練集與測(cè)試集ROC曲線
對(duì)隨機(jī)森林算法參數(shù)進(jìn)行設(shè)置,降低樹最大深度max_depth至3 000(默認(rèn)為None),調(diào)大節(jié)點(diǎn)再劃分所需最小樣本數(shù)min_samples_split與葉子節(jié)點(diǎn)最少樣本數(shù)min_samples_leaf分別至3和5(默認(rèn)值為2和1)。再次訓(xùn)練并測(cè)試得到訓(xùn)練集與測(cè)試集ROC曲線如圖4中實(shí)線所示。實(shí)線反映訓(xùn)練集AUC降至0.94,但測(cè)試集AUC提高至0.69,說(shuō)明參數(shù)調(diào)整降低了過(guò)擬合現(xiàn)象,提高了對(duì)測(cè)試集的預(yù)測(cè)能力,使模型對(duì)非訓(xùn)練數(shù)據(jù)的預(yù)測(cè)能力增強(qiáng)。
過(guò)多的特征會(huì)影響算法的執(zhí)行效率。前文中已通過(guò)隨機(jī)森林算法得出91個(gè)特征的重要性分?jǐn)?shù),本節(jié)旨在保證預(yù)測(cè)精度的前提下,盡可能地減少使用的特征[15]。按照特征重要性分?jǐn)?shù)劃定不同的閾值,對(duì)閾值以下分?jǐn)?shù)的特征予以剔除,按照不同的閾值劃分為不同的特征集。使用隨機(jī)森林算法訓(xùn)練不同的數(shù)據(jù)集并進(jìn)行測(cè)試[16]。每次模型構(gòu)建過(guò)程中,訓(xùn)練集與測(cè)試集的劃分方式相同,得到隨機(jī)森林算法測(cè)試集AUC隨閾值變化曲線,如圖5所示。
圖5 不同分?jǐn)?shù)閾值下特征數(shù)目與測(cè)試集AUC變化
圖5顯示在特征分?jǐn)?shù)的閾值設(shè)置在1.0以下時(shí),AUC值變化較為平緩。閾值在1.0以上時(shí),特征數(shù)目的減少使AUC值明顯降低。說(shuō)明重要性分?jǐn)?shù)在1.0以上的特征對(duì)于預(yù)測(cè)模型的構(gòu)建較為重要。最終將特征分?jǐn)?shù)的閾值設(shè)定為1.0,此時(shí)特征數(shù)目為31,大幅降低了特征數(shù)量,提高了算法運(yùn)行效率,最終預(yù)測(cè)結(jié)果也沒(méi)有受到過(guò)多影響。
通過(guò)基于Boosting集成的LightGBM算法和基于Bagging集成的隨機(jī)森林算法形成的預(yù)測(cè)模型,其結(jié)果表明訓(xùn)練的模型可用于惡意軟件感染結(jié)果的預(yù)測(cè)。為驗(yàn)證基于樹的集成學(xué)習(xí)算法相對(duì)于傳統(tǒng)決策樹的優(yōu)勢(shì),該文分別選擇基尼系數(shù)和信息熵作為目標(biāo)函數(shù)建立決策樹算法與集成學(xué)習(xí)算法作預(yù)測(cè)結(jié)果對(duì)比。
在Python相關(guān)機(jī)器學(xué)習(xí)包環(huán)境下[17],將含有31特征的數(shù)據(jù)集分別輸入四種算法進(jìn)行完全相同的五折交叉驗(yàn)證,即將數(shù)據(jù)集劃分為大致相同的五部分,依次選擇其中一部分作為測(cè)試集,其他四部分作為訓(xùn)練集,得到各算法五折交叉驗(yàn)證測(cè)試集AUC值的對(duì)比如表2所示。
表2 四種算法五折交叉驗(yàn)證測(cè)試集AUC對(duì)比
從表2的對(duì)比結(jié)果來(lái)看,兩種集成學(xué)習(xí)算法在五折交叉驗(yàn)證的測(cè)試集AUC值均高于傳統(tǒng)決策樹的結(jié)果,集成學(xué)習(xí)算法中LighGBM的AUC值普遍高于隨機(jī)森林,說(shuō)明其在該數(shù)據(jù)集上預(yù)測(cè)效果更好。集成學(xué)習(xí)算法解決了樹模型算法經(jīng)常出現(xiàn)的過(guò)擬合現(xiàn)象,提升了預(yù)測(cè)模型的泛化能力。表中數(shù)據(jù)也反映了對(duì)于處理這種含有多維數(shù)據(jù)集的預(yù)測(cè)問(wèn)題,更適合于集成學(xué)習(xí)算法建立分類預(yù)測(cè)模型。
將集成學(xué)習(xí)算法應(yīng)用到惡意軟件二分類預(yù)測(cè)上,集成學(xué)習(xí)算法可以得到特征重要性以篩選最合適的特征數(shù)量,其次證明基于集成算法建立的預(yù)測(cè)模型的預(yù)測(cè)效果明顯好于傳統(tǒng)決策樹算法。此外,考慮到實(shí)際的預(yù)測(cè)問(wèn)題,借助數(shù)據(jù)集解決了對(duì)惡意軟件感染這一主題的預(yù)測(cè)過(guò)程,在特征選擇過(guò)程中,考慮特征拆分與構(gòu)建時(shí)間戳特征以增加時(shí)間維度的信息,根據(jù)AUC值確定合適的特征分?jǐn)?shù)閾值以減少特征數(shù)量。但該文考慮兩種算法已是高度集成的機(jī)器學(xué)習(xí)算法,未進(jìn)行合適的模型融合以進(jìn)一步提高預(yù)測(cè)效果,期望后續(xù)進(jìn)一步的研究與擴(kuò)展。