본문 바로가기
개발/Python

포아송 분포 문제 예시

by 피로물든딸기 2025. 8. 21.
반응형

전체 링크

 

푸아송 분포에서 확률 공식은 다음과 같다.


어느 기관에서 시간당 10건의 전화를 받는다. 5분 내에 1건 이상 전화를 받을 확률은?

 

→ 시간당 10건이므로 60분당 10건, 5분 동안 평균 λ = 10 * ( 5 / 60 ) 이다.

이 경우 1건 이상에 대한 값을 구하므로 pmf나 cdf를 써도 값이 동일하다.

from scipy.stats import poisson

# 시간당 10건 -> 60분당 10건 
ld = 10 * (5 / 60) # 평균 발생 건수 (lambda): 5분 동안 평균 0.8333건

# P(X >= 1) = 1 - P(X = 0)
ans_pmf = 1 - poisson.pmf(0, ld)
ans_cdf = 1 - poisson.cdf(0, ld) # 1건이므로 답이 동일

print(f"5분 내에 1건 이상 전화 받을 확률: {ans_pmf:.4f}") # 0.5654
print(f"5분 내에 1건 이상 전화 받을 확률: {ans_cdf:.4f}") # 0.5654

기계가 고장나는 횟수가 40이고 푸아송 분포를 따를 때, 첫 해에 고장나는 횟수가 52회 미만일 확률?

from scipy.stats import poisson

λ = 40
k = 51  # X < 52 는 X <= 51

poisson_prob = poisson.cdf(k, λ)
print(f"[푸아송 분포] P(X < 52) = {poisson_prob:.4f}") # 0.9613

# 정규분포 - 연속성 보정 52 → 51.5
from scipy.stats import norm
import math

mu = λ
sigma = math.sqrt(λ)

z = (51.5 - mu) / sigma  # 연속성 보정: 52 -> 51.5
normal_approx = norm.cdf(z)
print(f"[정규 근사] P(X < 52) ≈ {normal_approx:.4f}") # 0.9655

어떤 버스가 시간 당 평균 5대의 호출 요청을 받을 때, 시간 당 3대 이상의 호출을 받을 확률은?

→ 시간당 5대 호출이므로  λ = 5 이다.

누적분포함수 cdf를 이용해서 풀이를 해야 정상적인 답이 나온다.

from scipy.stats import poisson

ld = 5 # 평균 호출 수 

# P(X >= 3) = 1 - P(X <= 2)
ans1 = 1 - poisson.cdf(2, ld)
ans2 = 1 - poisson.pmf(2, ld) # X = 2인 경우만 제외이므로 답이 틀림
ans3 = 1 - poisson.pmf(2, ld) - poisson.pmf(1, ld) - poisson.pmf(0, ld)

print(f"시간당 3대 이상의 호출을 받을 확률: {ans1:.4f}") # 0.8753
print(f"시간당 3대 이상의 호출을 받을 확률: {ans2:.4f}") # 0.9158
print(f"시간당 3대 이상의 호출을 받을 확률: {ans3:.4f}") # 0.8753

성공확률이 0.05일 때, 50번 시도해서 5번 성공할 확률은?

from scipy.stats import binom # 이항분포
from scipy.stats import poisson # 푸아송 분포

n = 50
p = 0.05
np = 2.5

ld = np

binom.pmf(5, n, p), poisson.pmf(5, ld)
# (0.06584063715436414, 0.06680094289054267)

포아송 공장에서 부품 결함 수의 평균이 2이고, 이항분포 공장에서 10개 중 3개 결함이 있는 부품이 나올 때,

두 공장에서 결함 부품의 합이 1개 나올 확률은?

 

이항분포의 확률질량함수(PMF)는 다음과 같다.

from scipy.stats import poisson, binom

# 분포 정의
poisson_dist = poisson(mu=2)
binom_dist = binom(n=10, p=0.3)

# P(X=0, Y=1) + P(X=1, Y=0)
p_total_lib 
    = poisson_dist.pmf(0) * binom_dist.pmf(1) + poisson_dist.pmf(1) * binom_dist.pmf(0)
    
p_total_lib # 0.024029574065041418

책상을 만드는데 걸리는 시간이 20분일 때, 책상 한 개를 만드는 데 걸리는 시간이 30분일 확률은?

→ 한 건이 발생할 때까지 걸리는 시간이므로 지수 분포

# 책상을 만드는데 걸리는 시간이 20분일 때, 책상 한 개를 만드는 데 걸리는 시간이 30분일 확률은?
import math

# 평균 시간 20분 => lambda = 1/20
lam = 1/20

# P(T >= 30)
prob = math.exp(-lam * 30)

print(f"책상 한 개 만드는 데 30분 이상 걸릴 확률: {prob:.4f}") # 0.2231
# 30분 이내로 끝낼 확률은 1 - 0.2231
반응형

댓글