~二項分布ってなに?~統計検定2級を勉強してみよう!【経営工学を専門にしている大学生の日記】


こんにちは!しゅんです!

今回は二項分布について解説していきます!

二項分布は確率・統計で登場する数学用語です。この記事では二項分布について図を使って分かりやすく解説していきます。

また今回はpythonを使って二項分布を扱っていこうと思います。

それでは解説していきましょう!



統計検定2級に関する他の記事はこちらから見れます!
ぜひ他の記事も読んでみてください!



このブログの簡単な紹介はこちらに書いてあります。
興味があったら見てみてください。

このブログでは経営工学を勉強している現役理系大学生が、経営工学に関することを色々話していきます!


ぼくが経営工学を勉強している中で感じたことや、興味深かったことを皆さんと共有出来たら良いなと思っています。


そもそも経営工学とは何なのでしょうか。Wikipediaによると

経営工学(けいえいこうがく、英: engineering management)は、人・材料・装置・情報・エネルギーを総合したシステムの設計・改善・確立に関する活動である。そのシステムから得られる結果を明示し、予測し、評価するために、工学的な分析・設計の原理・方法とともに、数学、物理および社会科学の専門知識と経験を利用する。

引用元 : 経営工学 – Wikipedia

長々と書いてありますが、要は経営、経済の課題を理系的な観点から解決する学問です。

二項分布ってなに?


二項分布を理解するためにはベルヌーイ分布を知っておく必要があります。ベルヌーイ分布とはコイントスのように一定の確率で2種類の結果のいずれかが必ず起こる試行におけるその結果の確率分布のことです。


ベルヌーイ分布については前回の記事で解説しているのでより詳しいことが知りたい場合はそちらもぜひ見てみてください!


二項分布はこのベルヌーイ試行を複数回やって得られる結果の分布です。例えばコインを5回投げる場合を考えてみましょう。


上の図のようにおもてが3回、うらが2回出る確率はいくつでしょうか。これは高校数学の確率で勉強する反復試行なので、計算式は以下のようになります。

\(_5C_3 × (\frac{1}{2})^3 ×(\frac{1}{2})^2=\frac{5}{16}=0.3125\)

この式を簡単に説明すると、まず\(\frac{1}{2}\)の確率でおもてが出て\(\frac{1}{2}\)の確率でうらが出ます。そのためおもてが3回、うらが2回でる確率が\((\frac{1}{2})^3 × (\frac{1}{2})^2\)となります。

最後に、5回中何回目でおもてが出るかについて考えます。1,2,3回目でおもてが出るかもしれないし、2,4,5回目でおもてが出るかもしれません。これらの組み合わせは5つの回から3つを選ぶ組み合わせの総数を求めればよいので\(_5C_3\)となります。


以上より上記の式が出てきます。より詳しい説明は高校数学で確率を勉強してみてください!


この計算式からコインを5回投げるときにおもてが3回、うらが2回出る確率は0.3125ということが分かりました。例えばおもてが4回、うらが1回でる確率は下のようになります。

\(_5C_4 × (\frac{1}{2})^4 ×(\frac{1}{2})^1=\frac{5}{32}=0.15625\)


より一般化してみましょう。コインを5回投げるときにおもてが\(x\)回、うらが\(5-x\)回出る確率は以下のようにあらわすことができます。

\(_5C_x × (\frac{1}{2})^x × (\frac{1}{2})^{5-x}\)


この式は成功確率\(\frac{1}{2}\)のベルヌーイ試行を5回行う二項分布の確率関数の式となります。\(x\)に成功回数を代入することによってそれぞれの成功回数となる確率を求めることができます。


さらに一般化しましょう。成功確率が\(p\)のベルヌーイ試行を\(n\)回行う二項分布の確率関数は以下のようになります。

\(_nC_x × p^x × (1-p)^{n-x}\)

この式が二項分布の確率関数となります。

二項分布の確率関数

\(P(X=x) \equiv \: _nC_x ×p^x × (1-p)^{n-x}\) \((x=0,1,2,…,n)\)

二項分布の期待値と分散


二項分布の期待値と分散は下のようになります。

二項分布の期待値と分散

期待値 : \(\mu = np\)
 分散 : \(\sigma^2 = np(1-p)\)


期待値はその確率分布が取る値の平均を表します。分散はその確率分布が取る値にどれだけばらつきがあるかを表します。

日常で見る二項分布の例


二項分布はベルヌーイ試行を複数回行う場合を考えているので、ベルヌーイ分布の記事と同じように日常でも結構見かけます。日常での具体例があった方がイメージがつかみやすいと思うのでこの章ではいくつか日常の例を紹介していきます。

コイントス


これは先ほども説明しましたがコイントスはベルヌーイ試行です。コイントスは成功確率\(p\)が\(\frac{1}{2}\)となるようなベルヌーイ試行となります。したがってコイントスを\(n\)回行ったときの各成功回数が実現する確率分布は二項分布となります。


コイントスをこれまでに説明した式で表すと以下のようになります。

確率関数 :
\(P(X=x) \equiv \:_nC_x ×(\frac{1}{2})^x × (\frac{1}{2})^{n-x}\) \((x=0,1,2,…,n)\)

期待値 : \(\mu = \frac{1}{2}n\)
 分散 : \(\sigma^2= \frac{1}{4}n\)

サイコロ


サイコロを1回投げて3,6が出る場合を成功、それ以外が出る場合を失敗としたときにこれは成功確率\(p\)が\(\frac{1}{3}\)のベルヌーイ試行となります。したがってサイコロを\(n\)回投げた場合の各成功回数が実現する確率分布は二項分布となります。


この試行をこれまでに説明した式で表すと以下のようになります。

確率関数 :
\(P(X=x) \equiv \: _nC_x ×(\frac{1}{3})^x × (\frac{2}{3})^{n-x}\) \((x=0,1,2,…,n)\)

期待値 : \(\mu = \frac{1}{3}n\)
 分散 : \(\sigma^2= \frac{2}{9}n\)

二項分布をpythonで扱う


最後にpythonを使って二項分布を扱いたいと思います。プログラミングの知識が必要なので、分からなければプログラムの所は飛ばして結果だけ確認してみてください。


pythonで確率・統計を扱うときはscipyというライブラリをよく使います。その中でも今回は二項分布を扱いたいのでbinomをインポートします。binomは二項分布のことです。また数値計算でよく使うnumpy、グラフ作成でよく使うmatplotlibというライブラリもインポートしておきます。

import scipy.stats as stats
from scipy.stats import binom
import matplotlib.pyplot as plt
import numpy as np

ということでまずは試行回数\(n\)を5回、成功確率\(p\)を0.5として二項分布の確率関数を計算します。例えば成功回数\(k\)が3回の確率を求めてみましょう。

n = 5 # 試行回数
p = 0.5 # 成功確率
k = 3 # 成功回数

# 二項分布の確率関数を計算
p = binom.pmf(k=k, n=n, p=p)

print("二項分布の確率関数の値:", p)


ということで成功確率が0.5のベルヌーイ試行を5回やる二項分布における、成功回数が3回となる確率が0.3125ということが分かりました。(微妙に違うのは丸め誤差の影響です。)


次にこの二項分布をグラフ化してみましょう。つまり成功回数が0,1,2,…,5回のときそれぞれに対して確率がいくつになるかを棒グラフで表します。

n = 5  # 試行回数
p = 0.5  # 成功確率

# 成功回数の候補を生成(成功回数は0,1,2,...,5のどれか)
k = np.arange(0, n + 1)

# 二項分布の確率質量関数を計算
pmf = stats.binom.pmf(k=k, n=n, p=p)

# 確率質量関数をグラフに描画
plt.bar(k, pmf, color = "blue", alpha = 0.5)
plt.xlabel("Number of Successes")
plt.ylabel("Probability")
plt.show()


このグラフを見ると成功回数が2回と3回になる可能性が最も高いことが分かりますね。実際にシミュレーションして確かめてみましょう。


5回のベルヌーイ試行を10回、100回、1000回、10000回やったときに何回おもてが出たかをグラフにします。プログラムは試行回数が10回の場合を表しています。6行目の数字を変更すれば好きな試行回数に変えることができます。

# 試行回数と成功確率を指定
n = 5
p = 0.5

# 10回の試行をシミュレーション(ここの数値を変更することで試行回数を変えられる)
num_trials = 10
num_successes = np.zeros(num_trials)

for i in range(num_trials):
    # 1回の試行を実行し、成功回数を記録
    num_successes[i] = stats.binom.rvs(n=n, p=p)

# 成功回数のヒストグラムを描画
plt.hist(num_successes, bins=np.arange(n+2)-0.5, rwidth=0.8, color = "blue", alpha = 0.5)
plt.xlabel("Number of Successes")
plt.ylabel("Number of appearances")
plt.title("Number of trials : 10")
plt.show()


左上から順番に10,100,1000,10000回となっています。10回の場合は思っている形とは全然違いますが、回数を増やすにつれてグラフの形が確率分布と同じようになっているのが分かると思います。


つまり確率分布とは、とある試行をたくさんやっていったら各結果の出現確率はこのような分布になっていくんだよってことを表しているんですね。


最後に期待値についてもグラフを使って確認してみましょう。5回のベルヌーイ試行をやる回数を10,100,1000,10000回と増やしていったときに、各回数で得られた結果の平均値がどのように推移していくかをグラフを使って確認してみましょう。

# 成功確率
p = 0.5
# 試行回数
n_list = [10,100,1000,10000]

# 各試行回数での成功回数の平均値を計算
mean_list = []
for n in n_list:
  num_successes = np.zeros(n)
  for i in range(n):
    # 1回の試行を実行し、成功回数を記録
    num_successes[i] = stats.binom.rvs(n=5, p=p)
  mean_list.append(num_successes.mean())

# グラフを描画
plt.plot(n_list, mean_list, label="Simulated",color = "blue",marker = "o",alpha=0.5)
plt.hlines(2.5,10,10000, label="Theoretical", color = "orange", alpha = 1)
plt.xscale("log")
plt.xlabel("Number of trials")
plt.ylabel("Mean")
plt.title("Expected Value Of Binomial Distribution")
plt.legend()
plt.show()


橙線は期待値で2.5のラインを表しています。つまり橙線は理論的にはコイントスを5回したときにおもてが出る回数は2.5回になるはずということを言っています。


一方青線は実際にシミュレーションした結果平均何回おもてが出たかを表しています。試行回数が少ないときは期待値との誤差がありますが、試行回数が多くなるにつれてどんどん期待値に近づいているのが分かりますね。


ランダムに試行されるのでプログラムを実行するたびにグラフは変わりますが、基本的には試行回数が大きくなるにつれて誤差は小さくなっていくはずです。

おわりに


いかがでしたか。

今回の記事では二項分布について解説していきました。

今後もこのような経営工学に関する記事を書いていきます!

最後までこの記事を読んでくれてありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA