Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kaggle Malware competition 2th→1485th solution
Search
pao
July 13, 2019
Technology
2
9.4k
Kaggle Malware competition 2th→1485th solution
2019.7.13 Kaggle 裏meetup #1 での資料です。
pao
July 13, 2019
Tweet
Share
More Decks by pao
See All by pao
いろんなものと両立する Kaggleの向き合い方
go5paopao
3
2.1k
データサイエンティストとは何か論争にAI(gpt-2)で終止符を打とうとした話
go5paopao
0
220
短期間コンペの戦い方
go5paopao
13
13k
atmaCup#9 1st place solution
go5paopao
6
3.5k
DSB2019 10th Solutionの一部とShakeについて
go5paopao
2
750
Other Decks in Technology
See All in Technology
OCI Network Firewall 概要
oracle4engineer
PRO
1
7.8k
リーダーになったら未来を語れるようになろう/Speak the Future
sanogemaru
0
280
関係性が駆動するアジャイル──GPTに人格を与えたら、対話を通してふりかえりを習慣化できた話
mhlyc
0
130
神回のメカニズムと再現方法/Mechanisms and Playbook for Kamikai scrumat2025
moriyuya
4
510
o11yで育てる、強い内製開発組織
_awache
3
120
後進育成のしくじり〜任せるスキルとリーダーシップの両立〜
matsu0228
6
2.2k
20250929_QaaS_vol20
mura_shin
0
110
いまさら聞けない ABテスト入門
skmr2348
1
200
【新卒研修資料】LLM・生成AI研修 / Large Language Model・Generative AI
brainpadpr
23
17k
What is BigQuery?
aizack_harks
0
130
Exadata Database Service on Dedicated Infrastructure(ExaDB-D) UI スクリーン・キャプチャ集
oracle4engineer
PRO
2
5.4k
Pythonによる契約プログラミング入門 / PyCon JP 2025
7pairs
5
2.5k
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
2.8k
GitHub's CSS Performance
jonrohan
1032
460k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.2k
Building a Modern Day E-commerce SEO Strategy
aleyda
43
7.7k
How GitHub (no longer) Works
holman
315
140k
Mobile First: as difficult as doing things right
swwweet
224
10k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
A designer walks into a library…
pauljervisheath
209
24k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
What’s in a name? Adding method to the madness
productmarketing
PRO
23
3.7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
657
61k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.7k
Transcript
Microsoft Malware Prediction 2th→1485th Shake-down Solution Team APTX4869 Pao 2019/7/13
Kaggle 裏 Meetup
自己紹介 名前 – Pao 所属 – JTC (Japanese
Traditional Campany) 特技 – Shake-down 悩み – 息子が可愛すぎてkaggleが捗らない – 金メダル取れない – 転職先
今日話すこと ◆Malwareコンペについて ◆どうやってPublic 2th まで登ったか ◆よかったこと/駄目だったこと ◆おまけ
今日話すこと ◆Malwareコンペについて ◆どうやってPublic 2th まで登ったか ◆よかったこと/駄目だったこと ◆おまけ
Malwareコンペとは Microsoftがホスト PCの状態からマルウェアに感染しているかを予測 – テーブルコンペ – 2値分類問題 –
厳密には「感染をDetectできているか?」を予測 評価指標:AUC MachineID OS メモリ ウイルスソフトの バージョン ・・・ HasDetections 000001 Windows10 8GB 10.4.2 0 000002 Windows7 4GB 10.4.1 1 ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ ・ これを予測!
特徴①いろんなVersion変数 「OSバージョン」や「ウイルス定義ファイルのバージョン」、「ウイルス ソフトのバージョン」など多くのバージョン(カテゴリ)変数が存在 HighCardinality かつ testにしか存在しないカテゴリも多数 未知のバージョンに対しても対応できるモデルが望まれる
AvSigVersion 1.273.1140.0 1.275.1420.0 1.275.727.0 ・ ・ ・ サブバージョンも 考慮しないといけない
特徴②時系列likeなデータ バージョン情報は、外部データでリリース日と紐付けられる Trainとtest(Public/Private)で時系列に分かれている あくまでリリース日であり、感染の判定日ではないことに注意 – 9/1のバージョン =>
9/1以降に感染したかの判定がされたというだけ train test AvSigVersionリリース日の分布
特徴③PublicとPrivateの分割 Public/Privateも時系列に分かれてることがコンペ中盤に発見される – 後半のバージョンの予測結果を変えても、Publicスコアが変わらない PublicとPrivateでバージョンの分布が違う ただし判定日がないため、厳密にPublicとPrivateの分離ができない Public
Private このPrivateの分布より 危険な香りがする・・
今日話すこと ◆Malwareコンペについて ◆どうやってPublic 2th まで登ったか ◆よかったこと/駄目だったこと ◆おまけ
序盤~中盤:再開からのスタート 序盤(LightGBMにて苦戦) – バージョンカテゴリに苦戦 • LightGBMのカテゴリ指定すべき? • Testにしかないカテゴリどう表現する? –
CVとLBの相関が出ない • Validationの作り方がわからない 中盤(NNに挑戦) – KaggleでNNを使うのは初めてだったが、LightGBMのスコアをすぐ超えた – バージョンはEmbedding層がいい感じに処理してくれた – データ数もそれなりにあったのもNNが良かった理由だと思われる 初回サブミット NN+LGBで24位まできた
中盤:チームマージの選択 LightGBMが全然うまくいかないが discussionを見ると皆 LightGBM > NN と言ってる LightGBM使っている人とチーム組めば勝てるんじゃないか?
⇒チームマージ依頼を出す(今回のコンペ一番の功績) ⇒金メダルが見えてきた!!!! マージ依頼
後半:神特徴量探しの旅 中盤~後半:金メダル圏内を維持できるかどうかをウロウロ – 私:NN + FFM等のモデル作り Yiemonさん:特徴量づくり+LightGBM – イマイチスコアが伸びない
良かった作戦:LB読み – LBの状態から →重要な特徴量を見逃しているはず。と判断 ふたりともEDAして特徴量探しに努める ・Slackが毎日スクショの嵐 ・リアルでのチームミーティングでもひたすらEDA & ディスカッション… ⇒ついにFinding!!! そしてコンペ終了1週間前
(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あたりのツイートを参照
終盤:2thに登るまで 神特徴量周りの深掘りにサブミットを割く – 今すぐにでもLBの順位上げたい気持ちは抑え、ブレンドはほぼしなかった – LightGBMでの検証結果をもとにNNにも特徴を反映 最終日、1位に!!! –
その後一瞬でsashimiに抜かれた Masterが見えた
調子乗ってるやつは Shake-downな
今日話すこと ◆Malwareコンペについて ◆どうやってPublic 2th まで登ったか ◆よかったこと/駄目だったこと ◆おまけ
よかったこと NNのモデリング – 早い段階から取り組んでいたので、試行錯誤する時間もあり、 良いモデルがつくれた チームでのディスカッション – モデルの多様性以上に、ディスカッションしまくったのがよかった
• 特にFindingのあるテーブルデータではディスカッションは重要 • アナログな自分にとっては直接議論したのも重要だった 状況に応じた対応 – 自分のスコア状況からのチームマージ – LB読みからのEDA専念
(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)
駄目だったこと① 完全にCVを捨てていた – LBしか見てなかった – もう少し序盤にValidationを作る努力をするべきだった • 最後のほうに試したが、すでにPublicへOverfitしすぎていて無駄だっ た
– キレイな相関までは作れなくても多少は参考にすべきだった • Publicが最高のものと、PublicとCVそこそこのものをFinal Submissionにす る選択肢も生まれたかもしれない
駄目だったこと② NN,LGB以外のモデルたちが間に合わなかった – FFM, DeepFM系モデルを作っていたが間に合わず 大事な終盤に稼働の無駄になってしまった – どんなモデルも試行錯誤に時間がかかるので やるなら余裕を持って作り、厳しければ諦める
コンペ選び – あとから思えばコンペ設計として疑問が残る部分があった • Detectionの判定日がない • Public/Privateの分布が変 – コンペ設計が正しくされているかどうかはShake-downしない 良コンペかどうかの大事な指標
今日話すこと ◆Malwareコンペについて ◆どうやってPublic 2th まで登ったか ◆よかったこと/駄目だったこと ◆おまけ
All 0 is Winner 元のPrivateは 0.62157 AvSigVersionの日付 日付ごとの予測結果の平均 最終日付近はほぼマルウェアに感染していない (どうやったら分かるの?)