data-science Kaggle

Kaggleコンペにチームで挑戦する時に工夫したこと

Kaggle のコンペって、周りに一緒にやってくれる人がいないと孤独な戦いになりやすいですよね。 かといって、チームにマージされるほどの実力も無いので、コンペの最初からメンバーを募集してチームを組み 、Kaggle の IEEE Fraud Detection コンペ に挑戦してみました。チームメンバーを募集するところから、やっていく中での気付き等をまとめておこうと思います。

私の紹介

  • れごん @regonn_haizine
  • 島根県松江市に住んでる Web フリーランス
  • データサイエンスの Podcast やってます regonn&curry.fm
  • 挑戦したときは Kaggle コンペの参加経験はあるもののメダルは 0 枚

仲間集め

仲間集めは、最近 データラーニングギルド というコミュニティに所属したのもあって、そこの Slack で募集しました。

Kaggler の日本人コミュニティの Kaggler-ja とかでも、募集してみると色んな人が集まるかもしれませんね。

募集したあとに、やってるデータサイエンス Podcast の Discord チャンネル作ったので、こちらでも、今後は募集するかもしれません。かぐるーど

仲間集めで注意したこと

IEEE コンペのチームは最大 5 人なので、もし応募が多すぎたら、抽選とかでも嫌なので、募集は複数チームも想定して Google Form で次のような項目を追加しておきました。(結果的には丁度 5 人だったので1チームでした)

  • レベル感
    • チーム分けをしやすくするため、レベル感を聞いておく
      1. 機械学習始めたて(半年位)
      1. Python, R のどちらかを読んだり書いたりできる
      1. 業務や研究で統計知識がある
      1. Kaggle コンペメダルを持ってます
  • 希望者が多い場合にはチームのリーダーをやってもいいか?
    • 分ける場合にリーダーをやってもいいか聞いておく、データサイエンスの能力よりも、学生などでコンペ期間中に参加しやすさで決めてもらった

また、参加表明フォームには次のような注意書きもしておきました。

  • 試験的な取り組みなため、途中で色々と変更があったり変則的になる可能性があります
  • 場合によっては、チーム機能が上手く働かずソロプレイのような状態になってしまってもご了承ください
  • Kaggle の特性上、異なるチーム間での情報共有や Slack でのノウハウ共有は行なえません

自分も含めてタダ乗りライダー的な人が出てくるかもしれないけど、許してねとも注意しておきました。

初回キックオフ

これから 1 ヶ月以上戦っていく仲間なので、一度 Zoom に集まって、初回のキックオフを行いました。全員が近場ならオフラインでもいいですが、私が島根県で離れているので、オンラインで開催しています。 後でも書きますが、普段のタスク管理は Trello で行う予定だったので操作に慣れてもらうため、自己紹介をカードに記入(テンプレートは用意しておいた)してもらったりもしました。

活動内容

普段のやり取り

  • プライベート Slack チャンネル

    • コミュニケーションを取れるように
  • 週 1 回 Zoom 定例会

    • 現状のリーダーボードでメダル圏やベースライン等を確認
    • 各個人でこの 1 週間やったこと
    • 気になったノートブック、ディスカッション
    • 各個人で次の 1 週間やること

タスク管理(Trello)

やることとか、良かったノートブックをカードにしたり、自分たちのベストスコアとベースラインやメダル圏内がどこら辺にあるか並べるリストを作ったりしてました

コード管理

コードは Github のプライベートリポジトリを作って、各自別ブランチで進めていく方針にしましたが、これはあまり良くなかったです。

データや特徴量が一緒に管理できなかったり、Kaggle のノートブックを使ったり、バージョンが色々分裂したりするので、ここらへんは改善が必要そうです。

良い点・悪い点

良い点

最初からデータについて議論することができる

一人でやると、何から手を付けようかとか、一人でデータを解析(EDA)していかないといけませんが、最初からチームなので、評価の高い EDA ノートブックを議論しながら読み進めていく等できて、データへの理解なども深まり良かったです。

一人では収集しきれないディスカッションの話題も拾える

一人でやってると使える時間も限られてくるので、他の人が HOT なノートブックやディスカッションを拾ってきてくれると助かります。

普段 Kaggle 触ってない人が Kaggle 特有の知識をつけられる

統計等の知識はあるけど、Kaggle に慣れていない人にとって、Kaggle でどういうことができるのか分からない部分も多いので、定例会等で画面共有しながら、説明できるので、無駄に詰まる時間などを解消できたと思います。

分業とかもできる

得意分野が上手く分かれていたりすれば、特徴量作る人とかローカル CV 作る人とか分業ができたところが良かったです。あまり、時間が取れない人も、Discussion を追ってもらうなどしてもらいました。

悪い点

途中で脱落する人も出てくる

レベル差を感じたり、仕事が忙しくて、途中で抜けてしまう人も出てきてしまいました。 ここらへんはある程度仕方ないとは思いますが、抜けなくても大丈夫だということを初回の説明等で、もう少し伝えていれば良かったかなとも思ってます。

何も成績がでないと辛いものがある

コンペの中盤あたりは、新しく特徴量を作ったりしていましたが、なかなかチームでの Public スコアが改善せず、一人でやる以上に辛さを感じた気もします。

結果

約 1 ヶ月半位の死闘の末、終盤にメンバーの学生の一人が猛烈にスコアを上げてくれたこともあって 銀メダル を取得することができました。

所感と今後

なんとかメダルも獲得することができて良かったです。自分の反省では、コンペの後半での動きがガバガバで全然スコアアップに貢献できていなかったので、課題も見えてきました。今回はテーブルデータのコンペでしたが、画像コンペでもやってみたいですし、最近 Kaggle 本 も出たので、テーブルコンペでまたやってみようかなと思いました。

みなさんもチームでのコンペ参加を検討してみてはどうでしょうか?

Special Thanks

@hayato08120904

終盤の追い上げで、メダル圏、最終的には銀メダル圏までいけたのも、彼のサブミットのおかげでした。

@GreenGreenMidor

データラーニングギルドの発起人。機械学習コンサルタントとして、実際の業務での異常検知の話を聞くことができたり、この Kaggle 企画でのサポートも色々手伝っていただきました。