Skip to content

Instantly share code, notes, and snippets.

@potakusan
Last active Dec 8, 2019
Embed
What would you like to do?
BPI定義式の修正について

BPI計算式の修正について

前提条件

https://codepen.io/kuonchan/pen/vYENaqd?editors=0010
上記は今回の修正案を考えるにあたり用いたデータおよび計算式をまとめたCodepenです。
BPIおよび推定順位の計算については、実際にBPIManagerで運用しているコードをほぼそのまま使用しています。
適宜参照しながら読みすすめてください。

サンプルとして用いたデータはIIDX.info様からスクレイピングしました。
サーバーに負荷をかけないよう、各楽曲の1ページ目に掲載されているデータから算出できるBPI50,60,70,80,90,100のみを考えています。

BPIの定義式はBPIに準拠しています。

Rootage終了時における皆伝人口は段位認定取得者数botより5291人であり、BPIの定義より皆伝平均(BPI0)の順位は2645位としました。
このこと及び、単曲推定順位の計算式から各BPIを達成した場合の順位は次のようになります。

BPI 順位
100 1
90 2.2
80 4.84
70 10.64
60 23.39
50 51.43

(小数点の扱いに関してはすべて四捨五入を行っています。また、当該順位に該当するEXスコアが存在しない場合、1つ上の順位に該当するEXスコアを集計しました。)

現状のBPI計算式の問題点

現状のBPI計算式においては、上記Codepenにおける定数powCoefは1.5です。
この場合、前提条件からBPI [100,90,80,70,60,50] に相当する順位としてIIDX.infoから取得したEXスコアについて、計算式から求められるBPIは次のようになります。

実際のBPI 計算結果
100 97.40
90 86.79
80 73.40
70 63.44
60 53.18
50 41.35

実際にはBPI80の価値があるEXスコアを達成したにも関わらず、BPI73.4としてしか扱われない結果となっています。
なお、実際には各楽曲によりばらつきが認められるため、平易化のため全楽曲について平均値を取りました。

修正案

上記Codepenにおける定数powCoefを1.175に修正してみます。
この場合、計算結果は次のようになります。

実際のBPI 計算結果
100 97.92
90 89.41
80 78.41
70 69.92
60 60.89
50 49.99

(小数点第三位以下を切り捨て。IIDX.infoの最終更新日以降歴代更新された楽曲が存在するため、ランキング上で1位の楽曲がBPI100になっていません)
これにより、より定義に忠実なBPIを算出することに成功したと思います。
楽曲によりばらつきが存在するのは事実なので、これが最善であるとはもちろん考えていません。
たとえば、この修正により、BPIの誤差が修正される楽曲も存在すれば、誤差が拡大する楽曲が存在することも事実です。
それでも、全体を俯瞰した場合により正しい値が算出されると思い、今回この修正を適用することを決定しました。

よりよい考えがある場合は、ぜひ@BPIManagerまでDM、もしくはリプライにてお伝えください。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment