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

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

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

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

グラブル返金騒動を受けて、ソーシャルゲームのガチャの排出確率の計算手法をまとめた(二項分布、信頼区間、チェビシェフの定理)

はじめに

今日は以前書いた記事「ソーシャルゲームのガチャやm種類の特典がランダムに登場するとき、目当ての商品を引く確率を計算してみる - データマイニングと数学の備忘録」の続編を書こうと思う。

本続編では前回の計算手法と、今回新たに紹介する信頼区間を用いた計算手法の2種類を紹介。それぞれの利点や欠点について話して行けたらと思う。それにしても前回続編書くと言って、かれこれ数ヶ月経ってしまったので、続編に見合った記事になれば嬉しい。

基本事項の確認

本手法は目的のカードを引く、引かないの二値に分ける事が出来る。すっかり本ブログおなじみの説明だが、カードを引く回数Xの分布は、二項分布に従う事が分かる。以下カードを引く回数をn、実際に引いた回数をkとして、今回使う式1、式2の紹介をしたい。

式1:二項分布の確率密度関数、平均、標準偏差

二項分布の確率密度関数は、
 P(X=k) = \binom{n}{k} p^k (1-p)^{n-k}

一方、平均E(X)=np標準偏差\sqrt{V(X)}=np(1-p)

式2:少なくともk回以上カードを引く確率

式1と同じ設定で何となくΣを使って答えをまとめてみたかったので、

 P(X \geq k) =1 - P(X < k)
 P(X \geq k) =1 - \sum_{m=0}^{k-1}\binom{n}{m} p^{k-1} (1-p)^{n-k+1}

正規分布確率密度関数

ここで二項分布はnを限りなく大きくすると近似的に正規分布に従う事が分かっている。このため二項分布を正規分布に見立てて話を進めるために、正規分布確率密度関数について見て行く。

分布の平均μ標準偏差σとして以下のように表せる。

 f(x) = \frac{1}{\sqrt{2 \pi σ^2}} e^\frac{-(x-μ)^2}{2σ^2}

ここで連続関数で確率密度関数が与えられているため、具体的な確率の計算に積分を用いる。ここで確率を求めると言う事は、確率(の)分布の一部分や一部分の総和を求めていると言う事にも注意だ。又平均や特定の値の情報が重要でなく、ヒストグラムの分布全体の情報の方が大切な場合も多いので注意だ。

式3:a回以上カードが排出される確率P(X \geq a)

P(X \geq a) = \int_a^{\infty} \frac{1}{\sqrt{2 \pi σ^2}} e^\frac{-(x-μ)^2}{2σ^2} dx

ここで少なくともa回以上の確率は、分布のある区間から正の無限大(天井無し)まで求めていることになる。

式3の様子を分布図に落とし込むと以下。



式4:a回以上b回未満カードが排出される確率P(a \leq X \leq b)

P(a \leq X \leq b) = \int_a^b \frac{1}{\sqrt{2 \pi σ^2}} e^\frac{-(x-μ)^2}{2σ^2} dx

式4の様子を分布図に落とし込むと以下。



ここで分布に収まらない割合をαとして、P(a \leq X \leq b) = 1-αとなるような、100(1-α)%の確率でXa \leq X \leq bに収まる区間[a,b]を100(1-α)%の信頼区間(100(1-α) Percent Confidence interval)と言う。通例α=0.01(1%)かα=0.05(5%)を用いる。信頼区間の求め方の式も様々あり、今回は問題文中で提示するので、今の段階では読み飛ばして欲しい。

以下この式3の方法、式4の方法を上手く使い分けて具体的な確率を求めたり、その利点や欠点について話せたらと思う。

手法1:普通に確率を計算

概要、利点、欠点など

最初に復習する事項は、少なくとも1回カードを引く確率P(X \geq 1)式3を考える方法だ。

式(3)を使う事の利点は、二項分布の確率を求める事ができるので高校生でも見立てができる点。式3を使う事の欠点は、理屈の上でカードの出た回数Xの上限の見立てを立てられない事ができないと言う点。これは少なくともa回以上の確率は、分布のある区間から正の無限大(天井無し)まで求めていることになる事が理由である。


もちろん式3も式4も、外れる確率の問題がある事に変わりない。しかし個人的にはガチャにおけるレアカードからの収益を考える上で、天井を決めて見立てられる式4を使いたい所。

さてこの事を使い、カードを1回引く確率、カードを2回引く確率….と言ったカードを引く回数Xの分布を見立ててみよう。今回は正規分布に従う事がわかるので、正規分布確率密度関数(ヒストグラムの数値の変化を見立てるための関数)を使えばおおまかに見立てる事が可能だ。

以下式(3)の活用例を紹介する問題の練習問題を作成した。作成に当たり以下のブログの書き込みをみて、「自分もこういう確率の検討ができたら良いなあ」と言うものをまとめてみた。

練習問題(前回の記事の強化版)

確率pで目当てのレアなカードRを引く事ができるカードの山がある。一度引いたカードを山にもどしてシャッフルし、この操作をn回繰り返す。またカードRが出た回数をXとする。

(1):このとき少なくとも1回Rを引く確率P(X \geq 1)を求めよ。
以下の設問(2)(3)では、カードの出現確率p、試行回数nのいずれかを固定し、99%以上の確率で少なくとも1回引けるための条件について見て行く。
(2):カードが出る確率p=0.01と仮定(固定)したとき、カードRが99%以上の確率で少なくとも1回引けるためのnを整数値で求めよ。
(3-1):カードを引く試行回数n=100と仮定(固定)したとき、カードRが99%以上の確率で少なくとも1回引くための確率pを1%(0.01)単位で求めよ。
(3-2):カードを引く試行回数n=100と仮定(固定)したとき、カードRが99%以上の確率で少なくとも1回引くための確率pを0.1%(0.1)単位で求めよ。
(2)(3)の解答に当たり関数電卓Microsoft Excelなどの表計算ソフト、Wolfam mathematicaなどの数式処理ソフト、各種プログラミング言語を使用してよい。

(1)の解答:(Excel+確率分布の式から計算)

式2を使うと、P(X \geq 1) = 1 - (1-p)^n

(1)の結果を公式化すると、以下のようになる。

少なくとも1回カードを引く公式

確率pで目当てのレアなカードRを引く事ができるカードの山がある。一度引いたカードを山にもどしてシャッフルし、この操作をn回繰り返す。またカードRが出た回数をXとする。このとき少なくとも1回Rを引く確率はf(n,p)=P(X \geq 1) = 1 - (1-p)^n

(2)の解答(Excelの場合)

カードRが99%の確率で少なくとも1回引ける仮定なので、P(X \geq 1) \geq 0.99より、

1-(1-p)^n \geq 0.99
<=>(0.99)^n \leq 0.01
<=>n*log(0.99) \leq log(0.01) <=>n \leq \frac{log(0.01)}{log(0.99)}

Excelで数式「=LOG(0.01)/LOG(0.99)」と打ち込んでn \geq 458.2。以上よりカードの出現確率が1%のとき、99%の確率で少なくとも1枚以上カードRを引くのに必要な回数は、459回以上である事が分かる(答)

(3)の解答:(Excelで計算)

カードRが99%の確率で少なくとも1回引ける仮定なので、P(X \geq 1) \geq 0.99より、

1-{(1-p)}^{100} \geq 0.99
<=>{(1-p)}^{100} \leq 0.01

ここでExcelを使い、上の不等式の左辺が初めて0.01以下となるようなpを探す。尚問題文に「1%(0.01)単位で求めよ」と書いてあるので、Δp=0.01刻みで計算していく。

確率p 0.01(1%) 0.02(2%) 0.03(3%) 0.04(4%) 0.05(5%)
P(X \geq 1)の値 0.366 0.133 0.048 0.017 0.006

ここで不等式の左辺が初めて0.01以下となるpの値はp=0.05。このことから100回カードを引き、99%の確率で少なくとも1枚以上カードRを引くためには、カードの排出確率を5%以上にする必要がある事が分かる(答)。

(3-2):(3-1)と同じ要領でΔp=0.001と考えると、ここで不等式の左辺が初めて0.01以下となるpの値はp=0.046。このことから100回カードを引き、99%の確率で少なくとも1枚以上カードRを引くためには、カードの排出確率を4.6%以上にする必要がある事が分かる(答)。

確率p 0.042(4.2%) 0.043(4.3%) 0.044(4.4%) 0.045(4.5%) 0.046(4.6%)
P(X \geq 1)の値 0.0136 0.0123 0.0111 0.0100 0.0090

問題(3-1)(3-2)では必要な数値の桁数を変えて計算した。尚、確率p0 \leq p \leq 1を満たす実数であるため、小数点何桁までの情報が必要か?を意識しておくと見立てが立てやすい。

手法2:信頼区間を使う方法

今度は信頼区間を使って計算する方法を紹介する。一昔ラブライブ!スクールアイドルフェスティバルでガチャの計算をしていた記事があった。

そこで以下の練習問題2では、このブログが行ってきた計算を実際に体験できるよう問題を作成した。

練習問題2

確率pで目当てのレアなカードRを引く事ができるカードの山がある。一度引いたカードを山にもどしてシャッフルし、この操作をn回繰り返す。またカードRが出た回数をXとする。さらに、P(a \leq X \leq b) = 0.99となる区間の事をXの99%の信頼区間[a,b]と呼ぶ事にする。

尚このときXは99%の区間でnp-2.58\sqrt{np(1-p)} \leq X \leq np + 2.58\sqrt{np(1-p)}で収まることが知られている。この事を証明無しに用いて良い。

(1):n=100,p=0.01のとき、カードRが出た回数Xの99%の信頼区間[a,b]を求めよ。
(2):n=10,406,p=0.01のとき、カードRが出た回数Xの99%の信頼区間[a,b]を求めよ。
(3):n=100のとき、カードRが出た回数Xの99%の信頼区間[a,b]における幅b-a \leq 2となるような確率pの範囲を求めよ。但しp<0.5とする。

解答

(1)の解答

(1):二項分布の平均np=1、分散np(1-p)=0.99より、[1-2.58√0.99,1+2.58√0.99]∴[-1.567,3.567]

(2)の解答

christina氏のブログ記事とほぼ同じ状況を再現してみた。原題と違って信頼区間が99%である事に注意。まず二項分布の平均np=10,406*0.01 = 104.06、標準偏差は√{np(1-p)} = √(104.06*0.99) = 10.14。以上より99%の信頼区間は、a = 104.06 - 2.58*10.14 = 79.89、b = 104.06 + 2.58*10.14 = 130.22より、99%の信頼区間は[79.89,130.22]

おまけ:二項分布のグラフをExcelで書く

原題のブログでは二項分布のグラフを書いていたので、そのやり方をここで紹介したい。ExcelのAの欄に当たったカードの枚数、Bの欄に二項分布の確率密度関数を打ち込み、じょじょに数字を変化させていく。そして、グラフ→散布図→散布図(平滑線)を選択*1すると、以下のようなグラフができあがる。

f:id:program_study:20160118000927p:plain

(3)の解答

少々ラフな計算で解答したい。a=np-2.58*√{100p(1-p)},b=np+2.58√{100p(1-p)}よりb-a=51.6√{p(1-p)}となる。信頼区間の幅が2以下となるには、2<=51.6√{p(1-p)} <=> p(1-p) <= 0.015 ∴ Excelで計算すると、δp=0.001としたとき、p=0.001のとき初めてp(1-p) = 0.000999となるのでp<=0.001であればよい。

尚、p=0.001のときの信頼区間は[0.1845,1.8145]より、99%の確率で100回カードを引いても1枚しか排出されない事が予想される。

問題(3)ように信頼区間[a,b]を決めてしまえば、ユーザーが何枚カードを引いて来るのかを縛る事ができる。この事から具体的な売り上げの見立てを立てやすいと考える。

まとめ

さて今までやってきた事をまとめると、

(1):少なくとも1回カードが排出される確率に着目した場合、計算は簡単であるが、排出枚数の上限を決めにくい。
(2):信頼区間を使って排出枚数の区間を計算する場合、理屈は(1)より難しいものの、排出枚数の上限を決めやすい。

と言う事が分かった。一方で分布が分かっていない場合は、チェビシェフの定理が便利なので紹介したい。

チェビシェフの定理
確率変数Xの平均をμ標準偏差σとする。このとき任意の正の実数kに対し、P(|X-μ| \leq kσ) \geq \frac{1}{k^2}

最後に

最後は自分の確率統計に関する思い出話。高校の時から数学の問題をプレイするのが好きで、できもしないのに東大の問題とかやっていたものだ。尤も問題をプレイするのが好きなのが高じて、なんとか大学に入学できた。結局ゲーム攻略と同じように勉強が進んだと言うのが、自分の性に合っていたらしい。

そして大学にて確率論の所でマルコフ過程を勉強し、統計学の所でカイ二乗検定と言うものを勉強した。当時の大学の先生は医薬統計学の専門だったので「薬の効き目に対しカイ二乗検定を行うとき、交互作用を避ける為に、薬を飲まない人に対し偽薬を飲ませる」なんて話を聞いたものだ。前準備をしたりし、データを取りやすい体制を取ると言うのはどの界隈でも同じようだ。

そして時が経つ事数年。ソーシャルゲームの仕事をしていた時、ビビるようなブログ記事を発見した。


ホント。こういうのを見るとやってる仕事がバカらしく思う物だ。仕事のプログラムの勉強そっちのけで、このブログ記事のCoupon Collector's Problemの計算を復習したのは良い思い出(幾何分布や、条件付き確率の計算が結構骨折れる)。そしてその後景品商法が流行った後も期待値の計算式を使って、どれくらいお金がかかるか?とかを計算していた。

そして昨今人の話を聞くにも確率統計の知識が必要となった。インターネット上にある情報量が多くなり、既存の方法では情報を探しにくくなった。そういった背景から確率統計、あるいはデータマイニングを使い、大量の情報の中から必要な情報を抽出する技術が脚光を浴びるようになった。

大学時代画像処理をやりつつK-Meansの存在を知っていたが、まさかここまでと思ってならない。反面勉強会なども増え、学生や企業の垣根を超えて色んな人の話を聞く場も増えたことも嬉しく思う。さて本記事自体後追い記事にあたり、他のブログを読み解く上で困らない知識をまとめたつもりである。最後に本記事が、読者の皆さんの確率統計攻略に役に立てば幸いだ。