😁 Probability Distribution
확률 분포에 대해서 알아보고, 파이썬을 통해서 간단한 예제 문제를 풀도록 하겠습니다.
파이썬 문제는 https://wikidocs.net/165584를 참고했습니다.
확률 분포(Probability Distribution)
확률 분포는 확률 변수가 특정한 값을 가질 확률을 나타내는 함수를 뜻하는데, 예를 들어서 주사위를 던졌을때 나오는 눈에 대한 확률 변수가 있을 때, 그 변수의 확률분포는 이산균등분포가 된다. 이때 이산균등분포는 확률 함수가 정의된 모든 곳에서 그값이 일정한 분포를 지니는 것을 말한다. 주사위가 6개의 값을 가지고 있고, 1,2,3,4,5,6의 값을 가지는 주사위라면, 던졌을 때 각각의 눈이 나올 확률은 1/6이 된다.
확률 분포는 확률 변수가 어떠한 종류의 값을 가지는가에 따라서 이산 확률 분포 혹은 연속 확률 분포에 속하기도, 둘 중 어디에도 속하지 않는 경우도 존재한다.
이산 확률 변수(Discrete Probability Distribution)
이산 확률 변수가 가지는 확률 분포를 의미한다. 확률 변수가 이산 확률 변수라는 말은 확률 변수가 가질 수 있는 값의 개수가 가산 개(셀수 있다.) 있다는 의미이다. 이산 확률 분포는 확률 질량 함수를 통해서 표현이 가능하다. 누적 분포 함수(cumulative distribution function, cdf)로 표현시 비약적 불연속으로만 증가하게 된다. cdf, pdf, pmf, cmf등 random variable과 probability distributuion에 관한 여러가지가 있는데 해당부분은 다른 포스팅으로 추가적으로 설명하도록 하겠습니다.
이산 확률 분포
이산 확률 분포의 종류에 대해서 나열하자면
- 이산 균등 분포
- 푸아송 분포
- 베르누이 분포
- 기하 분포
- 초기하 분포
- 이항 분포
- 음의 이항 분포
- 다항 분포
와 같이 여러가지의 분포가 존재 합니다.
연속 확률 분포(Continuous Probability Distributuion)
확률 밀도 함수(probability density function, pdf)를 이용해 분포를 표현할 수 있는 경우를 의미하고, 연속 확률 분포를 가지는 확률 변수를 연속 확률 변수라고 부릅니다. 간단하게 확률 밀도 함수를 설명하자면, 확률 밀도 함수 $f(x)$와 구간 $[a,b]$에 대해서 확률 변수 $X$가 구간에 포함될 확률 $P(a \leq X \leq b)$는 $\int_{a}^{b}f(x)dx$가 된다. PDF는 연속 확률 변수가 특정 구간 내에 포함될 확률을 나타내는 함수이며, PDF 아래 영역의 넓이가 해당 구간의 확률을 나타냅니다.
연속 확률 분포
연속 확률 분포의 종류에 대해서 나열하면
- 정규 분포
- 연속 균등 분포
- 카이 제곱 분포
- 감마 분포
문제
파이썬을 통해서 문제를 풀어보도록 하겠습니다. 파이썬으로 베르누이 분포를 구현해보세요. 베이스라인의 code here 을 채우세요.
베르누이 분포란?
베르누이 분포는 이산분포의 종류중의 하나로. 매우 단순한 개념으로 두 가지의 가능한 결과 중에서 하나가 나오는 실험으로 즉 "성공"과 "실패"로 구분 할 수 있다.(배반사건) 즉 성공의 확률이 p로 0.9에 해당한다면, 실패에 대한 확률은 1-p로 즉 0.1에 해당하고, 각각의 결과가 발생할 확률은 변동없이 고정되어져 있다. 베르누이 분포에서의 기대값은 $E(X) = 1* p + 0 * (1-p) = p$, 분산은 $Var(X) = p - p^2 = p(1-p)$에 해당한다.
베이스라인
def pmf_bern(p, x):
'''
주어진 p와 x에 관한 베르누이 분포의 확률 값을 반환한다.
x는 0과 1만이 가능하다.
'''
if x in #
prob = # code here
else:
prob = # code here
print(f"P(X={x}; p={p}) = {prob:.2f}")
return prob
Input
pmf_bern(p=0.7, x=1)
pmf_bern(p=0.2, x=1)
pmf_bern(p=0.2, x=0)
Output
P(X=1; p=0.7) = 0.70
P(X=1; p=0.2) = 0.20
P(X=0; p=0.2) = 0.80
정답 코드(List 방식)
def pmf_bern(p, x):
'''
주어진 p와 x에 관한 베르누이 분포의 확률 값을 반환한다.
x는 0과 1만이 가능하다.
'''
if x in [0, 1]:
prob = p if x == 1 else 1 - p# code here
else:
prob = 0# code here
print(f"P(X={x}; p={p}) = {prob:.2f}")
return prob
정답 코드(Dict 방식)
def pmf_bern(p, x):
'''
주어진 p와 x에 관한 베르누이 분포의 확률 값을 반환한다.
x는 0과 1만이 가능하다.
'''
outcomes = {0 : 1-p , 1 : p}
probability = outcomes.get(x, 0)
print(f"P(X={x}; p={p}) = {probability:.2f}")
return probability
random input
x_num은 0 or 1만 넣도록 조치, probability는 0~1사이 0.1단위로 끊어서 확률을 지정해서 지정한 for loop의 range만큼 돌아가도록 지정해서 여러번 테스트를 거치는 방법
x_num = [0, 1]
p_ = np.arange(0, 1.1, 0.1)
# np.arange가 가끔 한번씩 튀는 경우가 생겨서 round해둬야함.
p_num = np.round(p_ ,2)
for i in range(30):
x_ = random.choice(x_num)
p_ = np.random.choice(p_num)
pmf_bern(p = p_, x = x_)
참고자료(확률분포) : https://ko.wikipedia.org/wiki/%ED%99%95%EB%A5%A0_%EB%B6%84%ED%8F%AC
'공부 > 파이썬을 통한 기초통계학' 카테고리의 다른 글
Poisson Distribution, 포아송 분포 (0) | 2025.02.20 |
---|---|
Binomial distribution, 이항 분포 (0) | 2025.02.19 |
Normal distribution, 정규 분포 (0) | 2025.02.18 |
확률 질량 함수(Probability Mass Function, PDF) 확률 밀도 함수(Probability Density Function) (0) | 2025.02.13 |
Probability, 확률 (0) | 2025.02.10 |