自己紹介
- 情報系の大学の院卒、研究テーマは機械学習ではないが、基本的な数学や統計は一通り分かる
- 仕事でプログラミングは広く浅くやっている。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を見てみます。
自然言語処理、画像認識、価格変動予測、などなど…
内容も色々あって面白そうですが、
- 参加者が多い → 汎用性が高そう(専門性が低そう)
- 期限が近い → 早く結果が出るのでモチベーションに繋がりそう
を条件に調べてみます!
というわけで以下の2つに絞りました。
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"
論文読むのは大変なので後回し。
評価方法
提出ファイルは、コメントデータについて毒性を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]
Copy & Edit ボタンがあったので、コピーしてよく分からずにポチポチ実行してみます。ファイル名だけ違ったので直しました。
実行時間が10数分くらい。
Submitボタンもあったので提出してみると、スコア0.867
で485位という結果が出ました。
ここからコードを見て更新していって、190位くらいに入れればBronzeメダル獲得!という訳ですね。
ちなみに今の190位は0.884
でした。300位くらいまで0.884
なのでこの辺りにかなり集中しています。みんなメダルを目指してやっているということでしょう。
余談、ためしにx順位-yスコアでプロットしてみると、
あまりにも0.884
の人が多いので何か公開のCodeがあるのかも?とも思いました。
コード動いたことだしDay1はこれくらいにしておきます。
次のステップとしてはこのCodeの処理を理解する、もう少し他のCodeを見る、Discussionを見る、あたりがありそうです。
追記:0.884
のCode、2h前くらいに出てたのがあった。
very simple code with score 0.884
そのまま動かしたら142位になった。