Holograph1c Attract0r

日々の数学やプログラミングに関係する話。

ソシャゲのガチャと確率について考える

唐突なのですが、なんとなく昨日のリーマン予想とは別に書きたくなりました。

ということで、少しだけ書きます。

 

大抵のソシャゲにはガチャのシステムがあります。
言わずもがな、ガチャというのは確率でレアアイテムやレアなキャラが手に入ったりするやつです。今回注目したいのは、この確率というところ。

何%で今求めているキャラあるいはアイテムが手に入るのかさえ分かれば、計算してどれくらいガチャを回せば良いのか、もしくは課金すればよいのか見当がつけられます。

最近はいろいろあってガチャの排出率の明記が必須になったので楽ですね。

そんなわけで、ガチャについて少し考察をしましょう。

 

今回の記事は義務教育修了程度の確率の知識さえあれば理解できると思うので、そんなに気負わず読んでいただけると思います。

何回くらいガチャを回せば当たる?

今欲しいキャラのガチャでの排出率が 1/n だとします。(n は十分大きいとします)
このとき、逆に外れてしまう確率は 1 - (1/n) です。
したがって、m 回ガチャを回したときはずれを引き続けてしまう確率 \bar{p} は以下のようになるはずです。

\begin{align}
\bar{p} = \left( 1 - \frac{1}{n} \right) ^ m \tag{1}
\end{align}

そして、余事象の考え方から m 回ガチャを回したとき欲しいキャラを当てることのできる確率 p は、こうですね。

\begin{align}
p = 1 - \bar{p} =  1 - \left( 1 - \frac{1}{n} \right) ^ m
\end{align}

ここでの m をいろんな数字に変えてみます。

m = n の場合

二項定理を使えば文字の式のまま展開して計算したりできますが、めんどくさいので適当に n に大きな値を代入してみます。
以下、p_m(n) を m 回ガチャを回したとき排出率 1/n のキャラを引ける確率とします。

\begin{align}
p_m(n) = 1 - \bar{p}_m(n) =  1 - \left( 1 - \frac{1}{n} \right) ^ m
\end{align}

n=100 のとき、はずれを引く確率 \bar{p}_1(100)99/100 となり100回これが続く確率 \bar{p}_{100} (100) は、0.3660 \ldots となります。したがって、p_{100} (100)0.6339 \ldots、つまりおよそ63%になります。

100回回した時点で既に当たる確率は50%を超えているんですね。

同じように、n=1000 としてみると、p_{1000} (1000) は 0.6323 \ldots となります。どうやら、大体63%あたりに収束していきそうな様子です。

よって、欲しいものの排出率が 1/n のとき n 回ガチャを回すと63%の確率で当たる、という結論になります。

でも、63%じゃまだ絶対当たるという保証には程遠く感じます。
なのでもっとガチャる回数を多くしてみることにしましょう。

m = 2n の場合

上と同様なことをやります。n=100 からやっていきましょう。
同じくはずれを引く確率 \bar{p}_1(100) は 99/100 ですが、今回はこれを 2 \times 100 = 200 乗します。

\begin{align}
\bar{p}_{200} (100) = \left( 1 - \frac{1}{100} \right) ^{200} = 0.1339 \ldots
\end{align}

したがって、p_{200} (100) = 0.8660 \ldots となりどうやら87%くらいになりそうだ、と分かります。

次に n=10000 を代入してみることにします。
\bar{p}_{20000} (10000) = 0.1353 \ldots となるので p_{20000} (10000) = 0.8646 \ldots になります。

まとめると、排出率が 1/n のとき 2n 回ガチャを回すと86-87%の確率で当たるという結論を得ます。

この時点でもう90%近くにはなっていますが、最後にもう1パターンやっておきます。

m = 4n の場合

同じなので詳細は省略です。

n=100 のとき \bar{p}_{400} (100) = 0.0179 \ldots より p_{400} (100) = 0.9820 \ldots

n=10000 のとき \bar{p}_{40000} (10000) = 0.0183 \ldots より p_{40000} (10000) = 0.9816 \ldots

よって、排出率が 1/n のとき 4n 回ガチャを回すと98%の確率で当たります

違う方向からアプローチしてみる

上では何回回したら何%で当たる、というように考えましたが逆の考え方で「排出率 1/n のアイテムを p %で手に入れたいときに必要な回数を知りたい」ということがあるかと思います。上で定義した関数で言えば m を求めたい、ということですね。

これは \bar{p} の定義式の両辺の対数をとってやればできます。

\begin{align}
\log (\bar{p}_m (n)) = m \cdot \log \left( 1 - \frac{1}{n} \right)
\end{align}

m について解けばOKです。

 

ということで、今回はこんなところで終わりたいと思います。お疲れ様でした。