초기하분포와 비복원 추출은 통계·확률에서 강하게 연결된 개념이다. 개념을 분리해서 정의하고, 이후 수학적 구조까지 명확히 정리한다.
⸻
비복원 추출은 한 번 뽑은 표본을 다시 모집단에 넣지 않는 방식이다.
• 예시
카드 52장에서 1장을 뽑고 → 다시 넣지 않고 → 다음 카드 뽑기
• 특징
• 시행 간 독립성 깨짐
• 확률이 계속 변함 (조건부 확률 구조)
즉,
두 번째 추출 확률은 첫 번째 결과에 조건부로 의존한다.
⸻
초기하분포는 비복원 추출 상황에서 특정 개수의 성공을 얻을 확률 분포다.
정의
모집단 크기: N
성공 요소 개수: K
추출 횟수: n
성공 횟수 (확률변수): X
이때,
P(X=k)=\frac{\binom{K}{k}\binom{N-K}{n-k}}{\binom{N}{n}}
⸻
이 식은 다음 구조를 가진다:
• 분자:
• 성공 k개 뽑는 경우의 수
• 실패 n-k개 뽑는 경우의 수
• 분모:
• 전체 n개 뽑는 경우의 수
즉,
“전체 경우 중에서, 성공 k개 포함되는 경우의 비율”
⸻
문제:
빨간 공 5개, 파란 공 7개 → 총 12개
3개를 비복원으로 뽑을 때, 빨간 공 2개 나올 확률
• N=12
• K=5
• n=3
• k=2
→ 그대로 식에 대입
⸻
구분 초기하분포 이항분포
추출 방식 비복원 복원
독립성 없음 있음
확률 변화 계속 변함 일정
사용 상황 모집단이 유한하고 작을 때 반복 시행
⸻
초기하분포는 다음 상황에서 자주 등장한다:
• A/B 테스트 샘플링 (특히 finite population)
• 추천 시스템 평가 (subset sampling)
• 품질 검사 (불량품 샘플링)
• 데이터 서브샘플링 검정 (permutation-like reasoning)
특히,
모집단 대비 샘플 비율이 클수록
→ 이항분포 대신 초기하분포를 써야 정확하다
⸻
⸻
필요하면 다음 단계로 이어서 설명 가능하다:
• 초기하분포의 기대값 / 분산 유도
• 이항분포로 근사하는 조건 (N이 클 때)
• 실제 데이터 분석 코드 (Python / scipy.stats.hypergeom)
어느 방향으로 더 파고들지 지정해라.
해당 문장은 초기하분포의 적용 전제 조건을 설명하는 것이다. 하나씩 분해해서 해석한다.
⸻
모집단(population)의 크기 N이 정해져 있고 끝이 있다는 의미다.
• 예시
• 카드 52장 → 유한
• 불량/정상품이 섞인 제품 100개 → 유한
반대로,
• 동전을 무한히 던지는 실험 → 유한하지 않음 → 초기하분포 부적합
즉,
“전체 개수를 정확히 알고 있는 상황”이어야 한다.
⸻
모집단의 모든 요소가 딱 두 가지 상태로 나뉜다는 의미다.
보통 이렇게 정의한다:
• 성공 (success)
• 실패 (failure)
예시
상황 성공 실패
불량 검사 불량품 정상품
카드 추출 빨간 카드 검은 카드
설문 구매함 구매 안 함
즉,
모든 대상은 반드시 둘 중 하나에 속해야 한다 (다중 클래스 X)
⸻
초기하분포는 아래 구조를 전제로 한다:
• 전체 N개 중
• 성공 K, 실패 N-K
그리고 여기서 표본 n개를 뽑을 때
성공 개수 X를 분석한다.
이 구조가 깨지면:
• 범주가 3개 이상이면 → 다항분포 계열
• 모집단이 무한이면 → 이항분포로 모델링
⸻
이 문장을 자연어로 풀면 이렇게 된다:
“전체 개수가 정해져 있고,
각 요소가 성공/실패 두 가지 중 하나로만 나뉘는 집단에서
비복원 추출을 할 때 쓰는 분포”
⸻
이 조건은 모델 선택 기준이다.
• finite dataset에서 샘플링 → 초기하분포
• streaming / 무한 데이터 → 이항 or 베르누이
예를 들어:
• 데이터셋 전체 10,000개 중 500개 positive label
→ 샘플링 평가 → 초기하분포
• 실시간 클릭 여부 예측
→ 베르누이 / 이항
⸻
⸻
여기서 한 단계 더 중요한 질문이 나온다:
“그럼 언제 이항분포로 근사해도 되냐?”
이건 실무에서 꽤 중요한 포인트다.
필요하면 근사 조건까지 이어서 설명한다.
핵심은 모델 선택의 비용 vs 정확도 trade-off다.
초기하분포와 이항분포는 구조적으로 거의 동일한 문제를 다루지만, 계산과 가정에서 차이가 난다. 그래서 “언제 이항분포로 근사해도 되냐”는 질문이 자연스럽게 나온다.
⸻
초기하분포는 정확하지만:
• 조합(combination) 계산이 복잡함
• 해석이 직관적이지 않음
• 분석/모델링에서 다루기 불편함
반면 이항분포는:
• 독립 시행 가정 → 계산 단순
• 파라미터 p 하나로 표현
• 통계적 추론 (MLE, CI 등) 훨씬 쉬움
그래서 실무에서는:
“정확한 모델(초기하) 대신 단순한 모델(이항)을 써도 되냐?”
를 항상 판단해야 한다.
⸻
초기하분포
• 비복원 추출
• 확률이 계속 변함
이항분포
• 복원 추출 (또는 독립 시행)
• 확률 p 고정
즉,
초기하분포 = “현실적으로 정확한 모델”
이항분포 = “근사 모델”
⸻
핵심 조건 하나로 정리된다:
샘플 비율이 매우 작을 때
수식으로 쓰면:
\frac{n}{N} \le 0.05 \quad (\text{또는 } 0.1 이하까지 허용하기도 함)
• N: 모집단 크기
• n: 샘플 크기
⸻
비복원 추출인데도 이항처럼 보이는 이유:
• 샘플이 매우 작으면
• 하나 뽑아도 전체 비율이 거의 안 바뀜
예:
• 10,000개 중 10개 뽑기
→ 하나 빠져도 비율 변화 거의 없음
그래서:
“복원하지 않아도, 마치 복원하는 것처럼 보인다”
→ 독립 시행처럼 근사 가능
⸻
초기하분포의 기대값:
E[X] = n \cdot \frac{K}{N}
이항분포의 기대값:
E[X] = n \cdot p
여기서
p = \frac{K}{N}
즉,
이항분포는 초기하분포의 “비율 K/N”을 그대로 사용한 근사 모델
⸻
다음 상황에서는 반드시 초기하분포를 써야 한다:
• 샘플 비율이 큼 (예: 30%, 50%)
• 모집단이 작음
• 정확한 확률 계산이 중요한 경우 (품질 검사, 규제 등)
예:
• 100개 중 40개 샘플링 → 절대 이항 쓰면 안 됨
⸻
상황 추천 분포
큰 모집단 + 작은 샘플 이항분포 (근사)
작은 모집단 or 큰 샘플 비율 초기하분포
스트리밍 / 무한 데이터 이항/베르누이
⸻
“초기하분포는 정확한 모델, 이항분포는 효율적인 근사”
→ 샘플이 충분히 작으면 둘은 거의 동일해진다
⸻
원하면 다음 단계로 이어서:
• 실제 수치 예제로 “근사 오차” 비교
• Python (scipy.stats.hypergeom vs binom)로 분포 차이 시각화
• finite population correction(FPC)까지 포함한 분산 비교
어디까지 들어갈지 정해라.
초기하분포를 실제로 써야 하는 상황을 정확히 재현하는 코드로 설명한다. 단순 API 사용이 아니라, 데이터 분석 관점에서 “왜 이걸 쓰는지”까지 포함한다.
⸻
품질 검사 시나리오:
• 전체 제품 N = 1000
• 불량품 K = 80
• 샘플 검사 n = 50
• 질문: 샘플에서 불량품이 5개 이하일 확률
→ 비복원 추출 → 초기하분포 사용
⸻
from scipy.stats import hypergeom
N = 1000 # 전체 개수
K = 80 # 불량품 개수
n = 50 # 샘플 크기
prob = hypergeom.cdf(5, N, K, n)
print(prob)
prob_exact = hypergeom.pmf(5, N, K, n)
print(prob_exact)
⸻
즉,
“샘플 검사에서 불량이 일정 기준 이하일 확률”
→ 품질 기준 통과 여부 판단 가능
⸻
이 케이스는:
• 샘플 비율 = 50 / 1000 = 5%
→ 경계선 수준
만약 더 극단적으로:
• N=200, n=80 (40%)
이면 이항 쓰면 오차 심각
⸻
from scipy.stats import binom
p = K / N # 성공 확률
binom_prob = binom.cdf(5, n, p)
print("Hypergeom:", prob)
print("Binomial :", binom_prob)
→ 두 값 차이 보면 근사 적절성 판단 가능
⸻
(1) 품질 관리 (QC)
• 샘플 검사 → 불량률 추정
(2) 추천 시스템 평가
• 특정 label 포함 샘플 비율
(3) A/B 테스트 (finite population)
• 사용자 풀 제한된 경우
⸻
mean = hypergeom.mean(N, K, n)
var = hypergeom.var(N, K, n)
samples = hypergeom.rvs(N, K, n, size=10000)
⸻
⸻
원하면 다음 단계로:
• 실제 데이터셋에서 “불량 검정 (hypothesis test)”로 확장
• hypergeom 기반 p-value 계산 (Fisher’s Exact Test 연결)
• 시각화 (분포 shape 비교)
이건 통계 면접에서도 자주 나오는 구간이다.
초기하분포의 핵심 수식만 간결하게 정리한다.
⸻
P(X=k)=\frac{\binom{K}{k}\binom{N-K}{n-k}}{\binom{N}{n}}
의미:
• N: 전체 개수
• K: 성공(관심 대상) 개수
• n: 뽑는 개수
• k: 뽑힌 성공 개수
⸻
E[X]=n\cdot\frac{K}{N}
⸻
Var(X)=n\cdot\frac{K}{N}\cdot\left(1-\frac{K}{N}\right)\cdot\frac{N-n}{N-1}
⸻
즉,
이항분포 분산에 “의존성 보정”이 들어간 형태
⸻
필요하면 이 수식이 이항분포로 수렴하는 과정(극한)까지 유도해줄 수 있다.
초기하분포가 이항분포로 근사되는 과정을 수식 중심으로 단계적으로 유도한다. 핵심은 “비복원 → 복원처럼 보이는 극한”이다.
⸻
P(X=k)=\frac{\binom{K}{k}\binom{N-K}{n-k}}{\binom{N}{n}}
이걸 직접 이항분포 형태로 변형한다.
⸻
조합을 factorial 대신 “곱 형태”로 쓰는 것이 핵심이다.
\binom{K}{k} = \frac{K(K-1)\cdots(K-k+1)}{k!}
\binom{N}{n} = \frac{N(N-1)\cdots(N-n+1)}{n!}
이를 전체 식에 대입하면:
\frac{ \left[ K(K-1)\cdots(K-k+1) \right]
\left[ (N-K)(N-K-1)\cdots \right] }
{ N(N-1)\cdots(N-n+1) }
\times \frac{n!}{k!(n-k)!}
⸻
핵심은 각 항을 N으로 나누는 것이다.
예를 들어:
\frac{K}{N}, \quad \frac{K-1}{N-1}, \quad \frac{K-2}{N-2}, \dots
이렇게 바뀐다.
⸻
이제 중요한 가정:
• N \to \infty
• \frac{K}{N} = p (고정)
• n은 상대적으로 매우 작음
⸻
다음이 성립한다:
\frac{K-i}{N-i} \approx \frac{K}{N} = p
이유:
• i는 최대 n인데 n \ll N
• 따라서 N-i \approx N, K-i \approx K
⸻
따라서 곱 전체가:
\left(\frac{K}{N}\right)^k \cdot \left(1 - \frac{K}{N}\right)^{n-k}
형태로 수렴한다.
⸻
P(X=k)\approx \binom{n}{k} p^k (1-p)^{n-k}
즉,
초기하분포 → 이항분포로 수렴
⸻
초기하분포 분산:
Var(X)=n p (1-p)\cdot \frac{N-n}{N-1}
여기서
\frac{N-n}{N-1} \to 1
( N \gg n )
→ 결국
Var(X) \approx n p (1-p)
→ 이항분포와 동일
⸻
이 유도의 본질은 하나다:
“비복원 추출이지만, 모집단이 충분히 크면
뽑아도 전체 비율이 거의 변하지 않는다”
→ 확률이 거의 고정됨
→ 독립 시행처럼 행동
→ 이항분포로 모델링 가능
⸻
⸻
원하면 다음 단계로:
• KL divergence로 두 분포 차이 정량화
• 실제 숫자로 근사 오차 계산
• Fisher’s Exact Test vs Chi-square 연결
이건 통계적으로 더 깊은 레벨이다.