Kaggle ソシャゲ説


今回は**お気持ち 100% のポエム**です。
加えて私個人という強いフィルターを通したお話になります。

技術的なお話は [PyTorch 三国志（Ignite・Catalyst・Lightning） \- Qiita](https://qiita.com/fam_taro/items/c32e0a21cec5704d9a92) に書いたのでそれでご容赦いただきたく。。。

# この記事で伝えたいこと

- Kaggle はソシャゲみたいなものだよ🤗
- Kaggle は怖くないよ🤗
- Kaggle は本当に楽しいよ🤗


# 1. テメーは誰だ

- ふぁむたろうです
    - 修士のころ自然言語処理してました
    - そのあとなんやかんやして
    - 今は画像(の前)処理して生きています
- 2019年11月に Kaggle Master になりました(https://www.kaggle.com/yukkyo)
    - メダル取ったのは画像系コンペのみです
- 好きなソシャゲは [fgo](https://www.fate-go.jp/) です
    - Kaggle をちゃんと始めてからはプレイ時間が減っていますが…
- 人生でソシャゲにつぎ込んだ額は [Tesla V100](https://www.nvidia.com/ja-jp/data-center/tesla-v100/) 2,3 個分です
    - fgo だけでも 1個分ぐらいになりそうです
    - 後悔？後悔しかありませんよ🤗

# 2. え、 Kaggle ってソシャゲなんですか！？ 😯

ソシャゲです。多少違う点はあれど、ベースはソシャゲです。

## 2.1 Kaggle とソシャゲの類似点
<!-- できれば table にする -->
- **"お金 × 時間"** で殴るゲーム
    - お金
        - 作業するための PC 代やキーボード等の装備
        - 学習をぶん回すためのクラウド代や自作 PC 代
        - ~~なんなら GM や Master にお金積みまくれば Team Gold なら取れそう~~
    - 時間
        - 実装するための時間
        - お金をおさえる代わりに時間をかけるときとか
        - 論文を読む時間
        - Discussion 追うための時間
        - 諸々検証する時間
- **SNS上でイキる**ことができる
- **ガチャ(運)要素がある**
    - やはりガチャはソシャゲの醍醐味ですよね
    - Kaggle 上でのガチャ例
        - 良いコンペ引けるかガチャ
            - Leak がひどい等のコンペ設計の良し悪しはあります
                - [うんうん！それもまた思い出だね](https://mainichi.jp/articles/20190911/dyo/00m/200/006000c)
        - 良い Seed 引けるかガチャ
- レベル上げ要素がある
    - 画面内のキャラクターかプレイヤー(自身)の違い

## 2.2 Kaggle とソシャゲで違うところ

- Kaggle はリセマラできない
    - (見た目を良くするために銀メダル以下ならリセットという怖いリセマラもあるとかないとか…)
- Kaggle は言語指定ができない(英語 only)
    - 最近は Google 翻訳とかもあるので言語の壁はほぼありませんが
- Kaggle の場合コンペによって明示的に賞金が出る(所得が変わりうる)
- Kaggle の方が若干就職に役に立ちやすい(?)
    - 学習意欲の有無の測定に使われるとの風のうわさを…

# 3. Kaggle をソシャゲとして楽しむには

ここでは仮に Kaggle をソシャゲとした場合にどのように楽しむのかをまとめました。

## 3.1 リセマラ編


<img src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33573/c61d876c-7034-2519-d221-a7cb391bd2b3.png width=300>


- 残念ながらこのソシャゲ(Kaggle)には**リセマラ要素はありません**
    - (人生リセマラとか過激な発言はやめましょう)
- 始めた人は誰しも **Kaggle Novice** から始まります
    - あの bestfitting だって生まれたてのときは Novice だったんだぞ
- 地頭の良さとか backbone(学歴)の差はあれど、大抵 **お金と時間をかければ取り戻せる範囲** です

## 3.2 チュートリアル編

**興味があるコンペがあったらそっち参加して良いです**
Kaggle の Submit の流れを知りたかったり雰囲気を掴まないと不安な人は下記チュートリアルを試してみましょう。

- Kaggle Titanic を自分で開いてやる
- Qiita の記事を漁る
    - だいたいみんなタイタニック号から生還しようとするので参考にする
- カレーちゃんさんの [kaggleのチュートリアル](https://note.com/currypurin/n/nf390914c721e)
    - 1,500 円だけどちゃんとまとまってるしコンペ体験談もあるので雰囲気をつかみやすい
    - 適当にネットで漁るとノイズも大きかったりするので安心できる
- [Kaggleで勝つデータ分析の技術 \| 門脇 大輔, 阪田 隆司, 保坂 桂佑, 平松 雄司 \|本 \| 通販 \| Amazon](https://www.amazon.co.jp/dp/4297108437)
    - 早くも Kaggler 向けのバイブルとも呼ばれる通称 kaggle 本
    - この本のメイン層はビギナーではないのですが、最初の章にコンペの概要や意義がしっかりまとまってます

## 3.3 レベル上げ編

ソシャゲだと事前にレベルを上げるシーンがあるのですが Kaggle も同様です。
しかし Kaggle の場合コンペに参加してしまった方が学ぶことの見通しも立てやすいので参加した方が色々速いとは思います。

- **コンペ中にできる(やらざるをえない)レベル上げ**
    - 英語力を高める
    - ライブラリ・フレームワークの調査
    - 論文調査
    - **実装**
        - 書かないことには始まりません
        - 綺麗に書けるに越したことはありませんが、コンペ中は汚くなるものなので割り切りましょう
- **コンペ中以外にできるレベル上げ**
    - 論文調査
        - コンペ中は狭い範囲で論文を読むことが多いので、もう少し広いスコープで読んでおくと後で役に立つかもしれません
    - コード整備
        - コンペ中は雑なコードになりやすいので、日々メンテするとコンペのときに華麗なスタートダッシュをキメることができます
    - 競技プログラミング(AtCoder とか)
        - Kaggle で直接役立つ実感はないのですが(サンタコンペ除く)
        - 競プロ強いひとは大体 Kaggle 強かったりしますし
        - 競プロやってるとコーディングの最初の一歩がスムーズになるのでおすすめです
        - 競プロは短時間で結果が見れるので始めやすいのも良い点です

## 3.4 コンペ(イベント)参加編

コンペはお祭りだったりイベントみたいなものです。レイドボスバトルとも見れなくはありません。


### 3.4.1 コンペで順位上げるステップ

初めての人がコンペに参加する場合は以下の Step が始めやすいと思います。
(よく言われているテンプレートですが)

- Kaggle Notebook 上で一番スコアが高かったりシンプルなものを見つける
    - Notebook を読んで、知らない関数とかフレームワークの使い方を調べる
    - そのまま再実行したり、少しいじって再実行
    - なるべく早く 1submission キメる
- Discussion を漁る
    - Vote 順でソート
    - Extra Data(外部データ)だったり Leak の有無は優先度高いです
    - ケロッピ先生とかが論文を教えてくれたりもするのでそれを追ってもよい
- 思いつく限りの試行錯誤
- とにかく 1日1submission を目標にする

とにかく大事なのは **なるべく早く submissionする(コンペに参加する)** ことだと思います。
とりあえず一回 Submit してしまえばモチベーションはかなり高まると思われます。

### 3.4.2 大雑把なコンペ分類

タスクによって変わったりもするのですが、ここでは大まかにコンペを分類してみます。
ここも私見なので意見欲しいです。

- テーブル系
    - テーブルデータ(.csv)を扱い何かしらの予測をするコンペ
    - 最も始めやすい分、参加者も恐ろしいことになるコンペ
    - Kaggle 本の学びをそのまま活かせるのはメリット
    - Score がサチってアンサンブル祭になることもしばしば？
    - モデル自体(xgboost とか)はいじらない分、特徴量作成やアンサンブルに励むことが多い印象
- 画像系(Classification・Segmentation・Detection)
    - メジャーでありかつ最近増加傾向っぽい
    - でも GPU が必須な分お金もかかりやすい
        - 最近は Kaggle Notebook の GPU 制限が厳しいし
    - 逆に画像サイズが精度に寄与することも多く、お金を出せばある程度上にいきやすかったりする
    - 画像系ではテーブル系と比べた場合に特徴量の生成よりはモデルの構造や入力を気にすることが多い
- 自然言語処理系
    - テキストデータを扱うコンペ
    - BERT(NN) を自分で学習するか否かで必要な計算資源が変わるっぽい？
    - 小規模であれば画像ほどの計算資源はなくても良さそう？
- 複合系
    - ex. 画像 + テキスト
    - 実用的だし毛色も違うためか少しレア
    - 攻め方がさらに多様なのでチームを組んでアイデアを出し合うとさらに楽しいかも？
- 競技プログラミング系
    - ex. サンタコンペ
    - 競プロ強者や最適化周りの教授が参戦するすごいコンペ
    - 他のコンペと違い最適解にたどりつくことが頻繁になるらしく、初日からフルスロットルでやった方がお得というまさに競技プログラミング
- その他
    - ex. Freesound Audio Tagging 2019, 犬コンペ
    - 上記以外のコンペです(雑ですみません)
    - 上記に属さない分まだ Solution が無かったりして進めづらいけど、Winner もいない分一気に駆け上がれる可能性がある

### 3.4.3 現行コンペと過去コンペどちらから始めるべき？

A: 個人的には断然**現行コンペ**です。

現行コンペだと怖かったり "自分のペースでできない" とか抜かしたり抜かされたりで "心臓に悪い" とかありますが、やはり **メダル** が一つの目標になると思うので、現行コンペがおすすめです。

何より **同時期にやっている他の人** がいることが大きいです。

現行コンペ参加して "悔しい" とか "もっとできることあった"・"あいつ(Winner)とオレは何が違うんだ" みたいな気持ちを持った方が復習するにも身が入ると思います。

| | 現行コンペ | 過去コンペ |
|---|:--|:--|
| メリット |・開始直後なら Discussion も少ないので漏れなく追いやすい<br>・他にやってる人も見つけやすい <br>・メダルが懸かっているので本気で取り組みやすい<br>・ワンチャン Prize(賞金) |・自分のペースで進めやすい(締め切りがない)<br>・Solution(一つの解答) があるので詰まったら参考にできる <br>・コンペの良し悪し(leak)とかが分かっているので選べる |
| デメリット |・スコアが上がらないと辛いシーンがある<br>・心臓に悪い<br>・生活がコンペに支配される可能性がある |・強い自我がないと飽きる<br>・メダルをもらえない<br> |

## 3.5 SNS 編

Kaggle はソシャゲなので**他の人とつながってなんぼ**です。
コンペは自分自身(Local CV)との戦いもありますが、**他の人と競うことが前提**にあります。
本当に一人で楽しみたい場合は終了したコンペとかコンシューマーゲーム買って楽しみましょう。

そして他の人とつながる要素として SNS は個人的に非常に重要です。

### 3.5.1 SNS でつながるメリット

- 他の人の様子がわかる(うまくいってたりいかなかったり喜んでたり苦しんでたり)
    - [タカキ](https://dic.pixiv.net/a/%E3%82%BF%E3%82%AB%E3%82%AD%E3%83%BB%E3%82%A6%E3%83%8E)も頑張ってたし、俺も頑張らないと！
- コンペの存在を忘れなくなる
- 重要な情報を逃しにくくなる
    - やばいコンペはそれだけ Twitter も荒れたりする

### 3.5.2 主な SNS とかコミュニティ

- **Slack**
    - いずれも大きいコミュニティ
    - Slack ということもあって色んなチャンネルがあったりする
        - チームで進める場合はこの中でプライベートチャンネルを作ることもある模様
    - 主なコミュニティ
        - **kaggler-ja**
            - 国内最大規模のコミュニティ(記事執筆時点で **6,500 人超**)
            - "マウントしたら○す" 等の初心者に非常に優しい雰囲気
                - かつ private-sharing がしっかり取り締まるので治安も良い
            - beginners-help チャンネルは幅広い質問が飛び、かつ回答もしっかりしてることが多い
        - **KaggleNoobs**
            - 国際色豊かなコミュニティ(記事執筆時点で **11,000 人超**)
            - jobs チャンネル(リクルーティング用途)があったりと kaggler-ja とは違う空気
            - 下記のコミュニティよりは落ち着いた雰囲気
        - **opendatascience**
            - 通称 ods.ai
            - 世界最大規模のコミュニティ(記事執筆時点で **29,000 人超**)
            - メイン言語が **ロシア語**
            - kaggle_clackers 等の怪しいチャンネルもある
            - Slack ならではのカスタム絵文字がそこら中で暴れまわっており、治安が良いと断言するのは難しい
                - 日本で言う渋谷
- **Discord**
    - ちょうど Slack と Twitter の間ぐらいの立ち位置です
    - 軽く雑談したり、一日の目標をつぶやいたり、勉強会を開いてたりします
    - 主なコミュニティ
        - **かぐるーど**
            - [かぐるーどについて \- kaggle\-friends](https://scrapbox.io/kaggle-friends/%E3%81%8B%E3%81%90%E3%82%8B%E3%83%BC%E3%81%A9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)
            - 興味がある人は https://discord.gg/2Jf95W4 から加入可能
- **Twitter**
    - 一番雑多だけど各々の活動も見える
    - ノイズも大きいけど新しい情報も流れて来やすい
    - 後述する Twitter アカウントリストフォローすれば大体 OK です
    - もしくは `kaggle lang:ja` で Twitter 検索かければ興味がありそうな人を一瞬でたくさん見つけることができる

### 3.5.3 これだけは知っておけ Kaggle アカウント集

- [bestfitting](https://www.kaggle.com/bestfitting)
    - 12万人超中の堂々の 1st
    - Kaggle 界のロジャー・フェデラー(多分)
    - 知らないと言うと Kaggler 扱いされない(多分)
    - 最初の 2回は銀メダルでそれ以降金メダルしか取ったことない
    - この人がいるだけで良いコンペ説がある
    - Discussion でも熱いコメントだったりとてもスマートな Solution を提供してくれる
        - スマートすぎてコンペが簡単に見える
            - フェデラーのテニスも簡単そうでしょう？
- [Guanshuo Xu](https://www.kaggle.com/wowfattie)
    - 現在 2nd(Highest Rank 2nd)
    - 最近は結構 Discussion でも見られる
- [Pavel Pleskov](https://www.kaggle.com/ppleskov)
    - 現在 3rd(Highest Rank 2nd)
    - H2O.ai の人
    - kaggle days でも発表されていたり、discussion もときたま現れる
- [Giba](https://www.kaggle.com/titericz)
    - 現在 4th(Highest Rank 1st)
    - **金メダル 47個**という異次元の人
    - Discussion でもよく見られる
    - 結構日本のプレイヤーともチームマージをしているイメージがある
- [Kohei](https://www.kaggle.com/confirm)
    - 現在 14th(日本トップ)
    - PFN の方
    - Twitter(https://twitter.com/smly)
- [CPMP](https://www.kaggle.com/cpmpml)
    - 現在 19th(Highest Rank 13th)
    - 現在 Discussion User Rank 1st
    - Discussion を眺めると必ずいる人
    - 色んなためになる知見を教えてくれる人
- [Heng CherKeng](https://www.kaggle.com/hengck23)
    - 通称ケロッピ先生
    - 現在 Discussion User Rank 2nd
    - Kaggle の伝道師
    - Discussion の量が異常であり、論文やその解説、実験結果等ためになる情報を提供してくれる
    - ~~(鉄コンペという嫌な事件のせいでダークサイドに墜ちた説がある)~~

### 3.5.4 Twitter について

紹介したいアカウントが多すぎるので、[u++(upura0) さん](https://twitter.com/upura0) の [kaggler をまとめたリスト](https://twitter.com/upura0/lists/kaggle1) がおすすめです。
このリスト1つであなたの TL上の Kaggle 密度が爆上がりします。

あとはその時々のコンペで Twitter で検索をかけるとアクティブなアカウントを見つけることができたりしますのでおすすめです。

# さいごに

最初に書いたとおり、Kaggle は下記の通りです。

- ソシャゲみたいなものだよ🤗
- 怖くないよ🤗
- 本当に楽しいよ🤗

Kaggle を始めるか迷っていたり、ちゃんとコンペに参加するべきか迷っている人はぜひ上の部分を参考にもっと気軽に楽しんで欲しいなと思います。
(もちろん [これはゲームであっても、遊びではない](https://dic.nicovideo.jp/a/%E3%81%93%E3%82%8C%E3%81%AF%E3%82%B2%E3%83%BC%E3%83%A0%E3%81%A7%E3%81%82%E3%81%A3%E3%81%A6%E3%82%82%E3%80%81%E9%81%8A%E3%81%B3%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%84) 要素もありますが…)

Kaggle を始める要素は何でも良い(ex. 就活に役に立ちそう、社内評価云々)のですが、Kaggle を続ける上では **楽しい** ことが一番大事だと思います。

それでは皆さん良い Kaggle ライフを！