ランキングイベントの参加者数を順位データからほぼ正確に推定する

※この記事はMathJaxおよび\LaTeXを使用しています。

どーも、THでございます。今回は、「ランキングイベントの参加者数推定」のお話です。

はじめに

スマートフォン向けゲームアプリ「クイズRPG 魔法使いと黒猫のウィズ」(通称:黒ウィズ)内にて去る2022年2月25日から28日にかけて行われたランキングイベント「大魔道杯」における参加者数について数学的に考察していきたいと思います。

この大魔道杯では、過去9年弱の間に幾度となくシステム変更が行われています。

そして今回の大魔道杯では総合ランキング上位報酬の配布条件が変わり、以前の「上位25000以内」から「上位35%以内」となりました。

それまでは参加人数に関わらず一定数に配布されていたので、上位報酬の相対的な所持率が大魔道杯ごとに異なり、最大40%にも上る*1こともありました。

今回の変更により、運営はランキングイベントとしてアクティブユーザー数にかかわらない形で報酬獲得難度を設定した形になります。

また、%表示があるおかげで参加者数を逆算可能となったのです。

参加者数明示の影に思わぬ罠あり ―丸め誤差問題―

ただ、この「上位◯%」システムですが、とある問題点があります。

それは「ボーダーラインと同じ数値表示の場合はどうなるか」です。

「上位◯%」とした場合、配布人数は参加者数と割合の積となりますが、これがきれいに整数になることは少なく、逆にユーザー視点でいえば表示桁数以下の数値で決まってしまう場合もあるわけです。

特にこの「表示桁数以下の数値」の扱いに複数通りの処理があるため、複雑化する場合もあり、この対応が不誠実であった場合は炎上や返金騒ぎにもなりかねない「大きな爆弾」ともいえるのです。

参加者数推定(事前準備編)

前置きはこのくらいにして、本題の参加者数推定へ移ります。

このシステムでは「上位◯%」の表示は小数点第2位まで表示されますが、小数第3位の扱いについては公表されていないため、数値の丸め方を含めて推定する必要があります。

小数第3位の扱いには大きく以下の2つが考えられます。

  • 小数第3位を四捨五入
  • 小数第2位未満を切り上げ

実例を挙げるならば、表示が「上位32.41%」であった場合、

  • 小数第3位を四捨五入している場合
    →真の値は32.415%以上32.415%未満
  • 小数第2位未満を切り上げている場合
    →真の値は32.400%より大きく31.410%以下

となります。

以下、順位t位で表示が「上位a%(小数第2位まで)」、実際の参加者数がx人であるとします。

[1]小数第3位を四捨五入する場合

真の値について、

\begin{align}
a-\dfrac{1}{200}\leqq\dfrac{100t}{x}\lt a+\dfrac{1}{200}
\end{align}

これをxについて解いて

\begin{align}
\dfrac{20000t}{200a+1}\lt x\leqq\dfrac{20000t}{200a-1}\cdots(1)
\end{align}

[2]小数第2位未満は切り上げとする場合

真の値について、

\begin{align}
a-\dfrac{1}{100}\lt\dfrac{100t}{x}\leqq a
\end{align}

これをxについて解いて

\begin{align}
\dfrac{100t}{a}\leqq x\lt\dfrac{10000t}{100a-1}\cdots(2)
\end{align}

この時点で(1)と(2)どちらが正しいのかは不明なので「xは(1)または(2)を満たす」となるのですが、(2)の上限の分子分母に2、下限の分子分母に20000をそれぞれ掛け、

\begin{align}
\dfrac{20000t}{200a}\leqq x\lt\dfrac{20000t}{200a-2}
\end{align}

とすると大小関係がはっきり見えるので、

\begin{align}
\dfrac{20000t}{200a+1}\lt x\lt\dfrac{10000t}{100a-1}
\end{align}

がこの時点でのxの推定範囲となります。

ちなみに、順位tと位置aはほぼ比例関係にあるため、tより実数k(k\gt1)倍だけ順位の低いkt位(上位ak%)と整数n(-2\leqq n\leqq1)について、

\begin{align}
f(a,k,n,t)=&\dfrac{20000kt}{200ak+n}-\dfrac{20000t}{200a+n}\\
=&20000t\left(\dfrac{k}{200ak+n}-\dfrac{1}{200a+n}\right)\\
=&\dfrac{20000nt(k -1)}{(200ak+n)(200a+n)}
\end{align}

となり、k -1\gt0であるからn\gt0のときf(a,k,n,t)\gt0n\lt0のときf(a,k,n,t)\lt0となるため、順位が低いほどxの範囲が狭くなる効果があります。

ただし、実際に表示されているaの値は丸め誤差を含むので、素直に範囲が狭まらないこともあることに注意です。(特に上限側)

参加者数推定(本番編)

さて、ここまでの推察を大魔道杯終了までにしておき、迎えた順位発表。

筆者の貧相な人脈により下記2つのデータを確保しました。

  • 12453位、上位18.68%\cdots(3)
  • 52982位、上位79.44%\cdots(4)

これらのデータを先述の(1)(2)式に代入する以下の通り。

  • (1)(3)から、66647.04\lt x\leqq66682.73\cdots A
  • (2)(3)から、66664.88\leqq x\lt66700.59\cdots B
  • (1)(4)から、66690.16\lt x\leqq66698.56\cdots C
  • (2)(4)から、66694.36\leqq x\lt66702.76\cdots D

これを数直線上に図示すると下のようになる。

f:id:TH53439830:20220308220429p:plain

ここで、領域Aと領域Cに共通部分がないことは、2つのデータが同じ参加者数から得られているものであることと矛盾してしまいます。

よって、数値の丸め方について「[1]小数第3位を四捨五入」という説は否定され、「[2]小数第2位未満を切り上げ」が実際に適用されていることになります。

ゆえに、実際の参加者数の推定値は、領域Bと領域Dの共通部分内にある整数となり、66695人以上66700人以下となります。

おわりに

ここまで長々と書いてはきましたが、やってることはただ連立不等式を解いているだけです。Twitterを見ると約66686人との結果報告が上がってきていましたが、実際は的外れでした。ちゃんと式を立てて計算すれば真実は見えてくるのです。

それでは今回はここまでとします。ご覧いただきありがとうございました。

*1:2021年11月開催の「大魔道杯 with 用心棒エーネヤ」