網址: https://www.kaggle.com/competitions/deep-learning-for-cyber-security/data
Deep Learning for Cyber Security
1. 目標:
使電腦有能力判別一個軟體是否為惡意軟體,總共有5654份資料來建立模型,資料的資訊抱括,一個軟體的許多特性,包括是否可以讀寫資料、是否可以讀取位置、是否可以接收簡訊等特性。
2. 處理方式:
- 訓練集:包括多個資料,包含多個資訊(trainx),及每個資料是否為惡意軟體(trainy),需要用這些資料建立預測系統。
- 測試集:只包括要多筆的軟體資訊,透過建立的預測系統,預測此軟體是否為惡意軟體。
3. 訓練方式:
- 主要架構使用到random forest模型,為多個decision tree綜合預測結果。 在訓練時,主要要建立decision tree在分割時的標準為何。
- 使用到optuna模組 尋找 random forest中最佳的限制條件: n_estimator(要用幾個decison tree預測結果)/max_depth (每個decision tree最多要擴展的層數)。
- k-fold 訓練方法,因為在繳交測試集的預測時,會發現雖然在訓練時,可以有很高的分數在訓練集資料,在測試集資料得到的分數會降低許多,因此將訓練資料分割成多比較小分的資料,使模型更有泛化性。
- 在k-fold訓練時,分割訓練集資料為10筆時,因為是有隨機性的,需要設定random seed,來定義此分割的隨機狀態。嘗試使用多個random seed設定方式,最後測試集資料,會將random seed總共預測結果,以預測結果較多的做二元分類歸類。
4. 程式執行架構:
- 資料前處理: → csv資料讀取,使用到pandas模組:

- 資料前處理: 將訓練集資料的trainx,trainy分開

- 資料前處理: 去除掉較沒用的資訊,並將trainy原本資料為True/False變成1/0

optuna 模組尋找最佳n_estimator/max_depth設定:
- import 完optuna模組後,須設定目標函數(objective),將需要定義的參數使用trail.suggest_int表示,並且return要優化的地方。

- 初始化後,可以直接使用optimize函數找訊最佳函數

- 開始訓練資料:將模型參數帶入後初始化,可以直接使用.fit模組開始訓練。外面的兩層for迴圈為k-fold 訓練及不同random seed設定方式:

- 最後選用總共預測次數的一半,將全部結果做二元分類:

5.特徵重要性比較:
使用sklearn decision tree模組feature importance功能,可以比較出哪個特徵較為重要:

可以發現feature index為48,67,26特徵較為重要,分別代表意義為:
WRITE_SETTINGS(寫入方式)
ACCESS_MTK_MMHW(Android應用的權限設定)
RECEIVE_MMS(允許應用程式接收多媒體短信服務)
6. 訓練成果:
預測結果:

測試集預測,kaggle平台繳交準確率~0.965:

7. 飯粒的總結
從分析結果來看,惡意程式通常為了要偷資料,以及在系統中安裝更多的程式,甚至要Pop-Out 出來更多的短信訊息,所以通常都會需要更改系統設定,為了要安裝與修改新的資料,需要更改 WRITE_SETTINGS(寫入方式),需要安裝其他的軟體或是開始麥克風進行訊盜錄,需要存取檔案資料夾內的內容,如: 偷看相片,會需要更改ACCESS_MTK_MMHW(Android應用的權限設定),並且Pop-Out更多的訊息出來誘騙使用者點惡意連結,或是說可以兌換獎品,這些都必須要開啟RECEIVE_MMS(允許應用程式接收多媒體短信服務)。