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
2k
データサイエンティストとは何か論争にAI(gpt-2)で終止符を打とうとした話
go5paopao
0
220
短期間コンペの戦い方
go5paopao
13
13k
atmaCup#9 1st place solution
go5paopao
6
3.4k
DSB2019 10th Solutionの一部とShakeについて
go5paopao
2
730
Other Decks in Technology
See All in Technology
経験がないことを言い訳にしない、 AI時代の他領域への染み出し方
parayama0625
0
150
PHPでResult型やってみよう
higaki_program
0
190
Snowflake のアーキテクチャは本当に筋がよかったのか / Data Engineering Study #30
indigo13love
0
260
新規事業におけるAIリサーチの活用例
ranxxx
0
140
会社もクラウドも違うけど 通じたコスト削減テクニック/Cost optimization strategies effective regardless of company or cloud provider
aeonpeople
2
160
複数のGemini CLIが同時開発する狂気 - Jujutsuが実現するAIエージェント協調の新世界
gunta
12
3.2k
Wasmで社内ツールを作って配布しよう
askua
0
120
Talk to Someone At Delta Airlines™️ USA Contact Numbers
travelcarecenter
0
170
今日からあなたもGeminiを好きになる
subaruhello
1
560
なぜAI時代に 「イベント」を中心に考えるのか? / Why focus on "events" in the age of AI?
ytake
2
560
AI Ready API ─ AI時代に求められるAPI設計とは?/ AI-Ready API - Designing MCP and APIs in the AI Era
yokawasa
21
5.8k
OpenTelemetry の Log を使いこなそう
biwashi
5
990
Featured
See All Featured
Typedesign – Prime Four
hannesfritz
42
2.7k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
How to Ace a Technical Interview
jacobian
278
23k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
We Have a Design System, Now What?
morganepeng
53
7.7k
Thoughts on Productivity
jonyablonski
69
4.7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Docker and Python
trallard
45
3.5k
Done Done
chrislema
184
16k
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の日付 日付ごとの予測結果の平均 最終日付近はほぼマルウェアに感染していない (どうやったら分かるの?)