Kaggleで銅メダル以上を取るには?コンペ後にwinner solutionを試した結果・・・

この記事を読むとわかること

・メダルが取れる人と、取れない人の思考パターンがわかる

・コンペ「Google QUEST Q&A Labeling」を例に、何をしたら銅メダルを取れるのかわかる

・無メダルと銅メダルの境界ラインが、実際のコードを使った例でわかる

プロローグ

先日、2020年2月10日にGoogle QUEST Q&A Labelingが終了しました。

Google QUEST Q&A Labeling

今回もメダルをゲットすることができませんでした。

どうしたら銅メダル以上を取ることができるのでしょうか?

少なくとも、コンペ中は、その差が分かりませんでした。

ふり返った結果、コンペの問題を理解していないことだと答えを出しました。

くわしくは、以下のブログを参照してください。

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

メダルが取れない理由の多くは・・・

コンペ主催者の問題を理解していないこと。

その結果、どのようにAIを活用して解決したらよいのかわからないため、間違った方向で進めてしまう

コンペ終了後、改めて問題文を読み直し、winner solutionの中の1つを試したら、スコアがそれだけで0.04ポイント上昇し、余裕で銅メダル圏内に入ることができたのです。

この体験を元に、銅メダル圏内に入るフローを解説したいと思います。

kaggleコンペ終了後に試したこと

上位者のDiscussionの内容を1つだけ、kernelに反映させてみた

コンペで3位を取ったsakamiのコメントをみたらこのように書いてあった。

Post-processing

I just clipped predictions. The thresholds are decided by golden section search.

This improve my score from 0.4434 to 0.4852. (CV score)

引用元

3rd place solution

「Post-processing」の部分がキーポイントになりました。

さらに調べていくと、以下のDiscussionが参考になったという記載がありました。

spearmanr evaluation metric and observation

Important observation

Then what happens when array contains same value and its order is not completely determined?

1st and 2nd rank is same, also 3rd and 4th rank is same for array a.

In that case array b also have same order to have correlation value 1.

Which means it is important to predict that value is same or not. If you take a look at the data (Refer published notebook Google QUEST: First data introduction), you can see that target value have many same values. I guess it will affect to the score by postprocessing the values to be same.

端的に言うと、目的変数をある値に離散値にパターン化させる必要があると言うこと。

コンペの説明では、ラベル(目的変数)値は0〜1の範囲で取ることまで説明されている。

Discussionで書いてある内容を元にトレーニングデータ(CSVファイル)をみると、たしかに「0.0、0.333333333、 0.666666667,1・・・」と連続でなく、数値がパターン化されている。

上記のディスカッションに行き着くことが、メダルと取れるかどうかのポイントになりました。

というわけで、モデルを使い予測結果が出たら、次の項目で目的変数の値をパターン化してみます。

実際に試してみる

改めてGoogle QUEST Q&A Labelingのトレーニングデータを眺めてみます。

「0.0、0.333333333、 0.666666667,1・・・」

たしかに、数字がある規則に沿ってならんでいることが分かります。

「ある規則」は、問題文に載っていないので、自分で想像する必要があります。

仮説

評価者(トレーニングデータの中では、目的変数の値を決めている人)は、0~1までの数字ではなく、数段階の評価(EX:「そうではない」「どちらともいえない」「そうである」のような3段階評価)で、評価をつけているのでは?

もしそうならば、テストデータの予測も、何らかの形で数段階の評価の数字で提出しなければいけないのでは?

検証

実際に検証してみます。

検証にかかる時間は、コミット時間、スコアリングの時間を除いて2時間以内でした。

結果は、スコアが0.04以上あがり、余裕で銅メダル圏内の得点になりました。

この時点では、publicのkernelからコピーし、一部のパラメータ変更のみのためアンサンブルなどの上級テクニックは使っていません。

またBertの使い方が分からなくても、「ここ、加筆、修正すれば良くね?」くらいの感覚で対応ができました。

実際のコードを載せます

ここで分かったことは、問題の理解、評価方法の確認をしたうえで、データをみることでした。

次に、Discussionを確認するとメダルに近づくと思います。

ポイントまとめ

・問題の理解

・問題を理解した上でデータを眺める

・当たりをつける

・もし当たりを見つけることができなくてもDiscussionを一通りみること

少数意見にヒントあり

Discussion、Public kernelは、極端にVoteされているものと、されていないものがあります。Vote数が少ないものは、「必要なさそうだ」と思い、見向きもしませんが、メダル獲得に重要なヒントが記載されていることが多い事が分かりました。

少数意見だとしても目を通しておいた方が良いといえます。

メダルゲットの思考のプロセスをまとめると

メダルゲットの思考のプロセスをまとめると以下の通り。

  1. 問題文を読んで内容を理解
  2. 評価方法を確認する
  3. トレーニングデータ(CSVデータ)をみて当たりをつける
  4. ディスカッションをみる
  5. 特徴量分析をしているpublicを見る(そこからヒントを得ることができる)
  6. そのうえで人のコードを見ると、なにをやっているのかわかってくる。
  7. 意外に重要でないことは、プログラングの知識。

問題文を読んで内容を理解

まずは、問題文をじっくり読み、何を問われているのか理解します。

コンペの多くは、これまで人がやっていたこと(業務)を、効率化のためAIを利用するケースが多いので、業務内容を(たとえ分からなくても)イメージするのが大事です。

評価方法の確認

Google QUEST Q&A Labelingコンペだと、評価方法はスピアマンの順位位相です。

評価方法を知らないとどのような値を出力してよいかわかりません。

public kernelをみれば、分かるケースもありますが、他人のコードが正しいかは、自分で判断する必要があります。

トレーニングデータ(CSVデータ)をみて当たりをつける

トレーニングデータ(csvデータ)をみて当たりをつけます。

・なぜこのような目的変数を求めるのか

・目的変数を求めるために必要なものは?

・どのように学習データを(出題者が)作っているか

ディスカッションをみる

そこに重要なヒントが載っていることがある。

まずは、眺めてみます。

特徴量分析をしているpublicを見る(そこからヒントを得ることができる)

特徴量分析をしているpublicを見る(そこからヒントを得ることができる)

そのうえで人のコードを見ると、なにをやっているのかわかってくる。

意外に重要でないことは、プログラングの知識。

プログラミングスキルよりも、問題解決能力、分析力のほうが必要になります。

このようなスキルが無いと、そもそも問題を解くことができません。

プログラミング知識といえば、pandas,numpy,matplotが使えれば、十分だと思います。

自然言語の場合は、たしかにLSTM、RNN、Bertの知識は必要になってきますが、必要になったときにネットで調べるなどでスキルをつけることができます。

ありがたいことに、コンペのほとんどは、Bertなどのアルゴリズムを使って提出するところまでカグラーが公開してくれているので、参考にできます。

参考にするさいに良いと思う思考は「この特徴量を反映させたいから参考にしたい」というもの。

やっていけない参考としては、他人がやっているから「よくわからないけど、おれもやってみよう」という考えです。自分もそのような考えで進めていたが、ほとんどの場合、スコアが上がることがなかったです。むしろ、「余計なこと」と見なされスコアが落ちることが多い印象です。

よって、本当に必要かどうかは、自分で考える必要があります。

少なくとも銅メダルまではアンサンブルなどのテクニックは必要なし!

少なくとも銅メダルまでは、複数のモデルをブレンドするアンサンブルは必要ないようです。銅メダルまでは、特徴量をくまなく探し、最後の仕上げとしてアンサンブルを試すと良いかもしれません。

まとめ

以上、銅メダル圏内に到達するフローでした。

kaggleの参加者には、高校生でKaggleマスターを持っている人もいます。

まだまだ負けていられないですね。

評判も見えるPGスクール検索・比較表

どのプログラミングスクールがいいんだろう?
そんな疑問をお持ちの方に、評判も見えるプログラミングスクール検索・一括比較サービスをリリースしました。

条件を指定することにより、気になるプログラミングスクールを一発で比較できます。
きっと、条件にあったスクールが見つかるかと思います!
詳細は、以下の画像をクリック!

プログラミングスクール検索・比較のペン太ブル
スポンサーリンク
PR




PR




シェアする

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

フォローする

スポンサーリンク
PR