Kaggle-MoA の振り返り
Kaggle-MoA に参加したので,その振り返りを備忘録として残しておく.
Kaggle-MoA コンペに Team 90's で初参加
このブログは2020/9/4~12/1まで開催していた MoA コンペでの取り組みを紹介する(コンペの詳細な内容については割愛する).
今回のコンペでは,同世代のメンバーでチームを組んで取り組んだ!チーム結成の経緯は,Twitter でお互いが90年生まれということを知って,同世代で Kaggle チーム組んで戦いたいねーという感じだった.それが少し前のことで当時取り組める良い感じのコンペがなかったのだが,今回テーブルデータのコンペで取り組めそうということで始まった.
チームでの取り組みはとにかく学びが多く,終盤までモチベーションを保つことができたのが大きかった.
また,議論することで理解なども深まっていくので,コンペを通してより取り組み方やアイデアなど吸収できたと感じる.
今回の僕たちのチームでの取り組み方を紹介すると,
1. 情報は Slack で共有 2. 分析方針や実験結果は Github の issue で管理 3. 毎週末に2時間程度のディスカッション
といった感じ.
3番目の週末のディスカッションは強制ではなく,参加可能な人が参加する形式で運用していた.(と言いつつもみんな真面目に毎回参加していた笑)
今回はチームでの取り組み方針の具体的な内容について少しだけ掘り下げる.
1. 情報は Slack で共有
Slack をどうゆう感じで活用していたのかというと,コンペの Discussion や Notebook の内容について疑問点などを話し合ったり,それ以外にも進め方の相談や雑談などを基本的に行っていた. あとは submit する時は一言声をかけるなどの submit 管理もしていました.
こうゆうのがあれば良かったなーというところでは,新着の Discussion や Notebook を Kaggle から連携して通知する仕組みを用意しておければ尚良かったのかな.
2. 分析方針や実験結果は Github の issue で管理
Github をどうゆう感じで活用していたのかというと,分析での実験毎に1つの issue を立てて,そこでどうゆう実験をしたのか submit した結果のスコアがどうだったのかなどを記録として残していた.また,共通で使える特徴量生成のコードだったり,CV の切り方のコードなどの共有も行っていた.その他には Discussion の内容を整理したり,情報をまとめるために活用したりしていた.
3. 毎週末に2時間程度のディスカッション
週末に Google meet でオンラインディスカッションを行った.そこで何をしていたかというと,基本的には今週何をしたのかを各々共有したり,わからない部分を話し合ってどうゆうふうに次進めて行くかなどをチームで考えていた.あとは,次の週でどうゆうことをするかの方向性を決めて終わる感じ.もちろん雑談や仕事での苦労を労ったりもしていた笑
最終順位
最終順位は4373チーム中34位の銀メダルで、金メダルまであともう少しのところまで行ったので,とても悔しい結果となった.
個人的には Inference の処理がエラーで通らない状況に最後の3日ぐらいで発生して泣きそうになった.チームメンバーには weight0 の状態で非常に申し訳なかったなと思う泣
学習時に回していたノートブックでは,スコアがチーム内で作ったモデルの中でも上位5つ以内に入っていたので,アンサンブル時には効いてただろうなと思うと尚更.
個人的な成長としては,テーブルデータに対して NN モデルが有効に作用する場面について多少理解が深まったと感じている.
今回の MoA では,マルチラベルの予測だったので,一度に大量のクラスを予測する場合には NN が有効でかつ GBDT 系と比較して計算速度も速いんだなと感じた.
また,特徴量的にも交互作用的な部分は NN 内部の中間層の組み方などで実現できるので,GBDT 系みたく大量に特徴量を用意しなくても対処できるのが大きいのかなと思っています.(今回のケースだと GBDT で大量のモデルを作るとなると速度的な部分で特徴量が膨大になるとかなり厳しい)
あとは,NN の実装を Pytorch で行ったこともあり,Pytorch の扱い方がわかるようになったのは大きい(仕事では Tensorflow だったりするので...).
Pytorch での実装に関してはもっと進めて行きたいのとコードの整理も合わせてやっていく.次に参加予定のコンペではその辺りも意識して挑めたらなーと思う.