【離散分布】ベルヌーイ分布と二項分布を例題を用いて優しく解説、pythonで実装

推定統計

こんにちわ!Yamuです!
前回の記事で離散分布の期待値
分散について説明しました。
今回は離散分布
ベルヌーイ分布
二項分布について
解説した後
pythonで実装していきます!

こんな人におススメ
  • ベルヌーイ分布について知りたい
  • ベルヌーイ分布の例題を解きたい
  • 二項分布について知りたい
  • 二項分布の例題を解きたい
  • 二項分布をpythonで実装したい

ベルヌーイ分布

サイコロを投げて
偶数が出た場合を成功
奇数が出た場合を失敗とすると

ベルヌーイ試行として知られる試行が行われます。
ベルヌーイ試行では
各試行ごとに2つの独立した結果のいずれかが得られるため
2種類の結果が出現する可能性があります。
この試行で得られる確率分布は
ベルヌーイ分布として知られています。

2種類の結果を0(失敗)と1(成功)とし
成功確率をPとすると

\(P(X=K)=P^k(1-P)^{1-k}\)
k:0 もしくは1
P:1回の試行で事象2が起こる確率

期待値と分散は
\(E[X] = μ = p \)

\(V[x] = E[x] – μ^2 = 1・p + (1-p)・0 – p^2 = p(1-p)\)

コインを投げたとき50%で
表と裏のどちらかが出る事象

を利用して
ベルヌーイ分布の解説を
していきます。

【例題1】コイン投げ

例題1

コインを1回投げたときの確率密度関数を求めよ

コインを投げた結果表か裏のどちらかである。
表の時をK=1,裏の時はK=0と置いて
P(X=1)P(X=0)を求める

表が出る確率\(P\)は
\(\displaystyle P=\frac{1}{2}\)
*この時点で答えが出ている

裏が出る確率\(1-P\)は
\(\displaystyle 1-P= \frac{1}{2}\)
*この時点で答えが出ている

表が出る場合を1とすると
\(K=1\)

ベルヌーイ分布の公式は
\(P(X=K)=P^k(1-p)^{1-k}\)
各値を当てはめると

表が出る確率\(P\)は
\(P(X=1)=(\displaystyle \frac{1}{2})^1・(\frac{1}{2})^0\)
\(\displaystyle P(X=1)=\frac{1}{2}\)

裏が出る確率\(1-P\)は
\(P(X=0)=(\displaystyle \frac{1}{2})^0・(\frac{1}{2})^1\)
\(\displaystyle P(X=0)=\frac{1}{2}\)

ベルヌーイ分布を利用して
表が出る確率と裏が出る
確率を求めるとともに 0.5
ベルヌーイ分布
表と裏の2つの結果の確率を扱う
単純な離散分布なんですね

Pythonを使ってベルヌーイ分布の確率密度関数の値を出力するコードを実装

例題2

ある実験を繰り返し10回行った所8回成功し2回失敗した
成功=1失敗=0とし
表にまとめるとこのようになった。
[0,0,1,1,1,1,1,1,1,1]
\(P(x=0)\),\(P(x=1)\)を求めよ

10回中2回失敗した。
失敗した確率
すなわちP(X=0)は
\(\displaystyle P(X=0)=\frac{2}{10}=0.2\)

10回中8回成功した。
成功した確率
すなわちP(X=1)は
\(\displaystyle P(X=1)=\frac{8}{10}=0.8\)

このようにベルヌーイ分布は
結果の観察から求めることが
出来るんですね!
これをpythonに実装していきます。

import numpy as np
import matplotlib.pyplot as plt

# ベルヌーイ分布
# fail:0,sucsess:1
prob_data = np.array([])
data = np.array([0,0,1,1,1,1,1,1,1,1])

for i in np.unique(data):
  P = len(data[data==i])/len(data)
  print(i,"が出る確率",P)
  prob_data = np.append(prob_data,P)
  print(prob_data)
  plt.bar([0,1],prob_data,align = 'center')
  plt.xticks([0,1],['fail','sucsess'])
  plt.grid(True)

二項分布

成功確率を p失敗確率を 1−p とすると、
試行回数を n回 のベルヌーイ試行を行った際に
n 回の試行のうち特定の x 回で成功し
残りの nx 回で失敗する確率を計算するのが二項分布です。

\(P(X=x)=nC_x・P^x・(1-P)^{n-x}\)
期待値
\(E[X]=np\)
分散
\(V[X]=np(1-P)\)

二項分布はベルヌーイ分布
拡張したものなんですね!

コインを投げたとき50%で
表と裏のどちらかが出る事象

を利用して二項分布の解説を
していきます。

【例題3】コイン投げ

例題3

コインを10回投げたとき3回表が出る確率を
二項分布を利用して求めよ

コインを10回投げたとき3回表が出る事象の数
\(10C_3\)より
\(=120\)
表が出る回数は3回
\(x=3\)
表が出る確率Pは
\(\displaystyle P=\frac{1}{2}\)

二項分布の公式より
\(\displaystyle P(X=3)=10C_3・(\frac {1}{2})^3・(\frac {1}{2})^7\)
\(=0.117\)

Pythonで二項分布のコードを実装する

例題4

Pythonで二項分布のコードを実装後
コインの表が出る回数を確率変数とし
確率変数Xを0から1ずつstepさせ
\(P(X=1),P(2)…P(10)\)の値と
結果をplotせよ

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

# パラメータの設定
p = 0.5  # 成功確率
n = 10   # 試行回数

# 二項分布
x = np.arange(0, n+1)

pmf = binom.pmf(x, n, p)

# 結果の表示
print(f'試行回数: {n}, 成功確率: {p}')
print(f'確率密度関数 (PMF): {pmf}')


# グラフの描画
plt.bar(x, pmf, align='center', alpha=0.5)
plt.plot(x, pmf, marker='o', linestyle='-', color='blue', label='PMF Line')
plt.title('Binomial Distribution PMF')
plt.xlabel('X')
plt.ylabel('Density')
plt.xticks(x, x)
plt.show()
print('確率密度関数の総和',sum(pmf))

出力結果の値は

事象確率密度関数
表が一回も出ない\(P(X=0)\)0.00097656
表が1回出る\(P(X=1)\)0.00976563
表が2回出る\(P(X=2)\)0.04394531
表が3回出る\(P(X=3)\)0.1171875
表が4回出る\(P(X=4)\)0.20507812
表が5回出る\(P(X=5)\)0.24609375
表が6回出る\(P(X=6)\)0.20507812
表が7回出る\(P(X=7)\)0.1171875
表が8回出る\(P(X=8)\)0.04394531
表が9回出る\(P(X=9)\)0.00976563
表が10回出る\(P(X=10)\)0.00097656

グラフの出力結果は

確率が50%なので左右対称
になってますね!面白い!
確率的に10回コインを振った時
5回表が出る確率が
一番高いんですね!
期待値は公式より\(E(x)=np=5\)
なのであってそうですね!

おまけ

せっかくコードを作って
もうちょっと遊びたい気分なので

p# 成功確率 n # 試行回数
を変化させて遊んでいきます!

ロットの抜き取り検査

例題5

不良品率5%のロットから20個のsample
を抜き取った時
2個の不良品が含まれる確率を求めよ

不良率P=0.05,試行回数n=20より
コードのPとnを値を変更すると
\(P(x=2)=5.95821478e-02\)
グラフは

参考文献

Bitly
Bitly

まとめ

以上が離散分布ベルヌーイ分布,二項分布について解説した後
pythonで実装しました。本当はポアソンと幾何分布の説明も
したかったんですけどあれも入れたい、これも入れたいと

記事の詰め込み癖が止まらない…
ご視聴ありがとうございました!

タイトルとURLをコピーしました