콘텐츠로 이동

이산확률변수

지금까지 확률은 사건의 것이었다. "짝수가 나온다", "경보가 울린다"처럼 일어나거나 일어나지 않는 대상이다. 그런데 실제 문제에서 우리가 묻는 것은 대개 참·거짓이 아니라 수다. 주사위의 눈은 몇인가, 몇 팩을 사야 하는가, 앞면이 몇 번 나왔는가.

확률변수는 이 다리를 놓는다. 표본공간의 결과 하나하나를 실수로 옮겨, 확률을 수 위에서 다룰 수 있게 만든다. 그러면 더하고 곱하고 평균 내는 일이 가능해진다.

이 절은 세 개의 정리로 이루어진다. 확률변수가 무엇인지(정리 1), 그것이 실직선 위에 만들어 내는 분포(정리 2), 그리고 그 분포를 적는 방법인 확률질량함수(정리 3)이다.

1. 결과를 수로 옮긴다

주사위를 굴려 "3이 나왔다"는 결과 자체는 수가 아니라 사건이다. 그것에 숫자 3을 붙이는 규칙이 확률변수다. 이름은 "변수"지만 실제로는 함수라는 점이 중요하다.

정리 1. 확률변수 — 표본공간에서 실직선으로 가는 함수

확률변수 \(X\)는 표본공간에서 실수로 가는 함수다.

\[ X : \Omega \longrightarrow \mathbb{R} \]

취하는 값이 가산집합 \(\{x_1, x_2, x_3, \ldots\}\)이면 이산확률변수라 한다.

함수라는 점을 놓치지 말아야 한다. \(X\) 자체에는 무작위성이 없다. 무작위한 것은 어떤 \(\omega\)가 뽑히느냐이고, \(X\)는 그 \(\omega\)를 정해진 규칙에 따라 수로 바꿀 뿐이다. 그래서 확률변수를 대문자 \(X\)로, 그것이 실제로 취한 값을 소문자 \(x\)로 구별해 쓴다.

같은 표본공간 위에 확률변수를 여럿 정의할 수 있다는 점도 유용하다. 동전 세 번을 던지는 하나의 실험에서 "앞면의 개수", "첫 앞면까지의 횟수", "앞면이 뒷면보다 많은가(0 또는 1)"를 모두 정의할 수 있다. 무엇을 재고 싶은가에 따라 함수를 고르는 것이다.

가장 단순하면서 가장 많이 쓰이는 확률변수가 지시확률변수다. 사건 하나를 받아 "일어났으면 1, 아니면 0"을 돌려준다.

\[ \mathbb{1}_A(\omega) = \begin{cases} 1 & \omega \in A \\ 0 & \omega \notin A \end{cases} \]

사건에서 수로 건너가는 가장 짧은 다리다. 이 다리 덕분에 사건의 확률과 확률변수의 평균이 같은 것이 되며(\(P(A) = \mathbb{E}[\mathbb{1}_A]\)), 3.4절에서 이 한 줄이 여러 증명을 한 문장으로 줄여 준다.

앞면이 나올 확률이 \(p\)인 동전을 두 번 던지는 실험으로 보자. 두 번의 던지기는 독립이고 \(q = 1 - p\)라 하면 표본공간과 무게는

\[ \Omega = \{HH,\; HT,\; TH,\; TT\}, \qquad P(HH) = p^2, \quad P(HT) = pq, \quad P(TH) = qp, \quad P(TT) = q^2 \]

이다. 여기에 확률변수 셋을 정의한다.

\[ X = \mathbb{1}(\text{첫 번째가 } H), \qquad Y = \mathbb{1}(\text{두 번째가 } H), \qquad Z = \text{앞면의 개수} \]

네 개의 \(\omega\)마다 세 함수가 어떤 값을 주는지 적으면 전부다.

\(\omega\) \(P(\omega)\) \(X(\omega)\) \(Y(\omega)\) \(Z(\omega)\)
\(HH\) \(p^2\) 1 1 2
\(HT\) \(pq\) 1 0 1
\(TH\) \(qp\) 0 1 1
\(TT\) \(q^2\) 0 0 0

\(X\)와 \(Y\)는 서로 다른 함수다. \(\omega = HT\)에서 \(X = 1\)이지만 \(Y = 0\)이다. 두 확률변수가 같다는 것은 모든 \(\omega\)에서 값이 같다는 뜻이므로, 이 한 줄만으로 둘은 다른 확률변수다.

표의 마지막 열도 읽어 두자. 모든 행에서 \(Z = X + Y\)다. 확률변수를 더한다는 것은 표본마다 값을 더한다는 뜻이며, 함수의 덧셈 이상도 이하도 아니다.

2. 벽돌을 실직선 위로 옮긴다

3.1절에서 각 결과에 무게를 가진 벽돌을 붙였다. 확률변수는 그 벽돌들을 실직선 위의 제자리로 옮기는 일을 한다.

정리 2. 확률변수의 분포 — 옮겨진 무게의 배치

각 결과 \(\omega\)에 붙은 벽돌을 실직선 위의 위치 \(X(\omega)\)로 옮긴다. 모든 벽돌을 옮기고 난 뒤 \(\mathbb{R}\) 위에 놓인 무게의 배치를 \(X\)의 분포라 한다.

\[ \begin{aligned} \mathbb{P}(X = a) &= a \text{에 놓인 벽돌들의 무게} \\ \mathbb{P}(X \in A) &= \text{집합 } A \text{에 놓인 벽돌들의 무게} \end{aligned} \]

여러 결과가 같은 값으로 옮겨질 수 있다는 점이 핵심이다. 동전 세 개에서 앞면이 정확히 1개인 결과는 \(HTT\), \(THT\), \(TTH\) 셋이고, 이 세 벽돌이 모두 위치 1에 쌓인다. 그래서 \(P(X = 1) = 3/8\)이 된다.

확률변수는 표본공간의 결과를 실직선으로 옮긴다

왼쪽이 표본공간이고 오른쪽이 실직선이다. 화살표 하나하나가 \(X\)라는 함수이며, 무작위한 것은 화살표가 아니라 어느 점에서 출발하느냐다.

그림에서 읽을 것이 셋이다. 첫째, 함수는 여러 점을 한 점으로 보낼 수 있다. 붉은 화살표 셋이 같은 자리에 모이는 것이 그것이고, 그 자리에 벽돌 셋이 쌓여 \(3/8\)이 된다. 둘째, 벽돌의 총 무게는 변하지 않는다. 여덟 개를 옮겼을 뿐이므로 실직선 위 무게의 합도 1이다. 셋째, 오른쪽 그림만 남기면 그것이 분포다. 어느 결과에서 온 벽돌인지는 더 이상 적혀 있지 않다.

분포는 원래의 실험을 잊는다. 서로 다른 실험이 같은 분포를 낳을 수 있고, 일단 분포를 알고 나면 계산에는 그것만 있으면 된다. 4장에서 이항분포·포아송분포처럼 분포에 이름을 붙여 따로 공부하는 이유가 이것이다.

잊는다는 말이 얼마나 강한지 앞 절의 동전 두 번 예에서 확인할 수 있다. \(X\)의 벽돌을 실직선으로 옮기면 \(TH\)와 \(TT\)가 0에, \(HH\)와 \(HT\)가 1에 쌓이므로

\[ P(X = 0) = qp + q^2 = q, \qquad P(X = 1) = p^2 + pq = p \]

이고, \(Y\)에 대해 똑같이 하면 \(P(Y=0) = q\), \(P(Y=1) = p\)가 나온다. 서로 다른 확률변수인데 분포가 같다. 분포는 \(X\)가 첫 번째 던지기를 보고 \(Y\)가 두 번째 던지기를 본다는 사실을 기억하지 못한다.

\(Z\)는 값이 셋이고, 가운데에 벽돌 두 개가 겹쳐 쌓인다.

\[ P(Z = 0) = q^2, \qquad P(Z = 1) = pq + qp = 2pq, \qquad P(Z = 2) = p^2 \]

\(HT\)와 \(TH\)가 같은 자리로 옮겨진 결과이며, 이것이 4장에서 다룰 이항분포 \(B(2, p)\)다.

따로따로의 분포는 함께의 분포를 결정하지 못한다

\(X\)와 \(Y\)를 한 쌍 \((X, Y)\)로 묶어 \(\Omega \to \mathbb{R}^2\) 함수로 보면, 벽돌이 평면 위 네 점에 놓인다. 이것을 결합분포라 한다. 한 축으로 합해 원래의 분포를 되찾는 일이 주변화이며, 표의 가장자리(margin)에 적히므로 그렇게 부른다.

\((X, Y)\) \(Y = 0\) \(Y = 1\) 합
\(X = 0\) \(q^2\) \(qp\) \(q\)
\(X = 1\) \(pq\) \(p^2\) \(p\)
합 \(q\) \(p\) \(1\)

네 칸이 모두 "행의 합 \(\times\) 열의 합"과 일치한다. \(X\)와 \(Y\)가 독립이라는 말의 정확한 뜻이다.

이제 짝을 \((X, Z)\)로 바꿔 보자. 각각의 분포는 하나도 건드리지 않았다. \(X\)는 여전히 확률 \(p\)로 1을 주고, \(Z\)는 여전히 \(B(2, p)\)다.

\((X, Z)\) \(Z = 0\) \(Z = 1\) \(Z = 2\) 합
\(X = 0\) \(q^2\) \(qp\) \(0\) \(q\)
\(X = 1\) \(0\) \(pq\) \(p^2\) \(p\)
합 \(q^2\) \(2pq\) \(p^2\) \(1\)

그런데 \(0\)인 칸이 생겼다. 첫 번째가 앞면이면 앞면이 0개일 수 없기 때문이다. 즉

\[ P(Z = 0 \mid X = 1) = 0 \;\neq\; q^2 = P(Z = 0) \]

이므로 \(X\)와 \(Z\)는 종속이다. \(X\)를 알면 \(Z\)에 대해 아는 것이 달라진다.

두 표를 나란히 놓고 보면 알 수 있다. \(X\), \(Y\), \(Z\) 각각의 분포는 어느 쪽 표에서도 그대로인데, 짝짓는 방식을 바꾸자 독립이던 것이 종속이 되었다. 독립인지 종속인지는 각 확률변수의 분포에 적혀 있지 않다. 그것을 담으려면 결합분포가 따로 있어야 한다.

이어지는 결합분포와 주변분포 문서에서 이 예를 다시 꺼내, 주변분포가 완전히 같은데도 결합분포가 다를 수 있음까지 보인다. 12장에서 상관과 인과를 갈라 볼 때 다시 문제가 되는 지점이기도 하다.

3. 분포를 적는 방법

이산확률변수의 분포는 "각 값에 무게가 얼마인가"를 적으면 완전히 결정된다. 그 목록에 이름을 붙인 것이 확률질량함수다.

정리 3. 확률질량함수 — 값마다의 무게

이산확률변수 \(X\)의 확률질량함수(PMF) 는

\[ p_{x_i} = P(X = x_i) \]

이며, 다음 두 조건을 만족한다.

\[ p_{x_i} \geq 0 \quad \text{(모든 } i \text{에 대해)}, \qquad \sum_i p_{x_i} = 1 \]

이 두 조건은 새로운 것이 아니다. 3.1절 콜모고로프 공리의 (1)과 (2)가 실직선 위로 옮겨진 형태일 뿐이다.

보기 1. 공정한 주사위. \(X\)를 눈의 수라 하면

풀이
\[ P(X = x) = \tfrac{1}{6}, \qquad x = 1, 2, 3, 4, 5, 6 \]

보기 2. 동전 세 번에서 앞면의 개수. 가능한 값은 \(\{0,1,2,3\}\)이고

풀이
\[ P(X=0) = \tfrac{1}{8}, \quad P(X=1) = \tfrac{3}{8}, \quad P(X=2) = \tfrac{3}{8}, \quad P(X=3) = \tfrac{1}{8} \]

이다. 벽돌 여덟 개가 네 위치에 \(1:3:3:1\)로 쌓인 모양이다.

보기 3. 야구 카드. 휴고는 좋아하는 선수의 카드가 나올 때까지 팩을 사되 최대 네 팩까지만 산다. 각 팩에 그 카드가 있을 확률은 0.2다. \(X\)를 산 팩의 수라 하면

풀이
\[ \begin{aligned} P(X=1) &= 0.2 \\ P(X=2) &= 0.8 \times 0.2 = 0.16 \\ P(X=3) &= 0.8^2 \times 0.2 = 0.128 \\ P(X=4) &= 1 - 0.2 - 0.16 - 0.128 = 0.512 \end{aligned} \]

이다. 앞의 세 값은 곱셈 규칙(3.1절 정리 2)을 그대로 쓴 것이다.

\(P(X=4)\)가 유독 큰 이유

\(0.512\)에는 두 가지가 섞여 있다. 네 번째 팩에서 카드를 찾는 경우와, 끝내 못 찾는 경우다. 어느 쪽이든 휴고는 네 팩에서 멈추므로 \(X = 4\)다.

확률변수를 정의할 때 흔히 놓치는 지점이다. "산 팩의 수"라는 함수는 성공 여부를 구별하지 않는다. 그것까지 알고 싶으면 확률변수를 하나 더 정의하거나, \(X\)의 정의를 바꿔야 한다.

보기 4. 삼면체 주사위 두 개의 차이. \(D = |D_1 - D_2|\)라 하자. 아홉 개의 결과가 세 값으로 옮겨진다.

\(D_1 \backslash D_2\) 1 2 3
1 0 1 2
2 1 0 1
3 2 1 0
풀이
\[ P(D=0) = \tfrac{3}{9}, \qquad P(D=1) = \tfrac{4}{9}, \qquad P(D=2) = \tfrac{2}{9} \]

표의 대각선에 벽돌 3개, 그 양옆에 4개, 모서리에 2개가 쌓인다.

import numpy as np
import matplotlib.pyplot as plt

def plot_pmf(values, probabilities, title="PMF"):
    """확률질량함수를 막대그림으로 그린다.

    이산확률변수에서는 각 값에 확률이 "덩어리"로 붙어 있으므로
    막대의 높이가 곧 그 값이 나올 확률이다.
    (연속확률변수의 밀도함수와 달리 높이를 그대로 확률로 읽을 수 있다.)
    """
    fig, ax = plt.subplots(figsize=(12, 3))
    # width=0.4 로 막대 사이를 띄운다. 값 사이에 아무것도 없음을 나타내기 위함이다.
    ax.bar(values, probabilities, width=0.4, alpha=0.7, edgecolor='black')
    ax.set_xlabel('x')
    ax.set_ylabel('P(X = x)')
    ax.set_title(title)
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    plt.tight_layout()
    plt.show()

# 예 1: 공정한 주사위. 여섯 값의 확률이 모두 같은 균등 PMF다.
values = [1, 2, 3, 4, 5, 6]
probs = [1/6] * 6
plot_pmf(values, probs, "PMF of a Fair Die")

# 예 2: 동전 3번 던져 앞면의 개수. 이항분포 B(3, 0.5)다.
# P(X=k) = C(3,k) * 0.5^k * 0.5^(3-k). 가운데(1, 2)가 높은 대칭 모양이 된다.
from math import comb
n = 3
values = list(range(n + 1))
probs = [comb(n, k) * (0.5**k) * (0.5**(n-k)) for k in values]
plot_pmf(values, probs, "PMF: Number of Heads in 3 Coin Flips")

# 예 3: 원하는 카드가 나올 때까지 산 팩 수. 균등하지도 대칭이지도 않다.
# 확률의 합이 0.2+0.16+0.128+0.512 = 1 이 되는지 확인해 보라.
# PMF가 되려면 (i) 모든 값이 0 이상, (ii) 합이 정확히 1 이어야 한다.
values = [1, 2, 3, 4]
probs = [0.2, 0.16, 0.128, 0.512]
plot_pmf(values, probs, "PMF: Baseball Card Packs Purchased")

이산확률변수

이산확률변수

이산확률변수

막대의 높이가 곧 벽돌의 무게다. 세 그림 모두 막대 높이의 합이 1이다.

연습문제

연습문제 1. 이산확률변수 \(X\)의 확률질량함수가 \(P(X=0) = 0.1\), \(P(X=1) = 0.3\), \(P(X=2) = c\), \(P(X=3) = 0.2\)다. \(c\)의 값을 구하고 \(P(X \geq 2)\)를 계산하라.

풀이

확률질량함수의 합이 1이어야 하므로

\[ 0.1 + 0.3 + c + 0.2 = 1 \implies c = 0.4 \]

이다. 따라서

\[ P(X \geq 2) = P(X=2) + P(X=3) = 0.4 + 0.2 = 0.6 \]

이다.

연습문제 2. 공정한 사면체 주사위(면이 1, 2, 3, 4) 두 개를 굴린다. \(S\)를 두 주사위의 합이라 하자. \(S\)의 확률질량함수를 모두 쓰고 확률의 합이 1임을 확인하라.

풀이

똑같이 일어날 법한 결과가 \(4 \times 4 = 16\)개다. 가능한 합은 2에서 8까지다.

\(s\) 결과 \(P(S = s)\)
2 \((1,1)\) \(1/16\)
3 \((1,2),(2,1)\) \(2/16\)
4 \((1,3),(2,2),(3,1)\) \(3/16\)
5 \((1,4),(2,3),(3,2),(4,1)\) \(4/16\)
6 \((2,4),(3,3),(4,2)\) \(3/16\)
7 \((3,4),(4,3)\) \(2/16\)
8 \((4,4)\) \(1/16\)

확인: \(1 + 2 + 3 + 4 + 3 + 2 + 1 = 16\)이므로 \(\sum P(S=s) = 16/16 = 1\)이다. \(\square\)

연습문제 3. 치우친 동전의 \(P(\text{앞면}) = 0.7\)이다. 이 동전을 3번 던진다. \(X\)를 앞면의 개수라 할 때 \(X\)의 확률질량함수를 쓰라.

풀이

각 던지기는 독립이고 \(p = 0.7\)(앞면), \(q = 0.3\)(뒷면)이다. 3번 던졌을 때 앞면의 개수는 이항분포를 따른다.

\[ P(X = k) = \binom{3}{k} (0.7)^k (0.3)^{3-k} \]

각 값을 계산하면

\[ P(X=0) = \binom{3}{0}(0.7)^0(0.3)^3 = 0.027 \]
\[ P(X=1) = \binom{3}{1}(0.7)^1(0.3)^2 = 3 \times 0.063 = 0.189 \]
\[ P(X=2) = \binom{3}{2}(0.7)^2(0.3)^1 = 3 \times 0.147 = 0.441 \]
\[ P(X=3) = \binom{3}{3}(0.7)^3(0.3)^0 = 0.343 \]

이다. 확인: \(0.027 + 0.189 + 0.441 + 0.343 = 1.000\). \(\square\)

연습문제 4. 연속확률변수(예: 무작위로 고른 사람의 정확한 키)를 확률질량함수로 기술할 수 없는 이유를 설명하라. 연속인 경우에는 무엇이 확률질량함수를 대신하는가?

풀이

확률질량함수는 개별 값에 양의 확률을 부여한다. 받침의 각 값에 대해 \(P(X = x) > 0\)이다. 연속확률변수에서는 받침이 비가산 구간이다(예: \([150, 200]\) cm 안의 모든 실수). 개별 값마다 양의 확률을 가진다면 비가산개의 값에 대한 합(또는 적분)이 무한대로 발산하여 정규화 공리 \(P(\Omega) = 1\)을 위반한다.

대신 연속확률변수는 확률밀도함수 \(f(x)\)로 기술하며, \(f(x) \geq 0\)이고 \(\int_{-\infty}^{\infty} f(x)\,dx = 1\)이다. 확률밀도함수는 확률이 아니라 밀도를 준다. 어떤 한 값에 대해서도 \(P(X = x) = 0\)이지만 \(P(a \leq X \leq b) = \int_a^b f(x)\,dx\)가 구간에 대한 확률을 준다.

연습문제 5. 기하분포. \(X\) = i.i.d. Bernoulli(\(p\))에서 첫 성공까지의 시행 횟수. 확률질량함수, \(\mathbb{E}[X]\), \(\mathrm{Var}(X)\)를 유도하라.

풀이

확률질량함수: \(X = k\)이려면 실패 \(k - 1\)번 뒤에 성공해야 하므로 \(k = 1, 2, \ldots\)에 대해 \(P(X = k) = (1 - p)^{k-1} p\)이다.

정규화: \(\sum_{k=1}^\infty (1-p)^{k-1} p = p/p = 1\). ✓

기댓값: 꼬리합 공식에 의해 \(\mathbb{E}[X] = \sum_{n=0}^\infty P(X > n) = \sum_{n=0}^\infty (1-p)^n = 1/p\)이다.

분산: \(\mathrm{Var}(X) = (1-p)/p^2\)이다(\(\mathbb{E}[X(X-1)]\)을 이용한 비슷한 계산으로 유도한다).

\(p = 0.5\)이면 평균 2회, 분산 2, 표준편차 \(\sqrt{2}\)다. 기하분포는 지수분포의 이산판이며 무기억 성질을 물려받는다: \(P(X > m + n \mid X > m) = P(X > n)\).

연습문제 6. 이항분포의 포아송 근사. \(np \to \lambda\)가 상수인 채로 \(n \to \infty\)이면 Binomial\((n, p)\) → Poisson\((\lambda)\)임을 보여라.

풀이

이항 확률질량함수에 \(p = \lambda/n\)을 대입한다.

\[ P(X = k) = \binom{n}{k}\left(\frac{\lambda}{n}\right)^k \left(1 - \frac{\lambda}{n}\right)^{n-k} \]

정리하면

\[ = \frac{\lambda^k}{k!} \cdot \underbrace{\frac{n!}{(n-k)! n^k}}_{\to 1} \cdot \underbrace{\left(1 - \frac{\lambda}{n}\right)^n}_{\to e^{-\lambda}} \cdot \underbrace{\left(1 - \frac{\lambda}{n}\right)^{-k}}_{\to 1} \]

이다. \(n \to \infty\)이면 \(P(X = k) \to \frac{\lambda^k e^{-\lambda}}{k!}\)로, 포아송 확률질량함수다.

용도: 드문 사건(\(p\)가 작고 \(n\)이 클 때)에는 포아송이 이항보다 훨씬 간단하다. 응용: 도시의 하루 교통사고 수, 칩당 결함 수, 분당 통화 수, 유전체당 돌연변이 수.

어림법칙: \(n \ge 20\), \(p \le 0.05\), \(np \le 10\)일 때 포아송이 잘 맞는다. 그렇지 않으면 이항을 쓰거나, \(np \ge 10\)이면 정규근사를 쓴다.

연습문제 7. 연습문제 \(5\)의 기하분포를 일반화하라. 음이항분포의 확률질량함수와 적률을 유도하고 확인하라.

풀이

\(X\)를 "\(r\)번째 성공까지의 시행 횟수"라 하자. \(X = k\)이려면 앞의 \(k-1\)번 중 정확히 \(r-1\)번 성공하고 \(k\)번째가 성공이어야 하므로

\[ P(X = k) = \binom{k-1}{r-1}p^{r}(1-p)^{k-r}, \qquad k = r, r+1, \ldots \]

\(r\)번의 독립인 기하분포의 합으로 보면 적률이 바로 나온다.

\[ \mathbb{E}[X] = \frac{r}{p}, \qquad \operatorname{Var}(X) = \frac{r(1-p)}{p^2} \]
import numpy as np

rng = np.random.default_rng(0)
r, p = 4, 0.3
X = rng.negative_binomial(r, p, 600_000) + r      # 실패 횟수 + r = 시행 횟수

print(f"음이항 (r={r}, p={p})")
print(f"  평균 {X.mean():.4f}   이론 {r / p:.4f}")
print(f"  분산 {X.var():.4f}   이론 {r * (1 - p) / p ** 2:.4f}")
print(f"\n분산/평균 = {X.var() / X.mean():.4f}   (1 보다 크다 → 과산포)")
print(f"기하분포는 r=1 인 특수한 경우: 평균 {1 / p:.4f}")

출력:

음이항 (r=4, p=0.3)
  평균 13.3286   이론 13.3333
  분산 31.0912   이론 31.1111

분산/평균 = 2.3327   (1 보다 크다 → 과산포)
기하분포는 r=1 인 특수한 경우: 평균 3.3333

분산이 평균보다 크다(\(31.09 > 13.33\)). 이것이 음이항분포가 실무에서 널리 쓰이는 이유다.

과산포 계수 모형으로서의 음이항. 2장 자료형 문서 연습문제 8에서 포아송의 분산 \(=\) 평균 성질을 보았는데, 실제 계수 자료는 대개 분산이 더 크다. 음이항은 이를 자연스럽게 담는다.

감마–포아송 혼합으로 보는 관점이 더 유용하다. \(\Lambda \sim \text{Gamma}\)이고 \(X \mid \Lambda \sim \text{Poisson}(\Lambda)\)이면 \(X\)의 주변분포가 음이항이다. 즉 "포아송이되 강도가 개체마다 다르다" 는 모형이며, 앞 절 조건부 독립 문서 연습문제 10의 혼합 구조와 같다.

  • 관측되지 않은 이질성이 있으면 과산포가 생긴다.
  • 그 이질성을 감마로 모형화하면 음이항이 나온다.
  • 이질성이 없으면(\(\text{Gamma}\)의 분산 \(\to 0\)) 포아송으로 되돌아간다.

실무 진단. 계수 자료에서 표본분산이 표본평균보다 뚜렷이 크면 포아송 대신 음이항을 쓴다. 반대로 분산이 작으면(과소산포) 이항이나 다른 모형이 필요하다. \(\square\)

연습문제 8. 포아송 분포와 지수분포는 같은 과정의 두 얼굴이다. 그 관계를 진술하고 수치로 확인하라.

풀이

포아송 과정을 사건 간격이 i.i.d. \(\text{Exp}(\lambda)\)인 과정으로 정의하면, 길이 \(t\)인 구간의 사건 수가 \(\text{Poisson}(\lambda t)\)를 따른다.

왜 그런가. 길이 \(t\) 구간에 사건이 없을 확률은 첫 간격이 \(t\)보다 클 확률이므로

\[ P(N_t = 0) = P(\text{첫 간격} > t) = e^{-\lambda t} \]

이고, 이는 \(\text{Poisson}(\lambda t)\)의 \(P(0)\)과 일치한다. 무기억성(연속형 문서 연습문제 5)이 이 대응을 모든 \(k\)로 확장해 준다.

import numpy as np
from scipy import stats

rng = np.random.default_rng(0)
lam, T = 3.0, 1000.0

gaps = rng.exponential(1 / lam, int(lam * T * 1.3))
times = np.cumsum(gaps)
times = times[times < T]
counts = np.histogram(times, bins=np.arange(0, T + 1, 1))[0]

print(f"간격이 Exp({lam}) 일 때 단위 구간의 사건 수")
print(f"  평균 {counts.mean():.4f}   분산 {counts.var():.4f}   (포아송이면 둘 다 {lam})")

u, c = np.unique(counts, return_counts=True)
print(f"\n{'k':>4}{'관측 비율':>12}{'Poisson pmf':>14}")
for k, cnt in zip(u[:7], c[:7]):
    print(f"{k:>4}{cnt / len(counts):>12.4f}{stats.poisson.pmf(k, lam):>14.4f}")

출력:

간격이 Exp(3.0) 일 때 단위 구간의 사건 수
  평균 2.9470   분산 2.9002   (포아송이면 둘 다 3.0)

   k       관측 비율   Poisson pmf
   0      0.0650        0.0498
   1      0.1480        0.1494
   2      0.1910        0.2240
   3      0.2510        0.2240
   4      0.1700        0.1680
   5      0.1050        0.1008
   6      0.0460        0.0504

관측 도수비가 포아송 확률질량함수를 표집오차 범위에서 따라간다. 구간이 \(1000\)개뿐이므로 각 \(k\)의 도수비는 표준오차가 \(\sqrt{p(1-p)/1000}\), 즉 \(0.007\)–\(0.013\) 규모다. 표의 차이(예: \(k=2\)에서 \(0.191\) 대 \(0.224\))가 그 두세 배 안에 들어온다. 평균 \(2.947\)과 분산 \(2.900\)이 모두 \(\lambda = 3\) 근처라는 점이 더 안정적인 확인이다. 구간 수를 늘리면 도수비도 확률질량함수에 더 가까워진다.

하나의 과정, 세 가지 질문.

질문 분포
구간 \(t\)에 사건이 몇 개인가 \(\text{Poisson}(\lambda t)\)
다음 사건까지 얼마나 걸리는가 \(\text{Exp}(\lambda)\)
\(r\)번째 사건까지 얼마나 걸리는가 \(\text{Gamma}(r, \lambda)\)

이산과 연속의 대응이 정확하다. 연습문제 7의 음이항이 "\(r\)번째 성공까지의 시행 수"였듯, 감마는 "\(r\)번째 사건까지의 시간"이다. 베르누이 시행의 연속 극한이 포아송 과정이다.

가정이 무엇인지 기억하라. 포아송 과정은 (1) 사건이 독립이고 (2) 강도 \(\lambda\)가 일정하다고 가정한다. 둘 중 하나라도 깨지면 계수의 분산이 평균과 달라지며, 연습문제 7의 과산포가 그 신호다.

어디에 쓰이는가. 대기행렬의 도착, 방사성 붕괴, 콜센터 문의, 웹 요청, 보험 청구가 모두 포아송 과정으로 근사된다. 드문 사건이 독립적으로 일어날 때 나타나는 보편적인 구조이며, 연습문제 6의 이항–포아송 극한이 그 근거를 준다. \(\square\)

연습문제 9. 연습문제 \(6\)이 이항의 극한을 다루었다면, 이항 자체가 근사인 경우도 있다. 초기하분포를 유도하고 언제 이항으로 근사할 수 있는지 밝혀라.

풀이

크기 \(N\)인 모집단에 성공이 \(K\)개 있고 \(n\)개를 비복원으로 뽑을 때, 성공 수 \(X\)는

\[ P(X = k) = \frac{\binom{K}{k}\binom{N-K}{n-k}}{\binom{N}{n}} \]

를 따른다. 적률은

\[ \mathbb{E}[X] = n\frac{K}{N}, \qquad \operatorname{Var}(X) = n\frac{K}{N}\left(1-\frac{K}{N}\right)\underbrace{\frac{N-n}{N-1}}_{\text{유한모집단 수정}} \]

이다. 평균은 이항과 같고 분산만 작다.

import numpy as np

K_frac, n = 0.3, 20
print(f"성공 비율 {K_frac}, 표본 {n}개")
print(f"{'모집단 N':>10}{'n/N':>8}{'초기하 분산':>14}{'이항 분산':>12}{'FPC':>9}")
for N in (50, 200, 1000, 10_000):
    hv = n * K_frac * (1 - K_frac) * (N - n) / (N - 1)
    bv = n * K_frac * (1 - K_frac)
    print(f"{N:>10}{n/N:>8.3f}{hv:>14.4f}{bv:>12.4f}{np.sqrt((N-n)/(N-1)):>9.4f}")

출력:

성공 비율 0.3, 표본 20개
     모집단 N     n/N        초기하 분산       이항 분산      FPC
        50   0.400        2.5714      4.2000   0.7825
       200   0.100        3.7990      4.2000   0.9511
      1000   0.020        4.1201      4.2000   0.9904
     10000   0.002        4.1920      4.2000   0.9990

\(n/N\)이 작아질수록 이항에 수렴한다.

\(n/N\) 분산 비
\(0.40\) \(0.61\)
\(0.10\) \(0.90\)
\(0.02\) \(0.98\)
\(0.002\) \(0.998\)

관례적 기준은 \(n/N < 0.05\)이면 이항 근사를 쓴다는 것이다. 그때 유한모집단 수정이 \(0.97\) 이상이라 무시할 만하다.

1장에서 이미 만난 인자다. 표본조사 문서 연습문제 6의 유한모집단 수정 \(\sqrt{1-n/N}\)이 정확히 이것이다. 비복원추출이 복원추출보다 정밀한 이유를 분포 수준에서 설명한 것이다.

왜 분산이 작아지는가. 비복원이면 뽑힌 공이 남은 모집단을 바꾸므로 관측들이 음의 상관을 갖는다. 극단적으로 \(n = N\)이면 표본이 곧 모집단이라 분산이 \(0\)이다.

세 분포의 관계를 정리하면.

상황 분포
유한 모집단, 비복원 초기하
무한 모집단(또는 복원) 이항
\(n\) 크고 \(p\) 작음 포아송

화살표는 한 방향이다. 초기하 \(\to\) 이항 \(\to\) 포아송으로 근사가 이어지며, 각 단계에서 가정이 하나씩 단순해진다. \(\square\)

연습문제 10. 계수 자료가 포아송을 따르는지 어떻게 확인하는가? 과산포와 영과잉을 진단하라.

풀이
import numpy as np
from scipy import stats

rng = np.random.default_rng(4)
n = 5000
lam = 2.0

datasets = {
    "포아송": rng.poisson(lam, n),
    "과산포(음이항)": rng.negative_binomial(2, 2 / (2 + lam), n),
    "영과잉": np.where(rng.random(n) < 0.3, 0, rng.poisson(lam / 0.7, n)),
    "과소산포(이항)": rng.binomial(4, lam / 4, n),
}

print(f"{'자료':>16}{'평균':>9}{'분산':>9}{'분산/평균':>11}{'0 의 비율':>11}{'포아송 예상':>13}")
for name, d in datasets.items():
    p0_obs = np.mean(d == 0)
    p0_pois = stats.poisson.pmf(0, d.mean())
    print(f"{name:>16}{d.mean():>9.4f}{d.var():>9.4f}"
          f"{d.var() / d.mean():>11.4f}{p0_obs:>11.4f}{p0_pois:>13.4f}")

출력:

              자료       평균       분산      분산/평균     0 의 비율       포아송 예상
             포아송   1.9900   2.0291     1.0196     0.1384       0.1367
        과산포(음이항)   1.9986   3.9982     2.0005     0.2522       0.1355
             영과잉   2.0148   3.7922     1.8822     0.3456       0.1333
        과소산포(이항)   1.9912   1.0015     0.5030     0.0640       0.1365

두 가지 진단이 서로 다른 것을 잡아낸다.

자료 분산/평균 \(0\) 비율 (관측 대 예상)
포아송 \(\approx 1\) 일치
과산포 \(> 1\) 관측이 더 많다
영과잉 \(> 1\) 관측이 훨씬 많다
과소산포 \(< 1\) 관측이 더 적다

분산/평균 비가 첫 번째 진단이다. 포아송이면 \(1\)이어야 하고, 이 값을 산포 모수라 부른다. \(2\)를 넘으면 포아송 모형을 그대로 쓰기 어렵다.

그런데 과산포와 영과잉을 구별하지 못한다. 둘 다 분산/평균을 키우기 때문이다. \(0\)의 비율을 따로 보는 것이 둘을 가른다.

모형 선택.

진단 모형
분산 \(\approx\) 평균 포아송
분산 \(>\) 평균, \(0\)은 정상 음이항 (연습문제 7)
\(0\)이 지나치게 많다 영과잉 포아송/음이항
분산 \(<\) 평균 이항, 또는 준포아송
\(0\)이 아예 없다 절단 포아송

왜 이것이 중요한가. 2장 자료형 문서 연습문제 8에서 본 대로, 계수 자료에 정규 기반 방법을 쓰면 표준오차가 틀린다. 그런데 포아송을 잘못 쓰는 것도 같은 문제를 일으킨다. 과산포를 무시하면 표준오차를 과소평가해 신뢰구간이 너무 좁아지고, 유의하지 않은 것이 유의하게 나온다.

형식적 검정도 있다. 카메론–트리베디 과산포 검정이나 이탈도 기반 검정을 쓰지만, 표본이 크면 사소한 이탈도 기각하므로(2장 왜도·첨도 문서 연습문제 10) 분산/평균 비의 크기를 함께 보는 것이 실용적이다. \(\square\)

정리하며

확률변수는 확률론의 무대를 표본공간에서 실직선으로 옮기는 장치다.

  • 정리 1은 확률변수가 함수임을 밝혔다. 무작위한 것은 \(X\)가 아니라 어떤 \(\omega\)가 뽑히느냐다. 가장 짧은 예가 지시확률변수이고, 같은 표본공간 위에 여러 확률변수를 얹어 더할 수도 있다(\(Z = X + Y\)).
  • 정리 2는 그 함수가 벽돌을 실직선 위로 옮겨 분포를 만든다고 설명했다. 여러 결과가 같은 값에 쌓일 수 있고, 분포는 원래 실험을 잊는다. 그래서 서로 다른 확률변수가 같은 분포를 가질 수 있으며, 각자의 분포를 알아도 둘이 함께 어떻게 움직이는지는 알 수 없다.
  • 정리 3은 이산인 경우 분포를 적는 방법이 확률질량함수임을 보였다. 값마다 무게를 적고, 그 합이 1이면 된다.

무대를 옮긴 이득은 곧 드러난다. 실직선 위에서는 평균과 퍼짐을 말할 수 있다. "짝수가 나오는 사건"의 평균은 뜻이 없지만 "주사위 눈"의 평균은 3.5다. 이것이 3.4절의 기댓값과 분산이며, 통계학이 자료를 요약하는 방식 전체가 여기서 나온다.

다만 먼저 해결할 문제가 있다. 이산확률변수는 값이 가산개뿐이라 각 값에 무게를 달 수 있었다. 그런데 대기 시간이나 키처럼 연속인 값을 취하는 양은 어떻게 다룰까? 개별 값의 확률이 모두 0이 되어 버리는데, 그러면 무게를 어디에 다는가?

다음 절의 연속확률변수가 이 물음에 답한다. 답은 무게를 점이 아니라 밀도로 다루는 것이다.