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計算式においては、上記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、もしくはリプライにてお伝えください。