Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

(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あたりのツイートを参照

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

(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)

Slide 19

Slide 19 text

駄目だったこと①  完全にCVを捨てていた – LBしか見てなかった – もう少し序盤にValidationを作る努力をするべきだった • 最後のほうに試したが、すでにPublicへOverfitしすぎていて無駄だっ た – キレイな相関までは作れなくても多少は参考にすべきだった • Publicが最高のものと、PublicとCVそこそこのものをFinal Submissionにす る選択肢も生まれたかもしれない

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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