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.5k
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
230
短期間コンペの戦い方
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
コンパウンド組織のCRE #cre_meetup
layerx
PRO
1
260
AIとともに歩んでいくデザイナーの役割の変化
lycorptech_jp
PRO
0
870
IoTLT@ストラタシスジャパン_20251021
norioikedo
0
130
混合雲環境整合異質工作流程工具運行關鍵業務 Job 的經驗分享
yaosiang
0
180
現場データから見える、開発生産性の変化コード生成AI導入・運用のリアル〜 / Changes in Development Productivity and Operational Challenges Following the Introduction of Code Generation AI
nttcom
1
470
頭部ふわふわ浄酔器
uyupun
0
110
Linux カーネルが支えるコンテナの仕組み / LF Japan Community Days 2025 Osaka
tenforward
1
120
MCP ✖️ Apps SDKを触ってみた
hisuzuya
0
360
IBC 2025 動画技術関連レポート / IBC 2025 Report
cyberagentdevelopers
PRO
2
120
What's new in OpenShift 4.20
redhatlivestreaming
0
220
AWS DMS で SQL Server を移行してみた/aws-dms-sql-server-migration
emiki
0
220
会社を支える Pythonという言語戦略 ~なぜPythonを主要言語にしているのか?~
curekoshimizu
3
660
Featured
See All Featured
The Cult of Friendly URLs
andyhume
79
6.6k
Building Better People: How to give real-time feedback that sticks.
wjessup
369
20k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
5.7k
Balancing Empowerment & Direction
lara
5
700
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
4 Signs Your Business is Dying
shpigford
185
22k
Writing Fast Ruby
sferik
630
62k
Become a Pro
speakerdeck
PRO
29
5.6k
Speed Design
sergeychernyshev
32
1.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
54k
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の日付 日付ごとの予測結果の平均 最終日付近はほぼマルウェアに感染していない (どうやったら分かるの?)