Kaggleのコンペでシェイクダウン!モチベーションアップ方法とは

金メダルとったメイド

Mechanisms of Action (MoA) Predictionコンペお疲れ様でした!
最終結果どうだった?

メダル無しのメイド

publicスコア(テストデータの25%で評価)だと銀メダルだったのに、
シェイクダウンでメダルどころか、無印になってしまったよ。
この数ヶ月、メダルとるために時間を費やしてきたのに!時間返せ~。

kaggleあるあるだね~。
publicで1位でも奈落の底に落とされることがあるから、気を落とすなって。
時間を費やしたと言うことは、それだけ何かを得たはずだよ!
一度は通る道だから、次頑張れ!

わかった・・・。
しかし、モチベーションをどのように維持したら良いのかわからないな。

結論から言うとモチベーションの維持の方法は以下の通り

  1. なぜシェイクダウンしてしまったのか原因追及して書き出す
  2. 勝者を祝う心の余裕を持つ
  3. 2,3日以内の短期間のアウトプット
  4. 寝ること
  5. 作業場所を変える

この記事では、なぜ上記のような答えなのか述べていきますよ!

筆者ってどんな人?

つい最近までは、UnityとPHPでスマホ(ios,Android)のゲーム開発をしていました。後輩が入るまでは、1人でクライアント側(Unity,objective-c,Java)とサーバーサイド(PHP,Cakephp,Redis,MySQL)まで実装するという開発体制で大変でしたが、そこでたくさんのことを学ぶことができました。

ゲーム開発の5年間で特に学んだことは、ユーザーを怒らすと大変面倒なことになる。しかし対応次第では180度態度が変わり熱烈なファンになることでした。

最近は、Pythonを使ったWeb開発をしています。

WEBシステムには、今後、機械学習(自然言語)も採り入れることになっているため、楽しみであります。

Kaggleに興味を持ったきっかけは?

Kaggleに興味を持ったのは、カレーちゃんが開催(現在も開催しているかどうかは不明)する、kaggleチュートリアルに参加したときです。

kaggleの概要説明から、タイタニックコンペで実際にカーネルを提出するところまで実践するという大変有意義な講義でした。他の参加者とも交流ができて楽しかったです。

Kaggleの挑戦のきっかけは、AIジョブカレの卒業コンペで、予測対象を誤りビリを取ってしまい、消化不慮の状態になってしまったのがきっかけです。

卒業コンペで上位2位に行くつもりだったのに、結果を聞いたときはショックで寝れなかったことを覚えています。

機械学習は、プログラミング経験があればすぐにできるだろう?と思ったことはないだろうか?残念ながらAIに関しては、プログラミング言語を一つ取得することと全く別でした。では、どのように習得すればよいかと考えたときに、ひとつの解決策がAIジョブカレに通うことです。
AIジョブカレに通い出して6回目の授業が終わりました。6回目の授業が終わったとき、AIジョブカレで良かったと思ったのです!その理由は、データの集め方から、機会学習全体像が分かったからです。

Kaggleの実績としては、1年間で10個ほどのコンペに参加して、銀メダルを1つ手に入れた程度です。

悪夢のシェイクダウンで400位以上も落とされて無メダルに

最終結果が出る前のPublicスコアでは102位のところにいました。シェイクダウンが起きても余裕で銀メダル圏内にいると思っていました。

いざふたを開けてみると・・・。

なんと512位!

「なんじゃこれは!いったい何が起きたんだ!!」

ショックを受けないはずがありません。

コンペ終了前夜はウキウキ気分だった

コンペ終了一週間前、publicスコアで4000人中70位に上がったときは、

「おれすげーーついに、全体の2%にまで上り詰めたぜ!」

「kaggle初めて1年くらい経つけど、自己最高記録だ!」

「シェイクが起きてもさらに100位以上も転落することは無いだろう。やっとの思いでエキスパートに入れそう」

と、うきうき気分だった。

もうやることはほぼない、より点数を上げるために適当にパラメータをいじる程度だった。

しまいには「これでシェイクが起きれば、もしかしたら金メダル圏内に入れるんじゃね?」

とまで慢心したのでした。

今思うと恥ずかしい限りです。

これでメダルは取れるわけ無いですね・・・。

最終結果が出たあと、トップ層はどのようなソリューションを解いていたのか気になったので確認してみた。

これでメダル取れていたらただの儲けもんだったと言う感想

4位を取った「Kanna Hashimoto」さんのソリューションを画像のみですがみてみましょう。

以下の4th Place Solutionより引用

https://www.kaggle.com/c/lish-moa/discussion/200808

「明らかに僕が作ったものとちがう!アンサンブルで使っているモデルの数が違う!

アンサンブル以外にも、たくさんのことを試していることがわかる。たしかにこれなら金メダルに行けるはずだ・・・」

僕がやったことと言えば、ディスカッションで取り上げられたものを取り入れたものばかりだった。

  1. PCAで列に対して特徴量を増やす
  2. PCAを利用して行に対して特徴量を増やす(唯一、自分であみだしたもの)
  3. RankGaussでさらに特徴量を増加させる
  4. 平均値、合計値なども特徴量として追加
  5. ニューラルネットワークで学習させる
  6. TabNetも追加して学習させる
  7. ニューラルネットワークとTabNetを組み合わせたアンサンブル
  8. 以上!

金メダルをとった「Kanna Hashimoto」さんのソリューションを見たとき、これはメダルに届くわけが無いと思ったのでした。相当時間を費やしたのでしょう。

周りを見ているとすごい。

チーム全体で銀メダル24個のチームもあった。

おそらく、何度挑戦しても、金に及ばないところで悔しい思いを何度もしてきたと思う。

最終的には、そのチームは金を取ることができていました。改めて努力されている方がたくさんいることに気付いた。

「まだまだ甘いな。こりゃぁ、勝てるわけ無いな」という思考になり、「しょぼーん」となっていたモチベーションは、回復したのでした。

結果的に、どのように戦っていけば良いか、より明確になったので、MoAコンペは大きな学びになりました。

kaggle始めた頃は、トップ層のソリューションをみても

「これどういう意味だろう?わからん!」で終わらせていましたが、

今ではソリューションの内容もわかるようなり、過去に比べると良くなっていることが実感できます。

本題!モチベーションを維持する方法

本題のモチベーションを維持する方法にふれます。

シェイクダウンからのモチベーション維持

なぜシェイクダウンしてしまったのか原因追及して書き出す

シェイクダウン後に「あーー落ちた、オワタ😭」で終わってしまうと、原因がわからずモチベーションを回復するのは不可能です。

シェイクダウンする理由のほとんどは、汎用性があるモデルを作れなかったからです。

よって、トップ層のソリューション(解法)を参考にして、何が違うのか原因を分析します。

原因分析をしたら、頭の中で終わらせるのでは無く、外部にアウトプットします。

私の場合は、資産を目に見える形で残したいと言う気持ちから、ブログに反省点などを書いて公開するようにしています。

これを読んでいる人には僕みたいに「ここまで頑張ればいいだろう。運良ければ金メダルにいくんじゃね?」みたいな考えにはなってほしくないと思います😊

ブログにまとめる方法は、思考を整理できます。

次の行動パターンが見いだせると、モチベーションに繋がります。

もしブログに書く時間が書ければ、Twitterに反省点をツイート、メモ帳に書くでも良いと思います。

勝者を祝う心の余裕を持つ

Twitterで、#kaggleで検索すると「優勝しました!」「金メダルに入りました」がチラホラあります。それをみると「おれ、負けたし、見る気しない」と思うかもしれません。

よく考えてみると、そのようなツイートをしている人は10人にも満たないと思います。Moaコンペだけで見ると、4000人以上の参加者がいて、金メダルはそのうちの全世界の20人のみです。かなりの少数のツイートだと思います

また、金メダル取った人の中には、kaggle初めて3ヶ月でソロ金を取ってしまう人(極少数)、数年かけてやっと金に届いた人と様々です。

良い成績を取った人にお祝いのコメントを残してあげると、意外に心の余裕が生まれるものです。

コンペ中のモチベーション維持方法

短期間のアウトプット

コンペは数ヶ月間の期間で開催されます。

(publicスコアがあるとは言え)最終結果が出るまで、モチベーションを維持するのは難しいです。

そこで短期間(2,3日以内)のアウトプットがおすすめです。

僕が実際にやったアウトプットを紹介します。

その1:カーネルの公開

短期間のアウトプットとして、kaggleのカーネル(Notebook)の公開がオススメです。

公開すると、他の参加者からの反応がすぐに来るからモチベーションも上がりやすいです。

反響(イイネみたいなもの)が良いと、短期でNotebooksNoviceのメダルが取れます。

俺の場合は、以下のような日本語のカーネルを公開しました。

【日本語】[Japanese] Riiid コンペに取り組む前の準備

MoAコンペは、「作用機序」「遺伝子発現」など専門用語が多すぎて、回答しずらい環境でした。

僕の場合は、日本語に翻訳してくれたものがあったけど、前知識がそもそもなかったのでその情報が欲しかった。

どんなコンペを戦っているのか人に説明できなかったので、説明できるようにしたかった。

アウトプットを通して、より整理できてモチベーションが上がりました。

その2:新しい知識を得たらブログで公開 

コンペ中に新しい知識を得たら、コンペに直接関係ない部分でブログに公開。

私の場合は、PACを利用して行単位で特徴量を追加する方法を編み出した(ヒントはネット上にあった)ので、それをブログ化した。

ブログにするのは面倒だが、短期間のアウトプットになるし、知識の整理になるので良かったと思います。

寝ること

疲れたら寝ること。

わからないことをただ数時間も悩んでいても進みません。

寝て起きると「あっそういうことか〜」と以外にすんなり知識としてインプットされることが多いのでおすすめです。

作業場所を変える

同じ作業スペースだけ飽きてくる。

そんなときは、作業場所を変えてみるのがオススメです。

僕の場合は、以下のようなことをやります。

  1. 家の中なら部屋を代えて気分転換
  2. ドリンク飲み放題のファミレスで作業
  3. スタバなど落ち着いた感じのカフェで作業
  4. 「Remo Cafe」というコアスペースとCafeのいいどこ取りをしたところで作業
  5. コアスペースで作業する
  6. もくもく会に参加してもくもくする
  7. 野外で作業

家以外の場所で作業するとき、作業場所に行ってから「何やるか?」と悩むとそれだけで時間のロスになるので、

行く前に何をやるのか決めてから行くのをオススメします。

野外で作業の補足

話しが少し脱線しますが、僕は、外に行けるときはパソコンをもって野外で作業をします。

特に多いのが、写真のような河川敷です。

つかれたときは、自然を見渡せるので、すぐに気分転換できます。

まとめ

以上、モチベーションの維持について書きました。

簡単にまとめると以下のとおりです。

  1. なぜシェイクダウンしてしまったのか原因追及して書き出す
  2. 勝者を祝う心の余裕を持つ
  3. 2,3日以内の短期間のアウトプット
  4. 寝ること
  5. 作業場所を変える

最も大事なことは、僕が機械学習の習得に苦しんでいるとき、AIジョブカレの講師が言ってくれた「あきらめないこと

それにつきます。

機械学習は、プログラミング経験があればすぐにできるだろう?と思ったことはないだろうか?残念ながらAIに関しては、プログラミング言語を一つ取得することと全く別でした。では、どのように習得すればよいかと考えたときに、ひとつの解決策がAIジョブカレに通うことです。

関連コンテンツ(広告含む)

関連コンテンツ(広告含む)

スポンサーリンク
PR




PR




シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
PR