【Kaggle Master】になるまでとその後

#はじめに

**12/13　それぞれの時期と学習時間を追記しました！**
**12/18　Kaggle Masterになるまでの部分を加筆修正しました！**
**12/20　いくつかのパートを追加しました！**
###記事の目的
この記事では、自分がプログラミングを勉強し始めてから、Kaggle Masterになるまでにやってきたことを振り返る形で紹介していきます。
また、Kaggle Masterになれて良かったと思ったこともいくつか紹介するので、みなさんのKaggleに取り組むモチベーションを高めるきっかけとなれば幸いです。
###経歴紹介
私自身、Kaggleを始めたころにKaggle Masterになる人はどんな経歴を持っていて、どんなことを勉強してきたのか気になっていたので、簡単に紹介してみます！

私は、学部３年生の21歳ですが、比較的多趣味な人間だと思っています。
高校生の頃は、写真部に所属していてカメラも好きですし、けん玉検定1級を取得したり、[Cardistry](https://www.youtube.com/watch?v=njstvj2M0WA)というトランプを使った遊びをしていました。
考えてみると、なにかを独学することは比較的得意なように思います。
![IMG_1114.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479928/3c975bb9-e22d-51c0-158d-f67491be5a90.jpeg)
（趣味がよく表れている写真、万年筆も好きです）


また、大学に入る前は、確率統計に興味があり、保険業界で活躍するアクチュアリーという職業を目指していました。
そのため、学部１年の頃は経済学の勉強をしたり、アクチュアリー数学の勉強を主にしていたのですが、この経験はデータ分析をする際にも活きているなと感じています。

このように学部２年の夏休みまでは、機械学習はおろかプログラミングも授業以外ではやらない（なんなら苦手意識を持っていた）わけですが、アクチュアリーとして活躍するうえでデータを効率よく扱えたらいいなという思いから、夏休みを使ってPythonを勉強することにしました。
それ以来、機械学習に興味を持ち、勉強し続けて今日に至るという形です。

#Pythonを勉強し始めてからKaggleのコンペに参加するまで
###PyQに取り組む（2018/8~2018/9中旬　4h/Day）
まずは気楽に基本文法から勉強したいなと思い、オンラインで勉強できるサイトを探しました。
そこで出会ったのが [PyQ](https://pyq.jp/)でした。
私は、このサイトを通じて基本文法を身につけられただけではなく、機械学習がどんなものであるか、そしてそれが自分の興味のある分野であることに気づけたので本当に感謝しています。
おそらく、このサイトで勉強をしていなかったらKaggleに挑戦することもなかったかもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479928/b276b3c6-9164-1ccc-7ff9-8e62e63dd543.png)

###UdemyとCourseraに挑戦するも飽きる（2018/9下旬）
PyQでオンライン学習の良さを知った私は、UdemyとCourseraに取り組むことにしました。
予定ではこれらのサイトでしっかり理解を深めるつもりだったのですが、取り組んでいるうちにはやくコンペに参加して経験を積んでみたいという気持ちが高まり、途中で中断してしまいました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479928/f2a9ef82-6a59-7614-e005-e31b6813f96b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479928/9af6dfeb-17b3-21e9-6fdc-0710ad8b3e42.png)
（現在も途中のまま、、、）

###初めてのコンペ参加（SIGNATE)（2018/9下旬~2018/11　20h/Week）
そこで参加したのは、KaggleではなくSIGNATEでちょうど行われていた[Student Cup 2018](https://signate.jp/competitions/137)でした。
一般的には、SIGNATEではKernelの公開がなく、自力で一からコードを書く必要があります。
しかし、このコンペではベースラインを公開してくださる方がいて、そのコードでなにをしているのかを勉強しながら取り組むことができたのでとても助かりました。
個人的には、そのようなケースでは、言語の障壁もないためSIGNATEからコンペを始めるのはおすすめです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479928/9b18a05c-9432-b9a9-833f-e56a821ca53f.png)

また、振り返ってみると**納得いくまで勉強する前にコンペに参加してしまうというのは近道の一つ**だと思います。
コンペにいったん参加してしまえば、なんとかしてスコアを上げたいという思いから、知らない知識を実践を通して身に着けることができます。これはすごく重要なポイントだと感じていて、最近だとむしろ、こういう知識を身に着けたいからこのコンペに出てみようというスタンスで行動しています。
結果として、そこそこ上位に入ることもでき、コンペに参加するのが楽しいと思えたのも大きな収穫でした。

###デスクトップPCを購入（2018/10下旬）
完全に機械学習にハマってしまったので、GPUを用意して学習を回してみたいと思うようになりました。
そこで、デスクトップPCが欲しいとなったわけですが、どれくらい投資するかでかなり悩みました。
私には、**その時買えるできるだけいいものを買う**という信念のようなものがあったため、約17万円のものにしました。
当時は、かなり大きい出費でこれは退路を断ってしまったなと思ったのを覚えています:sweat_smile:

ですが、今振り返ってみると、その投資額の何倍ものお金をインターンや賞金で得ることができたのですごくいい決断だったと思います。
これからも、できるかぎり投資を惜しまず頑張っていくつもりです。

###コンペのアフターイベントに参加（2018/12中旬）
幸運なことにStudent Cupではコンペ終了後にアフターイベントが開催されました。
このイベントに参加することで、上位の方との差はどこだったのか明確になりますし、なにより直接お話することでアドバイスをいただけたのが大きかったです。
また、当時は自分の周囲に機械学習の勉強をしている人がいなかったので、技術的な話をすることでモチベーションを高めることができました。

###技術書を片っ端から読んでみる（2018/10~2018/12　十数冊）
幸いなことに、大学の図書館に機械学習に関する本がそこそこあったので、いろいろ借りて読んでみました。
当時は、ほとんど知識もなく載っているソースコードをひたすら写経していたような形だったのですが、こういう処理にはこういうライブラリやフレームワークがあるという知識を得ることができましたし、KaggleのKernelを読む際に抵抗がなくなったと思います。
当時は、Kaggleをやるならコレといった技術書はほとんどなかったと思いますが、現在であれば[『Kaggleで勝つデータ分析の技術』](https://www.amazon.co.jp/dp/B07YTDBC3Z/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)が圧倒的におすすめです。
あと、[『Python機械学習プログラミング 達人データサイエンティストによる理論と実践』](https://www.amazon.co.jp/%EF%BC%BB%E7%AC%AC2%E7%89%88%EF%BC%BDPython%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E9%81%94%E4%BA%BA%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%83%86%E3%82%A3%E3%82%B9%E3%83%88%E3%81%AB%E3%82%88%E3%82%8B%E7%90%86%E8%AB%96%E3%81%A8%E5%AE%9F%E8%B7%B5-impress-top-gear%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-ebook/dp/B07BF5QZ41/ref=sr_1_4?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=%E6%A9%9F%E6%A2%B0%E5%AD%A6%E7%BF%92&qid=1575727224&s=digital-text&sr=1-4)は、様々な手法を一通り学ぶことができるのですごくよかったです。

#Kaggleに初参加してからソロ銀をとるまで（2019/1~2018/2下旬　25h/Week）
もちろん、私もKaggleデビューはTitanicだったのですが、すこしKernelを見て、動かして終わりました笑
やはり、リアルタイムでリーダーボードが変動するコンペに参加するほうがちゃんとやろうという気持ちになると思います。
そこで、春休みにちょうど開催されていた[Elo Merchant Category Recommendation](https://www.kaggle.com/c/elo-merchant-category-recommendation)に参加することにしました。

このコンペはクレジットカードの情報に関するもので、もともと関心があった金融系ということもあり、よりいっそうモチベーションが湧いてきました。
Titanicをとりあえずやってみたけど、次になにをするべきかわからないという場合は、**とりあえず興味のある分野に関するコンペに参加してみる**と楽しめると思います。

このコンペは、テーブルデータのコンペであったため、Student Cupで学んだことも活かすことができました。
**以前参加したコンペの知識を使って新しいコンペに挑む**というのが定石なので、時間が許す限り多くのコンペに参加してみることが、はやくレベルアップするうえでとても重要だと感じています。

また、当時読んだ記事のなかで、**コンペの期間中しっかりDiscussionを追って、実装していけば銀メダルが取れる**というアドバイスがありました。
このコンペで実践してみたところ、本当に銀メダルが取れて、とても嬉しかったです。

#Kaggle Masterになるまで（2018/4~2018/6下旬　25h/Week）
春休みが終わった段階で、自然言語処理に興味を持つようになりました。
そのタイミングでちょうど開催された[Jigsaw Unintended Bias in Toxicity Classification](https://www.kaggle.com/c/jigsaw-unintended-bias-in-toxicity-classification)は、最新技術に触れることができるしピッタリだと思い、全力で参加することに決めました。

この段階ではKerasやPyTorchでコンペに参加した経験もなく、知らないことだらけであったため、**Discussionを読むだけではなく投稿することで理解を深めようと思いました。**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479928/c2a5095e-eaa4-c07a-bba0-d28e6eda27e4.png)
このように、ほかにもその内容が気になっている人がいるとupvoteが付き、メダルをもらうこともできて一石二鳥です。
KaggleでメダルというとCompetitionのメダルを指すことが多いですが、KernelやDiscussionのメダルでMasterの称号を取れるとかなりすごいと思っています。

投稿する前は、英語で発言することに不安などもありましたが、ほかのユーザーから意見がもらえて解決につながったときは、Kaggleは本当に良いコミュニティだと感じました。
それ以来、自分もできるだけ質問に回答して貢献していきたいと思うようになりました。

こうして、理解を深めつつオリジナルのアイデアもいくつか実装することで、リーダーボードで20位付近まで上がることができ、順位が近かった方々とチームを組むことができました。
チームでの取り組みは、とても学ぶことが多く、ソロでは味わえない楽しさにあふれていると思います。（最終日に徹夜で相談しながら最終サブミットを選んだのはいい思い出です笑）

その結果、憧れの金メダルも取ることができて、とても良い経験ができました。
**積極的にやったことがないことに挑戦したこと**が、鍵だったなと感じています。

具体的には、以下のことに挑戦しました。
**1. Discussionにトピックを作成し、自分が得たい情報を効率よく得られるようにした。**
**2. チームを結成し、自分一人では思いつかないアイデアを獲得すると同時にモチベーションを高めた。**
**3. arXivで関連する論文を調べ、そのアイデアを実装した。（できる範囲だけでも取り組むことが大切だと感じました。）**
**4. Discussionだけでなく、注目されているKernelのコメントも全部読むようにした。**
**5. GCPで学習を回すために、使い方を覚えて、後に[記事](https://qiita.com/hiromu166/items/2a738f7be49d88d8b599)を書いた。**

これだけ頑張れた背景には、Kaggleのことを話すことができる友人との出会いや他研究室の輪読会に参加するといった出来事があったので、そうした出会いにとても感謝しています。

その後、銀メダルを獲得し、Kaggle Masterになることができました。

#その後
私は、院進するとしても、現時点での自分の評価を知りたいと思い、いくつかの企業さんと面談させていただきました。
その際に、Kaggle Masterであると伝えるといい反応をいただけますし、院卒と同等に扱っていただけることもありました。
私はまだ研究室に所属しておらず研究の実績はないのですが、Kaggleを実績として紹介することができるので取り組んできて良かったなと感じています。

また、プログラミングを勉強し始めた際には、思いもしなかったフリーランスの仕事も任せていただき、貴重な経験を積むことができています。

なので、これからはその期待に添えるよう、より一層努力していきたいと考えています。

#おまけ
**これからKaggleを始めたい方へ**
###Twitterから得られることはとても多いです
個人的にはTwitterで機械学習用のアカウントを作ることはすごく情報収集の点で役に立っています。
あと、強い方々の活躍を見てモチベーションを高めることもできるので、非常におすすめです。
また、Kaggle Days Tokyoに参加した際にも、Twitterで知っている方が多かったのでとても楽しめました。
###おすすめの記事/ブログ
**記事**
1. [Kaggleに登録したら次にやること ～ これだけやれば十分闘える！Titanicの先へ行く入門 10 Kernel ～](https://qiita.com/upura/items/3c10ff6fed4e7c3d70f0)
2. [文系大学生が機械学習を０から始めて９か月でKaggle銀メダルを獲得するまで](https://qiita.com/Falcon__0904/items/1c20595c5e6dac4530dc)
3. [KAGGLEでどこから手を付けていいか分からず学ぶことが多すぎてまとめてみた](https://qiita.com/aokikenichi/items/50dd3f086ef174f61fd6)
4. [YouTuberから学ぶデータサイエンスまとめ。海外チャンネル多め。](https://qiita.com/Hyperion13fleet/items/5cedaca97fc8fa0706a2)
5. [【随時更新】Kaggleテーブルデータコンペできっと役立つTipsまとめ](https://naotaka1128.hatenadiary.jp/entry/kaggle-compe-tips)
・・・
**ブログ**
1. [u++の備忘録](https://upura.hatenablog.com/archive)
2. [天色グラフィティ](https://amalog.hateblo.jp/about)
3. [kaggle全力でやります](http://www.currypurin.com/)
4. [threecourse's memo](http://threeprogramming.lolipop.jp/blog/)
・・・
他にもたくさんあると思うので、思い出し次第追加していきます:sweat:
#おわりに
取り組みを振り返って記事を書くというのは初めてで、ごちゃごちゃしてしまいました。。。
少しでも参考になった箇所等あれば幸いです。
もし、この部分をもっと詳しく知りたい等あれば、気軽にコメントいただければと思います。

**正直Macbook Proめっちゃ欲しいです:no_mouth:（今使っているのが2015年モデルなので、、、いただけたらKaggle用の環境構築の記事書きます）**