勉強したことメモ

いろいろな勉強とつたわる日本語の練習をかねたブログです

二項分布(Binomial distribution)

f:id:udonista:20171029040332p:plain

今ここにSレアであるあっかりーんが当たるガチャがあるとします。 ネットの情報からあっかりーんが当たる確率は75%(!?)だとの情報を運良くゲットしたとしましょう。 あなたはこのSレアあっかりーんがとても欲しくて、1回あたり200円のそのガチャに5000円をつっこもうと考えています。
〜〜
ガチャを回し、当たり・はずれのような結果が2パターンになるものをベルヌーイ試行と言います。
※各回の試行は独立です

当たる確率を p, はずれる確率を (1-p)であるガチャを n回引くとすると、各あっかりーん数 xの得られる確率は

 {\begin{align}
   f(x)&= {}_n C _xp^x(1-p)^{n-x} \\
\end{align}}


で与えられます。この分布を二項分布(Binomial distribution)と呼びます。ベルヌーイ試行をn回行なったときにある事象(当たりなど)が何回起こるかの確率分布です。この一般化された式を見ての通り、二項分布は試行回数nと当たる確率pにより決まることが分かります。つまり、二項分布のパラメータは n pなので Bi(n,p)と書いたりします。

それでは最初に書いたあっかりーんガチャを例に、二項分布をみてみましょう。 あっかりーんが当たる確率は75%、引く回数は5000円/200円で25回です。
つまり、 Bi(25, 0.75)なので、このときの確率分布は、

 
f(x) = {}_{25} C _x0.75^x(1-0.75)^{25-x}


となります。以下のようにpythonのscipyパッケージを用いると簡単に求めることができます。

from scipy.stats import binom

p = 0.75             # あっかりーんが当たる確率
n = 5000/200         # 200円のガチャに5000円をつっこむので25回まわせる
x = range(int(n)+1)  # 0~25回まで当たるときに着目

binomial = binom.pmf(x,n,p)
import matplotlib.pyplot as plt
%matplotlib inline

plt.plot(x, binomial, 'o')
plt.xlabel('number of success', fontsize=15)
plt.ylabel('probability', fontsize=15)

f:id:udonista:20171029040549p:plain

分布がでました。
では、25回まわした時に得られるあっかりーん数 xのうち、最も確率が高いのはなんでしょうか?

binomial.argmax()
19


考察

このガチャを25回まわすと19個ものあっかりーんが得られる可能性が最も高いことがわかりました。よかったですね。
ちなみに二項分布は期待値 \mu=np, 分散 \sigma^{2} = np(1-p)となります。

n*p
18.75
n*p*(1-p)
4.6875

※平均分散の導き方
・平均


\begin{align}
\mu&= \sum_{x=0}^n x\cdot f(x) \\
&= \sum_{x=0}^n x\cdot \frac{n!}{x!(n-x)!} p^x(1-p)^{n-x} \\
&= \sum_{x=0}^n x\cdot \frac{n!}{x(x-1)!(n-x)!} p^x(1-p)^{n-x} \\
&= \sum_{x=0}^n \frac{n(n-1)!}{(x-1)!(n-x)!} p\cdot p^{x-1}(1-p)^{n-x} \\
&= np\sum_{x=0}^n \frac{(n-1)!}{(x-1)!(n-x)!} p^{x-1}(1-p)^{n-x} \\
&= np \\
\end{align}


 x! = x(x-1)!
5行目の和の部分は Bi(n-1, p)の確率分布の和であるので1になります。


・分散

 
\begin{align}
\sigma^{2}&= \sum_{x=0}^n (x-\mu)^{2}\cdot f(x)\\
&= \sum_{x=0}^n (x^{2}-2\mu x +\mu^{2})\cdot f(x)\\
&= \sum_{x=0}^n x^{2}\cdot f(x)-2\mu\sum_{x=0}^n x \cdot f(x) + \mu^{2}\sum_{x=0}^n f(x)\\
&= \sum_{x=0}^n x^{2}\cdot f(x) -2\mu \cdot \mu +\mu^{2}\cdot 1 \\
&= \sum_{x=0}^n x^{2}\cdot f(x) -(\sum_{x=0}^n x\cdot f(x))^{2}\\
&= n(n-1)p^{2}+np-(np)^{2}\\
&= (np)^{2} -np^{2} + np -(np)^{2}\\
&= np(1-p)\\
\end{align}


 
\begin{align}
\sum_{x=0}^n x^{2}\cdot f(x)&= \sum_{x=0}^n (x(x-1)+x) \frac{n!}{x!(n-x)!}p^{x}(1-p)^{n-x}\\
&=  \sum_{x=0}^n x(x-1) \frac{n(n-1)(n-2)!}{x(x-1)(x-2)!(n-x)!}p^2 \cdot p^{x-2}(1-p)^{n-x}\\\
&+ \sum_{x=0}^n x\cdot \frac{n(n-1)!}{x(x-1)!(n-x)!}p \cdot p^{x-1}(1-p)^{n-x}\\
&= n(n-1)p^{2}+np
\end{align}


 x^{2}=x(x-1)+x

おまけ
当たる確率0.1%のSSレア京子ちゃんを狙った場合:

p_kyoko = 0.1/100     #京子ちゃんが当たる確率 

binomial_k = binom.pmf(x,n,p_kyoko)

plt.plot(x, binomial_k, 'o')
plt.xlabel('number of success', fontsize=15)
plt.ylabel('probability', fontsize=15)

f:id:udonista:20171029040623p:plain

なんと25回まわしたぐらいではあたらなそうです。 では10倍の5万円つぎこんだらどうでしょうか

n = 50000/200        # 200円のガチャに50000円をつっこむ
x = range(int(n)+1)  # 0~250回まで当たるときに着目

binomial_k = binom.pmf(x,n,p_kyoko)

plt.plot(x, binomial_k, 'o')
plt.xlabel('number of success', fontsize=15)
plt.ylabel('probability', fontsize=15)

f:id:udonista:20171029040639p:plain

5回までのところを拡大してみましょう。

plt.plot(range(6), binomial_k[:6], 'o')
plt.xlabel('number of success', fontsize=15)
plt.ylabel('probability', fontsize=15)

f:id:udonista:20171029040653p:plain

京子ちゃんを当てに行く場合、250回まわしても1回も当たらない確率は80%弱もあることが分かりました。 250回まわして当たる回数の期待値は、

n*p_kyoko
 0.25

分布をみると1回も当たらない確率が80%近いのに、期待値を計算すると当たる確率は25%でした。
このような偏った分布の場合では、平均値の計算は適さないです。

今回は以上になります。