🤩 Negative Binomial Distribution 음이항 분포에 대해서 알아보고, 파이썬을 통해서 간단한 예제 문제를 풀도록 하겠습니다. 파이썬 문제는https://wikidocs.net/165633를 참고했습니다.
문제
당신은 영업을 뛰고 있으며, 각 잠재 고객에게 영업이 성공할 확률은 동일하게 70%라고 가정합시다. 당신은 하루에 10건의 영업을 성공시키면 집에 갈 수 있습니다. 이때 영업 성공 횟수가 이항 분포를 따르는지 확인해보기 위한 시뮬레이션을 완성시키세요. 베이스라인의code here을 채우세요.
베이스라인
import numpy as np
from tqdm import tqdm
import matplotlib.pyplot as plt
from collections import Counter
def try_till_success(n):
'''
1. 1회씩 시도(Bernoulli)하여 성공 횟수가 10회 누적될 때까지 try count를 누적시킨다
2. 10번 성공하면 try_counts에 append 한 뒤 초기화
3. 1~2를 n회 반복
*numpy에는 Bernoulli가 없으니 이항 분포에서 n=1로 하여 대신 사용한다.
'''
try_counts = []
for _ in tqdm(range(n)):
try_count = 0
'''
code here
'''
try_counts.append(try_count)
return try_counts
def bar_plotter(nums):
'''
matplotlib이 제공하는 히스토그램은 여러 개를 겹쳐그릴 때 이쁘지 않아 bar plot으로 대신 그렸다
'''
num_counter = Counter(nums)
plt.bar(
num_counter.keys(),
num_counter.values(),
width=0.9, alpha=0.3
)
plt.show()
Input
n = 100000
p = 0.7
try_list = try_till_success(n)
nb_list = [10+np.random.negative_binomial(10, p) for _ in range(n)]
binom_list = [np.random.binomial(int(10/0.7**2), p) for _ in range(n)]
try_counter = Counter(try_list)
nb_counter = Counter(nb_list)
binom_counter = Counter(binom_list)
plt.figure(figsize=(12,10))
plt.subplot(2,1,1)
plt.bar(try_counter.keys(), try_counter.values(), alpha=0.3)
plt.bar(nb_counter.keys(), nb_counter.values(), alpha=.3)
plt.legend(['try till sucess', 'negative binomial'])
plt.subplot(2,1,2)
plt.bar(try_counter.keys(), try_counter.values(), alpha=0.3)
plt.bar(binom_counter.keys(), binom_counter.values(), alpha=.3)
plt.legend(['try till sucess', 'binomial'])
plt.show()
음이항 분포의 평균은 r/p로 계산됩니다. 위에서 예시로한 영업 사례에서의 수치를 이용하여. 10건의 영업을 성공해야하고, 해당 영업에 성공할 확률은 70%라고 지정된 수치를 이용하여 계산한다면 $10/0.7 \simeq 14.3$
음이항 분포와 이항 분포의 혼동 방지: 핵심 차이점 명확히 하기
음이항 분포는 성공/실패 두 가지 결과만 존재하는 베르누이 시행을 기반으로 하므로, 얼핏 보면 이항 분포와 유사해 보일 수 있습니다. 하지만 두 분포 사이에는 중요한 차이점이 존재하며, 이 차이점을 간과하면 오류가 발생할 수 있습니다.
핵심 차이점:
시행 횟수 (n):
이항 분포: 시행 횟수 n이 고정된 상수입니다. 예를 들어, 동전을 10번 던지는 경우 n은 항상 10입니다.
음이항 분포: 시행 횟수가 확률 변수입니다. 즉, 시행 횟수가 매번 달라질 수 있습니다. 영업 성공 사례에서, 10번 성공할 때까지 시도하는 횟수는 매일 달라질 수 있습니다.
성공 횟수 (r):
이항 분포: 성공 횟수가 확률 변수입니다.
음이항 분포: 성공 횟수가 고정된 상수입니다.
주의해야 할 점:
성공/실패의 두 가지 결과만 존재한다는 이유로 음이항 분포를 이항 분포로 잘못 판단하기 쉽습니다.
특히, 시행 횟수 n이 고정되지 않고 변동하는 상황에서는 이항 분포를 적용하면 오류가 발생할 수 있습니다.
따라서 데이터 수집 과정을 명확히 이해하고, 각 분포의 특성을 정확히 파악하여 적절한 분포를 선택하는 것이 중요합니다.
기하 분포
정의:
기하 분포는 첫 번째 성공이 발생할 때까지 실패 횟수를 나타내는 확률 분포입니다.
성공 확률이 p인 베르누이 시행을 반복할 때, 첫 성공까지의 시도 횟수를 모델링합니다.
예시: 동전을 던져 처음 앞면이 나올 때까지 던지는 횟수, 제품 검사에서 처음 불량품이 나올 때까지 검사하는 횟수 등
특징:
무기억성(memoryless property)을 가집니다. 즉, 과거의 실패가 미래의 성공 확률에 영향을 미치지 않습니다.
이산 확률 분포입니다.
계산공식
확률 변수 X가 k번째 시행에서 처음으로 성공할 확률은 다음과 같이 계산됩니다.
$$P(X = k) = (1 - p)^{k-1}*p$$ - $p$는 각 시행에서 성공할 확률(고정값) - $k$는 첫번째 성공이 발생하는 시행 횟수
초기하 분포
정의:
초기하 분포는 유한한 모집단에서 비복원 추출을 할 때 특정 특성을 가진 표본의 개수를 나타내는 확률 분포입니다.
예시: N개의 공 중에서 K개의 흰 공이 있을 때, n개의 공을 임의로 뽑았을 때 흰 공의 개수
특징:
비복원 추출을 가정하기 때문에 각 시행이 독립적이지 않습니다.
이산 확률 분포입니다.
계산공식
모집단의 크기가 N이고, 특정 특성을 가진 개수가 K일 때, n개의 표본을 추출했을 때 그중 x개가 특정 특성을 가질 확률은 다음과 같이 계산됩니다.
$$P(X = x) = \frac{\binom{K}{x}\binom{N-K}{n-x}}{\binom{N}{n}}$$ - $N$은 모집단의 크기 - $K$는 모집단에서 특정 특성을 가진 갯수 - $n$은 추출하는 표본의 크기 - $x$는 추출한 표본에서 특정 특성을 가진 갯수 - $\binom{a}{b}는 조합을 나타내며, a개 중에서 b개를 선택하는 경우$