Kaggle Days Championship @ Barcelona に参加しました | Wantedly Engineer Blog
こんにちは。ウォンテッドリーでデータサイエンティストをしている合田です。2022年10月28、29日にスペイン・バルセロナにて開催された Kaggle Days Championship Fin...
https://www.wantedly.com/companies/wantedly/post_articles/448102
Photo by Jesse Bowser on Unsplash
こんにちは、ウォンテッドリーでデータサイエンティストをしている合田(@jy_msc)です。先週末は atmaCup #16 に参加してモクモクとコードを書いていました。来週の日曜まで開催されているので、興味ある方はぜひ参加してみてください!
この記事は、Wantedly Advent Calendar 2023 の11日目の投稿です。前回の記事は「Rustを使ったOS開発 - 普段のRustと同じ様にOSを実装したい」でした。
私は5年前から Kaggle に参加しており、今年の6月にようやく Kaggle Grandmaster になることができました。ちょうど良い節目だと思うので、これまでのデータ分析コンペの参加実績を振り返ったり、データ分析コンペに夢中に取り組み続けてきたことで得られたであろう自身の変化に関して言語化してみます。
※本記事で述べる内容は私自身の経験に基づく私見ですので、その旨をご了承ください。
大学では理学院で観測天文学の研究をしていました。統計や古典的な画像処理は研究で使っていましたが、機械学習や数理最適化などに関して全く知らない状態でした。
大学院卒業後は受託開発会社に新卒として入社し、データサイエンティストとしてのキャリアをスタートしました。入社後しばらくしてメンターや同僚から Kaggle について教えてもらい、2018年夏、当時開催されていたコンペ「Santander Value Prediction Challenge」に参加したのが最初のきっかけになります。
2019年9月にウォンテッドリーへ転職し、現在に至るまで会社訪問アプリ「Wantedly Visit」の推薦システムの開発・運用に携わっています。「Wantedly Visit」のコア価値はマッチングであり、機械学習モデルの性能が高いほどユーザー体験を向上させることができます。そのため、ウォンテッドリーにおいて高い機械学習モデリングの能力はプロダクトの課題解決において大きな突破力となる強力な武器であり、私はそういった能力が必要になる環境で働いています(もちろん機械学習モデリングだけでなく、課題発見から運用まで多岐にわたる業務があります)
2018年夏以降から5年ほどに渡る参加実績を振り返ってみます。Kaggle 以外のプラットフォームで開催されているコンペにも参加してきたので、それらもまとめました。トータルでは賞金獲得が3回、論文実績が4回になります。
2018年12月に Expert、2019年10月に Master、2023年6月に Grandmaster になりました。15回コンペに参加して、金メダル5枚、銀メダル9枚を取得しました。
Kaggle 公式のイベントで開催されたコンペです。2022年10月には、スペイン・バルセロナにて開催されたイベントに招待されて参加しました。
atma株式会社が主催するデータ分析コンペです。抽選で落ちたものを除いて、基本的には毎回参加しています(数が多いので、そこそこ成績良かったやつだけリストアップ)
データサイエンス関連の国際学会では、併設されたワークショップでデータ分析コンペが企画・運営されていたりします。良い成績を収めることができれば論文を執筆してワークショップで発表する機会が得られるので、コンペ参加の大きなモチベーションとなっています。
データ分析コンペに参加する際のスタンスとして、基本的にいったん参加したコンペは最後まで時間を使ってやり切るようにしています。自身の性格的に、途中で投げ出す癖がつくとそれが繰り返されることを懸念したためです。経験上、諦めずにやっていれば何かしら手がかりは見えてくるので、このスタンスはずっと大事にしています。
機械学習モデリングの知識・実装力・デバッグ力といったジェネリックな機械学習スキルは Kaggle によって大きく伸びました。また、ハードスキルだけでなく、やり切り力や仮説検証力といったソフトなスキルも同時に向上したと思っていて、このようにKaggleで培ったスキルは、ハードスキル面とソフトスキル面の両方で、仕事に活きていると感じています。
以下では、その具体的な内容について書いていきます。
Kaggle では与えられた課題に対して適切であろう機械学習のコードをゴリゴリ書いて多くの実験を回すので、機械学習モデリングに関する実装力が上がることは明確です。例えば、新しいプロジェクトが始まった時にベースラインを適切に素早く構築して検証することや、実験を高速に回して改善することの恩恵は大きいと思います。
また多様なコンペがありますので、それぞれの課題に応じた技術を幅広く触れる機会が多いです。また長期間のコンペに参加すると、ちょっと考えれば思いつくことはやり切ってしまい、やることがなくなってしまいます。そうするとやることをひねり出さないといけないので、例えば関連論文を読んでサーベイするなど否応無しに様々なアプローチに触れることになります。こういったことが結果として幅広い機械学習モデルの知識につながると思います。
また数ある機械学習のアプローチの ROI の感覚が掴めると思っています。これは機械学習モデルの性能を極限まで上げ続けるという一見コスパの悪そうなことをやっているからこそ分かるものだと思っていて、細かいところまで経験しているからこそ、それがアプローチ選定の適切な優先度設定につながり、最短で大きな成果に繋げることができるのではと思っています。
これは地味に思えますが、めちゃくちゃ重要だと考えています。機械学習モデルを作ってみたけど意図通りにならない経験は多くの人が持っているはずです。実務でこのような問題に直面した場合、何が原因なのかを考える必要があります。例えば、コードにバグがあるのか、学習の設定が不適切なのか、タスクに対してモデル構造や入力情報が適切でないのか。プログラミングのデバッグと同様に、問題の原因を事前に当たりをつける(勘所をつかむ)ことが重要であり、この勘所の有無によって、正解に到達するまでの時間が大きく変わり、実務的なコストに大きな影響を与えると思っています。このような意図しないことが起きた→考える→調べる→解決する、という経験を Kaggle で多く重ねることによって、原因の当たりを予測する力は向上していきます。
またそのような経験によってモデルの直感的理解が深まり、意図を持って変更を加えた後の結果を予測する力も向上します。これはデバッグ以外の観点でも便利で、上の方で言っていることと被っている気もしますが、機械学習モデルの潜在的な伸びしろを感覚的に把握するのに役立ちます。Kaggle で培われた直感と実務での実験の積み重ねがうまいところ噛み合った結果として、実務においてもどういう手法でどのぐらい伸びる余地あるのかの直感は役に立っていると思います(常にこれが正しいことは保証されないですが)
機械学習系のタスクは、ビジネス課題を技術課題に落とし込み、解ける形に問題を整理する必要があります。この解きやすい形に整理できるかどうかの能力(ビジネス課題と技術課題の接続の適切さではない)は Kaggle でも伸びるんじゃないかと思っていて、その理由の1つは多数のタスクを経験することによって、良い設計と悪い設計の差を否応無しに体感できるからです。また様々な手段を選択肢として広く持っておくことが、良い技術課題の設計につながると思います。
長期間コンペを走り続けるのはかなり大変なことであり、強い粘り強さが要求されます。「しんどい、もうやりたくないけど、やるしかない」という気持ちで毎日取り組み、最後まで駆け抜けた経験は、実務においても最後まで諦めずにコミットし続ける力につながると考えています。
長期間のコンペの大変さの一例として、すぐに思いつく解決策をやり切ってしまい、やるべきことがなくなり、周りがどんどん順位を上げて取り残される焦りを感じることがあります。このような状況では常に全力で思考し続けることで、やることをひねり出さなくてはなりません。PCの前に座っている時だけでなく寝る前やお風呂、通勤中などで「なぜこれが上がらないのか」「問題は何か」「どうしたら改善されるのか」といったことをいつでもどこでも考え続けることが、結果として考え抜く力につながると感じています。
多くの Kaggler は実感していると思いますが、細かいテクニカルなアプローチを積み重ねても、金メダル圏内の順位に到達することは難しいです。他の参加者も同様のアプローチを試すので、スコアは上がるけど競争相手との差を広げるものではないです。そのため、競争で勝つために必要なのは、他の参加者が気づいていない問題の核心を見つけることです。コンペによっては問題の核心が何個か転がっていて、それらを他の参加者よりも多く拾ってソリューションに盛り込めるかが差を広げる鍵となることが多いです。経験のある Kaggler は、ジェネリックな解決策よりも、その問題の核心に合致する解決策を見つけることを強く意識する人が多いと思います。
では、問題の核心にどうやって到達するか、良質な仮説を得るためにはどうすれば良いかというと、多様な手段でドメインを理解することが一般的です。例えばコンペで良い仮説が思い浮かばない時は、実際に題材のプロダクトを使用したり、中には店舗に行くなどをしてドメイン知識を得ます。これは地道で泥臭い作業であり実際に行動するのは難しいです。しかし、このようなアプローチを取ることが結果的に良い仮説が生まれることを実感する経験は Kaggle でもあり、それは実務での仕事の進め方に影響すると思います。
また仮説は、これまで獲得した知見や経験の積み重ねから見えてくるものもあります。多くの試行錯誤の結果をつなぎ合わせてその裏に隠された関係性を見つける必要があります。これはつまり、事象を適切に解釈して抽象的に問題を特定する力となります。このような解釈力は、実務においても役に立つと思います。
Kaggle Grandmaster になれたのは、一緒にチームを組んでくれたチームメイトのおかげです。また Kaggle へ継続的に参加できたのは、日本の Kaggle コミュニティの存在が大きかったと改めて思います。2018年から現在に至るまでコミュニティの熱量はとても高く、日本の Kaggler たちと SNS やイベントで交流したり、彼らの活躍を目にすることは私にとって大きなモチベーションとなっていました。
データ分析コンペの参加にあたり、ウォンテッドリーからは多くの支援を受けました。具体的には GCP の費用サポートや、Kaggle Days Tokyo や Kaggle Days Championship などのイベントを業務時間で参加するなど、手厚くサポートしてもらいました。
次の挑戦としては、これまで金メダル取得を優先して参加するコンペを選んでいましたが、今後は自分が純粋に興味を持てるコンペを取り組んでいきたいと思います。また、コミュニティへの積極的な貢献を通じて、その熱量をさらに高めていきたいと考えています。
この記事で述べた内容は、取り組んだ過程で得られた経験に基づくもので、それを目的に取り組んだわけではないです。役に立つか、コスパが良いか、などは一旦置いておいて、Kaggle を純粋に楽しむことが大切だと思っています。この記事が、Kaggler の皆さんにとって、モチベーション向上の一助となれば幸いです。