見出し画像

【Kaggle挫折しそうな方向け】AtCoderのススメ

この記事は、2020/12/9にQiitaへ投稿した記事の転載となります。一部、以下コンテンツを追加しています。
・余談 その2(Kaggle再開しました)
・付録:緑ランク向け アルゴリズム精選40問シート(スプレッドシート)

はじめに

この記事は、Kaggle Advent Calendar 2020のアドベントカレンダー9日目の記事です。

Kaggle楽しそうだけど、コーディングが難しくて挫折しそうな方向けに、1つのTipsをご紹介するポエムです(あらかじめご了承ください)

Kaggleがうまく楽しめない・・・

突然ですが、Kaggle楽しんでいますか?

私も昨年Kaggleを知って、プログラミング未経験ながらPythonも覚えて1~2つコンペに参加して、Kaggle楽しいなあと思いながら、頑張って続けていました。昨年のKaggle Advent Calendarでは、こんな記事も書いて、Kaggleやろうぜ!と息巻いていたり。

ゼロからsubmit出来なくても、世界中のデータサイエンティストたちが公開しているNotebookを見れば、分かりやすくソリューションやアイディアが公開されているところがKaggleの素晴らしいところ。それらを読んで写経していくことでメキメキと力がつく、そう信じながら取り組んでいました。

が、しかし。
vote数の多いBeginner向けNotebookの写経に取り組んでいたのですが、いろいろと問題があることが分かりました。

  • EDAまでは着いていけるが、モデリング部分でコードの難度UP(入り組んだfor文、dictなど)

  • コード量の長いものが多く、理解しながら読んでいるだけで日が暮れる

  • 何より、自分で考えてコードを書いていないので、成長実感が持てない…

単純にコーディング力が足りない、という現実

上記の問題をあらためて見つめてみた結果、悲しいことに、単純にPythonのコーディング力が足りていないことが分かりました。具体的には、以下のようなスキルです。

  • かんたんな処理を、あたまで考えて1から書ける

  • Pythonの基本的な文法は手で覚えている(list,dict,for,if,try-except,map,リスト内包表記)

  • 単純に、Pythonを毎日書くという習慣

これはどうにかしないとKaggleを楽しめない、といろいろ試行錯誤した結果、「AtCoder」をやるのが良いのでは、という結論に達しました。

Kaggleを離れてAtCoderをやってみた

AtCoderとは、競技プログラミングのコンテストを運営しているサイトです。
競技プログラミングとは、「プログラミングを使って、パズル的な問題を制限時間内に出来るだけ多く解くスポーツ」のことです。

上記と同じような悩みのある方は、とりあえず、こちらの記事を読んで、「過去問精選10問」を解いてみることを、激しくオススメします。

Kaggleでは、Notebook上のコードが分からずうんうん唸っていた時とは比べ物にならないほど、コードを書くことが楽しいなと思えてくるはずです。以下、具体的なメリットを書いていきます。

【AtCoderをやるメリット➀】Pythonの基本的な文法をマスターできる

AtCoderでは、プログラミング言語の基本的な文法・関数をつかって、問題文に沿ったアルゴリズムをなるべく速く正確にコーディングすることが求められます。なので、どんどん問題を解いていくと、必然的に文法は手になじむように書けてくるようになります。具体的には、Kaggleでも見かける、以下のようなことは気づいたらサラサラと書けるようになります。

  • データ型(int,float,str)

  • if文

  • for文(多重ループも)

  • while文

  • break,continue,else

  • list,tuple,dictionary,set

  • 多重list(多次元配列)

  • リスト内包表記

  • map関数、lambda関数、enumerate関数

※Pandasまわりは身につかないので、別途キャッチアップする必要あり。個人的には、データサイエンティスト協会の出している100本ノックがおすすめ。

【AtCoderをやるメリット②】自己肯定感が高まる

Kaggleは長期戦です。コンペ期間は2~3か月ほどで、最終結果が出るまでは時間がかかります。また、コンペを戦い切ったとしても、メダル対象が上位10%以上となるため、なかなか初心者が「やったー!」と喜べる瞬間が少ないのが現状です(学びは深いです)

一方で、AtCoderは1つのコンテストは100分ほどと超短期戦です。開催タイミングが土日なのが少し難点ですが、サクッとコンテストに出ることができ、かつ自分のレベルがレーティングというかたちで可視化されるので、実力や成長がすぐに実感できます。ご参考までに、以下が私のレーティング推移なのですが、右肩上がりとなっていて、見ていてとても気持ちよいです。笑

2020/12/5 当時の成績

コンテストの詳細や参加方法は、先ほどもご紹介した記事に分かりやすく書いてあるので、参考にしてみてください。

【AtCoderをやるメリット③】コードを書いている実感が持てて、楽しい!

AtCoderでは、問題に対してそれを解決するコードを、ゼロから自分のあたまで考えてコーディングします。自分がこれなら問題に答えられる、と考えて書いたコードがうまく動いて正解(AC)だったときの嬉しさは、正直Kaggleをやっていたときには味わえなかった感覚でした。

私がKaggle初心者で、Notebookを読んで写経して少しチューニングすることで手いっぱい、またコーディング経験もあまり多くない状態だったこともありますが、「ゼロから自分のあたまで考えたコード」がうまく動くことは、とても楽しい体験です。

さいごに

こんなかたちで、昨年10月からの約1年間、Kaggleを離れてAtCoderでコーディング力をこつこつ磨いてきて、ようやく目標とする「緑ランク(Rating:800~)」に到達しそうな状況です。「緑ランク」になった暁には、Kaggleにあらためて戻って、またKaggleライフを楽しみたいなと思っています。

最後になりましたが、Kaggle初心者の皆さん、AtCoderもいいぞ…!

※レーティングランクについての参考記事
AtCoder(競技プログラミング)の色・ランクと実力評価、問題例


余談 その1(緑色になりました)

2020/12/19のコンテストで、目標としていた緑色(Rate:800〜)になりました!2021年はKaggleに戻って、Competition Expertを目標に引き続きがんばりたいです^ ^

苦節1年、緑色になれたときは祝いました

余談 その2(Kaggle再開しました)

上記で2021年はKaggleやるぞ、と宣言していましたが結局やれずに終わってしまいました。。2022年は、ちょうどH&Mコンペを会社の同僚の方たちとわいわい取り組んでおり、今年こそはメダルを取りたいと思っています。

AtCoderの成果についても、コードの読解力が1ランク上がっていることが目に見えて実感でき、AtCoderやっててよかった…と実感しています。

Kaggleの公開Notebookを読む様子(イメージ)
出典:天空の城ラピュタ


付録:緑ランク向け アルゴリズム精選40問シート(スプレッドシート)

わたしが緑ランクになるにあたり、基本アルゴリズム習得のため、実際に繰り返し解いていた「精選40問シート」を共有します。同じく緑ランクを目指している方の参考になりましたら幸いです。

留意点
こちらの記事に載っている問題をベースに、緑レベルに必要かなと思われるものに独断と偏見で絞り込んでいます(記事以外にも、一部これは良問だと判断した問題も取り入れています)
・想定対象レベルは、茶色レベル(Rating:400〜800)のイメージです
・灰色レベルのときは、ABCのA&B問題をひたすら早解きするのが、個人的には効果的でした

この記事が気に入ったらサポートをしてみませんか?