6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AI道場「Kaggle」への道 by 日経 xTECH ビジネスAI①Advent Calendar 2019

Day 14

Kaggleランキング ポイントの仕組み

Last updated at Posted at 2019-12-14

Kaggleランキング ポイントの仕組み

kaggle_ranking.png

この記事は、AI道場「Kaggle」への道 by 日経 xTECH ビジネスAI① Advent Calendar 2019のアドベントカレンダー14日目の記事です。

Kaggleには獲得メダルの色と数によって決定されるGrand master/Master/Expert/Contributor/NoviceのTierの他にランキングという仕組みがあります。Tierに比べあまり重視されることはない印象ですが、どのような仕組みになっているか解説します。(※コンペティションのみ)

Kaggle notebook
https://www.kaggle.com/d1348k/learn-aboout-competition-points

github
https://github.com/uratatsu/kaggle_ranking

Kaggleポイントとは

Kaggleのコンペティションには金/銀/銅のメダルの他にCompetition pointsというものがあり、コンペティションの順位確定時に参加者にポイントが付与されます。ポイントは以下の数式により算出されます。

ポイントの仕組み

 \Biggl[\frac{100000}{\sqrt{N_{teammates}}}\Biggl]\Bigl[Rank^{-0.75}\Bigl]\bigl[\log_{10} (1+\log_{10} (N_{teams})) \bigl]\biggl[e^{-t/500}\biggl]

まずは基礎点として100,000点配られます。ここから参加チーム数、順位、自チーム人数によって、0~1の係数がかかって最終的な獲得ポイントが決まります。

順位による効果

\Bigl[Rank^{-0.75}\Bigl]

当然ですが、最も大きい影響があるのはそのコンペティションのprivateにおける順位です。kaggle_points_rank.png
順位に応じて、係数が上記グラフのように減衰します。

|順位|係数|
|---|---|---|
|1st| 1.0|
|2nd | 0.5946|
|3rd | 0.4387 |
|10th | 0.1778 |
|50th | 0.05318 |
|100th | 0.03162 |

1位と2位の差が非常に激しく、2位だと1位の60%ほどのポイント獲得率になります。10位で約18%、100位だと3%しかもらえません。

参加チーム数による効果

\bigl[\log_{10} (1+\log_{10} (N_{teams})) \bigl]

そのコンペティションに参加しているチームの数によって、この項が変わります。
参加チーム数が多いほど、かけられる係数は大きくなりますが、下のグラフを見てわかるように、10,000人参加(今までの最高は8802チーム)したとしても0.7程度です。1,000チーム参加した場合には0.6程度なので、参加人数が10倍になってもポイントは1.16倍程度にしかなりません。
kaggle_points_teams.png

Kaggle運営の考え方が公式ブログに書いてあるのですが、100チーム参加のコンペと1,000チーム参加のコンペで勝つために必要なスキルはそこまで変わらないという考え方によるそうです。以前はlog10(x)をつかっていたので、100チームと1000チームで1.5倍の差があったそうです。

チーム人数による効果

 \frac{1}{\sqrt{N_{teammates}}}

チームメイトの人数には上記の数式によって計算された係数がかかります。

kaggle_points_teammates.png

2人で7がけ、4人で半分程度です。思ったより、チーム人数による減衰は少ない印象があります。

人数 係数
1 1.0
2 0.7071
3 0.5774
4 0.5
5 0.4472
8 0.3536

経過日数による効果

\biggl[e^{-t/500}\biggl]

最後の項が経過日数による減衰です。
kaggle_ranking_days.png

346日、1年弱で半減します。

順位とチーム人数の関係

この中で、コントロール可能なものはチームメイトの人数と順位のみになります。
チームを組むと獲得ポイントは減少しますが、一般にチームマージを行うと順位が上がる傾向にあるため、上位のほうの順位による獲得ポイントの上昇が大きいところでは、チームを組んで最終順位を上げたほうが獲得ポイントが大きくなる場合があります。順位とチーム人数の関係のヒートマップです。
kaggle_ranking_heatmap.png

例えば、2位の人が誰かとチームマージして1位になる場合、59.5% → 70.7%となるので獲得ポイントは上がります。

まぁなんていうかこんなこと考えながらチームマージするのは虚無なので普通は必要ないと思いますが。。Kaggle Ranking top30とか超上位の人にとっては重要なのかもしれません。

ポイント獲得例

def calculate_points(teammates, rank, teams, days):
    points = 100000 * 1/np.sqrt(teammates) * np.power(rank, -0.75) * np.log10(1+np.log10(teams)) * np.exp(days/500)
    return points

この計算式でいくつかの事例を計算してみると、以下のような獲得ポイントになります。

順位 参加チーム数 チームメイト数 メダル 獲得ポイント
1 1000 1 Gold 60206
1 1000 5 Gold 26925
5 1000 1 Gold 18006
25 1000 1 Silver 5385
75 1000 1 Bronze 2362
100 1000 1 Bronze 1904

ソロ優勝のインパクトはとてつもなく、その1つでkaggle competitions ranking 32位相当(※2019年12月14日時点)になります。ちなみに先頭の画像にある現在kaggle competitions ranking ダントツ1位のbestfitting氏はソロゴールドが20個(!)、ソロ優勝が3個(!!)あり、他の追随を許していません。

おわりに

なんとなくチーム人数や順位で変わることはわかっていましたが、減衰率を可視化してみると意外に面白かったです。ポイントの付け方をどうとらえるかはいろいろあると思いますが、計算方法の正しい理解の助けになれば幸いです。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?