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. 自己紹介  名前 – Pao  所属 – JTC (Japanese

    Traditional Campany)  特技 – Shake-down  悩み – 息子が可愛すぎてkaggleが捗らない – 金メダル取れない – 転職先
  2. Malwareコンペとは  Microsoftがホスト  PCの状態からマルウェアに感染しているかを予測 – テーブルコンペ – 2値分類問題 –

    厳密には「感染をDetectできているか?」を予測  評価指標:AUC MachineID OS メモリ ウイルスソフトの バージョン ・・・ HasDetections 000001 Windows10 8GB 10.4.2 0 000002 Windows7 4GB 10.4.1 1 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ これを予測!
  3. 序盤~中盤:再開からのスタート  序盤(LightGBMにて苦戦) – バージョンカテゴリに苦戦 • LightGBMのカテゴリ指定すべき? • Testにしかないカテゴリどう表現する? –

    CVとLBの相関が出ない • Validationの作り方がわからない  中盤(NNに挑戦) – KaggleでNNを使うのは初めてだったが、LightGBMのスコアをすぐ超えた – バージョンはEmbedding層がいい感じに処理してくれた – データ数もそれなりにあったのもNNが良かった理由だと思われる 初回サブミット NN+LGBで24位まできた
  4. 後半:神特徴量探しの旅  中盤~後半:金メダル圏内を維持できるかどうかをウロウロ – 私:NN + FFM等のモデル作り Yiemonさん:特徴量づくり+LightGBM – イマイチスコアが伸びない

     良かった作戦:LB読み – LBの状態から →重要な特徴量を見逃しているはず。と判断 ふたりともEDAして特徴量探しに努める ・Slackが毎日スクショの嵐 ・リアルでのチームミーティングでもひたすらEDA & ディスカッション… ⇒ついにFinding!!! そしてコンペ終了1週間前
  5. (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あたりのツイートを参照
  6. よかったこと  NNのモデリング – 早い段階から取り組んでいたので、試行錯誤する時間もあり、 良いモデルがつくれた  チームでのディスカッション – モデルの多様性以上に、ディスカッションしまくったのがよかった

    • 特にFindingのあるテーブルデータではディスカッションは重要 • アナログな自分にとっては直接議論したのも重要だった  状況に応じた対応 – 自分のスコア状況からのチームマージ – LB読みからのEDA専念
  7. (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)
  8. 駄目だったこと①  完全にCVを捨てていた – LBしか見てなかった – もう少し序盤にValidationを作る努力をするべきだった • 最後のほうに試したが、すでにPublicへOverfitしすぎていて無駄だっ た

    – キレイな相関までは作れなくても多少は参考にすべきだった • Publicが最高のものと、PublicとCVそこそこのものをFinal Submissionにす る選択肢も生まれたかもしれない
  9. 駄目だったこと②  NN,LGB以外のモデルたちが間に合わなかった – FFM, DeepFM系モデルを作っていたが間に合わず 大事な終盤に稼働の無駄になってしまった – どんなモデルも試行錯誤に時間がかかるので やるなら余裕を持って作り、厳しければ諦める

     コンペ選び – あとから思えばコンペ設計として疑問が残る部分があった • Detectionの判定日がない • Public/Privateの分布が変 – コンペ設計が正しくされているかどうかはShake-downしない 良コンペかどうかの大事な指標