こんにちは。shu421という名前でkaggleに参加しています。初めに伝えておきますが、この記事は独断と偏見の塊です。あくまで私の考えにすぎないので、一つの意見として頭の片隅にでも置いていただけたら嬉しいです。
対象読者
・Titanicコンペでsubmissionだけはしてみたが、現行コンペの進め方がわからない方
・kaggleとは何か知っているが、進め方がわからない方
今回お伝えすること
・Titanic終了後、初めて参加する現行コンペへの具体的な取り組み方
・メダルを持っていない人向けの具体的なコンペの進め方
・コンペのモチベーションの保ち方
#目次
・結論
・軽く自己紹介
・Titanicコンペ終了後の壁
・初メダルを取るまでの軌跡
・[本題]現行コンペの進め方
・モチベーションの保ち方
・まとめ
・最後に
結論
kaggleでメダルを取るためには、
・全ての公開ノートブックとディスカッションを読んで、アイデアを全て実装する
・時間の暴力で戦う
の2点が重要だと感じました。後ほど、詳しくお話しします。
軽く自己紹介
現在、筑波大学の学部3年生で経営工学という学問を学んでいます。サークルは軽音(ベース)と卓球です。
twitterもやっているので、お気軽にDMしてください!この記事についてでも良いですし、kaggleについての質問などお待ちしております!
twitter: https://twitter.com/shu421_/
GitHub: https://github.com/shu421
また、私が初メダルを獲得したgoogle-smartphone-decimeter-challenge(outdoor)コンペのGitHubリポジトリも公開しました。初心者の方に向けて、kaggle日記(後述)を詳しく書いたつもりなので、ぜひご覧になってください。
outdoorリポジトリ: https://github.com/shu421/google-smartphone-decimeter-challenge
Titanicコンペ終了後の壁
常々感じているのですが、このkaggleというコンペ、進め方わかりにくくないですか?
私はTitanicコンペでなんとかsubmissionした後、進め方が全くわからず半年ほどkaggleを放置していました。このツイートにも書いてあるように、Titanicが終了してからいざ現行コンペに参加しても、進め方がわからず挫折してしまう人が多いように感じます。実際、私はそれを非常に強く感じていましたし、上記のツイートのリプライ欄でも共感してくださる方がいました。
この壁を乗り越えるかどうかがかなり命運を握っていると感じます。私はその壁を乗り越えたとは自信を持って言えませんが、なんとなく感覚は掴めた気がするので今回はそのお話をしようと思います。
初メダルを取るまでの軌跡
まずは、私がkaggleに登録してからの軌跡を簡単に紹介したいと思います。
2020年8月: kaggle初参加
・kaggleに登録と同時にTitanicコンペに参加
・Titanic終了後、現行コンペの進め方がわからず半年ほど放置
2021年1月: Riiid Answer Correctness Predictionコンペ参加
・いくつか公開ノートブックをコピペしてそのまま提出
・time-series APIを使用していたこともあって、自分なりの工夫を何もできないまま終了
2021年2月: Jane Street Market Predictionコンペ参加
・特徴量の名前が全て隠されており、コンペの進め方が本当にわからなかった
・ニューラルネットが強かったらしいが、LightGBMしか使ったことがなかったので無事何もできず終了
2021年2,3月: Tabular Playground Seriesコンペ参加
・公開ノートブックのコピペ
・LightGBMのパラメータをoptunaで調整することしかできなかった
・コンペの進め方がわからず、モチベはあまりなかった
2021年4,5月: コンペやりたい欲が出る
Titanic終了後からナニモワカラナイ期が続いてしんどかったです。そこで、Google Smartphone Decimeter Challenge(以下outdoor)コンペに本気で取り組むことで、Titanic後の壁を乗り越えようと考えました。
2021年8月: Google Smartphone Decimeter Challengeコンペ参加
・private leader boardで56位、初めて銅メダルを獲得
・公開ノートブックとディスカッションを全て読みながらほぼ毎日取り組んだ
・2021/08/06追記
・順位が確定して48位銀メダルになっていました!
[本題]現行コンペの進め方
本題です。初心者向けの現行コンペの具体的な進め方を話します。最初にも言いましたが、これは完全に私の主観です。他にも良い方法はたくさんあると思うので、あくまで一つの意見として見てください。
私はコンペで初メダルを取るために重要なことは「時間をかける」、「公開ノートブックとディスカッションを全て読む」だと考えています。それぞれについて解説します。
時間をかける
これは大前提としてかなり強く意識して欲しいです。私の場合、平日では平均して2, 3時間ほど、休日は5時間ほど時間を割いていました。忙しいとまとまった時間を取るのは難しいと思いますが、私は朝7時より前に起きることで時間を捻出していました(本当はもっと早く起きたかったのですが、眠くて無理でした)。時間をかければかけるほど、色々なものが見えてきます。
kaggleナニモワカラナイ期では一日1時間やればよい方、一週間放置は当たり前のような状態でした。ただ、それでは何も成長しないと感じたので、outdoorでは毎日少しでも良いから何かしら触る(できない日も何日かありましたが)、空いた時間はYouTubeではなくkaggleをするなどを意識していました。
たくさん時間をかけることで成長でき、コンペが楽しくなってきます。楽しくなれば自然と時間をかけられるようになるので、まずは強制的にでもコンペに多くの時間を割いて欲しいです。強制的にコンペに参加するには「kaggle日記」という方法があるので、後ほど解説します。
公開ノートブックとディスカッションを全て読む
これはKoukiさんの記事を参考にしました。私の場合は上級者に比べてインプット量が圧倒的に足りていないので、コンペに関する情報は全て吸収すべきだと感じました。
ディスカッション
ディスカッションにはコンペに関する様々な情報(例えばこの処理をするとスコアが伸びるなど)が載っているので全て読むべきです。また、リークの情報だったり、他のコンペ参加者の進め方などがわかります。基本的にディスカッションを読めばそのコンペで何をすれば良いかがわかるので、必ず全て目を通して欲しいです。
outdoorではベースラインの後処理(post processing)が非常に重要でした。後処理の効果的な順番や、その効果が高いものなどを共有してくれた方がいたので、非常に参考になりました。
公開ノートブック
公開ノートブックでは、コンペのベースラインとなるコードが載っています。基本的にこのベースラインをコピペして、少しずつ自分なりに変えていくのが初心者の基本的な進め方になると思います。outdoorコンペでは運営が公開したベースラインを後処理していくことで、大幅に順位を上げることができました。その後処理の方法がいくつも公開されていたので、それら全て実装するだけでメダル圏には入れることもありました。詳しいことは省略しますが、私の解法も基本的には
「運営のベースラインに、公開されている後処理を加える」が中心でした。ひたすらこれを繰り返すことで、なんとなくコンペの大枠が見え始め、こうすれば上がるのでは?といったアイデアが思いつくようになりました。
アイデアの生み方
何もないところからアイデアは生まれないと思います。私の場合、ディスカッションや公開ノートブックを読んで他の方の考えを知ることで初めてアイデアが生まれました。とにかく、初めのうちは公開されている情報に頼って進めていくことをおすすめしたいです。
最低限、公開ノートブックのスコアを出し、その上で自分なりに改変していくのが初メダル獲得への近道だと感じました。
ベースラインから自分で作り、EDAをすることで決定的な特徴を見つける!というのはとてもかっこいいですが、私の場合はそれをすると時間がかかりすぎてモチベーションも下がりました。そこで公開ノートブックを最大限活用して欲しいと思います(公開してくださる皆さん、本当にありがとうございます。感謝してもしきれません。)
モチベーションの保ち方
kaggle日記
私はfkubotaさんのkaggle日記という戦い方を参考にしました。詳細は上記のリンクを参照していただきたいのですが、ここでは概要を簡単に説明します。
私はGitHubのリポジトリを作成し、そのREADMEファイルに毎日簡単なメモを書いていました。以下のような感じです。
ここで重要なのが、毎日何かしら書くことです。以下のように私のkaggle日記を見ていただければわかるのですが、コンペにコミットできていない日でも何か書いてあります。
もしその日コンペができなくてもkaggle日記に書くと決めることで、強制的に毎日コンペができるようになります。私の場合は、kaggle日記を書くと決めることで、ほぼ毎日コンペにコミットすることができていました(もちろん参加していない日も多少はあるので、そこは見ないでください)。
Twitterをやろう
twitterにはkaggleが強い人がたくさんいます。自分の現在の順位を公開したり、技術系の投稿を見たりすることでモチベーションの維持になります。加えて、チームマージもtwitter上で行われることが多いです。とにかくメリットしかないので、kaggle界隈の方をフォローしておくことをおすすめします。
まとめ
まとめると、Titanicが終了した後は、
1.現行コンペに参加し、公開ノートブックとディスカッションを全て読む
2.毎日継続して1.を行う
をすることで、私は初メダルを獲得することができました。他の記事でもよく書いてあることにはなりますが、上記がとてもとてもとても本当に重要となります。加えてkaggle日記も毎日一行でも書くことができれば、モチベーションも保つことができます。詳細についてはここでは割愛しますが、ぜひkaggle日記という戦い方や分析コンペLT会を参考にして見てください。もしかしたら、私も別で記事を書くかもしれません。
最後に
kaggleって難しいですよね。基本英語だし、公開ノートブックのコードを読むのも大変です。私も「なんでこの人はこんなアイデアを思いつくんだろう」、「そもそもこのコードの意味が理解できない」など、頭の中にはてなマークをいっぱいにしながら他の人のコードを読んでいます。ただ、それをひたすら続けているとなんとなくコンペへの理解が深まり、アイデアもなんとなく出てくるようになります。
kaggleで強くなるためにはkaggleをするべき、という意見はたくさんあります。この記事はそれらの意見に対して、具体的にどう取り組めば良いのかわからない!と感じる方に向けて書いたつもりです。ぜひ公開ノートブックとディスカッションをとにかく読みまくり、kaggleの楽しさに気づいて欲しいと思っています。自分のアイデアを実装できるようになれば、それはそれはkaggleが楽しくなるので、それまで必死に頑張りましょう!
最後まで読んでくださり、ありがとうございました。kaggleを楽しむ人が一人でも増えれば良いなと思っています。