Help us understand the problem. What is going on with this article?

Kaggleのための小規模なMLプロジェクトで頑張った話

はじめに

  • 全員機械学習素人.僕に至ってはPythonを触ったことがほぼありませんでしたが,Kaggleで2つのコンペにチームで参加しました
  • 結果は銅メダル1個と微妙でした
    • PLAsTiCC Astronomical Classification(以下,PLAsTiCC): 80/1094 (Top 8%).
      • 割と頑張ったが特徴量管理とEDAがガバガバだった
    • Microsoft Malware Prediction(以下,Malware). 799/2426 (Top 33%).
      • Public LB Top 3%からありえんほどShake Down
      • 我々だけが下がったという訳ではなく,全体的にShake Downが多発したコンペだった(と思いたい)
      • Validation大事

「順位下がってきたけどまあ銀は取れるっしょ」と思っていたPublic LBの我々
Screen Shot 2019-03-31 at 10.39.05.png

泣いちゃったPrivate LBの我々
Screen Shot 2019-03-31 at 10.39.22.png

  • この記事ではMalwareで取り組んだことについて主にまとめます
    • ちなみに,Malwareは複数のColumnsから「PCがMalwareに感染しているか否か」を推定するBinary Classificationのコンペです
    • 記事ではMalwareに限った話ではなく,一般的な話をします
  • 僕自身まだまだひよっこなので,間違っているところがあったら適宜コメントください

コード管理

  • 貧乏人しかいないチームだったので,Private Repositoryを無料で作ることができるBitbucketを利用していたのですが,重すぎてつらみがありました
  • コンペの途中からGitHubで無料利用が解禁されたので完全移行しました
    • たまに落ちるが,やはり快適
    • ipynbをブラウザから閲覧できる点を鑑みても🙆
    • 芝を通じて「僕は開発もEDAもやってるけど君はやらなくていいのか?Kaggleやめるか?」という無言の圧力をメンバーに与えられる点が最高

情報共有

  • 一つのKernelやDiscussionについてあーだこーだ言うのにSlack likeなストリーム形式のUIは微妙だったのでScrapBoxに移行しました
  • こんな感じでPrivate Projectを作ってData Description, Kernel, Discussion, Paper, CV/LBのまとめなどを共有してました
    Screen Shot 2019-03-31 at 2.39.26.png

  • ちなみにScrapBoxはUpdateを確認しにくいのでSlackと連携するのが良いと思います

  • TODOについてはは残存タスクがわかりにくかったのでGitHubのissueを利用しました

  • その他特にまとめる必要がない情報はSlackで共有し,以下のように専用Channelを作りました

    • #general: Google Calendarと連携してコンペのスケジュールを垂れ流す.発言は禁止
    • #github: GitHubのlogを垂れ流す.発言は禁止
    • #scrapbox: ScrapBoxの更新log.発言は禁止
    • #log: 学習ログ(後述)を垂れ流す
    • #(コンペ毎のchannel): コンペ特有のドメイン知識
    • #machine-learning: 機械学習の知見全般
    • #random: コンペ〆切2週間前に振られた話などの雑談全般
      • 高尚な会話の例
        Screen Shot 2019-03-31 at 3.01.51.png
  • また困ったことがあったらすぐ聞くことができるように基本的にDiscordを用いて通話してました

EDA

  • Microsoft Malware Predictionではcolumnsの数が膨大だったので,はじめに全体的なざっくりとしたEDAをした後にcolumnを選んで詳細なEDAをしてました
  • Categorical DataのEDAをするとき少数派のCategoryを"Others"のようなその他全般を指すCategoryにまとめてあげるとそれっぽい結果が出ることが多かったです

  • 僕のチームが行ったMalwareのEDAは https://github.com/JapaneseTraditionals/kaggle_Malware/tree/master/notebook/eda にまとめてありますが,何の役にも立たないので見なくて大丈夫です

Adversarial Validation

MalwareではTrainとTestの分布,特にVersionを指す特徴の分布が大きく異なっている問題が当初より指摘されていてAdversarial Validationの必要性が訴えられていました.
Adversarial Validationとは簡単に言えばTrain dataから検証用データを取得する際Test dataに近いものを選ぶ手法で,最近広く注目されるようになりました.
この手法に関しては[CUBE SUGAR CONTAINER Python: Adversarial Validation について]が大変参考になります.

僕のチームもKernelとDiscussionに則って,MS Malware Adversarial Validationzygmuntz/adversarial-validationを参考にAdversarial Validationを行ったのですが,Adversarial Validationを行うために使う特徴の吟味を怠ったので刈り取られました
例えば,IsBetaというColumnはTrainとTestの100%が0を取るため,本来用いるべきではありません.
Adversarial Validationを行うときは特徴の選択に気をつけましょう.
ちなみにMalwareではAvSigVersionという特徴が時系列情報を暗に含んでおり,それをもとに評価用データセットを定めるのが正解だったようです.

MLプロジェクトの設計

長いのでKaggleのための小規模なMLプロジェクトで頑張った話: MLプロジェクト設計編にまとめました

Classifier

長いのでKaggleのための小規模なMLプロジェクトで頑張った話: Classifier編にまとめました

まとめ

こんだけまとめてもExpertになれなかったボーダーコリーなので,次からがんばります.
もう少し論文読みます.

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away