黄昏より暗きもの、血の流れより赤きもの

読者です 読者をやめる 読者になる 読者になる

黄昏より暗きもの、血の流れより赤きもの

自分の好きな事を好きなように書いて行きます。

【ガチャ課金額計算アプリ】ソーシャルゲーム(景品商法)の課金額を計算できるアプリと、その計算式について(2016.3.27 タイトル・記事大幅追記)

確率 javascript

概要

ソーシャルゲームや景品商法などで「目的の商品を得るにはどれだけお金が必要なのか?」を計算出来るアプリを作った。

アプリ本体

下の「少なくとも1枚引く確率」「ガチャ排出確率」「ガチャ1回あたりの金額」のバーをずらすと、ガチャを引くのにどれだけお金を用意すればよいのかが分かる。

スライダーバーの効きが悪く、うまく止まらないと言う場合は十字キーで調整すると細かく計算ができる。

注意事項

本アプリは少なくとも1回カードを引く確率について着目しているため、必ずその金額で当たる事を保証するものでは無いことをご了承願いたい

活用例

ガチャ排出確率が分数の時(例:\frac{1}{300})等

本アプリは、原則ガチャの排出確率が小数で表記されている場合のみ計算する事ができる。その為分数の場合はお手数をかけるが、皆さんで分数を小数に直してから計算して欲しい。以下分数を小数に直す方法を説明する。

例えばガチャの排出確率が\frac{1}{300}ならば、分子を分母で割って100をかけて小数にすればよい。ここで\frac{1}{300}*100 = 0.3(%)より、上のガチャ排出確率のところに「0.3%」と入力して欲しい。

ガチャ排出確率が複雑な時(例:グラブル問題の場合)

又グラブル問題のように小数と分数が入り交じった場合もある。「SSRのキャラクターの割合が全体の6.35%で99種類のSSRキャラクターが居る」場合は、まず99種類を\frac{1}{99}*100 = 0.0101(%)と%に直す。6.35*0.0101 = 0.0641(%)と変換すれば良い。

参考:「グラブルの炎上問題に関する考察〜アンチラの出現確率は妥当だったか〜:doryokujin's blog

景品商法への応用

さらに本アプリは、m種類の商品の中から目当てを引く為のくじ引きの場合でも活用できる。但し2chなどでも言われているように、以下の方法はm種類の商品(ガチャ)が同じ個数だけ市場に出回っている(同じ割合で引く事ができる)前提で計算する方法なので、イカサマ等があって個数があわないと言う場合は考えない。

おそ松さんの場合(キャラクター数m=6の場合)

例えばおそ松さんの場合、主要キャラクターが6人である。この為6人のグッズが同数市場に出回ると仮定すれば、おし松さんのグッズを引く確率は\frac{1}{6}* 100 = 16.6(%)を、上の排出確率の所に入力すれば良い。


f:id:program_study:20160327103142j:plain:w400

ラブライブ!のμ'sの場合(キャラクター数m=9の場合)

ラブライブ!のμ'sなら、主要キャラクターがは9人。同じく9人のグッズが同数市場に出回ると仮定すれば、推しメンバーのグッズを引く確率は\frac{1}{9} * 100 = 11.1(%)を、上の排出確率の所に入力すれば良い。


f:id:program_study:20160327103926j:plain

キャラクター数がm=5人からm=10人の場合

以下キャラクターの数が5人から10人までの範囲で、推しのキャラクターが景品として出てくる確率の早見表を作った。上の値を入力して色々検証して欲しい。

人数(m) 確率(%)
5 20.0
6 16.7
7 14.3
8 12.5
9 11.1
10 10.0

少なくとも目的のカードを1枚引くのに必要な確率を計算する

次にガチャの確率の計算方法の流れを、以下の例題と解答にまとめた。恐らく皆さんはここにたどり着くまでに、多くのブログで「確率pで当たりを引くとき、n回の試行で全く当たりを引けない確率は...」という説明を聞いた事であろう。

以下の説明ではこうしたブログで使われる計算式の原理と、それを土台とした課金額を見積もる方法までの流れを4段階に分けて説明する。

例題

0 < p < 1とし、確率pで当たりカードRを引けるガチャがある。このガチャをn回引き、当たりを引いた回数をXとする。このとき以下の[1]〜[4]に答えよ。
[1]:1回も当たりカードRを引けない確率P(X = 0)を、npを使って表せ。
[2]:少なくとも1回当たりカードRを引く確率P(X \geq 1)を、npを使って表せ。
[3]:少なくとも1回当たりカードRを引く為の回数nを、pP(X \geq 1)を使って表せ。但しP(X \geq 1) < 1 とする。
[4]:ガチャ1回当たりの金額をCとおく。[2][3]と合わせて少なくとも1枚カードRを引くのに必要な金額Mを求めよ。

解答(解説)

[1]:1回もカードRを引けないと言う事象は、全ての回数において外れを引き、当たった回数が0回である事を表す。従って毎回(1-p)の確率で外れを引くこととなる。これがn回くりかえされたとして、P(X = 0) = (1-p)^n

[2]:少なくとも1回カードを引く事象は、カードを全く引かない事象の余事象である。例えば99%の確率で少なくとも1枚引けると言う事は、同時に1%の確率で1枚も引けないことを表している。さて、

P(X \geq 1) = 1 - P(X = 0) (1から全く引かない場合の確率を引く)
P(X \geq 1) = 1 - (1-p)^n(式1)

[3]:(1-p)^n対数を取ると、n\log {(1-p)}となってnを外に追いやる事が出来る。こうする事で、最終目的の[4]において必要なカードの枚数を見立てる事ができる。

(1-p)^n = 1 - P(X \geq 1)

両辺の対数を取る。真数条件よりp < 1かつP(X \geq 1) < 1 が必要。この事を踏まえ、

n\log {(1-p)} = \log {(1 - P(X \geq 1))}
0 < p < 1より左辺を割り算して、n = \frac{\log {(1 - P(X \geq 1))}}{\log (1-p)}(式2)

[4]:「かかる金額M=ガチャ1回当たりの金額C*引いた枚数n」であるので、M=Cn = C\frac{\log {(1 - P(X \geq 1))}}{\log (1-p)}(式3)と見込む事ができる。

さて真数条件P(X \geq 1) < 1 より、100%当たる金額を計算する事ができない(発散してしまうため)。念のため問題にP(X \geq 1) < 1 の条件を付けたのもこの為である。飽くまで目安としてどれだけかかるか?を計算しているに過ぎない事に注意されたい。

[1]から[4]までを準公式としてまとめると...

と、面倒な説明を乗り切った事だしここで[1]から[4]までを準公式としてまとめたい。

毎回同じ確率で目的のカードや景品が貰える仮定の下で、
[準公式1]
少なくとも1枚は目的の商品を引く確率
= 1 - (1 - 当たりカードを引く確率)^(カードを引く回数)
[準公式2]
□%の確率で、少なくとも1枚目的の商品が貰うのに必要な金額(円)
= ガチャ1枚あたりの金額(円) * {log(1- 少なくとも1枚は目的の商品を引く確率) / log(1 - 当たりカードを引く確率)

アプリと計算式との対応関係

アプリ上ではガチャ排出確率p、少なくとも1枚排出する確率P(X \geq 1)、ガチャ1枚あたりの金額Cの各値をスライダーバーでずらす事で、必要な回数nと必要な金額Cnを計算することができる。十字キーの上下を押すことでも、各数値の微調整をしつつ計算ができる。 尚()は、スライダーバーをずらせる範囲を表す。


f:id:program_study:20160125013016p:plain

スライダーバーをずらせる範囲はかっこで書かれた通りの値となる。

アプリを使わずExcelで計算する方法

ここで準公式1と準公式2を、Excelで計算する方法について説明する。

準公式1をExcelで用いる

まず準公式1では、POWER関数と言う累乗を計算するものを使う。まずAのセルに当たりカードを引く確率p、Bのセルに試行回数nを入力すれば良い。

ここで例題の[2]の式と見比べて、C3のセルに「=1 - POWER(1-A3,B3)」と入力していけばよい。


f:id:program_study:20160327151502p:plain

準公式2をExcelで用いる

次に準公式2では、対数を計算するLOG関数と言うものを用いる。まずAのセルにガチャの金額C、Bのセルに少なくとも1枚カードを引く確率P(X \geq 1)、Cのセルに当たりカードを引く確率pを入力していく。

例題の[4]の式と見比べてD3のセルに、「=A3*LOG(1-B3)/LOG(1-C3)」と入力していけばよい。


f:id:program_study:20160327151527p:plain

最後に

過去geocitiesで公開されている「確率計算機(1)」や、「確率計算機 - ガチャの期待値を計算しよう!(2)」など様々なアプリが登場していた。

本アプリを作ったきっかけは、確率計算機のアプリはいっぱいあったが実際にどれだけ金額がかかるか?をすぐ計算できるものをと思って作った。何かやりたい人向けにプログラムをjsdo.itに公開しているので、是非活用して欲しい。

さて最近人気の記事出現確率1%のガチャを100回引いても,4割近くの人は全部はずれる。“本当の確率”を読み解いてみよう(IT-media)」の受け売りもあるが、時間が無く簡単に検証したい人から、プログラムやExcelを組んでブログ記事にしたい人まで全てをカヴァーするために、アプリ、公式の説明だけでなく実際に計算する方法まで紹介。関数電卓の機能を使ってもできると思うので、興味のある方は是非検証を。