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


어느 기관에서 시간당 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반응형
'개발 > Python' 카테고리의 다른 글
| 다항회귀모형 (PolynomialFeatures) (1) | 2025.08.21 |
|---|---|
| F-검정 통계량 문제 예시 (0) | 2025.08.21 |
| ROC 커브의 AUC 계산 (0) | 2025.08.19 |
| 상관계수 (피어슨, 스피어만, 켄달의 타우) (0) | 2025.08.18 |
| Pandas - 데이터 병합 (merge option, inner / left / right / outer) (1) | 2025.08.18 |
댓글