まだタイトルない

アウトプット用です

どんな人がkaggleを始めて4ヶ月でCompetitions Expertになったのか

はじめに

この記事はKaggle Advent Calendar 2020 の19日目の記事です。
18日目は fam_taroさんのコンペのために LambdaPC を購入してみたお話でした。電力の確認という工程が印象的でした。自分のGPUはGTX1070なのでそろそろメモリの大きいGPUとか考えたくなります。
20日目はupuraさんのWeekly Kaggle News 1周年です。(後でリンク貼ります)この場を借りて、おめでとうございます!

簡単な自己紹介と概要

teyosan1229という名前で今年の6月からkaggleをはじめました。銅メダルを2枚獲得したのでCompetitions Expertです。

本記事では大きく分けて2つのことを書きます。1つ目は私について少し踏み込んだ自己紹介をします。2つ目はそんな私がここまでどのようにkaggleに取り組んできたのかを書きます。

少し踏み込んだ自己紹介

  • どんな経歴?
    • 高校卒業後、地方国公立大学の情報系の学部に進学
    • 同大学院に進学し修士号を取得
    • 研究内容は機械学習関係
    • 大学院修了後就職し、現在は社内SEのようなことをしている
  • どんな研究をしていたか
    • 機械学習ソフトウェアをつかって機械学習をごにょごにょしていた
      • つまりpythonとはほとんど触れ合っていない
      • 優しいラボにいたので修士課程修了者の風上にも置けない存在
  • プログラミングについて
    • 大学院卒業時点でほぼ何も出来ない状態
    • 就職してからC#を使い始めて4年目くらい
      • 改修メインなのでC#出来ますとは口を避けても言えない
    • pythonちゃんと触り始めたのは今年から
  • 数学について
    • 高校レベル(数ⅢC)までは模試の得点源だった
    • 大学数学は偏微分くらいまでは出来たけどそれ以降はさっぱり
      • 単位については過去問で乗り切ったり潔く諦めたりしていた
    • 高校数学を解けるけど分かっていなかったんだと思う
  • 英語について
    • 苦手意識がとてもある
    • TOEICは5~600点
    • kaggleも基本DeepL片手にやっている
  • 機械学習系のドメイン知識
    • 研究で関わってはいたためtestとtrainに分けて学習するような流れはすんなりと受け入れられた
    • あとはG検定とかkaggle本とか、コンペに取り組む中で少しずつ理解していってる
  • kaggle始める前に準備したこと
  • この半年の取組具合
    • だいたい平日2時間、休日5時間
  • 今の目標
    • competitions master(それに伴う実力
    • 将来的なものは特に考えてなくて、ネトゲで強くなりたいという感覚が一番近い

以上になります。

それではこの半年間で真面目に取り組んだコンペ3つについて書いていきます。

1.M5 Forecasting - Accuracy

www.kaggle.com

内容

  • 過去の売上データをもとに、未来の一定期間の売上を予測するというコンペ
  • Validation PhaseとEvaluationPhaseの2段階で行われた
  • データは下図のようなイメージで、②についてはpublicLB、③はprivateLBに使われる
    • Validation Phase終了時に②の解答が公開された

f:id:teyoblog:20201218232422p:plain

取組内容

スタートブックを読んだとはいえはじめての開催中コンペということで右も左もわかりません。
まずは何をするコンペなのか、どんなデータが与えられているのか、EDAを読みました。 次に、強そうな公開ノートを読んで実際に動かしました。

f:id:teyoblog:20201218232514p:plain

このノート1と関連するノートの解読することでかなり長い時間がかかりましたが、 参考にしたノートが①をtrain,②を予測するという内容でした。

f:id:teyoblog:20201218232621p:plain

直近28日分を使わない選択肢がないということで①と②を使って③を予測するように書き換えて、学習し直して提出しました。

f:id:teyoblog:20201218232635p:plain

※ほかにも時系列データならRNNでは?という認識だったためRNNとかLSTMのnoteも試そうと思いましたが時間的に成果はありませんでした。

結果

パブリックの解答を提出するというやらかしをしてしまったのですが、初コンペながら銅メダルを獲得することが出来ました。

f:id:teyoblog:20201218232649p:plain

2.Cornell Birdcall Identification

www.kaggle.com

内容

音声データの中で聞こえてくる鳥の種類を識別するコンペ

取組内容

f:id:teyoblog:20201218233035p:plain

このノート2をベースに取組みました。
取組内容としては

  1. 下記の音声データで有効と言われている処理を実装して組み込む
    1. waveform transform
    2. Mixup
    3. SpecAugment
  2. Fold Emsembleをする

1はQiitaなどを参考に実装して公開ノートに組み込みました。

f:id:teyoblog:20201218233247p:plain

2は上の図のような感じです。公開ノートはmodel0を作るものだったため、model1~4を自分で作ってアンサンブル(Fold Emsemble)をしました。 1と2の結果初めてベースラインを自力で超えることが出来ました。

鳥コンペでは上記ノートのスコア0.568がベースライン的な存在になっているとともに、分厚い壁でもありました。discussionに"Any hints to beat the 0.568 baseline?"というスレッドまでたっていたためより一層嬉しかったです。

結果

このコンペではpublicLBで銀圏内まで行くことが出来ました。しかし、Shake downをして銅メダル。提出しなかったものにも銀メダルを取れるものはありませんでした。
とはいえこれで銅メダル二枚目なのでここでExpertで、ここまでがタイトルにある4ヶ月になります。

f:id:teyoblog:20201218233701p:plain

3.Mechanisms of Action (MoA) Prediction

www.kaggle.com

内容

  • マルチラベルテーブルデータコンペ
  • 薬物を投与したあとの、遺伝子、細胞に関する測定結果から、ある作用機序が発生しているかどうかを分類する

この12月頭まで開催されていたコンペで、2日目にimokurityさんが概要等詳しくまとめてくださっています。3

取組内容

このコンペでは色々自分の手で実装する力をつけたいというメインの目的で取り組みました。

王道のLightGBMと、コンペで活躍する雰囲気のあったNNとTabnetを公開notebookを参考に作りました。 keras,pytorch問題は情勢を鑑みてpytorchを選択。

その後比較的時間に余裕があったこともあり、スタッキングやらアンサンブルにも挑戦しました。

このコンペでのスタッキングについては16日目にTawaraさんが詳しくまとめています。4とても勉強になりました。私が実際に使ったものは1つ目に紹介されている Stacking by MLPです。

結果

public/privateともにメダル圏内に入ることが出来ずにメダルを取得できないという結果で終わりました。進歩としては、手元に銀圏に行ける物があったことです。
目標としてた色々実装することは出来ましたが、いいスコアを出すための課題をクリアできなかったのがこの結果になったと思います。たくさん観察して、仮設を立てて、実験してまた考えることが大切で自分には全く足りていない力ということを感じました。

3つのコンペの振り返り

それぞれの詳しい振り返りは下記になります。

teyoblog.hatenablog.com

teyoblog.hatenablog.com

teyoblog.hatenablog.com

おわりに

今回は自分の経歴と半年間の取り組みを紹介しました。今後kaggleに挑戦する人やタイタニックの沼にハマっている人に有益な情報になれば幸いです。「こんな情報なんぼあってもいいですからね!」

今後の話をするならば、2021年はCompetitions masterを目標にします。kagglerの皆様にはお世話になることもあるかと思いますが、何卒宜しくお願いします。