プログラミング初心者が1年でKaggle・Signateでメダルを取った話

## 0.この記事を読む方へ
　初めまして。私の名前は「[Kag](https://twitter.com/Kaggle7Kaggle)」です。私はPythonの勉強を開始して一年後にはKaggleとSignateでメダルを取ることが出来ました。この記事は、KaggleやSignateに興味がある人、始めたものの何をすればよいのかわかない人、Pythonの勉強を新たに挑戦したい人を意識した記事です。少しでも多くの人がKaggleやSignateに興味を持って、コンテストをさらに盛り上げることにつながれば本望です。


## 目次
[1.プログラミングとの出会い](#1プログラミングとの出会い)
[2.プログラミングへの挑戦のきっかけ](#2プログラミングへの挑戦のきっかけ)
[3.初期の挑戦と乗り越えた困難](#3初期の挑戦と乗り越えた困難)
[4.コンテスト初参戦からメダル獲得まで](#4コンテスト初参戦からメダル獲得まで)
[5.一年間の学び](#5一年間の学び)
[6.初学者へのアドバイス](#6初学者へのアドバイス)
[7.結び](#7結び)

## 1.プログラミングとの出会い

　初めに私のスペックを紹介します。プログラミング初心者が～～系の記事はたくさんありますよね。初心者といいながらイメージしていた初心者とは違った。という記事を私は何度も見ました。これは記事自体が悪いのではなく、私が生粋の初心者だったためです。私は四年制の大学を卒業しています。電子回路系の学部を専攻していました。大学時代のプログラミングの授業では、Javaなどの言語の基本的な構文を学んだものの、自主的に学ぶ姿勢ではなかったです。。また、当時はPythonという言語にも触れることはありませんでした。javaに少し触れている時点で初心者とは言えない！と思われてしまった方はごめんなさい。ただ、必修科目として受け身の姿勢でプログラミングの授業を受けているだけでは身につかないということを学べた学生生活でした。

　大学卒業後、私は一般的ないわゆるJTCに就職しました。この会社はプログラミングとは全く関係のない業界で、私の日常業務もコードとは無縁でした。会社での業務に邁進している中で、ある日、KaggleやSignateの存在を知り、そこでのプログラミングコンテストに興味を持ち始めました。これが、私のプログラミングへの挑戦の始まりとなります。

## 2.プログラミングへの挑戦のきっかけ

　KaggleやSignateというプログラミングコンテストの存在を知ったのは、完全に偶然でした。私は、機械学習に適しており、比較的入門しやすいと言われているという非常に浅はかな理由から、Pythonを学びたいと考えていました。その中で、機械学習を利用したコンテストがあることを発見しました。

　多くの人はプログラミング学習を始める際、自分で何か作りたいものを持っていると、その目標がモチベーションとなり、学びが効率的に進むと言います。しかし、私は特に作成したいアプリやサービスのアイデアがありませんでした。そこで、KaggleやSignateのコンテストでの良い成績を目指すことを、私の学びの動機としました。

## 3.初期の挑戦と乗り越えた困難

　プログラミングの学びは、何よりも始めるところからが難しいとよく言われます。私の場合もその例外ではありませんでした。環境構築って難しいそう。。。というレベルでした。

### Progateの導入
　最初の一歩として、Progateという学習プラットフォームを導入しました。開発環境を自分で整えることに大きなハードルを感じていた私にとって、Progateは基本的な構文を学ぶ最適な場所でした。基本的なPrint構文やif文、for文などプログラミングのベースとなる知識を学びました。

### VSCodeを使ってみよう
　Progateでの学びが進んでくると、本格的なコードの実行環境を求めるようになりました。そこで、Youtubeの教材を参考にしながら、VSCodeというエディタをインストールしました。Youtubeやネットの記事を活用し、機械学習の世界に足を踏み入れました。

### 文字認識と深層学習の勉強
　文字認識やNN（深層学習）などは、かなり高度な技術だと最初は思っていました。まさしく私にとっては雲の上の技術です。しかし、自分には到底理解できないと感じるハードルも、Youtubeの教材を通じて徐々に乗り越えていきました。そして、学びを深めるごとに、「勉強すれば新しいことがどんどんできるようになる」という喜びを実感しました。この時の学びは、私が参加していたKaggleやSignateのテーブルデータコンペには直結していません。ただ、Pythonでできることを実感することや、ニューラルネットワークや画像認識コンペに参加した際は、必ず役に立つ知識であると思います。この時期ぐらいに、G検定を取得しました。G検定を勉強する過程で、AIや機械学習の基礎的な知識を広く、浅く学ぶことが出来るのでお勧めです。。1日2時間、1カ月程度の勉強で取得しました。G検定の勉強方法についてご質問がある方らいらっしゃいましたら、XにてDMをいただければお答えいたします。この時は、GoogleColabの無料枠を使用して学習していました。

実際に見て面白かった動画の一部です。
<iframe width="560" height="315" src="https://www.youtube.com/embed/xzzTYL90M8s?si=bh5FdoFFsqGKn9WI" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

この学びの経験を通じて、次なる目標としてKaggleのコンテストに挑戦することを決意しました。


## 4.コンテスト初参戦からメダル獲得まで
### Kaggleへの挑戦
　Kaggelへの挑戦は、まずKaggleの使い方を学ぶことから始まりました。Kaggleを始めるにあたり、とても参考になったサイトをいくつか紹介します。

https://tora3data.com/kaggle/#:~:text=Kaggle%20%E3%81%A8%E3%81%AF%E3%80%81Google%E5%82%98%E4%B8%8B%E3%81%AE%20%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%20%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%20%E3%82%B3%E3%83%B3%E3%83%9A%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%97%E3%83%A9%E3%83%83%E3%83%88%E3%83%95%E3%82%A9%E3%83%BC%E3%83%A0%20%E3%81%A7%E3%81%99%E3%80%82%20Kaggle%E3%81%AE%E4%B8%AD%E3%81%AB%E3%81%AF%E3%80%81%E3%83%87%E3%83%BC%E3%82%BF%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9%E3%81%AE%E4%BD%9C%E6%A5%AD%E3%81%AB%E5%BF%85%E8%A6%81%E3%81%AA,50%2C000%20%E3%82%92%E8%B6%85%E3%81%88%E3%82%8B%20%E5%85%AC%E9%96%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88%20%E3%81%A8%20400%2C000%20%E3%81%AE%20%E5%85%AC%E9%96%8B%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%EF%BC%88%E3%82%B3%E3%83%BC%E3%83%89%EF%BC%89%20%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82

このサイトはKaggleの使い方を写真付きで分かりやすく説明しています。最初の登録から始める方も参考にしてみてください。

https://www.codexa.net/kaggle-titanic-beginner/


　Kaggleを始める際のスタンダードな方法としてまずはタイタニック問題を解くことです。タイタニック号の乗員のデータを分析して、生き残る人を予測するチュートリアルです。このチュートリアルのやり方や説明をこのサイトではわかりやすく説明しています。


<iframe width="560" height="315" src="https://www.youtube.com/embed/F3D75T_wW4w?si=rbY4g6yzb1Xqjas1" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

　こちらの動画は無料でデータサイエンスに関する基本的なことを学べます。はやたすさんという方のYoutubeは他にも面白く、わかりやすいものが多いのでお勧めです。

https://www.currypurin.com/entry/kaggle_tutorial_ver5

「カレーちゃん」のブログも非常におすすめです。のちほど紹介するKaggle初心者向けの書籍の著者の方です。


　その中で最初に挑戦したコンペはUS Patent Phrase-to-Phrase Matchingでした。特許に関連するデータを用いて意味的に類似した情報を照合するという課題で、まったくの初心者としては厳しい挑戦でした。しかし、公開されているノートブックを参考にしつつ、模倣からスタートしました。このあたりのタイミングで、統計に関する基本的な知識を得たいと考えて、統計検定2級を取得しました。また、書籍を購入してKaggleについての勉強も行いました。1日2時間、1カ月程度の勉強で取得しました。統計検定の勉強方法についてご質問がある方らいらっしゃいましたら、XにてDMをいただければお答えいたします。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">こちらを購入しました☺️☺️ <a href="https://t.co/XBHSVVRKH9">pic.twitter.com/XBHSVVRKH9</a></p>&mdash; Kanちゃん🦘 (@Kaggle7Kaggle) <a href="https://twitter.com/Kaggle7Kaggle/status/1529778484327120897?ref_src=twsrc%5Etfw">May 26, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

この本はKaggleを行うためのベースとなる知識がコンパクトにまとめられているので、おすすめです！！

この本を読破した後、Kaagle本といわれているものがあると知りました。Kagglerになりたい自分がKaggle本を買わないわけがありません。すぐさまKaggleに関する書籍をまた購入しました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">通称Kaggle本と言われる本が届いた😊<br>さっそくガンガン読み解いていきます✨✨ <a href="https://t.co/fqhQYBI0Nd">pic.twitter.com/fqhQYBI0Nd</a></p>&mdash; Kanちゃん🦘 (@Kaggle7Kaggle) <a href="https://twitter.com/Kaggle7Kaggle/status/1531635098726313984?ref_src=twsrc%5Etfw">May 31, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

こちらの本は、より実践的な内容が豊富です。簡単に最初から最後まで目をとしいて、概要をつかんがあとは、この一年間を通しえて、辞書のような使い方をしました。コンペにそのまま応用できる内容の多々あり、Kaggle本といわれる理由がよくわかりました。

そして書籍を参考にしながら、なんとか記念すべきFrist Submitを行いました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">初コンペ、初提出しました！スコアがついてうれしいです！<br>ここからさらに精度を高めていきます！！！ <a href="https://t.co/cEIeXKqYyw">pic.twitter.com/cEIeXKqYyw</a></p>&mdash; Kanちゃん🦘 (@Kaggle7Kaggle) <a href="https://twitter.com/Kaggle7Kaggle/status/1534010105871613953?ref_src=twsrc%5Etfw">June 7, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

自分の提出した結果に点数がついたときは格別にうれしいですね。
リアルタイムで精度が分かる点が、この手のコンペのだいご味であり、はまる人が多い理由なのかもしれません。

### Signateへの挑戦
　一方、Signateは初心者にやさしいデータが多い印象を受けました。しかし、Kaggleとは違って公開ノートブックの数が少なく、自らの力で基盤となるモデルを作成する必要がありました。最初はKaggleのコンペに参加していましたが、並行して、面白そうなSignateのコンペがある場合は、そちらにも挑戦していきました。

### コンペへの連続参戦
　私の学びはコンペ参戦を中心に進められました。仕事の関係で全てのコンペに十分な時間を割くことはできませんでしたが、以下は私のコンペ参加の戦歴です。私の場合は、とりあえず参加！時間があれば、参加したコンペの内容を深めていく！というスタイルでした。


| 日付 | プラットフォーム | コンペ内容 | 結果 | コンペURL |
|------|------------------|-------------|-----|----------|
| 2022/06/10 | Kaggle | 特許類似検索コンペ | - | [https://www.kaggle.com/competitions/us-patent-phrase-to-phrase-matching]() |
| 2022/07/10 | Kaggle | Amex返済可否予測コンペ | - | [https://www.kaggle.com/competitions/amex-default-prediction]() |
| 2022/09/21 | SIGNATE | 肝疾患コンペ | - | [https://signate.jp/competitions/742]() |
| 2022/11/09 | Kaggle | DNA,RNA病気予測コンペ | - | [https://www.kaggle.com/competitions/rsna-2022-cervical-spine-fracture-detection]() |
| 2022/11/18 | Kaggle | FeedBackコンペ | - | [https://www.kaggle.com/competitions/feedback-prize-english-language-learning]() |
| 2023/01/27 | SIGNATE | 河川の水位予測 | - | [https://signate.jp/competitions/908]() |
| 2023/03/1  | SIGNATE | 金融データによる住宅ローン延滞予測 | 🥉 | [https://signate.jp/competitions/841]() |
| 2023/04/17 | Kaggle | AMPコンペ | - | [https://www.kaggle.com/competitions/amp-parkinsons-disease-progression-prediction]() |
| 2023年07/03 | Kaggle | PSPコンペ　ゲームプレイから生徒の成績予測コンペ | 🥉 | [https://www.kaggle.com/competitions/predict-student-performance-from-game-play]() |
2023年09/03 |SIGNATE| 中古車の価格予測コンペ | 🥉 | [https://signate.jp/competitions/1055]() |


　この表のようにPython未経験からKaggleとSignateでメダルを取ることが出来ました。最初はKaggelnotebookを用いてコンペに参加していましたが、途中からGoogleColabに課金して、より効率的なコンペへの挑戦を行いました。
　Kaggleのコンペには、"宝くじを買う"と形容されるような、運の要素が大きく影響するものも確かに存在します。つまり、メダルを持っているからといって、絶対的な実力を示すわけではありません。しかし、Signateで安定してメダルを獲得できるようになったことからも、私の成長は確実です。わずか一年前の自分を振り返ると、今の自分は信じられないほどの進化を遂げています。


## 5.一年間の学び
　この一年、私が最も感じたことは「継続は力なり」であるということです。月並みの、使い古されて言葉ですがやはりこれを一番実感しました。KaggleやSignateでのメダル獲得など、始めは夢のような目標でした。しかし、一日一日の積み重ねが、未知の領域を開拓する勇気と知識をもたらしてくれました。継続した学びの中で、私は新しい自分との出会いや、前より広がる視界を享受しています。

## 6.初学者へのアドバイス
　プログラミングの学習やコンテストへの挑戦を始める際の最大の武器は、"モチベーション"です。それはメダルの獲得、自己成長、仕事への貢献、趣味としての達成感など、様々な形であらわれます。そのモチベーションを明確に持つことで、困難を乗り越える糧として、そして学びの旅を継続する原動力として機能します。ただ、Kaggleのデメリットとしては、期間が長いということです。3か月開催されているコンペも少なくありません。初心者の戦い方としては、最後の一か月間から参加するということもおすすめです。その時点では参考になるノートブックが豊富に出ているので、まず何から始めればよいのかわからない人にはお勧めの戦い方です。

## 7.結び
　この一年間はKaggleやSignateのメダル保有をモチベーションに勉強に精進してきました。次はさらなる上位成績を残すためにKaggleやSignateにも取り組み続けていきます。また、プログラミングコンペとして、日本でも有名なAtcoderなどにも興味があるので、アルゴリズムについても知識を深めるために、調整していきたいんと思っています。
　末筆になりましたが、様々な人の書籍や教材によって、とても効率よく勉強することが出来ました。この場をお借りして感謝を申し上げます。ありがとうございます。微力ながら私のいただいた恩を還元していきたいと思っております。もしKaggleやSignateの初学者で悩んでいる方や、その他特にプログラミング初学者で悩んでいることがる方がいらっしゃいましたら、遠慮なくXのDMを送っていただければと思います。最後まで読んでいただきありがとうございました。

[***Kaggleのアカウントはこちら***](https://www.kaggle.com/yoheueda)

[***Signateのアカウントはこちら***](https://signate.jp/users/91463)