미완 - 초기하분포

Hyunjun Kim·2일 전

통계학기초

목록 보기
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개의 댓글