Py) 통계 - 베르누이 분포

Py) 통계 - 베르누이 분포

이산확률분포인 베르누이 분포(Bernoulli Distribution)에 대해 알아본다.


개요

정의

한 번의 시행에서 성공 확률이 $p$이고 실패 확률이 $1−p$인 경우, $X$가 성공(1) 또는 실패(0)를 나타내는 확률 변수일 때, 확률 변수 $X$가 보이는 분포

특징

확률 변수 $X$는 베르누이 시행(Bernoulli Trial)을 표현하며 다음과 같은 특징을 가지고 있다.

두 가지 결과: 예(1), 아니오(0) 등
결과의 확률이 고정: 각 시행마다 성공 확률은 항상 일정
독립 시행: 특정 시행 결과가 다른 시행의 결과에 영향을 주지 않음

시행 횟수가 1 이상이 되면 이항분포(Binominal Distribution)가 된다.

핵심 파라미터 및 관련 수식

파라미터

● $P$: 확률

관련 수식

이산 확률 변수 $X$에 대한 확률질량함수(probability mass function)는 다음과 같다.

$$ f(k) = \begin{cases}\begin{align} 1 - p \quad & if \; k = 0\\ p \qquad & if \; k = 1 \end{align}\end{cases} \qquad \text{for} \; k \; \text{in} \; \{0, 1\}, \; 0 \le q \le 1$$

분포

확률 $P$가 0, 0.5, 1인 경우의 분포는 다음과 같다.
베르누이 분포

기타

-

실습

베르누이 분포를 따르는 임의의 숫자를 생성하려면 다음과 같이 코드를 작성할 수 있다.

1
2
3
4
5
6
import numpy as np
from scipy.stats import bernoulli

np.random.seed(123)
bernoulli.rvs(0.5, size = 10)
## array([1, 0, 0, 1, 1, 0, 1, 1, 0, 0], dtype=int64)

이론 부분의 분포를 그리기 위해 사용된 코드는 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import numpy as np
import pandas as pd

from scipy.stats import bernoulli

import matplotlib.pyplot as plt

np.random.seed(120)
r1 = bernoulli.rvs(1, size = 100)
r2 = bernoulli.rvs(0.5, size = 100)
r3 = bernoulli.rvs(0, size = 100)

r1_values = [sum(r1 == 0), sum(r1 == 1)]
r2_values = [sum(r2 == 0), sum(r2 == 1)]
r3_values = [sum(r3 == 0), sum(r3 == 1)]

bar_width = 0.05
spacing = 0.05

r1_pos = np.arange(2)
r2_pos = [x + bar_width + spacing for x in r1_pos]
r3_pos = [x + bar_width + spacing for x in r2_pos]

plt.bar(r1_pos, r1_values, color = "blue", width = bar_width, label = "p = 1")
plt.bar(r2_pos, r2_values, color = "green", width = bar_width, label = "p = 0.5")
plt.bar(r3_pos, r3_values, color = "red", width = bar_width, label = "p = 0")

plt.xlim(-0.8, 2)
plt.xticks([0.15, 1.05], ["0", "1"])

plt.ylabel("Count")
plt.xlabel("Value")
plt.title("Bernoulli Distributions (random, n = 100)")
plt.legend(loc = "upper right")

plt.tight_layout()
plt.show()
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×