戻る


ポアソン分布を用いたMAX近傍でのBPI補正について(私案)


大昔、NORI氏らとBPIの原案を考えたのですが、多くの方の手によってBPIが改良され、アプリなど皆さんに使いやすい形となったことでここまで広まったことを大変うれしく思います。
最近ではBPIが元々想定していなかったようなMAXに近いスコアやMAXが出ていることで、"BPIが壊れる"ようなことが良くあります。
最初に断っておくと、これは様々にアプリを提供してくださっている皆様のせいではなく、大元の原案の段階から"BPIではMAXを想定していない"ことが原因で、長年どのように解決すべきかは私自身も分からないままになっていました。


今回、BPIの元々のアイデアを改めて説明すると共に、ポアソン分布を用いたBPIの補正を提案させていただきたいと思っています。


以下がBPIのイメージ図ですが、"何ノーツに1回黄グレが出るか?"を片対数目盛で表現したものがBPIです。
MAXに近づくほど1点が重くなること、反対にBPIが低いゾーンでは1点の寄与が小さいことを示しています。
(譜面定数は割愛します(1であるものとします))

*図1

aaa


BPIの定義上、全一スコアがMAXの時はxノーツに1回黄グレという頻度を定義できません。
(実際には、MAXは"0.5落ちのスコアを出している"と考えることで計算不能になることを回避しています)

*図2

aaa

 

さらに、MAX近傍の全一スコアは何度もやり直しているはずで、仮にMAXが全一だからと言って全国トップスコアは永遠に全てピカグレを出していると考えるのはおかしいです。

我々がBPIを考案した約10年前にはこれほどMAXに近いスコア(やMAX)が頻発するとは夢にも思っていませんでした。
またMAXに近づくと大数の法則が利かなくなるので何ノーツに1回黄グレが出るか?という推定にもブレや誤差が大きくなってしまいます。
これが近年BPIが"壊れた"原因です。


実際に現れたスコアの裏にある"真の実力"を推定することで、皆伝平均と全一の真の実力の間に線を引き、その線上のどこに自己べの"真の実力"が位置するかを考えることで補正BPIを定義できないかと考えました。

*図3

aaa


補正方法としてはポアソン分布を仮定します。ポアソン分布とは、あるイベントが一定の時間内に発生する回数を表す確率分布です。

*図4

aaa

例えば、ある町で1日の間に交通事故が起きる件数が平均して4回だと仮定します(上図のλ=4)。また事故はランダムに発生するが、事故の起きやすい日や起きにくい日、事故が事故の原因となって連続して事故が発生する、などの事象はないものとします。
平均して4回ということは必ず4回起きるということではなく、1回も起きない日もあれば(上図でも0は1%くらいの確率になっています)、4回起きる日(グラフから20%程度です)、10回以上起きる日もあります。
ただそれらを全て均すと一日平均4回事故が起きているということを意味します。

直感的にわかりにくいかもしれませんが、Nが大きくなると正規分布に近づきます(上図のλ=10)。
このNが小さいときに正規分布だとマイナスの発生回数が生じてしまう(事故件数がマイナスであることはありえません)ことを補正するために考えられた分布、と考えるのが自然だと思います。
「全体の中で発生回数が少ないときにその分布がどうなっているかを考える」というこのポアソン分布の性質が、MAX近傍でのBPIの補正に役立つのです。

ポアソン分布から逆算して考えると、1日の間に交通事故が起きる件数が2.3回のとき、10%の確率で事故件数は0回となります。
これはつまり、「ある1曲中に平均して2.3回の黄グレを出すプレイヤーは10回に1回MAXを出す」ことが予想できます。
今回、"表に出たスコアは上位10%の良さ"(10回に1回の割合で出せるような優れたスコア)であると考えてMAXに近いスコアを補正することにします。

実落ち数(MAX-) 推定落ち数(10%推定)
0 2.32
1 3.90
2 5.34
3 6.70
5 9.29
4 8.01
6 10.55
7 11.79
8 13.01
9 14.22
10 15.42
11 16.61
12 17.80
13 18.97
14 20.14
15 21.31
16 22.47
17 23.62
18 24.77
19 25.92
20 27.06


この表はあらかじめポアソン分布に基づいて求めたもので、導出の詳細は割愛しますが、
平均が15.42落ちのプレイヤーは上位10%の良いプレイで10落ち以内のスコアを出すことが出来る、ということを意味しています。
(ここでは簡単のために自己べで10落ちのスコアは平均15.42落ちに相当すると考えることにします)

このように補正をすると、前出の図2のグラフのように表面的なスコアではなくその背後にある真の実力でBPIの推定直線を引くことが可能になります。
そして仮に全一がMAXだった場合、今までのようにMAXマイナス0.5ではなく、MAXマイナス2.33とすることで、MAX近辺での急カーブをかなりなだらかにすることが可能です。


ここでthunder HOUSE NATION Remix[L]について例を見てみましょう。
何ノーツに1回黄グレを出しているか、について表現したグラフです。
ポアソン分布を補正しない(譜面定数が1)のBPIと、ポアソン分布を補正したBPI、BPIManager様のBPIを比較したものになります。

*図6

aaa

ポアソン分布および"歴代スコアは平均的な実力よりも良いスコアが表現されている"という前提を置くことで青の線はオレンジ色のグラフへと低下することになります(実際のベストスコアについて考えるときはまた戻すことになります)。
グレーであるBPIManagerの黄グレ率について言えば"譜面定数"が0.63であることで、オレンジより下のところから青線に沿う形に巻き返す形になっていることが分かります。

実際のスコアに表現したBPIグラフがこちらになります。

*図7

aaa

通常BPIに比べてポアソン補正BPIの方が"甘い"ことになります。
一方で例えばBPI20について言えばBPIManager基準は150点以上"甘い"ことになりますが、
これは譜面定数が1より小さいことでBPIが低い領域において評価が甘くなることに起因しています。


ポアソン分布を補正することで歴代がMAX、もしくはMAXに近いスコアを自然に扱うことが可能になります
いままではBPIでMAXを扱えないことで☆11以上のスコアしかBPIを計算することが出来ませんでしたが、今後はBPLでニーズが高まっている☆10以下の譜面のスコアもBPI化して扱うニーズが増えるかもしれません。

 

(以下はややマニアックな内容となります)
譜面定数とは?

譜面定数とはもともと1.5の定数で置かれていたもので、BPIの式の一部に使われている定数となります(複雑なので詳細は割愛します)
ちなみに特に深い理由はなく筆者の勘で1.5を設定しました。
その後、「BPIで指数関数的に全国順位を推定できる」
(BPI100=1位、90=2位、80=4位、70=8位というように)
という前提に基づいて、実際の皆伝全員のスコアのデータを集めることでBPIを推定しようという試みが行われ、
スコアデータから譜面定数が逆算されて今の形になったものだとおもいます。

筆者は元々、EMPRESSのウィークリーランキングデータから順位を推定して譜面定数を考えていたので、
やろうとしている方向は近いのですが、より詳細なデータが集まった現在では
筆者はBPIで「指数関数的に全国順位を推定できる」という前提が強すぎる(当てはまらない)と思うようになりました。

最初に考案した時点でのBPIは、
1「BPIにして10の差があるときに、どの2点間の10差でも上手さの差としては同じ」
というコンセプトに基づいていて
同時に
2「BPIで指数関数的に全国順位を推定できる」
という前提に立っていました。

私は1の前提をより重視する(BPIが10と20のスコアの上手さの差は、30と40でも、90と100の間でも同じ)ことにしたいと思いますが、
この時に2は当てはまらないということです。

その理由として皆伝平均(約2000位)まで、全ての上手さのプレイヤーが均一に存在しているわけではなく、上位のプレイヤーほど多く存在しているからではないかと考えていますが、詳細は現時点では不明です。
何がいいたいかと言うと、元々私がやりはじめたことではあるものの、順位データから直接BPIや譜面定数を求めるのは1のコンセプトに対してはあまり正確ではないかもしれないということです。
(既にそのような取り組みで求められているBPIを否定する意図ではなく、2のコンセプトに立脚するのであればそれは正しい方向だと思います)


非常にマニアックな記事になってしまいましたが、一旦ここまでとしたいと思います。