미완 - 초기하분포

Hyunjun Kim·2026년 3월 28일

통계학기초

목록 보기
22/24

초기하분포와 비복원 추출은 통계·확률에서 강하게 연결된 개념이다. 개념을 분리해서 정의하고, 이후 수학적 구조까지 명확히 정리한다.

⸻

  1. 비복원 추출 (Sampling without replacement)

비복원 추출은 한 번 뽑은 표본을 다시 모집단에 넣지 않는 방식이다.
• 예시
카드 52장에서 1장을 뽑고 → 다시 넣지 않고 → 다음 카드 뽑기
• 특징
• 시행 간 독립성 깨짐
• 확률이 계속 변함 (조건부 확률 구조)

즉,
두 번째 추출 확률은 첫 번째 결과에 조건부로 의존한다.

⸻

  1. 초기하분포 (Hypergeometric Distribution)

초기하분포는 비복원 추출 상황에서 특정 개수의 성공을 얻을 확률 분포다.

정의

모집단 크기: N
성공 요소 개수: K
추출 횟수: n
성공 횟수 (확률변수): X

이때,

P(X=k)=\frac{\binom{K}{k}\binom{N-K}{n-k}}{\binom{N}{n}}

⸻

  1. 직관적 해석

이 식은 다음 구조를 가진다:
• 분자:
• 성공 k개 뽑는 경우의 수
• 실패 n-k개 뽑는 경우의 수
• 분모:
• 전체 n개 뽑는 경우의 수

즉,

“전체 경우 중에서, 성공 k개 포함되는 경우의 비율”

⸻

  1. 예시 (면접에서 자주 나오는 형태)

문제:
빨간 공 5개, 파란 공 7개 → 총 12개
3개를 비복원으로 뽑을 때, 빨간 공 2개 나올 확률
• N=12
• K=5
• n=3
• k=2

→ 그대로 식에 대입

⸻

  1. 이항분포와의 차이 (핵심 비교)

구분 초기하분포 이항분포
추출 방식 비복원 복원
독립성 없음 있음
확률 변화 계속 변함 일정
사용 상황 모집단이 유한하고 작을 때 반복 시행

⸻

  1. 데이터 분석 관점 해석

초기하분포는 다음 상황에서 자주 등장한다:
• A/B 테스트 샘플링 (특히 finite population)
• 추천 시스템 평가 (subset sampling)
• 품질 검사 (불량품 샘플링)
• 데이터 서브샘플링 검정 (permutation-like reasoning)

특히,

모집단 대비 샘플 비율이 클수록
→ 이항분포 대신 초기하분포를 써야 정확하다

⸻

  1. 핵심 요약
    • 비복원 추출 → 확률이 계속 변한다 (의존성 발생)
    • 초기하분포 → 그 상황을 모델링하는 분포
    • “정해진 모집단에서 일정 개수 뽑을 때 성공 개수 확률”

⸻

필요하면 다음 단계로 이어서 설명 가능하다:
• 초기하분포의 기대값 / 분산 유도
• 이항분포로 근사하는 조건 (N이 클 때)
• 실제 데이터 분석 코드 (Python / scipy.stats.hypergeom)

어느 방향으로 더 파고들지 지정해라.

해당 문장은 초기하분포의 적용 전제 조건을 설명하는 것이다. 하나씩 분해해서 해석한다.

⸻

  1. “모집단은 유한하다”

모집단(population)의 크기 N이 정해져 있고 끝이 있다는 의미다.
• 예시
• 카드 52장 → 유한
• 불량/정상품이 섞인 제품 100개 → 유한

반대로,
• 동전을 무한히 던지는 실험 → 유한하지 않음 → 초기하분포 부적합

즉,

“전체 개수를 정확히 알고 있는 상황”이어야 한다.

⸻

  1. “두 가지 범주로 구분된다”

모집단의 모든 요소가 딱 두 가지 상태로 나뉜다는 의미다.

보통 이렇게 정의한다:
• 성공 (success)
• 실패 (failure)

예시

상황 성공 실패
불량 검사 불량품 정상품
카드 추출 빨간 카드 검은 카드
설문 구매함 구매 안 함

즉,

모든 대상은 반드시 둘 중 하나에 속해야 한다 (다중 클래스 X)

⸻

  1. 왜 이 조건이 중요한가

초기하분포는 아래 구조를 전제로 한다:
• 전체 N개 중
• 성공 K, 실패 N-K

그리고 여기서 표본 n개를 뽑을 때
성공 개수 X를 분석한다.

이 구조가 깨지면:
• 범주가 3개 이상이면 → 다항분포 계열
• 모집단이 무한이면 → 이항분포로 모델링

⸻

  1. 직관적으로 다시 정리

이 문장을 자연어로 풀면 이렇게 된다:

“전체 개수가 정해져 있고,
각 요소가 성공/실패 두 가지 중 하나로만 나뉘는 집단에서
비복원 추출을 할 때 쓰는 분포”

⸻

  1. 데이터 분석 관점에서 해석

이 조건은 모델 선택 기준이다.
• finite dataset에서 샘플링 → 초기하분포
• streaming / 무한 데이터 → 이항 or 베르누이

예를 들어:
• 데이터셋 전체 10,000개 중 500개 positive label
→ 샘플링 평가 → 초기하분포
• 실시간 클릭 여부 예측
→ 베르누이 / 이항

⸻

  1. 핵심 요약
    • 유한 모집단 → 전체 개수 고정
    • 두 범주 → binary classification 구조
    • 비복원 추출 → 확률이 계속 변함
    • ⇒ 이 조건을 만족하면 초기하분포 사용

⸻

여기서 한 단계 더 중요한 질문이 나온다:

“그럼 언제 이항분포로 근사해도 되냐?”

이건 실무에서 꽤 중요한 포인트다.
필요하면 근사 조건까지 이어서 설명한다.

핵심은 모델 선택의 비용 vs 정확도 trade-off다.
초기하분포와 이항분포는 구조적으로 거의 동일한 문제를 다루지만, 계산과 가정에서 차이가 난다. 그래서 “언제 이항분포로 근사해도 되냐”는 질문이 자연스럽게 나온다.

⸻

  1. 왜 이 질문이 중요한가

초기하분포는 정확하지만:
• 조합(combination) 계산이 복잡함
• 해석이 직관적이지 않음
• 분석/모델링에서 다루기 불편함

반면 이항분포는:
• 독립 시행 가정 → 계산 단순
• 파라미터 p 하나로 표현
• 통계적 추론 (MLE, CI 등) 훨씬 쉬움

그래서 실무에서는:

“정확한 모델(초기하) 대신 단순한 모델(이항)을 써도 되냐?”

를 항상 판단해야 한다.

⸻

  1. 두 분포의 구조적 차이

초기하분포
• 비복원 추출
• 확률이 계속 변함

이항분포
• 복원 추출 (또는 독립 시행)
• 확률 p 고정

즉,

초기하분포 = “현실적으로 정확한 모델”
이항분포 = “근사 모델”

⸻

  1. 언제 이항분포로 근사 가능한가

핵심 조건 하나로 정리된다:

샘플 비율이 매우 작을 때

수식으로 쓰면:

\frac{n}{N} \le 0.05 \quad (\text{또는 } 0.1 이하까지 허용하기도 함)
• N: 모집단 크기
• n: 샘플 크기

⸻

  1. 직관적 이유

비복원 추출인데도 이항처럼 보이는 이유:
• 샘플이 매우 작으면
• 하나 뽑아도 전체 비율이 거의 안 바뀜

예:
• 10,000개 중 10개 뽑기
→ 하나 빠져도 비율 변화 거의 없음

그래서:

“복원하지 않아도, 마치 복원하는 것처럼 보인다”

→ 독립 시행처럼 근사 가능

⸻

  1. 수학적 연결 (중요 포인트)

초기하분포의 기대값:

E[X] = n \cdot \frac{K}{N}

이항분포의 기대값:

E[X] = n \cdot p

여기서
p = \frac{K}{N}

즉,

이항분포는 초기하분포의 “비율 K/N”을 그대로 사용한 근사 모델

⸻

  1. 언제 절대 근사하면 안 되는가

다음 상황에서는 반드시 초기하분포를 써야 한다:
• 샘플 비율이 큼 (예: 30%, 50%)
• 모집단이 작음
• 정확한 확률 계산이 중요한 경우 (품질 검사, 규제 등)

예:
• 100개 중 40개 샘플링 → 절대 이항 쓰면 안 됨

⸻

  1. 데이터 분석 관점 요약

상황 추천 분포
큰 모집단 + 작은 샘플 이항분포 (근사)
작은 모집단 or 큰 샘플 비율 초기하분포
스트리밍 / 무한 데이터 이항/베르누이

⸻

  1. 한 줄 핵심

“초기하분포는 정확한 모델, 이항분포는 효율적인 근사”
→ 샘플이 충분히 작으면 둘은 거의 동일해진다

⸻

원하면 다음 단계로 이어서:
• 실제 수치 예제로 “근사 오차” 비교
• Python (scipy.stats.hypergeom vs binom)로 분포 차이 시각화
• finite population correction(FPC)까지 포함한 분산 비교

어디까지 들어갈지 정해라.

초기하분포를 실제로 써야 하는 상황을 정확히 재현하는 코드로 설명한다. 단순 API 사용이 아니라, 데이터 분석 관점에서 “왜 이걸 쓰는지”까지 포함한다.

⸻

  1. 상황 설정 (실무형 예제)

품질 검사 시나리오:
• 전체 제품 N = 1000
• 불량품 K = 80
• 샘플 검사 n = 50
• 질문: 샘플에서 불량품이 5개 이하일 확률

→ 비복원 추출 → 초기하분포 사용

⸻

  1. Python 코드 (scipy)

from scipy.stats import hypergeom

모집단 설정

N = 1000 # 전체 개수
K = 80 # 불량품 개수
n = 50 # 샘플 크기

확률 변수 X ~ Hypergeom(N, K, n)

1) P(X <= 5)

prob = hypergeom.cdf(5, N, K, n)
print(prob)

2) P(X = 5)

prob_exact = hypergeom.pmf(5, N, K, n)
print(prob_exact)

⸻

  1. 해석
    • pmf(k) → 정확히 k개 나올 확률
    • cdf(k) → k개 이하 확률 (누적)

즉,

“샘플 검사에서 불량이 일정 기준 이하일 확률”
→ 품질 기준 통과 여부 판단 가능

⸻

  1. 왜 이항분포 쓰면 안 되는 상황인가

이 케이스는:
• 샘플 비율 = 50 / 1000 = 5%
→ 경계선 수준

만약 더 극단적으로:
• N=200, n=80 (40%)

이면 이항 쓰면 오차 심각

⸻

  1. 이항 vs 초기하 비교 코드

from scipy.stats import binom

p = K / N # 성공 확률

이항 근사

binom_prob = binom.cdf(5, n, p)

print("Hypergeom:", prob)
print("Binomial :", binom_prob)

→ 두 값 차이 보면 근사 적절성 판단 가능

⸻

  1. 데이터 분석에서 실제 쓰는 패턴

(1) 품질 관리 (QC)
• 샘플 검사 → 불량률 추정

(2) 추천 시스템 평가
• 특정 label 포함 샘플 비율

(3) A/B 테스트 (finite population)
• 사용자 풀 제한된 경우

⸻

  1. 추가적으로 자주 쓰는 함수

기대값

mean = hypergeom.mean(N, K, n)

분산

var = hypergeom.var(N, K, n)

랜덤 샘플 생성 (시뮬레이션)

samples = hypergeom.rvs(N, K, n, size=10000)

⸻

  1. 핵심 정리
    • 비복원 추출 + finite population → hypergeom
    • scipy에서 hypergeom 하나로 끝
    • pmf / cdf / rvs 세 개만 알면 실무 충분

⸻

원하면 다음 단계로:
• 실제 데이터셋에서 “불량 검정 (hypothesis test)”로 확장
• hypergeom 기반 p-value 계산 (Fisher’s Exact Test 연결)
• 시각화 (분포 shape 비교)

이건 통계 면접에서도 자주 나오는 구간이다.

초기하분포의 핵심 수식만 간결하게 정리한다.

⸻

  1. 확률질량함수 (PMF)

P(X=k)=\frac{\binom{K}{k}\binom{N-K}{n-k}}{\binom{N}{n}}

의미:
• N: 전체 개수
• K: 성공(관심 대상) 개수
• n: 뽑는 개수
• k: 뽑힌 성공 개수

⸻

  1. 기대값 (Mean)

E[X]=n\cdot\frac{K}{N}

⸻

  1. 분산 (Variance)

Var(X)=n\cdot\frac{K}{N}\cdot\left(1-\frac{K}{N}\right)\cdot\frac{N-n}{N-1}

⸻

  1. 핵심 해석
    • \frac{K}{N} → 모집단의 “성공 비율”
    • 마지막 항 \frac{N-n}{N-1} → 비복원 추출 보정 (FPC, finite population correction)

즉,

이항분포 분산에 “의존성 보정”이 들어간 형태

⸻

필요하면 이 수식이 이항분포로 수렴하는 과정(극한)까지 유도해줄 수 있다.

초기하분포가 이항분포로 근사되는 과정을 수식 중심으로 단계적으로 유도한다. 핵심은 “비복원 → 복원처럼 보이는 극한”이다.

⸻

  1. 시작점: 초기하분포 PMF

P(X=k)=\frac{\binom{K}{k}\binom{N-K}{n-k}}{\binom{N}{n}}

이걸 직접 이항분포 형태로 변형한다.

⸻

  1. 조합을 곱 형태로 전개

조합을 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!}

이를 전체 식에 대입하면:

P(X=k)

\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)!}

⸻

  1. 비율 형태로 정리

핵심은 각 항을 N으로 나누는 것이다.

예를 들어:

\frac{K}{N}, \quad \frac{K-1}{N-1}, \quad \frac{K-2}{N-2}, \dots

이렇게 바뀐다.

⸻

  1. 극한 가정

이제 중요한 가정:
• N \to \infty
• \frac{K}{N} = p (고정)
• n은 상대적으로 매우 작음

⸻

  1. 핵심 근사

다음이 성립한다:

\frac{K-i}{N-i} \approx \frac{K}{N} = p

이유:
• i는 최대 n인데 n \ll N
• 따라서 N-i \approx N, K-i \approx K

⸻

  1. 전체 곱 구조 변화

따라서 곱 전체가:

\left(\frac{K}{N}\right)^k \cdot \left(1 - \frac{K}{N}\right)^{n-k}

형태로 수렴한다.

⸻

  1. 최종 결과 (이항분포 등장)

P(X=k)\approx \binom{n}{k} p^k (1-p)^{n-k}

즉,

초기하분포 → 이항분포로 수렴

⸻

  1. 분산에서도 동일한 현상

초기하분포 분산:

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)

→ 이항분포와 동일

⸻

  1. 핵심 직관

이 유도의 본질은 하나다:

“비복원 추출이지만, 모집단이 충분히 크면
뽑아도 전체 비율이 거의 변하지 않는다”

→ 확률이 거의 고정됨
→ 독립 시행처럼 행동
→ 이항분포로 모델링 가능

⸻

  1. 한 줄 정리
    • 초기하분포 = “정확한 모델”
    • 이항분포 = “극한에서의 근사 모델”
    • 조건: n \ll N

⸻

원하면 다음 단계로:
• KL divergence로 두 분포 차이 정량화
• 실제 숫자로 근사 오차 계산
• Fisher’s Exact Test vs Chi-square 연결

이건 통계적으로 더 깊은 레벨이다.

profile
Data Analytics Engineer 가 되

0개의 댓글