30
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Kaggle: Bag-of-words と Ensemble 学習でマルウェア分類 (Microsoft Malware Classification Challenge)

Posted at

Kaggle の Microsoft Malware Classification Challenge に参加してました。最終結果は 383 チーム中 26 位。初の Achievement (top 10%) が貰えました。

以下、構築したモデルについてのラフな説明です。

タスク

  • マルウェアのクラス分類
    • 入力:hexdump ファイル (.bytes) と assembly ファイル (.asm)
    • 出力:マルウェアのクラス確率 (9種類)
  • データ数
    • 訓練データ:10,868
    • 評価データ:10,873
  • 詳細

生の hexdump と assembly が与えられるため、特徴設計で差が出るタスクでした。
データ総量が約 500GB で前処理大変。

モデル概要

Bag-of-words 特徴量を hexdump と assembly の両方から抽出。それぞれの Bag-of-words に対し Random Forest でフィッティングして重要度による特徴選択。最後に Gradient Boosting でクラス分類。(特徴抽出以外には scikit-learn を利用。)

ModelOverview.png

特徴抽出

試行錯誤しましたが、単純な Bag-of-words に落ち着きました。

  • Hexdump から Bag-of-words (2 ** 16 = 65,536 次元)
    • 16bit を 1 単語と捉えて 8bit シフトで抽出
    • 行頭のアドレスは無視
    • 下図参照
  • Assembly から Bag-of-words (53,319 次元)
    • スペース区切りで単語抽出
    • 記号や数字も区切り文字扱い
    • 行頭のセクション名、アドレス、オペコードは無視
    • 全文書での出現回数が 100 未満の単語は無視

HexDumpFeature.png

特徴選択

Random Forest でフィッティングして特徴の重要度で絞り込み。

データサイズ約 11,000 に対して次元数 15,000。時間の都合により、選択次元数に対するグリッドサーチ等は試していません。雑な観測では、次元を落とすとパフォーマンスも落ちる傾向にありました。バイアス低めなモデルの方が上手くいくようです。

分類器

scikit-learn に入っている Ensemble 学習を一通り試して Gradient Boosting を使うことに。

イテレーション以外は scikit-learn のデフォルトパラメタ。ここを参考に、他いろいろチューニングしてみたものの上手く行かず。汎化しようとすると逆にパフォーマンスが落ちてました。

インフラ

ハードウェアはAWSで調達。

  • インスタンス:AWS EC2 r3.xlarge
  • 追加ボリューム:AWS EBS General Purpose 50GB
  • OS:Ubuntu 14.04

Bag-of-words の一括ロードに必要なメモリを踏まえて r3.xlarge を選んでいます。部分的にロード/学習すればもっと節約できたはず。
デフォルトのディスクサイズだと解凍前のデータすら置けなかったので、50GB のボリュームを追加しました。解凍後のデータも 50GB では足りないので、フォーラムを参考に libarchive を利用。

パフォーマンス

スコア計算は log loss。最終スコアは Public LB (常時スコアされる三割だけのテストデータ) で 0.009941155 (暫定27位)、Private LB (コンペ終了後にのみスコアされる全テストデータ) で 0.009240644 (26 位) でした。

上位勢との差分

特徴抽出に Bag-of-words、特徴選択に Random Forest を使うあたりは上位勢にも共通してました。自分のモデルにオリジナリティが出てなくて残念。
DAF 特徴量や texture 画像といった domain specific な手法(?)はまるで手が回らず…
分類器は Gradient Boosting ではなく XGBoost を使っている人が多かったようです。今回初めて知ったの手法なので要フォローアップ。

30
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?