이산 확률 변수에서 PMF·기대값·분산을 계산하는 법
이산 확률 변수의 PMF 검증, 기대값과 분산 계산식, 표준 분포별 활용 방식과 운영상 주의점을 정리한다.
2026-08-14 · 최초 발행 2024-04-29
셀 수 있는 결과를 확률 모델로 다루는 방식
성공과 실패, 일정 시간의 이벤트 수, 배치에서 발생한 불량 개수처럼 값이 셀 수 있는 데이터는 이산 확률 변수로 표현한다. 이때 확률 질량 함수(Probability Mass Function, PMF)가 각 결과에 확률을 배정하고, 기대값 E[X]와 분산 Var(X)가 각각 평균적 수준과 변동성을 나타낸다.
이산 확률 변수 X는 값의 집합 S={x1, x2, ...}에서 값을 취하며, S는 보통 유한 집합 또는 가산 무한 집합이다. PMF p(x)는 각 x∈S에 P(X=x)=p(x)를 부여하는 함수로 다음 조건을 만족해야 한다.
- p(x)≥0
- ∑x∈S p(x)=1
- S에 없는 값의 확률은 0
연속형 확률 변수는 확률 밀도 함수(PDF)와 적분을 사용하지만, 이산형은 PMF와 합계를 사용한다.
기대값은 다음과 같이 정의된다.
E[X]=∑x∈S x p(x)
이 값이 정의되려면 ∑|x| p(x)<∞의 수렴 조건이 필요하다. 함수 g(X)에 대해서는 E[g(X)]=∑ g(x) p(x)로 확장할 수 있어 통계량이나 비용함수의 기대 성능을 평가할 때 쓴다.
분산은 μ=E[X]일 때 E[(X−μ)^2]이며, 다음 식으로도 계산한다.
Var(X)=E[X^2]−(E[X])^2
계산 전에 PMF를 먼저 점검한다
지지집합을 명시하지 않으면 누락된 범주를 발견하기 어렵다. PMF 입력을 받으면 비음수성, 확률 합계의 정규화, 누락 카테고리 여부를 확인하는 절차가 먼저 필요하다.
분산은 직접식 Var(X)=∑ (x−μ)^2 p(x)으로 구할 수 있다. 실무 계산에서는 m2=E[X^2]를 먼저 구한 뒤 Var(X)=m2−μ^2를 사용하는 방식도 가능하다. 이 방법은 메모리·성능 개선에 활용된다.
선형 변환에는 다음 규칙이 적용된다.
- E[aX+b]=aE[X]+b
- Var(aX+b)=a^2 Var(X)
- X,Y가 독립이면 Var(X+Y)=Var(X)+Var(Y)
포아송 분포를 합성할 때는 λ의 가산성도 활용한다.
음의 확률이나 정규화 실패는 계산 전에 처리해야 한다. 무한 지지집합에서는 ε-잔여확률을 확인하며 트렁케이션 오차를 관리한다. 원시 PMF를 보관한 뒤 정규화, 계산, 결과 커밋 순서로 처리하면 계산 과정의 추적에도 도움이 된다.
자주 쓰는 이산 분포의 평균과 변동성
| 분포 | PMF p(x) | E[X] | Var(X) | 활용 |
|---|---|---|---|---|
| 베르누이(p) | P(X=1)=p, P(X=0)=1−p | p | p(1−p) | 클릭/전환 성공 여부 |
| 이항(n,p) | C(n,x) p^x (1−p)^(n−x) | np | np(1−p) | 캠페인 x회 시도 성공 수 |
| 포아송(λ) | e^(−λ) λ^x / x! | λ | λ | 단위시간 이벤트 수 |
| 기하(p) | P(X=x)= (1−p)^(x−1) p, x≥1 | 1/p | (1−p)/p^2 | 최초 성공까지 시도 횟수 |
표의 PMF는 표기를 간략화한 것이다. 파라미터의 유효 범위는 p∈(0,1), n∈N, λ>0이다.
작은 PMF로 기대값과 분산 계산하기
X∈{0,1,2}이고 p(0)=0.2, p(1)=0.5, p(2)=0.3인 PMF를 생각해 보자. 모든 확률이 비음수이고 0.2+0.5+0.3=1.0이므로 정규화 조건을 만족한다.
기대값은 E[X]=0·0.2+1·0.5+2·0.3=1.1이다. 제곱모멘트는 E[X^2]=0^2·0.2+1^2·0.5+2^2·0.3=1.7이며, 따라서 분산은 Var(X)=1.7−(1.1)^2=1.7−1.21=0.49가 된다.
전제조건: Python 3.10+, numpy>=1.26
import numpy as np
# 지지집합과 PMF
x = np.array([0, 1, 2], dtype=float)
p = np.array([0.2, 0.5, 0.3], dtype=float)
# 검증 및 정규화
if np.any(p < 0):
raise ValueError("음의 확률 존재")
s = p.sum()
if not np.isclose(s, 1.0, atol=1e-12):
p = p / s # 정규화
# 기대값과 분산
mu = np.sum(x * p)
ex2 = np.sum((x ** 2) * p)
var = ex2 - mu**2
print(f"E[X]={mu:.6f}, Var(X)={var:.6f}")
무한 지지집합을 계산할 때는 상한 M을 정하고 ∑_{x>M} p(x) ≤ ε를 보장하는 트렁케이션 전략을 사용할 수 있다. 결과에는 ε-오차를 함께 표기한다.
전환율·이벤트·불량 데이터를 해석할 때
A/B 테스트에서는 베르누이 또는 이항 분포를 적용해 전환 확률 p를 추정하고 Var= p(1−p)/n을 사용한다. 신뢰구간과 검정력에 근거한 종료 기준을 정할 때 오탐과 미탐의 위험을 함께 관리할 수 있다.
운영 모니터링에서는 포아송 도착률 λ를 추정해 E[X]=Var(X)=λ라는 관계를 사용한다. 슬라이딩 윈도우에서 기대 도착수보다 많은 이벤트가 발생했는지 판단하는 알람 임계값을 산정하는 데 적합하다.
품질관리에서는 고정된 배치를 이항 분포로, 희귀 결함을 포아송 분포로 모델링할 수 있다. 라인 조정, 예비부품 재고 수준, 분산 기반 안전재고 완충을 결정할 때 평균만으로는 보이지 않는 변동성을 반영한다.
표본크기 산정에서는 베르누이의 오차 한계 e=0.02, p=0.1, 95% 신뢰수준(z≈1.96)일 때 n ≈ z^2 p(1−p) / e^2 = 3.8416·0.09 / 0.0004 ≈ 865로 산출한다. 포아송 베이스라인을 바탕으로 임계치를 설정하면 위양성률 α 목표치 달성에도 사용할 수 있다.
모델을 운영할 때 남는 선택지
PMF 검증은 자동화하고, 정규화 로그와 파라미터·버전을 함께 관리하는 편이 낫다. 무한 지지집합은 ε-트렁케이션과 수렴 확인을 적용하며 수치 언더플로우를 막아야 한다.
이항이나 포아송 같은 모수적 분포는 단순한 대신 경험적 PMF보다 표현 유연성이 낮다. 분산 추정의 안정성, 즉 바이어스를 낮추는 선택과 시계열 환경에서 응답성을 높이는 선택 사이에도 균형이 필요하다. PMF 정합성 검증과 모멘트 계산, 오차 관리를 분리해 두면 평균 성능과 변동성을 함께 해석하며 KPI의 설명력을 높일 수 있다.