Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kaggle Malware competition 2th→1485th solution

pao
July 13, 2019

Kaggle Malware competition 2th→1485th solution

2019.7.13 Kaggle 裏meetup #1 での資料です。

pao

July 13, 2019
Tweet

More Decks by pao

Other Decks in Technology

Transcript

  1. Microsoft Malware Prediction
    2th→1485th Shake-down Solution
    Team APTX4869
    Pao
    2019/7/13 Kaggle 裏 Meetup

    View full-size slide

  2. 自己紹介
     名前
    – Pao
     所属
    – JTC (Japanese Traditional Campany)
     特技
    – Shake-down
     悩み
    – 息子が可愛すぎてkaggleが捗らない
    – 金メダル取れない
    – 転職先

    View full-size slide

  3. 今日話すこと
    ◆Malwareコンペについて
    ◆どうやってPublic 2th まで登ったか
    ◆よかったこと/駄目だったこと
    ◆おまけ

    View full-size slide

  4. 今日話すこと
    ◆Malwareコンペについて
    ◆どうやってPublic 2th まで登ったか
    ◆よかったこと/駄目だったこと
    ◆おまけ

    View full-size slide

  5. Malwareコンペとは
     Microsoftがホスト
     PCの状態からマルウェアに感染しているかを予測
    – テーブルコンペ
    – 2値分類問題
    – 厳密には「感染をDetectできているか?」を予測
     評価指標:AUC
    MachineID OS メモリ ウイルスソフトの
    バージョン
    ・・・ HasDetections
    000001 Windows10 8GB 10.4.2 0
    000002 Windows7 4GB 10.4.1 1















    これを予測!

    View full-size slide

  6. 特徴①いろんなVersion変数
     「OSバージョン」や「ウイルス定義ファイルのバージョン」、「ウイルス
    ソフトのバージョン」など多くのバージョン(カテゴリ)変数が存在
     HighCardinality かつ testにしか存在しないカテゴリも多数
     未知のバージョンに対しても対応できるモデルが望まれる
    AvSigVersion
    1.273.1140.0
    1.275.1420.0
    1.275.727.0



    サブバージョンも
    考慮しないといけない

    View full-size slide

  7. 特徴②時系列likeなデータ
     バージョン情報は、外部データでリリース日と紐付けられる
     Trainとtest(Public/Private)で時系列に分かれている
     あくまでリリース日であり、感染の判定日ではないことに注意
    – 9/1のバージョン => 9/1以降に感染したかの判定がされたというだけ
    train
    test
    AvSigVersionリリース日の分布

    View full-size slide

  8. 特徴③PublicとPrivateの分割
     Public/Privateも時系列に分かれてることがコンペ中盤に発見される
    – 後半のバージョンの予測結果を変えても、Publicスコアが変わらない
     PublicとPrivateでバージョンの分布が違う
     ただし判定日がないため、厳密にPublicとPrivateの分離ができない
    Public Private
    このPrivateの分布より
    危険な香りがする・・

    View full-size slide

  9. 今日話すこと
    ◆Malwareコンペについて
    ◆どうやってPublic 2th まで登ったか
    ◆よかったこと/駄目だったこと
    ◆おまけ

    View full-size slide

  10. 序盤~中盤:再開からのスタート
     序盤(LightGBMにて苦戦)
    – バージョンカテゴリに苦戦
    • LightGBMのカテゴリ指定すべき?
    • Testにしかないカテゴリどう表現する?
    – CVとLBの相関が出ない
    • Validationの作り方がわからない
     中盤(NNに挑戦)
    – KaggleでNNを使うのは初めてだったが、LightGBMのスコアをすぐ超えた
    – バージョンはEmbedding層がいい感じに処理してくれた
    – データ数もそれなりにあったのもNNが良かった理由だと思われる
    初回サブミット NN+LGBで24位まできた

    View full-size slide

  11. 中盤:チームマージの選択
     LightGBMが全然うまくいかないが
    discussionを見ると皆 LightGBM > NN と言ってる
     LightGBM使っている人とチーム組めば勝てるんじゃないか?
    ⇒チームマージ依頼を出す(今回のコンペ一番の功績)
    ⇒金メダルが見えてきた!!!!
    マージ依頼

    View full-size slide

  12. 後半:神特徴量探しの旅
     中盤~後半:金メダル圏内を維持できるかどうかをウロウロ
    – 私:NN + FFM等のモデル作り Yiemonさん:特徴量づくり+LightGBM
    – イマイチスコアが伸びない
     良かった作戦:LB読み
    – LBの状態から
    →重要な特徴量を見逃しているはず。と判断
    ふたりともEDAして特徴量探しに努める
    ・Slackが毎日スクショの嵐
    ・リアルでのチームミーティングでもひたすらEDA & ディスカッション…
    ⇒ついにFinding!!!
    そしてコンペ終了1週間前

    View full-size slide

  13. (Publicで)重要だった特徴量
     自身のバージョンにおける他のバージョン/カテゴリのシェア
    – うちのチームはバージョンを日付単位にまとめて処理
     そのバージョンシェアの変化率
    – 次のバージョンになるとシェアがどう変化するか
     異なるバージョン種類間のリリース日の差
    – Ex) ウイルス定義ファイルは最新だけどウイルスソフトのバージョンは古い
    MachineID EngineVersion AppVersion AvSigVersion ・・・・
    000001 1.1.15100.1 4.18.1807.18075 1.273.1735.0
    000002 1.1.14600.4 4.13.17134.1 1.263.48.0












    A
    ① ②
    Aのバージョンで①, ②はどれくらいのシェアか?
    詳しくはYiemon777さんの
    2019/3/26あたりのツイートを参照

    View full-size slide

  14. 終盤:2thに登るまで
     神特徴量周りの深掘りにサブミットを割く
    – 今すぐにでもLBの順位上げたい気持ちは抑え、ブレンドはほぼしなかった
    – LightGBMでの検証結果をもとにNNにも特徴を反映
     最終日、1位に!!!
    – その後一瞬でsashimiに抜かれた
    Masterが見えた

    View full-size slide

  15. 調子乗ってるやつは
    Shake-downな

    View full-size slide

  16. 今日話すこと
    ◆Malwareコンペについて
    ◆どうやってPublic 2th まで登ったか
    ◆よかったこと/駄目だったこと
    ◆おまけ

    View full-size slide

  17. よかったこと
     NNのモデリング
    – 早い段階から取り組んでいたので、試行錯誤する時間もあり、
    良いモデルがつくれた
     チームでのディスカッション
    – モデルの多様性以上に、ディスカッションしまくったのがよかった
    • 特にFindingのあるテーブルデータではディスカッションは重要
    • アナログな自分にとっては直接議論したのも重要だった
     状況に応じた対応
    – 自分のスコア状況からのチームマージ
    – LB読みからのEDA専念

    View full-size slide

  18. (Publicで)強かったNN
    Embedding
    Layer
    Embedding
    Layer
    Category Feature Numerical Feature




    Concat
    MLP
    Full Connect x 6
    (BN + relu +
    dropout)
    1024
    512
    512
    256
    128
    128
    output
    Softmax
    n_hidden = 16
    Miner category => -1
    10fold
    Optimizer: Adam
    Batch size: 4096
    Epoch: 30
    (early stopping)
    Continuous => fillna(mean) + normalize
    Binary => fillna(-1)

    View full-size slide

  19. 駄目だったこと①
     完全にCVを捨てていた
    – LBしか見てなかった
    – もう少し序盤にValidationを作る努力をするべきだった
    • 最後のほうに試したが、すでにPublicへOverfitしすぎていて無駄だっ

    – キレイな相関までは作れなくても多少は参考にすべきだった
    • Publicが最高のものと、PublicとCVそこそこのものをFinal Submissionにす
    る選択肢も生まれたかもしれない

    View full-size slide

  20. 駄目だったこと②
     NN,LGB以外のモデルたちが間に合わなかった
    – FFM, DeepFM系モデルを作っていたが間に合わず
    大事な終盤に稼働の無駄になってしまった
    – どんなモデルも試行錯誤に時間がかかるので
    やるなら余裕を持って作り、厳しければ諦める
     コンペ選び
    – あとから思えばコンペ設計として疑問が残る部分があった
    • Detectionの判定日がない
    • Public/Privateの分布が変
    – コンペ設計が正しくされているかどうかはShake-downしない
    良コンペかどうかの大事な指標

    View full-size slide

  21. 今日話すこと
    ◆Malwareコンペについて
    ◆どうやってPublic 2th まで登ったか
    ◆よかったこと/駄目だったこと
    ◆おまけ

    View full-size slide

  22. All 0 is Winner
    元のPrivateは
    0.62157
    AvSigVersionの日付
    日付ごとの予測結果の平均
    最終日付近はほぼマルウェアに感染していない
    (どうやったら分かるの?)

    View full-size slide