1 왜 확률변수인가
지금까지 확률을 사건(집합) 의 언어로 다뤘다. 그런데 실제 데이터는 사건이 아닌 숫자로 표현된다.
- 주사위 눈: 1, 2, 3, 4, 5, 6
- 환자의 혈압: 120.5 mmHg
- 검사 결과: 양성(1), 음성(0)
확률변수(random variable) 는 표본공간의 결과를 실수로 변환하는 다리(bridge)다.
\[ \text{표본공간 } \Omega \xrightarrow{X} \mathbb{R} \]
이 변환을 통해 확률론의 언어가 데이터 분석의 언어와 만난다.
2 왜 확률변수가 필요한가
집합론과 확률 공리는 사건(집합) 의 언어다. 통계 모델링은 숫자의 언어가 필요하다.
확률변수 없이는 다음이 불가능하다:
- “키가 170cm 이상일 확률”을 수식으로 표현할 수 없다
- 기댓값, 분산, 적률생성함수를 정의할 수 없다
- 두 분포를 대수적으로 비교할 수 없다
확률변수가 도입되면:
| 이전 (집합 언어) | 이후 (숫자 언어) |
|---|---|
| 사건 \(\{\)키 \(\geq\) 170\(\}\) | \(P(X \geq 170) = 1 - F_X(170)\) |
| 분포 비교 불가 | \(F_X = F_Y\) 이면 동일 분포 |
| 평균 정의 불가 | \(E[X] = \int x f(x)dx\) |
선행 개념인 σ-대수가 “어떤 사건에 확률을 부여하는가”를 정의했다면, 확률변수는 “사건을 실수로 변환해 계산 가능하게” 만든다. 이후 포스트의 기댓값, 분산, 적률생성함수, 분포 수렴은 모두 이 다리 위에 세워진다.
3 형식적 정의
확률 공간 \((\Omega, \mathcal{F}, P)\) 위에서 정의된 함수 \(X: \Omega \to \mathbb{R}\) 이 확률변수이려면 가측(measurable) 이어야 한다:
\[ \forall\, B \in \mathcal{B}(\mathbb{R}): \quad \{X \in B\} := \{\omega \in \Omega : X(\omega) \in B\} \in \mathcal{F} \]
즉, \(\mathbb{R}\) 의 모든 보렐 집합의 역상(preimage)이 \(\mathcal{F}\) 에 속해야 한다.
가측 조건은 “\(X\) 가 어떤 범위의 값을 가질 확률”을 정의할 수 있어야 한다는 의미다.
\(P(X \leq 3)\) 이 의미 있으려면 \(\{X \leq 3\} = \{\omega : X(\omega) \leq 3\}\) 이 \(\mathcal{F}\) 의 원소, 즉 사건이어야 한다.
대부분의 실용적 함수(연속함수, 단조함수, 계단함수 등)는 자동으로 가측이다.
“가측(measurable)”이라는 조건은 추상적으로 보이지만, 실무적 의미는 명확하다:
- ML 모델링: 입력 변수 \(X\) 에 대해 \(P(X \leq t)\) 를 계산할 수 있어야 손실 함수의 기댓값을 최적화할 수 있다
- A/B 테스트: 전환율 \(X\) 에 대해 \(P(X > 0.05)\) 를 정의할 수 있어야 유의성 검정이 가능하다
- 금융: 포트폴리오 수익률 \(X\) 에 대해 \(P(X < -0.1)\) (VaR)을 계산하려면 \(X\) 가 가측이어야 한다
가측이 아닌 함수를 실무에서 마주칠 일은 거의 없다. 그러나 이 조건을 명시하는 이유는 확률론의 논리적 완결성을 보장하기 위해서다 — 모든 “확률 계산”이 잘 정의되어 있음을 보증한다.
예시
| 실험 | \(\omega\) | \(X(\omega)\) |
|---|---|---|
| 동전 2번 | HH | 2 (앞면 수) |
| 동전 2번 | HT, TH | 1 |
| 동전 2번 | TT | 0 |
| 주사위 | \(k \in \{1,\ldots,6\}\) | \(k\) |
| 환자 검사 | “양성” | 1 |
| 환자 검사 | “음성” | 0 |
4 확률변수의 분류
- 이산형(discrete): \(X\) 의 치역(range)이 유한하거나 가산 무한 (\(\{x_1, x_2, \ldots\}\))
- 연속형(continuous): \(X\) 의 치역이 구간(또는 구간의 합집합)이며, 비가산 무한
- 혼합형(mixed): 이산형과 연속형의 혼합
| 유형 | 예시 | 주요 함수 |
|---|---|---|
| 이산형 | 동전 앞면 수, 불량품 수, 클릭 수 | PMF |
| 연속형 | 키, 체중, 대기 시간, 수익률 | |
| 혼합형 | 보험금(발생시 연속, 미발생시 0) | CDF |
5 이산형 확률변수와 PMF
5.1 확률질량함수
이산형 확률변수 \(X\) 의 확률질량함수 \(p_X: \mathbb{R} \to [0,1]\):
\[ p_X(x) = P(X = x) = P(\{\omega \in \Omega : X(\omega) = x\}) \]
함수 \(p: \mathbb{R} \to \mathbb{R}\) 이 어떤 이산형 확률변수의 PMF가 되기 위한 필요충분조건:
- \(p(x) \geq 0\) for all \(x\)
- \(\displaystyle\sum_{x} p(x) = 1\) (치역의 모든 값에 대한 합)
- \(p(x) = 0\) if \(x \notin \{x_1, x_2, \ldots\}\) (정의된 지점 외에는 0)
예시: 주사위
\[ p_X(x) = \begin{cases} 1/6 & x \in \{1,2,3,4,5,6\} \\ 0 & \text{otherwise} \end{cases} \]
예시: 동전 2번 (앞면 수)
| \(x\) | 0 | 1 | 2 |
|---|---|---|---|
| \(p_X(x)\) | 1/4 | 1/2 | 1/4 |
합: \(1/4 + 1/2 + 1/4 = 1\) ✓
6 연속형 확률변수와 PDF
6.1 연속형의 핵심 특성
연속형 확률변수는 임의의 특정 점에서 확률이 0이다:
\[ P(X = x) = 0 \quad \text{for all } x \in \mathbb{R} \]
대신 구간의 확률만 양수다:
\[ P(a < X \leq b) = \int_a^b f_X(x)\,dx > 0 \quad\text{(일반적으로)} \]
6.2 확률밀도함수
함수 \(f_X: \mathbb{R} \to \mathbb{R}\) 이 연속형 확률변수 \(X\) 의 확률밀도함수이면:
\[ P(X \in B) = \int_B f_X(x)\,dx \quad \text{for all } B \in \mathcal{B}(\mathbb{R}) \]
\(f: \mathbb{R} \to \mathbb{R}\) 이 어떤 연속형 확률변수의 PDF가 되기 위한 필요충분조건:
- \(f(x) \geq 0\) for all \(x\)
- \(\displaystyle\int_{-\infty}^{\infty} f(x)\,dx = 1\)
\(f(x)\) 는 밀도(density) 다. \(f(x) > 1\) 도 가능하다.
\[ P(x \leq X \leq x+dx) \approx f(x)\,dx \quad\text{(무한소 구간의 확률)} \]
“\(f(x)\) 가 크다” = “그 근방의 값이 자주 나온다”는 뜻이지, 확률이 크다는 뜻이 아니다.
예시: 균등 분포 \(\text{Uniform}(0,1)\)
\[ f_X(x) = \begin{cases} 1 & 0 \leq x \leq 1 \\ 0 & \text{otherwise} \end{cases} \]
\[ P(0.3 \leq X \leq 0.7) = \int_{0.3}^{0.7} 1\,dx = 0.4 \]
예시: 지수 분포 \(\text{Exp}(\lambda)\)
\[ f_X(x) = \begin{cases} \lambda e^{-\lambda x} & x \geq 0 \\ 0 & x < 0 \end{cases} \]
\(\int_0^\infty \lambda e^{-\lambda x}dx = [-e^{-\lambda x}]_0^\infty = 1\) ✓
\(P(X > t) = e^{-\lambda t}\) (무기억성)
7 누적분포함수 (CDF)
7.1 정의
확률변수 \(X\) 의 CDF \(F_X: \mathbb{R} \to [0,1]\):
\[ F_X(x) = P(X \leq x) \quad \text{for all } x \in \mathbb{R} \]
CDF는 이산형·연속형·혼합형 모든 확률변수에 대해 정의된다. 확률변수의 분포는 CDF 하나로 완전히 특성화된다.
7.2 CDF의 성질
\(F: \mathbb{R} \to [0,1]\) 이 어떤 확률변수의 CDF가 되기 위한 필요충분조건:
- 단조 비감소: \(x_1 < x_2 \Rightarrow F(x_1) \leq F(x_2)\)
- 우연속: \(\lim_{t \downarrow x} F(t) = F(x)\) for all \(x\)
- 극한 조건: \(\lim_{x \to -\infty} F(x) = 0\), \(\lim_{x \to +\infty} F(x) = 1\)
증명 (단조성): \(x_1 < x_2\) 이면 \(\{X \leq x_1\} \subseteq \{X \leq x_2\}\) 이므로 확률의 단조성에 의해 \(F(x_1) \leq F(x_2)\). \(\quad\blacksquare\)
증명 (극한): \(A_n = \{X \leq -n\}\) 은 감소하며 \(\bigcap A_n = \emptyset\). 확률의 연속성에 의해 \(F(-n) = P(A_n) \to P(\emptyset) = 0\). \(\quad\blacksquare\)
7.3 CDF로 구간 확률 계산
\[ \begin{aligned} P(a < X \leq b) &= F(b) - F(a) \\ P(X > a) &= 1 - F(a) \\ P(X = a) &= F(a) - F(a^-) = F(a) - \lim_{x \uparrow a} F(x) \end{aligned} \]
\(P(X = a) > 0\) ↔︎ \(F\) 가 \(a\) 에서 불연속 (점프) ↔︎ \(X\) 가 \(a\) 에 점 질량을 가짐
연속형 확률변수: \(F\) 가 어디서도 점프하지 않음 → \(P(X=a)=0\) for all \(a\)
7.4 이산형 CDF vs 연속형 CDF
이산형 예시 (동전 2번, 앞면 수):
\[ F_X(x) = \begin{cases} 0 & x < 0 \\ 1/4 & 0 \leq x < 1 \\ 3/4 & 1 \leq x < 2 \\ 1 & x \geq 2 \end{cases} \]
→ 계단함수(step function): \(x=0,1,2\) 에서 점프
연속형 예시 (\(\text{Uniform}(0,1)\)):
\[ F_X(x) = \begin{cases} 0 & x < 0 \\ x & 0 \leq x \leq 1 \\ 1 & x > 1 \end{cases} \]
→ 연속함수: 어디서도 점프 없음
7.5 PDF와 CDF의 관계 (연속형)
\[ F_X(x) = \int_{-\infty}^x f_X(t)\,dt \quad\Longleftrightarrow\quad f_X(x) = F_X'(x) \]
CDF를 미분하면 PDF, PDF를 적분하면 CDF.
8 분포의 동일성
두 확률변수 \(X\) 와 \(Y\) 가 동일 분포이면 (\(X \overset{d}{=} Y\) 또는 \(X \sim Y\)):
\[ F_X(x) = F_Y(x) \quad \text{for all } x \in \mathbb{R} \]
같은 확률 공간에 있을 필요도 없고, \(X(\omega) = Y(\omega)\) 일 필요도 없다. 분포(=CDF)만 같으면 동일 분포다.
예시
- 동전 앞면 수 \(X \in \{0,1\}\) 와 주사위가 짝수인지 \(Y \in \{0,1\}\): 동일 분포 (둘 다 베르누이(1/2))
- 같은 정규 분포에서 독립으로 뽑은 두 표본 \(X_1, X_2\): 동일 분포이지만 \(X_1 \neq X_2\)
9 혼합형 확률변수
이산 부분과 연속 부분을 모두 포함:
\[ F_X(x) = p \cdot F_{\text{이산}}(x) + (1-p) \cdot F_{\text{연속}}(x), \quad 0 < p < 1 \]
예시: 보험금
\[ X = \begin{cases} 0 & \text{사고 없음 (확률 } 0.7\text{)} \\ Y \sim \text{Exp}(0.01) & \text{사고 있음 (확률 } 0.3\text{)} \end{cases} \]
CDF: \[ F_X(x) = \begin{cases} 0 & x < 0 \\ 0.7 + 0.3(1 - e^{-0.01x}) & x \geq 0 \end{cases} \]
\(P(X=0) = F_X(0) - F_X(0^-) = 0.7\) (이산 부분) \(P(X > t) = 0.3\,e^{-0.01t}\) for \(t > 0\) (연속 부분)
10 확률변수의 함수
\(X\) 가 확률변수이고 \(g: \mathbb{R} \to \mathbb{R}\) 이 가측 함수이면, \(Y = g(X)\) 도 확률변수다.
이산형: \(p_Y(y) = \sum_{x:\,g(x)=y} p_X(x)\)
연속형 (단조 미분가능 \(g\)): 변수변환(Jacobian) 공식:
\[ f_Y(y) = f_X(g^{-1}(y)) \cdot \left|\frac{d}{dy}g^{-1}(y)\right| \]
일반적 방법 (CDF 방법): \[ F_Y(y) = P(Y \leq y) = P(g(X) \leq y) \xrightarrow{\text{미분}} f_Y(y) \]
예시: \(Y = X^2\), \(X \sim \text{Uniform}(-1,1)\)
\[ F_Y(y) = P(X^2 \leq y) = P(-\sqrt{y} \leq X \leq \sqrt{y}) = \sqrt{y}, \quad 0 \leq y \leq 1 \]
\[ f_Y(y) = F_Y'(y) = \frac{1}{2\sqrt{y}}, \quad 0 < y \leq 1 \]
11 응용 분야
| 분야 | 확률변수 | 분포 |
|---|---|---|
| A/B 테스트 | 클릭 여부 (0/1) | 베르누이 |
| 신뢰도 공학 | 부품 수명 | 지수, 와이블 |
| 금융 | 일별 수익률 | 정규, 학생-t |
| 자연어처리 | 단어 등장 횟수 | 포아송, 음이항 |
| 임상시험 | 생존 시간 | 지수, 코크스 비례위험 |
| 딥러닝 | 드롭아웃 마스크 | 베르누이 |
12 예시: 이산 + 연속 통합
12.1 이항 확률변수
\(n=10\) 번 독립 베르누이 시행, 성공 확률 \(p=0.3\). \(X\) = 성공 횟수.
\[ p_X(k) = \binom{10}{k}(0.3)^k(0.7)^{10-k}, \quad k=0,1,\ldots,10 \]
\[ F_X(x) = \sum_{k=0}^{\lfloor x \rfloor} \binom{10}{k}(0.3)^k(0.7)^{10-k} \]
12.2 정규 확률변수
\(X \sim N(\mu, \sigma^2)\):
\[ f_X(x) = \frac{1}{\sigma\sqrt{2\pi}} \exp\!\left(-\frac{(x-\mu)^2}{2\sigma^2}\right) \]
\[ F_X(x) = \Phi\!\left(\frac{x-\mu}{\sigma}\right), \quad \Phi(z) = \int_{-\infty}^z \frac{1}{\sqrt{2\pi}}e^{-t^2/2}dt \]
표준화: \(Z = (X-\mu)/\sigma \sim N(0,1)\) → \(X\) 의 분포를 \(Z\) 표를 통해 계산.
13 코드 예시
13.1 Step 1: 순수 Python — PMF·CDF 직접 구현
import math
# ── 이산형: 이항 분포 PMF·CDF ────────────────────────────────────
def binom_pmf(k, n, p):
return math.comb(n, k) * (p**k) * ((1-p)**(n-k))
def binom_cdf(x, n, p):
return sum(binom_pmf(k, n, p) for k in range(math.floor(x)+1))
n, p = 10, 0.3
print("이항분포 B(10, 0.3) PMF:")
print(f"{'k':>4} {'PMF':>10} {'CDF':>10}")
print("-" * 26)
for k in range(n+1):
pmf = binom_pmf(k, n, p)
cdf = binom_cdf(k, n, p)
print(f"{k:>4} {pmf:>10.6f} {cdf:>10.6f}")
# PMF 합이 1인지 확인
total = sum(binom_pmf(k, n, p) for k in range(n+1))
print(f"\nPMF 합 = {total:.10f}") # 1.0
# ── 연속형: 균등 분포 PDF·CDF ────────────────────────────────────
def uniform_pdf(x, a=0, b=1):
return 1/(b-a) if a <= x <= b else 0
def uniform_cdf(x, a=0, b=1):
if x < a: return 0
if x > b: return 1
return (x - a) / (b - a)
print("\n균등 분포 U(0,1) CDF:")
for x in [0.0, 0.25, 0.5, 0.75, 1.0]:
print(f" F({x}) = {uniform_cdf(x):.4f}")
# 구간 확률
a, b = 0.3, 0.7
prob = uniform_cdf(b) - uniform_cdf(a)
print(f"\nP(0.3 < X ≤ 0.7) = {prob:.4f}") # 0.4
# ── 이산형 CDF의 점프 확인 ────────────────────────────────────────
print("\n동전 2번 앞면 수 CDF (점프 확인):")
X_pmf = {0: 0.25, 1: 0.50, 2: 0.25}
def coin_cdf(x):
return sum(v for k,v in X_pmf.items() if k <= x)
for x in [-0.5, 0, 0.5, 1, 1.5, 2, 2.5]:
print(f" F({x:4.1f}) = {coin_cdf(x):.4f}")
# P(X=1) = F(1) - F(1^-) = F(1) - F(0.999)
jump_at_1 = coin_cdf(1) - coin_cdf(0.999)
print(f"\nP(X=1) = F(1) - F(1⁻) = {jump_at_1:.4f}") # 0.513.2 Step 2: scipy·numpy — 분포 시각화와 변수변환
import numpy as np
from scipy import stats
# ── 여러 분포의 PMF·PDF·CDF 비교 ────────────────────────────────
distributions = {
"Binomial(10,0.3)": stats.binom(n=10, p=0.3),
"Poisson(3)": stats.poisson(mu=3),
}
print("이산형 분포 비교 (k=0..10):")
print(f"{'k':>4} {'Binom PMF':>12} {'Binom CDF':>12} {'Poisson PMF':>14} {'Poisson CDF':>14}")
print("-" * 58)
for k in range(11):
b_pmf = stats.binom.pmf(k, 10, 0.3)
b_cdf = stats.binom.cdf(k, 10, 0.3)
p_pmf = stats.poisson.pmf(k, 3)
p_cdf = stats.poisson.cdf(k, 3)
print(f"{k:>4} {b_pmf:>12.6f} {b_cdf:>12.6f} {p_pmf:>14.6f} {p_cdf:>14.6f}")
# ── 연속형: 정규 분포 ──────────────────────────────────────────────
mu, sigma = 170, 10 # 키 (cm)
dist = stats.norm(loc=mu, scale=sigma)
print(f"\n정규분포 N({mu}, {sigma}²):")
print(f" P(X ≤ 180) = {dist.cdf(180):.6f}") # 약 84.1%
print(f" P(160 < X ≤ 180) = {dist.cdf(180)-dist.cdf(160):.6f}") # 약 68.3%
print(f" P(X > 190) = {dist.sf(190):.6f}") # sf = 1 - cdf
# 백분위수(quantile)
for q in [0.025, 0.25, 0.50, 0.75, 0.975]:
print(f" {q*100:.1f}th percentile = {dist.ppf(q):.2f} cm")
# ── 변수변환: Y = X² (X ~ Uniform(-1,1)) ─────────────────────────
X = stats.uniform(loc=-1, scale=2) # Uniform(-1, 1)
np.random.seed(42)
x_samples = X.rvs(100_000)
y_samples = x_samples ** 2 # Y = X^2
# 이론 PDF: f_Y(y) = 1/(2√y), 0 < y ≤ 1
y_vals = np.linspace(0.001, 1, 300)
f_Y_theory = 1 / (2 * np.sqrt(y_vals))
# 시뮬레이션으로 검증
hist, edges = np.histogram(y_samples, bins=50, density=True)
bin_centers = (edges[:-1] + edges[1:]) / 2
print("\n변수변환 Y=X² (X~Uniform(-1,1)) 검증:")
print(" 이론 PDF vs 시뮬레이션 (일부):")
for y_t in [0.1, 0.3, 0.5, 0.7, 0.9]:
theory = 1 / (2 * np.sqrt(y_t))
idx = np.argmin(np.abs(bin_centers - y_t))
sim = hist[idx]
print(f" y={y_t:.1f}: 이론={theory:.4f}, 시뮬={sim:.4f}")
# ── CDF의 성질 수치 검증 ──────────────────────────────────────────
dist_norm = stats.norm(0, 1)
print("\nCDF 성질 검증 (표준 정규):")
print(f" 단조성: F(-1)={dist_norm.cdf(-1):.4f} ≤ F(0)={dist_norm.cdf(0):.4f} ≤ F(1)={dist_norm.cdf(1):.4f}")
print(f" 극한: F(-∞) ≈ {dist_norm.cdf(-10):.8f}")
print(f" F(+∞) ≈ {dist_norm.cdf(10):.8f}")
print(f" 구간: P(-1<X≤1) = F(1)-F(-1) = {dist_norm.cdf(1)-dist_norm.cdf(-1):.6f} (≈68.3%)")14 관련 주제
선행 지식
- 확률론의 언어: 집합론 — 가측공간, σ-대수
- 확률론의 공리적 기초 — 확률 공간 \((\Omega,\mathcal{F},P)\)
- 조건부 확률과 독립성 — 독립 확률변수의 기반
후속 주제
- 연속확률변수와 확률밀도함수 — PDF·CDF 심화, 기댓값·분산
- Transformation of Random Variables — 변수변환 체계적 방법
- Moment Generating Function — 분포를 특성화하는 또 다른 도구
- Exponential Family — 주요 분포들의 통합 체계
관련 개념
- Convergence in Probability — 확률변수의 수렴 개념들
- MLE — 확률변수의 실현값으로부터 분포 모수 추정
- Mixed Models — 확률변수의 선형 혼합 모델