(後編)Kaggle Days Championship Finalのコンペに参加してきた

June 25, 2023

このブログは前編の続きである。 前編を執筆してからいつの間にか半年余りが過ぎていて、一時は執筆を諦めてこっそり前回のブログの (前編) の文字を消してしまおうかと思わないでもなかったが、歯を食いしばって執筆することにした。

決勝大会について

決勝大会は11時間にわたる長丁場で、2つのテーマでコンペが開催された。 各コンペの順位に応じてポイントが付与され、ポイントの合計で最終的な順位が決まる。 上位3チームに対しては、A6000(GPU。Amazonだと現在75万円くらいで売っている)がチームメンバー全員に与えられるという豪華景品ぶりだった。

以降では、コンペの内容と取り組みについて触れる。

prize
優勝すると、A6000に加えて別途GPUを積んだラップトップがもらえた

テーマ1. Starry Starry Night!

  • 世界各国の様々な地点・時間において星がどれだけ輝いて見えるかを予測するコンペ
  • データとしては、データの収集時刻、緯度経度、標高、センサーの読み取り値、空の見え方に関する(人間の)コメントなどが与えられ、これらの情報から目的変数(星の見えやすさを8クラスに分けたもの)を予測する
  • 評価指標はmicro-F1

テーマ2. Time isn’t the main thing, it’s the only thing

  • Kaggle Notebookにおけるコードの実行時間を予測するコンペ
  • データとしては、Notebookの各セル(コード)の情報、データセットの情報、実行者の情報などが与えられ、これらの情報から目的変数(=実行時間)を予測する
    • 実行時間の情報はセル単位で与えられるが、予測するのはNotebook単位での実行時間。この辺りをどう取り扱うかは各チームに委ねられる。
  • 評価指標はRMSE

コンペでの取り組み

(もはや9ヶ月前のイベントなのでほとんど覚えていないが)私のチームは fugusuki さん、cfiken さんとの3人チームで、ざっくり以下のような分担でやっていたと思う。

  • 私: 両コンペのベースラインモデル(LGBM)の作成
  • fugusukiさん: テーマ1のpostporocessなど色々
  • cfikenさん: テーマ2のNNモデル構築

モデリングの詳細については、既に他のブログやソリューション等で語られているものと特に大きな差分はないのでここでは掲載を割愛する。 一点、fugusukiさんが取り組んでいたpostprocessは恐らくどの上位チームも取り組んでいなかったので触れておくと、テーマ1は多クラス分類タスクなのだが、実はこのコンペでは一つのレコードに対して複数のクラスを予測して提出することができる。

次の文章はテーマ1のEvaluation Metricsに関する説明なのだが、

The F1 metric weights recall and precision equally, and a good retrieval algorithm will maximize both precision and recall simultaneously. Thus, moderately good performance on both will be favored over extremely good performance on one and poor performance on the other. Submission Format For every id in the dataset, the submission file should contain two columns: id which is the unique id for each row from the testing data, and limiting_magnitude which is the class value. The second column should be a space-delimited string value. The file should contain a header and have the following format: ~

よくよく記述を見ると The second column should be a space-delimited string value. と記載してあり、各レコードに対して複数のクラスを予測して提出できることが読み取れる。 勿論、闇雲に予測クラスを追加するとprecisionが下がってしまってスコアは下がるが、状況に応じて複数のクラスをsubmitすることでスコアを上げることができる。 コンペの途中でfugusukiさんがこのトリックに気がついたお陰でテーマ1では一時的にトップに立ち、最終的にもPublic LBを2位で終えることができた。

結果とまとめ

テーマ1では24チーム中6位(Public2位)、テーマ2では24チーム中20位(Public18位)で、それぞれの順位を考慮した最終的な順位は24チーム中10位だった。 予選を含めれば延べ1000チーム以上が世界中から参加している大会なので悪い結果ではないかもしれないが、悔しさが残る結果となった。 とはいえ、コンペ中は終始アドレナリンが出ていて非常に楽しく、前編で記載したイベントの1日目もバルセロナ観光も大変楽しく過ごすことが出来て、Kaggle Days Championship Finalへの参加はこの旅行を通してみてもトップレベルに楽しい経験だったと思う。 短期コンペもオフラインイベントも海外旅行も全て好きなので、個人的には最高のイベントだった。 特にこの規模のイベントとなると中々気軽には開催できないかもしれないけれど、またいつか(例えば4年に1回くらいでも)開催してくれたらいいなと思う。


Profile picture

Written by NSK who worked as a machine learning engineer and a product manager