Kaggleに入門 Day1 調査とセットアップ

## 自己紹介

* 情報系の大学の院卒、研究テーマは機械学習ではないが、基本的な数学や統計は一通り分かる
* 仕事でプログラミングは広く浅くやっている。PythonやPandasも触れる
* 色々あって10日くらい暇になった(起きている時間を全てKaggleに割けるわけでは無いが)
* 過去にKaggleに手を出して一瞬で放置した経験あり

10日でKaggleに入門しようと思いました。

## Day1 のテーマ

* 10日間の進め方を決める
* 現時点でのゴールを決めておく
* 環境構築して何かコードを動かす

## 進め方を決める

Kaggleには称号があるらしい。

Novice -> Contributor -> Expert -> Master -> GrandMaster

いくつかの項目(Competitions, Datasets, Notebooks, Discussion)それぞれで上の称号が与えられ、おそらく多くのKaggleマスターみたいな人はCompetitionsでMasterを取っているということのよう。他の項目ももちろん大事だけれど。

称号のイメージとしては、Expertならちゃんとやってる、Masterは凄い人！、GrandMasterは有名人、というイメージっぽい。

称号の条件のまとめがあった。 https://www.currypurin.com/entry/2018/02/21/011316

Masterはちょっと先の目標っぽい。一旦は **CompetitionsのExpert** をゴールとして目指してみようと思います。

Expertの条件は、Bronze(上位10%)を2回。

Discussionなどを追って実装していけば取れるみたいな記事を見た。結局コンペに参加して色々手を動かしてみるのが早そう。

というわけでActive Competitionsを見てみます。

![スクリーンショット 2022-01-19 9.44.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/257749/da181c04-19fe-f182-ccdb-286e7b53720e.png)

自然言語処理、画像認識、価格変動予測、などなど…

内容も色々あって面白そうですが、

* 参加者が多い → 汎用性が高そう(専門性が低そう)
* 期限が近い → 早く結果が出るのでモチベーションに繋がりそう

を条件に調べてみます！

というわけで以下の2つに絞りました。

* [Jigsaw Rate Severity of Toxic Comments](https://www.kaggle.com/c/jigsaw-toxic-severity-rating)
* [Tabular Playground Series - Jan 2022](https://www.kaggle.com/c/tabular-playground-series-jan-2022)

1つでも良かったけれど2つやれば比較もできるので。途中でどっちかに絞りたいと思ったら1つ切ることもできそう、とも思います
Jigsaw が 20 days to go、Tabular が 13 days to go なのでどちらもすぐ結果が見られそうです。

では早速、Jigsawの方にエントリーしてみます。

まずOverviewを読んでいきます。英語なのでGoogle翻訳を駆使します。

タイトルの`Rate Severity of Toxic Comments`というのが、直訳すると有毒なコメントの重大度の評価、要するにコメントの迷惑度を評価するみたいなことのようです。

タスクとしては、2つのコメントのうちどちらが有毒かを判定するというもので、人間でも、明らかな場合と意見が分かれる場合がある、みたいなことが書いてあります。

また2つの論文のリンクが貼ってありました。

"[Ruddit: Norms of Offensiveness for English Reddit Comments](https://aclanthology.org/2021.acl-long.210/)"

"[Constructing Interval Variables via Faceted Rasch Measurement and Multitask Deep Learning: a Hate Speech Application](https://arxiv.org/pdf/2009.10277.pdf)"

論文読むのは大変なので後回し。

評価方法

提出ファイルは、コメントデータについて毒性を`score`として数値化したファイル。
その数値に基づいて、評価用のコメントペアについてアノテーターとの一致度の平均がスコアになります。
なのでスコアは`0`から`1`の値を取ります。

同じコメントペアを他のアノテーターが異なる評価をする可能性があるので、おそらく最高スコアの理論値は`1`よりも少し小さい値になりそうです。

Leaderboardを見てみると、参加チーム1915チームで
1位: `0.909`
10位: `0.901`
100位: `0.886`
1000位: `0.850`
となっており、スコアは上の方に固まっている = 基本手法は固まっており、細かいチューニングでスコアが分かれる のかな？と思います。

次にCodeを見てみます。他の参加者が上げているコードが見られます。スコアも書いてあるので、一番スコアが高かったCodeを見てみました。

[Jigsaw-Ridge Ensemble + TFIDF + FastText [0.868]](https://www.kaggle.com/nkitgupta/jigsaw-ridge-ensemble-tfidf-fasttext-0-868)

Copy & Edit ボタンがあったので、コピーしてよく分からずにポチポチ実行してみます。ファイル名だけ違ったので直しました。

実行時間が10数分くらい。

Submitボタンもあったので提出してみると、スコア`0.867`で485位という結果が出ました。

ここからコードを見て更新していって、190位くらいに入れればBronzeメダル獲得！という訳ですね。

ちなみに今の190位は`0.884`でした。300位くらいまで`0.884`なのでこの辺りにかなり集中しています。みんなメダルを目指してやっているということでしょう。

余談、ためしにx順位-yスコアでプロットしてみると、

![lb0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/257749/a33757bf-0a4e-4d3d-3d47-490b0e61a566.png)
![lb1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/257749/38000e72-391e-64c2-9d66-6d45457afd9f.png)

あまりにも`0.884`の人が多いので何か公開のCodeがあるのかも？とも思いました。

コード動いたことだしDay1はこれくらいにしておきます。

次のステップとしてはこのCodeの処理を理解する、もう少し他のCodeを見る、Discussionを見る、あたりがありそうです。

---

追記：`0.884`のCode、2h前くらいに出てたのがあった。
[very simple code with score 0.884](https://www.kaggle.com/ayhampar/very-simple-code-with-score-0-884)
そのまま動かしたら142位になった。