결합분포와 주변분포 (Joint and Marginal Distributions)

다변량 확률변수의 기초 — 결합 PMF/PDF, 주변분포 유도, 결합 CDF, 정보 손실의 구조

두 개 이상의 확률변수를 동시에 다루려면 결합분포가 필요하다. 결합분포에서 주변분포를 유도하는 것은 항상 가능하지만, 역방향 복원은 일반적으로 불가능하다. 이 포스트에서는 결합 PMF/PDF의 정의, 주변분포 유도, 결합 CDF와의 관계를 교재 기반으로 다루고, 정보 손실의 구조를 코드와 함께 살펴본다.

Statistics
저자

Kwangmin Kim

공개

2026년 03월 30일

1 개요

단변량 확률변수의 PDF/PMF는 하나의 변수가 어떤 값을 취할 확률을 기술한다. 그러나 현실의 데이터는 거의 항상 여러 변수가 동시에 관측된다. 건강 조사에서 한 사람의 체중만 측정하는 것이 아니라 키, 혈압, 체온도 함께 측정한다. 이처럼 여러 확률변수를 동시에 다루려면, 각 변수의 개별 분포가 아닌 결합분포(joint distribution)가 필요하다 (Casella & Berger, 2002, Ch.4).

비유: 두 사람이 각자 서로 다른 방에서 주사위를 굴리는 상황을 생각하자. 각 사람의 주사위 결과를 따로 본다면 각각 주변분포이다. 그러나 “첫 번째 사람이 6을 던질 때 두 번째 사람이 무엇을 던지는가?”를 알려면 결합분포가 필요하다. 만약 두 사람이 사실 같은 주사위를 공유한다면(완전한 상관), 이는 결합분포에만 나타나고 주변분포에는 나타나지 않는다.

이 포스트의 핵심 메시지:

  • 결합분포 → 주변분포: 항상 유도 가능 (적분 또는 합산)
  • 주변분포 → 결합분포: 일반적으로 불가능 (정보 손실)
  • 결합분포는 주변분포보다 더 많은 정보를 담고 있다

2 확률벡터 (Random Vector)

정의: \(n\) 차원 확률벡터 (Casella & Berger, 2002, Definition 4.1.1)

\(n\) 차원 확률벡터(random vector)란 표본공간 \(S\) 에서 \(\mathbb{R}^n\) 으로의 함수이다.

\(n = 2\) 인 경우, 표본공간의 각 원소에 순서쌍 \((x, y) \in \mathbb{R}^2\) 를 대응시키면 이변량(bivariate) 확률벡터 \((X, Y)\) 가 된다. 단변량 확률변수가 \(S \to \mathbb{R}\) 이었던 것의 자연스러운 확장이다.

2.1 예시: 주사위 두 개

두 개의 공정한 주사위를 던지는 실험에서 \(X\) = 두 눈의 합, \(Y\) = 두 눈의 차이의 절댓값으로 정의하면 (Casella & Berger, 2002, Example 4.1.2):

  • 표본점 \((3, 3)\)\(X = 6\) , \(Y = 0\)
  • 표본점 \((4, 1)\)\(X = 5\) , \(Y = 3\)
  • 표본점 \((1, 4)\)\(X = 5\) , \(Y = 3\) (같은 \((X, Y)\) 값)

36개의 표본점 각각에 \((X, Y)\) 값이 대응되므로, \((X, Y)\) 는 이변량 확률벡터이다.


3 결합 PMF (이산 경우)

정의: 결합 PMF (Casella & Berger, 2002, Definition 4.1.3)

이산 이변량 확률벡터 \((X, Y)\)결합 확률질량함수(joint PMF)는:

\[ f(x, y) = P(X = x, Y = y) \]

결합 PMF가 합법적인 확률 모형이 되려면 두 조건을 충족해야 한다:

  1. \(f(x, y) \geq 0\) 모든 \((x, y)\) 에 대해
  2. \(\sum_{(x,y)} f(x, y) = 1\)

이 두 조건만 만족하면, 표본공간 \(S\) 를 명시하지 않고도 \(f(x, y)\) 를 정의하는 것만으로 \((X, Y)\) 의 확률 모형을 구성할 수 있다 (Casella & Berger, 2002, Ch.4).

3.1 기댓값

결합분포에서 \((X, Y)\) 의 함수 \(g(X, Y)\) 의 기댓값은:

\[ E[g(X, Y)] = \sum_x \sum_y g(x, y) \, f(x, y) \]

단변량에서 \(E[g(X)] = \sum g(x) f(x)\) 이었던 것의 자연스러운 확장이다. 기댓값의 선형성은 그대로 유지된다:

\[ E[a g_1(X, Y) + b g_2(X, Y) + c] = a \, E[g_1(X, Y)] + b \, E[g_2(X, Y)] + c \]


4 결합 PDF (연속 경우)

정의: 결합 PDF (Casella & Berger, 2002, Definition 4.1.10)

연속 이변량 확률벡터 \((X, Y)\)결합 확률밀도함수(joint PDF) \(f(x, y)\) 는 다음을 만족한다:

\[ P((X, Y) \in A) = \iint_A f(x, y) \, dx \, dy \]

모든 \(A \subseteq \mathbb{R}^2\) 에 대해.

결합 PDF가 합법적이려면:

  1. \(f(x, y) \geq 0\) 모든 \((x, y)\) 에 대해
  2. \(\int_{-\infty}^{\infty} \int_{-\infty}^{\infty} f(x, y) \, dx \, dy = 1\)

4.1 예시: 단위 정사각형 위의 결합 PDF

\(f(x, y) = 6xy^2\) , \(0 < x < 1\) , \(0 < y < 1\) (그 외에서 0)이라 하자 (Casella & Berger, 2002, Example 4.1.11).

합법성 확인:

\[ \int_0^1 \int_0^1 6xy^2 \, dx \, dy = \int_0^1 3y^2 \, dy = 1 \quad \checkmark \]

확률 계산: \(P(X + Y \geq 1)\) 을 구하면, 적분 영역은 \(\{1 - y \leq x < 1, \, 0 < y < 1\}\) 이다:

\[ P(X + Y \geq 1) = \int_0^1 \int_{1-y}^1 6xy^2 \, dx \, dy = \frac{9}{10} \]


5 주변분포 (Marginal Distribution)

5.1 정의

정리: 주변분포 유도 (Casella & Berger, 2002, Theorem 4.1.6)

이산: \(\displaystyle f_X(x) = \sum_y f(x, y)\) , \(\displaystyle f_Y(y) = \sum_x f(x, y)\)

연속: \(\displaystyle f_X(x) = \int_{-\infty}^{\infty} f(x, y) \, dy\) , \(\displaystyle f_Y(y) = \int_{-\infty}^{\infty} f(x, y) \, dx\)

주변분포는 “다른 변수의 모든 가능한 값에 대해 합산(또는 적분)”하여 한 변수를 제거하는 것이다. 직관적으로, 결합 PMF를 표로 만들었을 때 행(또는 열)을 합산한 결과가 주변 PMF이다 — 표의 여백(margin)에 적는다는 뜻에서 “marginal”이라 부른다.

5.2 예시: 연속 결합 PDF에서 주변 PDF 유도

\(f(x, y) = 6xy^2\) ( \(0 < x < 1\) , \(0 < y < 1\) )에서 \(X\) 의 주변 PDF를 구한다 (Casella & Berger, 2002, Example 4.1.11):

\[ f_X(x) = \int_0^1 6xy^2 \, dy = 6x \cdot \frac{y^3}{3} \Big|_0^1 = 2x, \quad 0 < x < 1 \]

이 주변 PDF를 사용하면 \(X\) 만의 확률을 계산할 수 있다:

\[ P\!\left(\frac{1}{2} < X < \frac{3}{4}\right) = \int_{1/2}^{3/4} 2x \, dx = \frac{5}{16} \]


6 결합분포와 주변분포의 관계: 정보 손실

6.1 핵심 사실: 주변분포만으로 결합분포를 복원할 수 없다

같은 주변분포를 가지면서 서로 다른 결합분포가 존재한다 (Casella & Berger, 2002, Example 4.1.9).

반례: 같은 주변, 다른 결합

결합분포 A (Example 4.1.5):

\(f(0,0) = f(0,1) = 1/6\) , \(f(1,0) = f(1,1) = 1/3\)

결합분포 B (Example 4.1.9):

\(f(0,0) = 1/12\) , \(f(1,0) = 5/12\) , \(f(0,1) = f(1,1) = 3/12\)

두 결합분포의 주변분포는 동일하다: \(f_X(0) = 1/3\) , \(f_X(1) = 2/3\) , \(f_Y(0) = f_Y(1) = 1/2\) .

그러나 결합 구조는 완전히 다르다.

이 현상이 실무에서 의미하는 바: 두 변수의 개별 분포를 아는 것만으로는 변수 간 관계(상관, 독립성 여부 등)를 알 수 없다. 관계를 이해하려면 반드시 결합분포가 필요하다.

6.2 정보의 계층

결합분포 f(x, y)
    │
    ├── 주변분포 f_X(x), f_Y(y)  ← 적분/합산으로 유도 가능
    │       (변수 간 관계 정보가 소실됨)
    │
    └── 조건부분포 f(y|x) = f(x,y)/f_X(x)  ← 관계 정보 보존

결합분포는 최대 정보, 주변분포는 최소 정보, 조건부분포는 그 사이에 위치한다. 주변분포 유도 과정에서 소실되는 정보가 바로 변수 간 의존성 구조이다.


7 결합 CDF (Cumulative Distribution Function)

결합분포는 CDF로도 기술할 수 있다:

\[ F(x, y) = P(X \leq x, Y \leq y) \]

연속인 경우 결합 PDF와의 관계는:

\[ F(x, y) = \int_{-\infty}^x \int_{-\infty}^y f(s, t) \, dt \, ds \]

역으로, 이변량 미적분학의 기본정리에 의해:

\[ \frac{\partial^2 F(x, y)}{\partial x \, \partial y} = f(x, y) \]

\(f\) 의 연속점에서 성립한다 (Casella & Berger, 2002, Ch.4). CDF에서 출발하여 혼합 편미분으로 PDF를 구할 수 있다는 것이다.


8 왜 결합분포가 필요한가

8.1 주변분포로 충분하지 않은 경우

두 변수의 개별 분포를 안다고 해서 동시적 행동을 예측할 수 있는 것은 아니다.

상황 주변분포만으로 결합분포가 있으면
\(P(X + Y > 10)\) 계산 불가 (일반적으로) 직접 계산 가능
\(\text{Cov}(X, Y)\) 계산 불가 \(E[XY] - E[X]E[Y]\) 로 계산
\(X\) 가 클 때 \(Y\) 의 분포 알 수 없음 \(f(y|x) = f(x,y)/f_X(x)\)

8.2 유일하게 주변분포만으로 충분한 경우: 독립

\(X\)\(Y\) 가 독립이면 \(f(x, y) = f_X(x) \cdot f_Y(y)\) 이므로, 주변분포만으로 결합분포를 완전히 복원할 수 있다. 독립은 결합분포를 주변분포로 분해할 수 있는 유일한 조건이다. 이것이 독립성 가정이 통계학에서 그토록 강력한 이유이다.


9 응용 분야

분야 활용 구체적 예시
회귀분석 \((X, Y)\) 의 결합분포에서 \(E[Y|X]\) 유도 조건부 기대값 = 회귀함수
포트폴리오 이론 자산 수익률의 결합분포 \(\text{Var}(aX + bY) = a^2\sigma_X^2 + b^2\sigma_Y^2 + 2ab\text{Cov}(X,Y)\)
신뢰성 공학 부품 수명의 결합분포 시스템 수명 = \(\min(X, Y)\) 의 분포
베이지안 추론 모수와 데이터의 결합분포 사후분포 \(\propto\) 가능도 \(\times\) 사전분포
이미지 처리 인접 픽셀의 결합분포 마르코프 랜덤 필드
생존분석 사건 시간과 중도절단의 결합 경쟁위험 모형

10 예시: 결합 PDF에서 주변 PDF와 확률 계산

10.1 손계산

\(f(x, y) = e^{-y}\) , \(0 < x < y < \infty\) 에서 \(P(X + Y \geq 1)\) 을 구한다 (Casella & Berger, 2002, Example 4.1.12).

여집합을 활용하면 계산이 간편해진다:

\[ P(X + Y \geq 1) = 1 - P(X + Y < 1) \]

\(f(x, y) > 0\) 인 영역과 \(x + y < 1\) 의 교집합은 \(\{0 < x < y, \, x + y < 1\}\) 삼각형이다:

\[ P(X + Y < 1) = \int_0^{1/2} \int_x^{1-x} e^{-y} \, dy \, dx = \int_0^{1/2} (e^{-x} - e^{-(1-x)}) \, dx \]

계산하면 \(P(X + Y \geq 1) = 2e^{-1/2} - e^{-1} \approx 0.845\) 이다.

핵심 교훈: 결합 PDF의 적분 영역을 설정할 때 그래프를 그려서 영역을 시각화하는 것이 거의 항상 도움이 된다 (Casella & Berger, 2002, Ch.4).


11 코드 예시

11.1 Step 1: 순수 Python 구현 (원리 이해)

이산 결합 PMF에서 주변분포를 유도하고, 같은 주변분포를 가지는 서로 다른 결합분포를 구성한다.

# 두 결합분포가 같은 주변분포를 가질 수 있음을 확인

# 결합분포 A
joint_A = {
    (0, 0): 1/6, (0, 1): 1/6,
    (1, 0): 1/3, (1, 1): 1/3,
}

# 결합분포 B
joint_B = {
    (0, 0): 1/12, (0, 1): 3/12,
    (1, 0): 5/12, (1, 1): 3/12,
}

def marginals(joint):
    """결합 PMF에서 주변 PMF 유도"""
    mx, my = {}, {}
    for (x, y), p in joint.items():
        mx[x] = mx.get(x, 0) + p
        my[y] = my.get(y, 0) + p
    return mx, my

print("=== 결합분포 A ===")
mx_a, my_a = marginals(joint_A)
print(f"  f_X: {dict(sorted(mx_a.items()))}")
print(f"  f_Y: {dict(sorted(my_a.items()))}")

print("\n=== 결합분포 B ===")
mx_b, my_b = marginals(joint_B)
print(f"  f_X: {dict(sorted(mx_b.items()))}")
print(f"  f_Y: {dict(sorted(my_b.items()))}")

print(f"\n주변분포 동일 여부:")
print(f"  f_X 동일: {all(abs(mx_a[k] - mx_b[k]) < 1e-10 for k in mx_a)}")
print(f"  f_Y 동일: {all(abs(my_a[k] - my_b[k]) < 1e-10 for k in my_a)}")

print(f"\n결합분포 동일 여부: {joint_A == joint_B}")
print("→ 주변분포가 같아도 결합분포는 다를 수 있다!")

11.2 연속 결합 PDF에서 주변 PDF 유도

import math

# f(x, y) = 6xy^2, 0 < x < 1, 0 < y < 1
# 주변 PDF: f_X(x) = int_0^1 6xy^2 dy = 2x

def joint_pdf(x, y):
    if 0 < x < 1 and 0 < y < 1:
        return 6 * x * y**2
    return 0.0

def marginal_x_theory(x):
    """이론적 주변 PDF: f_X(x) = 2x"""
    if 0 < x < 1:
        return 2 * x
    return 0.0

# 수치 적분으로 주변 PDF 검증
n_grid = 1000
dy = 1.0 / n_grid
x_test = 0.7

marginal_x_numerical = sum(joint_pdf(x_test, (i + 0.5) * dy) * dy for i in range(n_grid))
marginal_x_exact = marginal_x_theory(x_test)

print(f"x = {x_test} 에서 주변 PDF:")
print(f"  수치 적분: {marginal_x_numerical:.6f}")
print(f"  이론값:    {marginal_x_exact:.6f}")

# P(1/2 < X < 3/4) 계산
dx = 1.0 / n_grid
prob_numerical = sum(marginal_x_theory((i + 0.5) * dx) * dx
                     for i in range(n_grid) if 0.5 < (i + 0.5) * dx < 0.75)
prob_exact = 5 / 16

print(f"\nP(1/2 < X < 3/4):")
print(f"  수치 적분: {prob_numerical:.6f}")
print(f"  이론값:    {prob_exact:.6f}")

11.3 Step 2: scipy/numpy 구현 (실무 활용)

2변량 결합 PDF의 시각화와 주변분포 유도를 시연한다.

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

fig, axes = plt.subplots(1, 3, figsize=(14, 4))

# 결합 PDF: f(x,y) = 6xy^2, 0<x<1, 0<y<1
x_grid = np.linspace(0, 1, 100)
y_grid = np.linspace(0, 1, 100)
X, Y = np.meshgrid(x_grid, y_grid)
Z = 6 * X * Y**2

# 1) 결합 PDF 등고선
ax = axes[0]
cf = ax.contourf(X, Y, Z, levels=20, cmap='viridis')
plt.colorbar(cf, ax=ax, label='f(x,y)')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title('Joint PDF: f(x,y) = 6xy²')

# 2) 주변 PDF
ax = axes[1]
marginal_x = 2 * x_grid  # f_X(x) = 2x
marginal_y = 3 * y_grid**2  # f_Y(y) = 3y^2
ax.plot(x_grid, marginal_x, 'b-', linewidth=2, label=r'$f_X(x) = 2x$')
ax.plot(y_grid, marginal_y, 'r-', linewidth=2, label=r'$f_Y(y) = 3y^2$')
ax.set_xlabel('value')
ax.set_ylabel('density')
ax.set_title('Marginal PDFs')
ax.legend()

# 3) 2변량 정규의 주변분포
ax = axes[2]
mu = [1, 3]
cov = [[1, 0.6], [0.6, 1.5]]
samples = np.random.multivariate_normal(mu, cov, 3000)
ax.scatter(samples[:, 0], samples[:, 1], alpha=0.1, s=3, c='gray')

# 주변 히스토그램 (상단/우측에 겹침)
x_vals = np.linspace(-3, 5, 200)
ax.plot(x_vals, stats.norm.pdf(x_vals, mu[0], np.sqrt(cov[0][0])) * 1.5 + 6,
        'b-', linewidth=2, label=r'Marginal $X$')
ax.plot(stats.norm.pdf(x_vals, mu[1], np.sqrt(cov[1][1])) * 1.5 - 3, x_vals,
        'r-', linewidth=2, label=r'Marginal $Y$')
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_title('Bivariate Normal: Joint → Marginals')
ax.legend(fontsize=8)

plt.tight_layout()
plt.show()

11.4 결합 CDF와 PDF의 관계

import numpy as np

# f(x, y) = 6xy^2, 0<x<1, 0<y<1
# F(x, y) = int_0^x int_0^y 6st^2 dt ds = x^2 * y^3

def joint_cdf(x, y):
    x = np.clip(x, 0, 1)
    y = np.clip(y, 0, 1)
    return x**2 * y**3

# CDF에서 PDF 복원: d^2F / dxdy
h = 1e-5
x0, y0 = 0.5, 0.7

# 수치 혼합 편미분
pdf_numerical = (
    joint_cdf(x0 + h, y0 + h)
    - joint_cdf(x0 + h, y0 - h)
    - joint_cdf(x0 - h, y0 + h)
    + joint_cdf(x0 - h, y0 - h)
) / (4 * h**2)

pdf_exact = 6 * x0 * y0**2

print(f"d^2F/dxdy at ({x0}, {y0}):")
print(f"  수치 미분: {pdf_numerical:.6f}")
print(f"  f(x,y):    {pdf_exact:.6f}")
print(f"  CDF → PDF 복원 확인 완료")

12 관련 주제

선행 지식

후속 주제

관련 개념

Subscribe

Enjoy this blog? Get notified of new posts by email: