Kaggleコンペに初参加した話

 https://kcs1959.jp/archives/5611/general/5611 ←3日目 5日目→ https://yapatta.hatenablog.com/entry/2020/12/05/134721

 これはKCS AdventCalendar2020 4日目の記事です。

 11/30に終了した機械学習のコンペであるKaggleのMoAというコンペに初めて参加したため、その際に学んだことについて書こうと思います。

筆者について

 筆者のプログラミング経験は、競プロ(AtCoder 水)くらいしかなく、機械学習についてはあまり詳しくはありません(一応、最低限の機械学習の知識(代表的なモデルなどの知識)くらいはあるつもりです)。Kaggleの経験として、いくつか過去のコンペで他人が書いたNotebookを見たことがあるくらいです。

総評(結果)

 まず初めにコンペの結果について話すことにします。結果としては、Private LeaderBoardの順位(最終順位)が3300/4373位(上位76%)であり、コンペに初参加したこと及び、1週間程度しかKaggleに時間を割けなかった(割かなかった)ことを考えると妥当な結果なのかなという気もします。インターネットで「Kaggle 初参加」などで調べると初参加でメダルをとったという記事がいくつか出てきますが、それはその人がある程度機械学習に詳しいからだと思います。

 競プロの(マラソンの)感覚で1週間程度でもある程度良いスコアがとれると思っていたのですが、Kaggleの特徴として以下のような点があります。

1、1日の提出回数に制限がある。(MoAコンペでは1日3回まで)

2、機械学習に時間がかかる。(MoAコンペでは最大9時間までCPUを使用できる)

 そのため、競プロのマラソンの感覚でかかる時間を考えるとおそらく締め切りに間に合わなくなります。筆者は1週間程度しか参加しませんでしたが、上位を狙うのであれば最低でも3週間程度は時間をかけた方がいいと思いました。(特に最初のうちはベンチマークの作成(提出のもととなるコードの作成)に時間がかかるので、ある程度の時間は必要だと思います。)

Kaggleコンペで行ったことについて

 筆者の場合は1週間程度しか時間がとれなかったので、1週間のうちの3日程度をベンチマークの作成や評価指標の確認、コンペの概要の理解などに費やしてしまいました。後から考えると、ベンチマークの作成は初心者の場合、他の人の公開されているNoteBookをそのまま使ってしまった方が楽なのかもしれないと思いました。そのため、残り4日で何ができるかを考えたところ以下のようなことを行いました。

・訓練データ、テストデータの中身を分析する

・既存のデータから特徴量を新たに作る

・データの列(columns)が多かったので主成分分析をする

・学習モデルを決定する(light gbmを用いることにしました)

・交差検証をしてCVスコアを求める

 これらのことをしていたら、あっという間に締め切りになってしまいました。また、特徴量をいくつか作ってみたのですが、あまり精度の向上はありませんでした。しかし、一応最低限のことはできたのではないかと思います。

 

Kaggleコンペでやり残したことについて

 結構まだ時間をかけてやりたかったことが残っています。例として以下のようなものがあります。

・light gbmのハイパーパラメーターのチューニング

・モデルをニューラルネットワークにしてみる

・複数のモデルを作ってアンサンブルをする

・他のひとが公開しているNotebookをよく見る。

・データの前処理(クレンジング)を行う

 このあたりのことも次回参加するコンペではやってみたいです。

Kaggleコンペを通じて学んだこと

 本コンペで学んだことはいくつかありますが、本記事ではその中でも2つほど重要だと感じたものについて書くことにします。

・Trust CV score(Public Leaderboardの順位よりも自分のCVスコアを信じるべきだという言葉)は本当である

 Kaggleの名言(?)にTrust CV scoreという言葉があります。これは、順位表の順位や点数よりも自分で作った交差検証のスコアを信じるべきだという言葉です。そもそも、Kaggleのコンペ中の順位表のスコアというのはテストデータの一部(本コンペでは25%)のみによって計算されていて、最終順位は残りの75%のデータによってのみ計算される(コンペ中の順位表のスコア計算に使われているデータとは別のデータによってのみ計算される)ので、あまりコンペ中の順位や点数を盲信すべきではありません。

 実際に筆者もモデルの改良をしたはずなのになぜか点数が下がっているといった現象が起こりましたが、これはテストデータの偏りによって起こるものであり、最終結果に用いるテストデータによって計算されたスコアではモデルの改善が点数の向上につながっていました。

 また、MoAコンペでは最終結果に使われるモデルとして最大2つを自分で選択できるのですが、筆者は何も考えずにPublic Score(コンペ中のスコア)が高かった2つのモデルを提出してしまいました。その結果、Public Scoreがあまり高くないモデルが実はPrivate Score(最終結果)では高得点であるといったことが起こり、順位を下げてしまいました。

 このことから、Public Scoreはあくまで参考程度にするのがよく、それよりも交差検証のスコアをモデルの評価に使うべきだと感じました。

提出期限について

 これはあまり本質的ではないのですが、Kaggleでは提出したモデルの実行の完了が締め切り日の09:00(JST)までに行われる必要があります。この時間より遅く実行が完了したコードについてはたとえ提出が時間前であっても最終結果として採点されません。すなわち、実行に3時間かかるコードの場合、06:00(JST)までにコードのsubmissionを行う必要があります。筆者はこれを競プロの感覚で、提出が09:00(JST)に間に合えば良いと勘違いしていて、最後の提出をすることが出来ませんでした(実行の完了が09:00に間に合いませんでした)。この最後に提出したコードが最も良いスコアだったので少し残念です。

https://www.kaggle.com/c/lish-moa/discussion/200417 (情報ソース)

 また、MoAでは提出結果をKaggle上のノートブックで行う必要があり、提出をするためには一度コードを実行しなければなりません。そのため、例えば実行に9時間かかるコードを期限内に提出するためには、締め切り当日の00:00(JST)までにコードを提出する必要があるため、締め切り日前日の15:00(JST)にはKaggle notebook上でコードの実行を開始しなければなりません。

 従って、締め切り直前の提出には気を付けた方がいいでしょう。

まとめ

 今回はあまり時間がとれなかったのでこのような結果となってしまいましたが、次回参加するときはもっとしっかりと時間をかけてKaggleに取り組みたいと思います。

https://kcs1959.jp/archives/5611/general/5611 ←3日目 5日目→ https://yapatta.hatenablog.com/entry/2020/12/05/134721

Posted on: 2020年12月3日, by : sangonana
Exit mobile version