問題を理解したらkaggleのコンペでソロ銀メダルをゲットした話

 

kaggleに挑戦して7ヶ月目、Ion Switchingというコンペで、ついにソロ銀メダルを取ることができました!

 

へーーよかったですね~。
どんなチートをしたんだい?
公開されているカーネルを集めてアンサンブルでもかけていたのかい?

 

いいえ、それで銀メダル取れる人なんていないよ。
銀メダルの決め手になったことは、問題文の意図、背景を理解することでした。
これでやっと、「メダル取れませんでした」というブログを書かなくて済むようになりました(笑)

 

というわけで、銀メダルを取ることができたIon Switchingとはどんなコンペだったか、そして「問題を理解する」とは、どういうことか解説したいと思います。

 

 

 

Ion Switchingとはどんなコンペ?

電流から細胞膜で働く(開いている)イオンチャンネルの数を予測するものです。2600チームが参加する比較的大きなものでした。

 

Ion Switchingのコンペの概要

University of Liverpool – Ion Switching

 

メダル圏内に入れないとき、どのようにコンペに取り組んだか

 

前半は他人のカーネル(notebook)を参考にする

コンペの最初の方は、人気があるカーネルを見てどのように解いているのか、参考にしていました。それだけでもある程度(銅メダル圏内に届くか届かない程度)は、スコアは上がります。

 

中盤からスコアが上がらなくなる

カグラーさんのカーネルを参考にしているだけだと、スコアが上がらなくなりました。やっていたことは、公開されているカーネルの特徴量、パラメータを適当にいじるのみでした。

 

もうこれ以上スコアが上がらないと感じたら、これまで作ってきたモデルを掛け合わせてみます。

しかし、アンサンブルをかけても、今回のコンペではなぜか上昇しませんでした。

その後、いろいろ試してみてもスコアが上昇する気配がありません。

 

銀メダルに届いた決め手になったことは?

スコアが上がらなくなってから、2週間が経ちました。

やる気も起きませんでした。

 

重要!失敗したときの行動を残しておくこと

そこで、過去のコンペでメダルを取り逃したときに書いたブログを読み返しました。

そこには、このように書いてありました。

 

  1. 問題の意図、背景は理解していますか?
  2. 失敗したのは、このコンペで何を解決してほしいかを理解していないのでは?
  3. ディスカッションからヒントを得ないから失敗した
  4. 問題を理解していないから特徴量エンジニアリングまで手が回らなかった

 

あれ!
なぜスコアが上がらないのか、そのヒントがちゃんと書いてあるじゃん!
また、同じことをくりかえすのか?

 

このままだと、メダルを取り逃したときの行動と全く同じであることがわかりました。どのように行動していれば良かったのかも、ちゃんと残してありました。

 

https://programming-info.dream-target.jp/kaggle_quest

 

 

ポイント

ブログは、「kaggleでメダルをとった!」など、成功したときに書くものと思われがちだが、私は、負けたときの状況も残すようにしていました。

 

うまく行かなかったときのことを残しておくと後で振り返ることが出来る。

過去の失敗を見返すことで、同じ失敗をしないように思うことができました。

 

スコアが上がらなくなったら問題の理解に努めること

スコアが上がらなくなり積んだら原点に戻る。

つまり、問われている問題を背景も含めて理解すること。

たったこれだけです。

 

カグラーさんのカーネル(note book)やディスカッションを参考にするのはもちろんですが、もっとも重要だったのは、そもそも問題では何が問われているのか、背景も含めて理解することでした。

 

問題、背景を理解すると「この特徴量は必要、不必要」と確信を持って取捨選択ができるようになりました。その結果、銀メダルを取ることができたと思います。

 

Kaggleで実際に役立ったもの

問題の理解のために具体的にやったことは?

具体的にやったことは、以下の通りです。

 

  1. ディスカッションをより詳しく見る
  2. 概要を読み返して問題の意図を理解しようとする。
  3. イオンチャンネル、細胞の仕組みを理解するため、高校の生物学の動画で勉強する。

 

その結果、動画からこんな知識を得ることができました。

 

  1. チェンネルは刺激を受けると増える→信号がどれくらい増減したかの特徴量が必要
  2. オープンチャンネルが増えると電位が上がる→チャンネル数と電位は密接に関係ある
  3. 電位があるところまで上がると、下がり始める→移動平均の特徴量が必要そうだ

 

参考になった動画は以下の通り。

 

 

 

 

動画みたあとは、

特徴エンジニアリングを仮説を立ててできるようになりました。

 

以上のように問題、その背景を理解しようとして、特徴量を反映させていたら銀メダルを取ることができたのだと思います。

 

 

これをやっていたらメダルを逃していたことは

いままでをふり返ると、メダルを取り逃したときはこんな行動をしていました。

 

  1. カグラーさんのカーネルをコピーして、「ここいじればよくねぇ?」
  2. よくわからないけど、この特徴量、パラメータを修正すれば良さそうだ
  3. とりあえずアンサンブルやっておけ(筆者はアンサンブルをかけたら逆にスコア下がった)

 

よく考えてみると「分析」になっていないですね(苦笑)。

 

 

金メダル、そして入賞するには?

銀メダルを取った後の次の目標は、金メダルです。

金メダルは、銀メダル圏内からさらに10%程度なので狭き門です。

 

私は、まだ金メダルに到達していないため体験談を持っていないですが、金を取った人の行動をみるとこんな感じでした。

 

  1. 機械学習関連の英語の論文を読もうとする(筆者は、最初の数行で見なかったことにする)
  2. 数式の意味を理解する、数式から逃げ出さない。
  3. 出題者の意図を理解すること

 

上にあげているものは、いままで避けてきたことだなと思います。

ディスカッションで重要なヒントがあったのに、英語の論文を読むところで萎えて「これ見なくてよいな」で済ませていました。

 

Ion Switchinでは、HMM(隠れマルコフモデル)が重要なヒントでした。

実際にコンペで一位を取った人もHMMを活用していました。

 

1st place non-leak Solution

 

 

しかし、私はHMMの実装が方法がわかりませんでした。public notebookにもHMMの実装例が無かったため、HMMを使うことが本当に正しいのかわかりません。

public notebookにないものは、答えでは無いと勝手に思い込んでいました。

 

もし少しでもHMMについて理解しようとしていたら、さらに成績があがっていたかもしれません。

 

金メダルを取るための行動としては、これまで避けてきたこと(英語の論文を読むなど)に立ち向かうことじゃないかと思います。

 

まとめ

今回のコンペを通して学んだことは、テクニックに頼ることでは無くて、問題の意図の理解、背景の理解が重要であることに気付いたことです。

 

次は、金メダルを取りたいですね。

 

合わせて読みたい

https://programming-info.dream-target.jp/aijobcolle-study

 

最新情報をチェックしよう!
>プログラミングスクール検索・比較表サイト

プログラミングスクール検索・比較表サイト

ワンクリック、さらに詳細に条件を指定してプログラミングスクールの検索ができます。さらに比較表により特徴を細かく比較できる!

CTR IMG