コンペ素人でもチームを組めば半年でKaggleとSIGNATEでメダルが取れた話

# はじめに
　10月からprimeNumberにジョインしましたwakama1994です。
　今回は私が転職活動と並行して行ったデータコンペの参加について書きます。コンペ参加は敷居が高いと感じてましたが、チームを組むことで敷居が下がり、メンバーからも学べることも多く、今後も継続してコンペに出たいと思えるようになりました。
　データコンペをこれから始めたい方に向けて「チームで参加したら参加ハードルも下がって、楽しい！」ことをお伝えできればと思っています。

# コンペ出る前の経験値
- 前職（新卒入社）でも3年ほどデータサイエンスを業務で使用
- プログラム上の結果を読み解くのはある程度理解できていたが、その根本のモデリングや処理のプロセスについては理解不足
- ゆくゆくはモデリングについても理解すべき思ってはいたものの、行動には移せてない状況

# なぜコンペに行き着いたのか？
　転職活動をやっていく中で、中途で採用されるからには機械学習や統計分析の根本理解も必要だと感じてました。学習教材を探す中で、データサイエンティスト協会（DS協会）が実施している[データサイエンティスト養成講座](https://www.datascientist.or.jp/news/n-news/post-713/)に辿り着きました。これであれば機械学習や統計分析の根本的な理解に至れると考え、受講することにしました。
　講座の中身は教材を使って機械学習の仕組みを理解しつつ、チームを組んでコンペ形式で順位を競うものでした。私が組んでいたチームは皆さんやる気のある方達で、講座内で1位を取ることができました。チームを組むことで、特徴量の加工で議論ができたほか、モデルの理解についても属人的にならず理解が深まりました。
　講座終了後、修了生にはDS協会コンペ部（後述）という勉強会に参加できる権利が与えられます。コンペ活動がとても楽しく、勉強会への参加を決めました。

# DS協会コンペ部について
コンペ部は講座終了後の2023年1月から参加しました。コンペ部の中身は...

 - 月1回の勉強会。内容は、輪読、個人で気になっているトピック、話題のコンペの共有
 - 過去数年間実施した講座の修了者が参加可能　勉強会には講座の講師の方と修了生10人程度が参加
- 参加者は修了後も勉強を継続されているため、モチベーションは高い方ばかり
 - 月次の勉強会で話題に上がったコンペは、別途有識者同士でチームを組んで参加

最初のうちは輪読等で継続的に参加しつつ、慣れてきたあたりでコンペ参加の方に軸足を置きました。9月末までに3つのコンペにチームで参加をし、結果は全てメダルを取ることが出来ました。

# コンペの結果
①SIGNATE [渋滞予測チャレンジコンテスト 【モデリング部門】](https://signate.jp/competitions/933/leaderboard)
**貢献度　★☆☆☆☆　順位14位/169 🥈**
EDA少しやった程度でした.....
②Kaggle [ICR - Identifying Age-Related Conditions](https://www.kaggle.com/competitions/icr-identify-age-related-conditions)
**貢献度　★★☆☆☆　順位130位/6430 🥈**
EDAに加えてモデルの頑健性チェックを中心に
③SIGNATE [テクノプロ・デザイン社 食品パッケージ画像解析チャレンジ（一般・学生部門）](https://signate.jp/competitions/1106/leaderboard)
**貢献度　★★★☆☆　80位/325 🥉**
自分が見つけた特徴量加工で、メダル獲得の一押しが出来ました！

## SIGNATE 渋滞予測チャレンジコンテストについて
**取組期間 2月中旬~3月31日　参加メンバー5名（うち1名が養成講座の講師)**
EDAのレベル　★★☆☆☆ 　モデル構築の難度　★★★★★

　高速道路の車の台数やアプリの検索回数から、高速道路の各路線が渋滞しているかどうかを予測するコンペでした。
　EDAについては、渋滞の定義がデータ的にもあっているか、渋滞する時期が地域間で差がないかなどの検討をやり、結構手応えは感じていました。
　ただモデル構築がこのコンペ相当しんどかった....システム構築を睨んで、main.pyでモデル用のpyファイル読み出すまでがsubmitまでの流れでした。その時点でモチベが下がったのですが、チームメンバーが作成していただいたもので解析を進めようとした際に、VScodeの環境を構築する必要があり、環境構築に時間がかかりました。
　結果最終提出数日前に数回submitして終了し、メダルは取れたものの味気ないコンペになりました。
## Kaggle ICRについて
**取組期間 7月上旬~8月11日　参加メンバー5名**
EDAのレベル　★★★★☆ 　モデル構築の難度　★☆☆☆☆

　約50種類の変数からその人が病気かどうかを判定するコンペ。渋滞コンペと異なり、コードコンペかつDiscussionもかなり活発でサンプルコードも沢山あったので、submitまではスムーズにできました。submitまでがやりやすかったので、変数の分布や主成分分析で変数の傾向把握を中心に特徴量作成を試みました。
　ただし、publicのデータが5サンプルしかなく、リーダーズボードがあてにならなかったこと・特徴量の列名が英数字でそれらに対しても全く説明がない状況で、どんなEDAが効くのか分かりにくかったのでやりにくいな..と感じました。
　とはいえ、特徴量を変えてモデルの頑健性を確かめたり、Discussionを拾ってメンバーの定例会で共有して議論に加わったため、価値ある銀メダルとなりました。
|　　　　　　　　  　　　　　　　　   　　　　　　　　　　　　　　　　　　　　　　　　　|
|:-:|
![無題のプレゼンテーション.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/a2a69414-328e-7089-4024-580e437af27e.jpeg)
全くあてにならなかった大荒れのリーダーズボード
## SIGNATE 食品パッケージ画像解析チャレンジについて　
**取組期間 9月頭~9月30日　参加メンバー3名**
EDAのレベル　★★★☆☆ 　モデル構築の難度　★★★☆☆

　食品か飲料かのどちらかを判定するかのコンペ。SIGNATE特有のディスカッションが盛り上がらなかったので外部から情報を取得してきました。初期モデルの構築はチームメンバーにおんぶに抱っこでしたが、Google ColabのPro版を他の方が使われていたので、環境を統一して実施しました。
　環境を統一させた結果、画像解析の特徴量周りに専念することが出来ました。[画像処理100本knock](https://github.com/minido/Gasyori100knock-1)に行き当たり、その中で平滑処理やガウシアン平滑処理を実践してみました。実施した理由は、チームメンバーが「解像度のいいもの方が精度が良くない」という話だったので、全体をぼやけさせることで精度向上を狙いました。サンプルコードは100本knockではなく、[OpenCVを利用した記事](https://qiita.com/shoku-pan/items/07ec25f1d50629fed698)を参考にしました。
　結果、他の方が作って下さったモデルに平滑処理を加えることで精度がグッと上がり、メダル獲得に貢献できました。平滑化処理した場合どの画像がうまくいっているのかを可視化できていたらもっと精度向上できていたかなと思いました。
|　　　　　　　　  　　　　　　　　   　　　　　　　　　　　　　　　　　　　　　　　　　|
|:-:|
![無題のプレゼンテーション (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/36d352b6-e181-1146-a034-a89f9529a7a5.jpeg)
![無題のプレゼンテーション (2).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2725527/f7db57db-68ed-ae7f-7195-b9c90e03909f.jpeg)
投稿回数も渋滞コンペより格段に増え最終提出よりも良い結果が出せていた
# 振り返って
**特徴量作成は楽しいし、得意**
　特徴量の作成は自分がこれまでデータサイエンスと向き合ったこともあり、とても楽しくやりがいが大きかったです。特に画像コンペの際には「ノイズ除去等もやりたかったなあ」と思えたので、今後EDA周りを極めて行けたらなと思ってます。

**モデル構築はやっぱり苦手だけど学べる環境はある**
　コーディングが苦手なこともあり、苦手意識は払拭できませんでした。とはいえ、チームで出ると議論できるのである程度理解できるようになり、KaggleであればDiscissuionページで議論されてることが見れるので、キャッチアップできれば学習が深まるなと考えています。

**チーム参加はメダル獲得しやすく、モチベが爆上がり**
　3年前初心者コンペに1回出たっきり、参加のハードルを高くしてましたが、チームで参加すると継続的に参加したい気持ちになれました。誘われると「ちょっとチャレンジしてみるか」という気持ちで参加でき、「周りも頑張っているから自分も..」と途中でリタイアすることもなかったです。
　これから始めたい方にもまずはチーム参加をオススメします。「周りに組む人がいない！」という方は、私のように外部のコミュニティーを見つける努力はしてもいいかなと思っています。

# 今後の目標
　今後については会社単位でチーム作りたいと考えてます。チームを組めばメダルに手が届きやすいとわかった一方で、まだまだ貢献度も薄いのが事実だと思います。転職のオファー面談の際「データサイエンス分野についてはまだまだ発展途上」というお話をいただきました。社内にはデータコンペに出たいメンバーも多く、実際にSOLOで出ているメンバーもいます。スタートアップの環境に移動したからこそ、周りを巻き込んでいって、自分主導でコンペチームを作っていきたいなと思っています。