거의 확실한 수렴 (Almost Sure Convergence)

경로별 수렴, 강한 대수의 법칙, 확률수렴과의 결정적 차이

거의 확실한 수렴(almost sure convergence)의 엄밀한 정의를 확률변수의 함수적 본질에서 출발하여 설명한다. 확률수렴과의 차이를 lim과 P의 순서 교환으로 해석하고, 구체적 예시와 반례를 통해 두 수렴의 간극을 보인다. 강한 대수의 법칙(SLLN)의 의미와 약한 대수의 법칙(WLLN)과의 관계, 그리고 수렴 유형 간 함의 관계를 정리한다.

Statistics
저자

Kwangmin Kim

공개

2026년 03월 31일

1 개요

확률수렴에서 \(X_n \xrightarrow{P} X\) 의 정의와 응용을 다루었다. 이 포스트에서는 확률수렴보다 더 강한 수렴 개념인 거의 확실한 수렴(almost sure convergence)을 다룬다.

두 수렴은 정의가 비슷해 보이지만 근본적으로 다르다. 그 차이는 \(\lim\)\(P\)순서에 있다. 이 순서의 차이가 왜 중요한지, 어떤 상황에서 구분이 의미를 가지는지를 구체적 예시와 함께 설명한다 (Casella & Berger, 2002, Ch.5).

2 확률변수의 함수적 본질

거의 확실한 수렴을 이해하려면 확률변수의 정의로 돌아가야 한다. 확률변수 \(X\)표본공간 \(S\) 위에 정의된 실수값 함수이다:

\[ X: S \to \mathbb{R}, \quad s \mapsto X(s) \]

표본공간의 각 원소 \(s\) 는 하나의 “시나리오” 또는 “경로”이다. 확률변수의 수열 \(X_1, X_2, \ldots\) 는 각 \(s\) 에 대해 실수 수열 \(X_1(s), X_2(s), \ldots\) 을 생성한다.

비유: 무한 원숭이와 타자기

표본공간 \(S\) 의 각 원소 \(s\) 는 한 마리의 원숭이이다. 각 원숭이는 무한히 타자를 치며, \(X_n(s)\)\(n\) 번째까지 친 글에서 계산한 어떤 통계량이다. “거의 확실한 수렴”은 “확률 1로 선택된 원숭이는 결국 참값에 도달한다”는 것이고, “확률수렴”은 “참값에서 벗어난 원숭이의 비율이 줄어든다”는 것이다. 전자는 개별 원숭이의 운명을, 후자는 원숭이 집단의 통계를 말한다.

3 정의

정의: 거의 확실한 수렴 (Almost Sure Convergence, Definition 5.5.6)

확률변수의 수열 \(X_1, X_2, \ldots\) 가 확률변수 \(X\)거의 확실하게 수렴(converge almost surely)한다 함은, 모든 \(\epsilon > 0\) 에 대해:

\[ P\left(\lim_{n \to \infty} |X_n - X| < \epsilon\right) = 1 \]

이를 \(X_n \xrightarrow{a.s.} X\) 로 표기한다. “확률 1로 수렴한다(converge with probability 1)”라고도 한다 (Casella & Berger, 2002, Ch.5).

3.1 동치 표현

위 정의는 다음과 동치이다:

\[ P\left(\left\{s \in S : \lim_{n \to \infty} X_n(s) = X(s)\right\}\right) = 1 \]

즉, 점별 수렴이 확률 1인 집합에서 일어난다. 수렴이 실패하는 \(s\) 들의 집합 \(N = \{s : X_n(s) \not\to X(s)\}\) 의 확률이 0이다.

3.2 \(\lim\)\(P\) 의 순서: 결정적 차이

수렴 유형 수식 \(\lim\)\(P\) 의 순서
확률수렴 \(\lim_{n} P(\|X_n - X\| \geq \epsilon) = 0\) \(P\) 먼저, \(\lim\) 나중
거의 확실한 수렴 \(P(\lim_{n} \|X_n - X\| < \epsilon) = 1\) \(\lim\) 먼저, \(P\) 나중

확률수렴에서는 각 고정된 \(n\) 에서 확률을 평가한 후 그 확률의 극한을 본다. 거의 확실한 수렴에서는 각 \(s\) 에서 수열의 극한을 먼저 본 후 그 극한이 존재하는 \(s\) 들의 확률을 본다.

왜 순서가 중요한가?

극한과 확률(적분)의 교환은 일반적으로 보장되지 않는다. \(\lim P(\cdot) = 0\) 이라고 해서 \(P(\lim \cdot) = 1\) 이 되는 것은 아니다. 이것이 두 수렴의 강도 차이의 수학적 근원이다.

4 예시: 거의 확실한 수렴

4.1 예시 1: \(s + s^n\) 의 수렴

표본공간 \(S = [0, 1]\) 에 균일분포를 부여한다 (Casella & Berger, 2002, Ch.5).

\[ X_n(s) = s + s^n, \quad X(s) = s \]

  • \(s \in [0, 1)\) 이면: \(s^n \to 0\) 이므로 \(X_n(s) \to s = X(s)\)
  • \(s = 1\) 이면: \(X_n(1) = 2\) 이므로 \(X_n(1) \not\to 1 = X(1)\)

수렴이 실패하는 집합은 \(N = \{1\}\) 이고 \(P(\{1\}) = 0\) (균일분포에서 단일 점의 확률)이다. 따라서 \(X_n \xrightarrow{a.s.} X\) 이다.

이 예시의 핵심: 수렴이 모든 점에서 성립할 필요는 없다. 확률 0인 집합에서 실패해도 괜찮다. 이것이 “거의 확실한” 수렴의 의미이다.

4.2 예시 2: 동전 던지기에서의 비율

공정한 동전을 무한히 던진다. \(X_n\) 을 처음 \(n\) 번 중 앞면의 비율이라 하면:

\[ X_n = \frac{1}{n}\sum_{i=1}^{n} Y_i, \quad Y_i \overset{iid}{\sim} \text{Bernoulli}(1/2) \]

SLLN에 의해 \(X_n \xrightarrow{a.s.} 1/2\) 이다. 이는 “거의 모든 동전 던지기 수열에서, 앞면의 비율이 결국 1/2에 수렴한다”는 것이다. 비율이 영원히 1/2에서 벗어나는 수열도 이론적으로 존재하지만 (예: 무한히 앞면만 나오는 수열), 그런 수열이 나올 확률은 0이다.

5 확률수렴과의 차이: 결정적 반례

5.1 반례: 확률수렴하지만 거의 확실하게 수렴하지 않는 수열

이 반례는 두 수렴의 간극을 극적으로 보여준다 (Casella & Berger, 2002, Ch.5).

설정: \(S = [0, 1]\) 에 균일분포. 수열을 “이동하는 지시함수”로 정의한다:

\[ \begin{aligned} X_1(s) &= s + I_{[0,1]}(s) \\ X_2(s) &= s + I_{[0, 1/2]}(s), \quad X_3(s) = s + I_{[1/2, 1]}(s) \\ X_4(s) &= s + I_{[0, 1/3]}(s), \quad X_5(s) = s + I_{[1/3, 2/3]}(s), \quad X_6(s) = s + I_{[2/3, 1]}(s) \\ &\vdots \end{aligned} \]

극한: \(X(s) = s\)

확률수렴 성립: \(n\) 이 커질수록 \(P(|X_n - X| \geq \epsilon)\) 은 길이가 \(1/k\) (단, \(k\) 는 증가)인 구간의 확률이므로 0에 수렴한다.

거의 확실한 수렴 불성립: 임의의 \(s \in [0, 1]\) 을 고정하면, \(X_n(s)\)\(s\)\(s+1\)무한히 자주 교대한다. 예를 들어 \(s = 3/8\) :

\(n\) 구간 \(I(\cdot)\) \(X_n(3/8)\)
1 \([0, 1]\) 1 \(1\frac{3}{8}\)
2 \([0, 1/2]\) 1 \(1\frac{3}{8}\)
3 \([1/2, 1]\) 0 \(\frac{3}{8}\)
4 \([0, 1/3]\) 0 \(\frac{3}{8}\)
5 \([1/3, 2/3]\) 1 \(1\frac{3}{8}\)
6 \([2/3, 1]\) 0 \(\frac{3}{8}\)

모든 \(s\) 에서 점별 수렴이 실패한다. 수렴이 실패하는 집합이 \(S\) 전체이므로 확률이 1이며, 거의 확실한 수렴이 성립하지 않는다.

5.2 왜 확률수렴은 성립하는가?

각 고정된 \(n\) 에서 “벗어남”은 짧은 구간에서만 일어난다. 그 구간의 길이가 0으로 가므로 \(P(|X_n - X| \geq \epsilon) \to 0\) 이다. 그러나 “벗어남이 일어나는 구간”이 \([0, 1]\) 전체를 훑고 지나가므로, 어떤 점 \(s\) 도 영원히 벗어남으로부터 자유롭지 못하다.

비유: 탐조등

어두운 밤에 탐조등이 방을 훑는다고 하자. 탐조등의 빔이 점점 좁아지면, 어떤 순간에 빛이 비추는 면적(확률)은 줄어든다 — 이것이 확률수렴. 그러나 빔이 방을 계속 순환하므로, 방 안의 모든 점은 무한히 자주 빛에 닿는다 — 이것이 거의 확실한 수렴의 실패.

6 강한 대수의 법칙 (SLLN)

정리: 강한 대수의 법칙 (Strong Law of Large Numbers, Theorem 5.5.9)

\(X_1, X_2, \ldots\) 가 iid이고 \(EX_i = \mu\) , \(\text{Var}(X_i) = \sigma^2 < \infty\) 이면:

\[ P\left(\lim_{n \to \infty} |\bar{X}_n - \mu| < \epsilon\right) = 1 \quad \text{모든 } \epsilon > 0 \]

즉, \(\bar{X}_n \xrightarrow{a.s.} \mu\) (Casella & Berger, 2002, Ch.5).

6.1 WLLN과 SLLN의 차이

WLLN SLLN
결론 \(\bar{X}_n \xrightarrow{P} \mu\) \(\bar{X}_n \xrightarrow{a.s.} \mu\)
의미 “빗나갈 확률이 줄어든다” “거의 모든 수열에서 결국 수렴한다”
허용 드문 큰 편차 가능 큰 편차가 유한 번만
증명 체비셰프 부등식 (간단) Borel-Cantelli 보조정리 등 (복잡)
필요 조건 \(E\|X_i\| < \infty\) \(E\|X_i\| < \infty\)

실무적으로 두 결과의 차이는 거의 없다. 대부분의 통계적 응용에서는 WLLN이면 충분하다. SLLN이 필요한 상황은 경로별 성질(예: 시뮬레이션에서 개별 실행의 수렴)이 중요한 경우이다.

6.2 SLLN의 증명 (개요)

SLLN의 완전한 증명은 이 포스트의 범위를 넘어서지만 (Billingsley, 1995, Ch.22 참조), 핵심 아이디어는 다음과 같다:

Borel-Cantelli 보조정리를 사용하여 \(\sum_{n=1}^{\infty} P(|\bar{X}_n - \mu| \geq \epsilon) < \infty\) 를 보인다. 이 급수가 수렴하면, \(|\bar{X}_n - \mu| \geq \epsilon\) 인 사건은 유한 번만 일어나므로 거의 확실한 수렴이 따라온다.

Borel-Cantelli 보조정리의 핵심

“사건들의 확률 합이 유한하면, 무한히 자주 일어나는 사건의 확률은 0이다.” 즉 \(\sum P(A_n) < \infty\) 이면 \(P(A_n \text{ i.o.}) = 0\) (i.o. = infinitely often, 무한히 자주). 비유: 매년 연봉 2배를 받을 확률이 \(1/n^2\) 이라면 그 확률의 합은 \(\pi^2/6 < \infty\) 이므로, 거의 확실하게 유한 번만 연봉 2배를 받는다. SLLN 증명은 “\(\bar{X}_n\)\(\mu\) 에서 \(\epsilon\) 이상 벗어나는 사건”의 확률 합이 유한함을 보여서, 그런 일이 거의 확실하게 유한 번만 발생한다는 결론을 이끌어낸다.

체비셰프 부등식만으로는 \(P(|\bar{X}_n - \mu| \geq \epsilon) \leq \sigma^2/(n\epsilon^2)\) 이고 \(\sum 1/n = \infty\) 이므로 급수가 발산한다. 따라서 SLLN 증명에는 4차 적률 부등식이나 절단(truncation) 기법 같은 더 정교한 도구가 필요하다.

7 수렴 유형 간 관계 정리

\[ \text{거의 확실한 수렴} \Rightarrow \text{확률수렴} \Rightarrow \text{분포수렴} \]

함의 역 성립? 반례/조건
a.s. \(\Rightarrow\) P 역 불성립 이동 지시함수 반례
P \(\Rightarrow\) d 역 불성립 (일반적으로) 극한이 상수이면 역 성립
P \(\Rightarrow\) a.s. 불성립 단, a.s. 수렴하는 부분수열 존재

마지막 성질이 중요하다: 확률수렴하는 수열에서 거의 확실하게 수렴하는 부분수열을 항상 추출할 수 있다. 이 결과는 측도론적 확률론에서 자주 활용된다.

8 왜 거의 확실한 수렴이 필요한가

확률수렴이면 대부분의 실무 문제에 충분한데, 거의 확실한 수렴은 왜 필요한가?

상황 거의 확실한 수렴이 필요한 이유
시뮬레이션 개별 시뮬레이션 경로가 수렴하는지 보장 필요
마팅게일 이론 마팅게일 수렴 정리는 a.s. 수렴을 결론
에르고딕 정리 시간 평균이 앙상블 평균에 a.s. 수렴
경험적 과정 Glivenko-Cantelli 정리: 경험적 CDF가 참 CDF에 a.s. 균등 수렴
확률적 최적화 SGD의 a.s. 수렴 보장 (Robbins-Monro)
핵심 직관

확률수렴은 “평균적 행동”을 보장하고, 거의 확실한 수렴은 “개별 경로의 행동”을 보장한다. Monte Carlo 시뮬레이션을 한 번만 실행할 때, 그 하나의 실행이 수렴하는지를 보장하려면 SLLN(a.s. 수렴)이 필요하다. WLLN은 “많은 시뮬레이션 중 대부분이 수렴한다”만 말해준다.

9 코드 예시

9.1 Step 1: 순수 Python 구현 (SLLN — 단일 경로의 수렴)

import math
import random

random.seed(42)

# SLLN 시연: 하나의 표본 경로에서 X_bar_n → mu
# 지수분포(lambda=2), mu = 0.5
lam = 2.0
mu = 1.0 / lam

print("=== SLLN: 단일 경로에서 X_bar_n의 수렴 ===")
print(f"{'n':>8} | {'X_bar_n':>10} | {'|X_bar_n - mu|':>14} | {'수렴?':>6}")
print("-" * 48)

running_sum = 0.0
for n in range(1, 10001):
    x = -math.log(1 - random.random()) / lam
    running_sum += x
    x_bar = running_sum / n

    if n in [1, 5, 10, 50, 100, 500, 1000, 5000, 10000]:
        deviation = abs(x_bar - mu)
        converged = "O" if deviation < 0.01 else ""
        print(f"{n:>8} | {x_bar:>10.6f} | {deviation:>14.6f} | {converged:>6}")

# 확률수렴 vs 거의 확실한 수렴 구분 시연
print(f"\n=== 여러 독립 경로에서의 수렴 확인 ===")
n_paths = 20
n_final = 10000

deviations = []
for path in range(n_paths):
    total = sum(-math.log(1 - random.random()) / lam for _ in range(n_final))
    x_bar = total / n_final
    dev = abs(x_bar - mu)
    deviations.append(dev)

max_dev = max(deviations)
all_close = all(d < 0.01 for d in deviations)
print(f"  {n_paths}개 경로, n={n_final}: 최대 편차 = {max_dev:.6f}")
print(f"  모든 경로가 |X_bar - mu| < 0.01? {'O (SLLN 확인)' if all_close else 'X'}")

이 코드는 SLLN의 핵심을 보여준다: (1) 단일 경로에서 \(\bar{X}_n\)\(\mu\) 에 수렴하는 과정을 추적하고, (2) 여러 독립 경로 모두에서 수렴이 일어남을 확인한다. WLLN은 “대부분의 경로”만 보장하지만, SLLN은 “거의 모든 경로”를 보장한다.

9.2 Step 2: numpy 구현 (이동 지시함수 반례 + SLLN 검증)

import numpy as np

np.random.seed(42)

# --- 1. 이동 지시함수 반례: 확률수렴 O, a.s. 수렴 X ---
print("=== 이동 지시함수 반례 ===")
# 구간 [0, 1]을 1/k 씩 나누어 순환
# n번째 확률변수가 "벗어나는" 구간의 길이

def get_interval(n):
    """n번째 확률변수가 +1인 구간 [a, b) 반환"""
    # n=1: [0,1], n=2: [0,1/2], n=3: [1/2,1],
    # n=4: [0,1/3], n=5: [1/3,2/3], n=6: [2/3,1], ...
    k = 1
    cumsum = 0
    while cumsum + k < n:
        cumsum += k
        k += 1
    j = n - cumsum - 1  # 0-indexed position within group k
    return j / k, (j + 1) / k

# P(|X_n - X| >= epsilon) = 구간 길이
print("  n  | 구간        | P(|X_n-X|>=0.5)")
for n in [1, 2, 3, 4, 5, 6, 10, 15, 21, 28, 55]:
    a, b = get_interval(n)
    prob = b - a
    print(f"  {n:>2} | [{a:.3f},{b:.3f}) | {prob:.4f}")

# 특정 점 s=0.375에서 X_n(s)의 궤적
s = 0.375
print(f"\n  s={s}에서 X_n(s)의 처음 20개 값:")
values = []
for n in range(1, 21):
    a, b = get_interval(n)
    xn = s + (1 if a <= s < b else 0)
    values.append(xn)
print(f"  {values}")
print(f"  → s와 s+1을 무한히 교대 (점별 수렴 실패)")

# --- 2. SLLN 검증: 다양한 분포에서 경로별 수렴 ---
print(f"\n=== SLLN: 10개 경로의 최종 편차 (n=100000) ===")
n = 100000

distributions = {
    "정규(5,4)": (lambda: np.random.normal(5, 2, n), 5.0),
    "지수(2)": (lambda: np.random.exponential(0.5, n), 0.5),
    "베르누이(0.3)": (lambda: np.random.binomial(1, 0.3, n).astype(float), 0.3),
    "포아송(7)": (lambda: np.random.poisson(7, n).astype(float), 7.0),
}

for name, (gen, mu) in distributions.items():
    deviations = [abs(gen().mean() - mu) for _ in range(10)]
    max_dev = max(deviations)
    print(f"  {name:>15}: 최대 |X_bar - mu| = {max_dev:.6f} ({'< 0.01 (SLLN)' if max_dev < 0.01 else ''})")

# --- 3. SLLN vs WLLN: 수렴 경로의 "최종 편차" 분포 ---
print(f"\n=== 경로별 최종 편차 분포 (정규(0,1), n=50000, 1000경로) ===")
n = 50000
n_paths = 1000

final_deviations = np.array([
    abs(np.random.normal(0, 1, n).mean())
    for _ in range(n_paths)
])

print(f"  평균 편차: {final_deviations.mean():.6f}")
print(f"  최대 편차: {final_deviations.max():.6f}")
print(f"  |편차| < 0.01인 경로 비율: {np.mean(final_deviations < 0.01):.4f}")
print(f"  |편차| < 0.005인 경로 비율: {np.mean(final_deviations < 0.005):.4f}")
print(f"  → SLLN: 모든 경로가 수렴 (편차가 매우 작음)")

이 코드는 세 가지를 보여준다: (1) 이동 지시함수 반례에서 구간 길이가 0으로 가지만 (확률수렴) 특정 점 \(s\) 에서 값이 진동하는 것 (a.s. 수렴 실패)을 확인, (2) 다양한 분포에서 SLLN을 경로별로 검증, (3) 대규모 경로 집합에서 최종 편차의 분포를 확인하여 “거의 모든 경로”가 수렴함을 보임.

10 응용 분야

분야 거의 확실한 수렴의 역할 구체적 예시
Monte Carlo 개별 시뮬레이션 실행의 수렴 보장 MCMC 체인의 에르고딕성
금융공학 포트폴리오 수익률의 장기 수렴 기하 브라운 운동의 시간 평균
정보이론 Shannon의 부호화 정리 코드 길이의 a.s. 수렴
비모수 통계 Glivenko-Cantelli 정리 경험적 CDF \(F_n(x) \xrightarrow{a.s.} F(x)\) 균등 수렴
기계학습 SGD의 강한 수렴 Robbins-Monro 조건 하에서 a.s. 수렴
에르고딕 이론 Birkhoff 에르고딕 정리 시간 평균 = 공간 평균 (a.s.)

11 관련 주제

선행 지식

후속 주제

관련 개념

Subscribe

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