この記事には広告を含んでいます。
はじめに
KaggleのRSNA 2022 Cervical Spine Fracture Detectionで銀メダルを獲得することができたので、銀メダルを獲得するまでにしたことを記録しておこうと思います。
自分自身がtitanicコンペの次にするべきことが分からず、迷走した思い出があります。
なので、初心者でメダル獲得を目指している人の、次の一歩の参考になれれば幸いです!
まずは、私自身が何をしたのかを説明しようと思います!
その後、私の経験から実際にやるといいのでは?と感じたことを、できるだけ普遍的な内容で書いていこうと思います!
バックグラウンド
簡単に、私のバックグラウンドを紹介したいと思います。
- 医学部5年(メダル獲得当時)。
- 機械学習は大学3~4年の時に興味を持ち、そのころからプログラミングなどを学び始める。
- 大学4年時に統計検定準1級、1級を取得。
- 大学5年時に東大松尾研のGCIやDL基礎講座を受講(内、DL基礎講座で優秀修了生に選出)。
Kaggleの存在自体は2020年の10月頃に知りました。
そこで、titanicコンペを2021年の1月くらいにやってみました。その当時は、プログラミングも初心者で、ただコードを追ってなんとなく理解するといった感じでした。その後、過去のコンペを題材にしている本を参考に、過去のコンペに参加してみました。
その年の10月くらいに本格的にコンペに参加してみましたが、全くダメでした。
その間、統計検定の準1級と1級を取得しました。
そこから2022年度の松尾研の講義を受講した後、2022年の11月に銀メダルを獲得しました。
titanicコンペと同時にしたこと
titanicコンペをやってみるところまでは皆さんやっていると思います。
この時点でプログラミングの知識が必要かといわれると、正直そこまで必要ないかと思います。
ただ、データサイエンスの入門的な本を買ったり、udemyの講座を受講したりなどすることで、pythonの基本や、pandas、sklearnなどの使い方をなんとなくわかっているといいかなと思います。
あとは、機械学習とは何か?っていうことも、この時点で知っていた方がいいと思うので、
機械学習に関しても、初心者向けでコード例が載っている書籍や、udemyの講座を受講するといいと思います。
実際におすすめの書籍は以下の記事で紹介していますので、是非参考にしてみてください!
titanic後にしたこと
先述のように入門編の本などで勉強していたので、もう少しコンペをイメージしたものをやりたいと思いました。そこで、下記の本をやってみました。
この本で、はじめの2つくらいのコンペを実際にコードを追いながら実装してみました。
しかし、すでに終わったコンペでコードを真似していくのは退屈です笑。おそらくそういう方が多いのではないかと思います。
なので、titanicが終わったら、実際に開催されているコンペに参加してみるといいと思います!
初コンペでメダル獲得!などの記事をたくさん見ますが、焦らないことが大事です!
別に初コンペが散々でもいいんです笑。
自分の目標をはっきりさせることが大事だと思います。参加したコンペすべてでメダルを獲得しないと気が済まないわけでなければ、まずは、開催中のコンペに参加してみるといいと思います。
私自身もtitanic後に参加した初コンペは散々でした。
まずは、それっぽいnotebookを真似して、適当にアンサンブルしてみて、、みたいな感じでしたが、正直自分でも何をしたいのか分かりませんでした。笑
しかし、この経験をきっかけに、自分に何が足りていないのかがよくわかりました。
具体的には、ディープラーニングの理解と実装力が足りませんでした。CNNはある程度知っていたのですが、discussionでTransformerなどの話をしていて、なんのこっちゃって感じでした笑。
なのでここから、RNNやAttentionやTransformerなどを書籍を通じて勉強しました。ここでは、今までより少しレベルの高い本を学びました。
必要な力が明確だったので、しっかりと腰を据えて学ぶことができました。
そして、学んだことをアウトプットする機会として、東大松尾研のGCIやDL基礎講座を受講しました。ここでは、今まで書籍等で学んだことをしっかり1から実装している感じがして効果的でした。
そしてこれらの学びを生かして、1年ぶりにコンペに参加しました。
色々な書籍や講座で学んでいるうちに、機械学習部分だけでなく、その周辺の実装力が向上していました。その結果、notebookがやっていることや、discussionの内容が以前と比べて格段に理解できるようになっていました。
実際のコンペでは、一つの有力なnotebookを基本としながら、過去の類似したコンペで有効だった工夫を加えました。
その結果、銀メダルを獲得することができました!
結局何をしたらいいのか
結局のところ、以下の順番で進んでいくのがいいのではないかと考えています。当たり前のことをかいているように感じるかもしれませんが、案外、基本に忠実に物事を進めていくのは難しいことだと思います。
- titanicコンペをやりながら、書籍や動画講座でプログラミングや機械学習の基礎を学ぶ。
- 開催中のコンペに参加してみて、自分に足りない力を分析する。
- 足りない部分を、書籍や動画講座などで学ぶ(input)。
- 何かしらの形でoutputする。
1に関しては、同時並行というのがポイントだと思います。
機械学習やデータサイエンス、統計学、プログラミングに関して、何もわからない状態ではtitanicコンペをやってみても意味がないと思います。
基本的なコンペで実際のデータに触れると同時に、必要だと感じるものを書籍や動画講座で腰を据えて学ぶのが効率がいいと感じました。
2に関しては、とりあえず開催中のコンペに参加しましょう!
おそらく、ほとんどの人がレベルの差に愕然とすると思います。しかし、そこでやめてしまう人がほとんどなので、ここであきらめないことが肝心だと思います。あきらめず、必要な力を見極めることが重要です。基本的なデータ分析や、機械学習の実装はできるかもしれません。しかし、実際のコンペとなると、より深い理解や、それ以外の周辺知識が足りていないことに気づくと思います。
3では、2で足りないと感じたことをしっかりinputしていきましょう。
ここでも書籍や動画講座を活用していきましょう。また、ここでのinputというのは、「コンペに必要な力を身につける」という意味で、「座学ばかりする」という意味ではありません。座学で学びながら、コードを書いて足りていないところを地道に身につけていきましょう!
Udemyなどの動画講座はかなり有効だと思います!
以下の記事では、Udemyのオススメ講座を紹介しています!
4は、3がある程度できてきたと思ったところでやってみましょう。
私の場合は東大松尾研の講座でしたが、何でもいいと思います!なにかしらの形で、学んだことを実践してみましょう。ただ、いきなりコンペのような専門性の高いタスクに取り組むよりは、より一般的でシンプルな課題がいいと思います。できれば、スコアを競ったりできるようなものであれば、周りが刺激となって、効率良く自分の実力もアップできると思います。探せば、そのような場は色々あると思います!
たとえば、AI専門のプログラミングスクールなども最近は充実していて選択肢に入ると思います!
ここまでくれば、あとは実際のコンペに参加するだけです!
参加した後に、しっかり復習すればコンペに参加するたびに実力がアップしていきます。
さいごに
今回は、機械学習初心者だった私が、Kaggleで銀メダルを取るまでにしたことを振り返ってみました。初心者で何からしたらいいかわからないという人の力に、少しでもなれればありがたいです!
Kaggleは、試行錯誤して結果を出すプロセスが非常に面白いですし、そのプロセスを通じて成長できることがなによりも財産になると思います。
私自身、専門は別分野ですが、Kaggleを通じて得られた経験やスキルが、現在の研究に生きていることを日々実感しています!
この記事を見て、Kaggleを楽しむ仲間が増えればうれしいです!
コメント