연속 확률 변수에서 PDF·CDF·기대값 적분 다루기
연속 확률 변수의 PDF와 CDF 관계, 기대값 적분, 수치 안정성 검증 절차를 실무 관점에서 정리합니다.
2026-08-14 · 최초 발행 2024-04-29
구간 확률로 읽는 연속 확률 모델
연속 확률 변수는 실수축의 구간에서 측정 가능한 값을 갖는다. 특정한 한 점에 정확히 도달할 확률은 0이며, 의미 있는 확률은 구간에 대해 정의한다.
[ P(a \le X \le b) = \int_{[a,b]} f(x) dx ]
여기서 PDF(Probability Density Function), CDF(Cumulative Distribution Function), 기대값(Expectation) 적분은 같은 분포를 서로 다른 방식으로 표현한다. 모델링과 계산 과정에서는 이 관계가 깨지지 않는지 확인해야 한다.
PDF가 만족해야 하는 조건
확률 밀도 함수 (f(x))는 비음수 함수이며, 전체 적분값은 1이어야 한다.
[ f(x) \ge 0,\quad \int f(x) dx = 1 ]
기대값과 분산 같은 모멘트도 밀도를 적분해 계산한다.
[ E[g(X)] = \int g(x) f(x) dx ]
CDF와 밀도의 연결
누적 분포 함수는 특정 값 이하가 될 확률을 나타낸다.
[ F(x) = P(X \le x) = \int_{(-\infty, x]} f(t) dt ]
CDF는 비감소·우연속이며, (F(-\infty)=0), (F(\infty)=1)의 경계를 가진다. 미분 가능한 경우에는 (f(x)=F′(x))가 된다. 이 관계는 분포 변환과 분위수 계산의 기반이다.
기대값 적분에서 확인할 점
평균과 분산은 다음 적분으로 구한다.
[ E[X] = \int x f(x) dx,\quad Var(X) = \int (x - \mu)^2 f(x) dx ]
계산에 앞서 적분이 존재하는지 확인해야 한다. (\int |x| f(x) dx < 1·\infty) 조건을 점검하며, heavy tail 분포에서는 특히 주의가 필요하다.
지지집합과 정규화가 계산 범위를 정한다
밀도가 양수가 될 수 있는 지지집합(support) (S)를 명시하면 수치 적분의 범위를 통제할 수 있다. (S) 바깥에서는 (f(x)=0)이므로 적분 구간을 지지집합으로 제한해 수치 오차를 줄인다.
정규화되지 않은 함수 (g(x))에서 밀도를 구성할 때는 먼저 다음 상수를 계산한다.
[ Z = \int_S g(x) dx ]
그 뒤 (f(x)=g(x)/Z)로 스케일링한다. 이 과정은 (Z)가 양수이고 유한한지 확인하는 단계와 분리할 수 없다.
CDF와 PDF의 관계도 수치 계산에서 다시 검증한다. (F(x)=\int_{(-\infty,x]}f(t)dt)이고, 거의 모든 곳에서 (f(x)=dF/dx)이지만 비연속점에서는 도함수가 없을 수 있다.
신뢰성 및 생존분석에서는 생존함수와 위험함수도 함께 사용한다.
[ S(x)=1-F(x),\quad h(x)=\frac{f(x)}{S(x)} ]
변환한 변수의 밀도와 모멘트
단사 변환 (Y=g(X))가 연속 미분 가능하다면, 변환 뒤의 밀도는 역함수와 도함수로 계산한다.
[ f_Y(y) = f_X(g^{-1}(y)) \cdot \left|\frac{d}{dy}g^{-1}(y)\right| ]
선형 변환 (Y=aX+b)에서는 모멘트도 함께 변환된다.
[ E[Y]=aE[X]+b,\quad Var(Y)=a^2 Var(X) ]
무한 구간이나 급격한 꼬리를 적분할 때는 tan, logistic 같은 구간 변환 또는 적응형 사분법을 고려한다. 상대·절대 오차 허용치를 조정하고, 특이점 주변은 분할 적분하며, 로그-밀도를 사용해 언더플로를 막는다.
PDF 검증부터 모멘트 계산까지의 흐름
분포 적분이 쓰이는 분석 장면
금융 리스크 측정에서는 손실분포 PDF를 추정한 뒤 CDF로 VaR/ES를 산출한다. 분위수 (q=F^{-1}(\alpha)) 계산은 규제 보고에 연결되며, Fat-tail 모델(예: t-분포)을 적용할 때는 기대값과 ES 적분의 수치 안정성을 확보해야 한다.
제조 공정에서는 치수 오차처럼 연속적으로 측정되는 값에 PDF를 적합한다. 정규/로그정규 분포를 사용한 뒤 (P(|X|>\tau))로 결함률을 계산하고, 공정 변경 전후는 (E[X]), (Var(X)) 모멘트 비교로 정량 평가한다.
신뢰성 및 수명 데이터에서는 Weibull/Exponential PDF로 (MTTF=E[T])를 적분한다. 생존함수 (S(t))는 보증기간 내 실패 확률 예측에 쓰이며, 검열 데이터는 우도 최적화로 파라미터를 추정한 다음 기대값 적분을 수행한다.
머신러닝과 시뮬레이션에서는 연속 출력의 손실 기대값 (E[\ell(X)])를 수치 적분이나 몬테카를로 방식으로 근사한다. 정상화할 수 없는 밀도는 에너지 기반 모델로 전환하고, 분할 적분 또는 중요도 샘플링을 적용한다.
정확도와 재현성을 함께 관리하는 기준
적응형 수치 적분(quad)을 사용하면 목표 함수가 (C^k)일 때 수렴률 (O(n^{-k}))를 달성한다. 몬테카를로 근사의 오차 표준편차는 (O(1/\sqrt{N}))이며, 사분법과 MC를 결합한 하이브리드 방식은 계산 시간을 30~60% 절감한 사례가 있다.
PDF·CDF·기대값 간의 일관성 검증 절차를 두면 모델 신뢰성을 높일 수 있다. 지지집합을 명시하고 변수 변환을 표준화하면 재현 가능성과 감사 용이성도 좋아진다.
계산 전에 점검할 항목
PDF에서는 비음수성 min f(x) ≥ 0을 확인하고, 정규화 조건 (\int_S f(x) dx = 1 \pm \epsilon)을 검증한다. 이어 (\int |x|f(x)dx)의 수렴성을 확인해 꼬리 거동을 점검한다.
CDF는 수치 적분으로 계산한 뒤 (F(-\infty)=0), (F(\infty)=1) 경계를 확인한다. 수치 미분값 (F′(x))와 (f(x))를 비교할 때는 최대 상대 오차 (\le \tau)를 설정한다.
모멘트는 존재성을 판단한 후 적분한다. 무한 구간에는 (x=\tan\theta) 같은 변수 변환을 적용할 수 있고, 고차 모멘트에는 분할 적분과 고정밀(quadrature rules) 선택이 필요하다.
로그-밀도 log f(x)는 언더플로 예방에 유용하다. 적응형 절대·상대 오차는 atol=1e−10, rtol=1e−8처럼 설정하고 수렴 여부를 확인한다.
SciPy로 PDF, CDF, 기대값 계산하기
전제조건: Python 3.11+, numpy 1.26+, scipy 1.11+ 환경
import numpy as np
from scipy import integrate
# 예시: Truncated Normal-like 밀도 g(x) ∝ exp(-x^2/2) on [-3, 2]
def g(x):
return np.exp(-0.5 * x**2) * ((x >= -3) & (x <= 2))
# 1) 정규화 상수 Z
Z, Z_err = integrate.quad(lambda t: g(t), -np.inf, np.inf, epsabs=1e-10, epsrel=1e-8)
assert Z > 0 and np.isfinite(Z)
# 2) 정규화된 PDF
f = lambda x: g(x) / Z
# 3) CDF
def F(x):
val, err = integrate.quad(lambda t: f(t), -np.inf, x, epsabs=1e-10, epsrel=1e-8, limit=200)
return val
# 4) 기대값과 분산
EX, EX_err = integrate.quad(lambda t: t * f(t), -np.inf, np.inf, epsabs=1e-10, epsrel=1e-8)
EX2, _ = integrate.quad(lambda t: t**2 * f(t), -np.inf, np.inf, epsabs=1e-10, epsrel=1e-8)
VarX = EX2 - EX**2
print(f"Z={Z:.10f} (err≈{Z_err:.1e}), E[X]={EX:.6f}, Var(X)={VarX:.6f}")
print(f"F(0)={F(0):.6f}, F(2)≈1, F(-3)≈0")
limit 파라미터로 분할 수를 늘리면 급변 구간에 대응할 수 있다. 지지집합이 유한 구간이라면 통합 한계를 정확히 지정해 오차를 줄인다.
몬테카를로로 기대값을 근사할 때
전제조건: Python 3.11+, numpy 1.26+
import numpy as np
# 역변환 또는 거절 샘플링으로 f에서 샘플 생성(여기서는 단순 거절 샘플링 예시)
rng = np.random.default_rng(123)
def sample_f(n=100_000):
xs = []
M = 1.0 # 상계: g(x) 최대값/ Z ≤ 1 (대략적)
while len(xs) < n:
x = rng.uniform(-3, 2, size=n)
u = rng.uniform(0, M, size=n)
acc = u < np.exp(-0.5 * x**2) / Z
xs.extend(x[acc])
return np.array(xs[:n])
xs = sample_f(200_000)
EX_mc = xs.mean()
Var_mc = xs.var()
print(f"MC E[X]={EX_mc:.6f}, Var(X)≈{Var_mc:.6f}, N={len(xs)} (SE≈{xs.std()/np.sqrt(len(xs)):.5f})")
사분법은 적은 함수 평가로 높은 정확도를 얻을 수 있지만 차원이 높아지면 비용이 급증한다. 몬테카를로는 차원 독립적 수렴 (O(1/\sqrt{N}))이 장점이며, 중요도 샘플링과 제어변수 같은 분산감소 기법으로 수렴을 가속할 수 있다.
모델 검증이 끝나야 적분값을 신뢰할 수 있다
연속 확률 모델에서는 PDF의 비음수성과 정규화를 확인하고, CDF를 구성해 미분·적분 관계를 검증한 뒤 기대값과 모멘트를 계산한다. 무한 구간과 heavy tail에서는 변수 변환, 로그-밀도, 분할 적분, MC 하이브리드를 조합한다. 이 절차를 표준화하면 모델 신뢰성, 재현성, 계산 효율을 함께 관리할 수 있다.