콘텐츠로 이동

확률변수로서의 통계량

개요

자료를 하나 받아 평균을 계산하면 숫자 하나가 나온다. 이를테면 68.3이다. 그 숫자를 적어 두고 "이 자료의 평균은 68.3"이라고 말하면 할 일이 끝난 것 같다.

그런데 같은 모집단에서 표본을 다시 뽑아 평균을 내면 68.3이 나오지 않는다. 67.9가 나오고, 또 뽑으면 69.1이 나온다. 모집단은 그대로인데 계산한 값이 매번 달라진다. 달라지게 만든 것은 모집단이 아니라 누가 표본에 뽑혔는가이다.

이 단순한 관찰이 5장 전체의 출발점이다. 표본에서 계산한 값은 고정된 수가 아니라 표본이 바뀌면 함께 바뀌는 양, 곧 확률변수다. 그 값들이 어떻게 흩어지는지를 다루는 것이 표본분포 이론이고, 신뢰구간과 가설검정은 모두 그 위에 서 있다.

뽑기 전과 뽑은 뒤

절차를 그림으로 적으면 이렇다.

\[ \text{모집단} \;\xrightarrow{\;\text{표본을 뽑는다}\;}\; \mathbf{x} = (x_1, x_2, \dots, x_n) \;\xrightarrow{\;\text{계산한다}\;}\; T(\mathbf{x}) \]

통계량이란 이 그림의 마지막 단계, 곧 표본을 받아 수 하나를 내놓는 함수 \(T\)를 말한다. 평균도 통계량이고, 분산도, 최댓값도, 중앙값도 통계량이다. 자료로부터 계산할 수만 있으면 무엇이든 통계량이다.

같은 통계량을 두 가지로 읽어야 한다는 점이 처음에는 낯설다.

표본을 뽑기 전에는 누가 뽑힐지 정해지지 않았으므로 \(T(\mathbf{X})\)의 값도 정해지지 않았다. 여러 값을 각각의 확률로 가질 수 있는 상태이며, 이때 \(T(\mathbf{X})\)는 확률변수다. 표본을 뽑고 난 뒤에는 자료가 \(\mathbf{x} = (x_1, \ldots, x_n)\)으로 확정되었으므로 \(T(\mathbf{x})\)도 68.3이라는 수 하나다.

그래서 이 책은 뽑기 전의 것을 대문자 \(\mathbf{X}\)로, 뽑은 뒤의 것을 소문자 \(\mathbf{x}\)로 적는다. 얼핏 성가신 관례 같지만, "\(\bar X\)의 분포"라는 말과 "\(\bar x = 68.3\)"이라는 말을 구별해 주는 장치다. 앞의 것은 아직 일어나지 않은 일에 대한 이야기이고, 뒤의 것은 이미 일어난 일의 기록이다.

모수는 고정되어 있고 통계량은 흔들린다

모집단에도 평균이 있다. 그것을 \(\mu\)라 쓰고 모수라 부른다. 표본에서 계산한 \(\bar X\)와 모집단의 \(\mu\)는 성격이 정반대다.

\(\mu\)는 고정되어 있지만 우리가 모른다. 전국 성인 남성의 평균 키는 어떤 값으로 정해져 있다. 그 값은 우리가 표본을 뽑든 말든, 몇 번을 뽑든 변하지 않는다. 다만 우리가 그 값을 알지 못할 뿐이다.

\(\bar X\)는 우리가 알 수 있지만 흔들린다. 자료만 있으면 언제든 계산할 수 있다. 그런데 표본을 다시 뽑으면 다른 값이 나온다.

추론이란 이 비대칭을 견디는 일이다. 알고 싶은 것은 고정되어 있으나 볼 수 없고, 볼 수 있는 것은 흔들린다. 흔들리는 것으로부터 고정된 것을 말하려면 그 흔들림의 크기와 모양을 알아야 하며, 그것이 바로 표본분포다.

여기서 통계량의 정의에 붙는 조건 하나가 중요해진다. 통계량은 미지의 모수를 포함해서는 안 된다. 예를 들어

\[ \frac{\bar X - \mu}{\sigma/\sqrt n} \]

은 통계량이 아니다. \(\mu\)와 \(\sigma\)를 모르면 이 값을 계산할 수 없기 때문이다. 반면

\[ \frac{\bar X - \mu_0}{S/\sqrt n} \]

는 통계량이다. \(\mu_0\)은 우리가 가설로 정해 놓은 아는 수이고 \(S\)는 자료에서 계산되기 때문이다. 이 구별이 사소해 보이지만, 5.2절의 \(t\) 분포가 존재하는 이유가 정확히 이것이다. 모르는 \(\sigma\)를 아는 \(S\)로 바꾸는 순간 분포가 정규에서 \(t\)로 바뀐다.

통계량 가운데 특정 모수를 겨냥해 만든 것을 추정량이라 하고 \(\hat\theta\)로 쓴다. \(\bar X\)는 그 자체로는 통계량이지만, \(\mu\)를 알아내려는 뜻으로 쓸 때는 \(\mu\)의 추정량이다. 같은 양을 무엇이라 부를지는 쓰임새가 정한다.

여기서 자주 뒤섞이는 세 낱말을 한 번에 갈라 두는 것이 좋다. 셋은 성격이 서로 다르다.

낱말 무엇인가 기호 표본이 바뀌면
모수 (parameter) 모집단이 가진 고정된 수. 알고 싶은 것 \(\theta\), \(\mu\), \(\sigma^2\) 변하지 않는다
추정량 (estimator) 자료를 받아 수를 내놓는 함수, 곧 계산 규칙 \(\hat\theta(\cdot)\), \(\bar X\) 규칙은 그대로다
추정값 (estimate) 그 규칙에 자료를 넣어 실제로 나온 수 하나 \(\hat\theta(\mathbf x)\), \(\bar x = 68.3\) 값이 바뀐다

추정량은 확률변수이고 추정값은 수다. 앞에서 대문자와 소문자를 갈라 쓴 것이 바로 이 구별이다. "표본평균의 분포"라고 말할 때는 추정량을 가리키고, "표본평균이 \(68.3\)"이라고 말할 때는 추정값을 가리킨다. 분포를 갖는 것은 앞의 것뿐이다.

모수·추정량·추정값과 표본분포

\(20\)세 남자의 키를 \(\mu = 170\), \(\sigma = 6\)인 모집단으로 두고 \(n = 25\)씩 뽑아 본 것이다. 왼쪽에서 표본 셋을 뽑았더니 추정값이 \(169.64\), \(172.96\), \(169.52\)로 제각각 나왔다. 규칙은 하나인데 값은 셋이다. 추정량과 추정값을 갈라 불러야 하는 이유가 이것이다.

오른쪽은 같은 일을 \(20{,}000\)번 되풀이해 나온 추정값을 전부 모은 것이다. 이 흩어짐이 표본분포이며, 여기서 5장의 두 가지 물음이 곧바로 나온다. 중심이 어디인가와 폭이 얼마인가다. 모은 값들의 평균은 \(170.001\)로 모수 \(170\)과 맞고, 표준편차는 \(1.195\)로 이론값 \(\sigma/\sqrt n = 1.2\)와 맞는다.

앞의 것이 불편성이고 뒤의 것이 표준오차다. 표준오차란 따로 있는 새로운 개념이 아니라 추정량의 표본분포가 갖는 표준편차이며, 그림의 주황색 화살표가 그 폭이다.

자주 쓰는 통계량

이 장에서 다룰 통계량은 넷이다. 어느 것이나 표본에서 계산되는 확률변수이고, 그 분포는 모집단의 모양과 표본크기 \(n\)에 따라 정해진다.

통계량 공식 겨냥하는 모수
표본평균 \(\bar{X} = \frac{1}{n}\sum_{i=1}^n X_i\) 모평균 \(\mu\)
표본분산 \(S^2 = \frac{1}{n-1}\sum_{i=1}^n (X_i - \bar{X})^2\) 모분산 \(\sigma^2\)
표본비율 \(\hat{p} = \frac{1}{n}\sum_{i=1}^n X_i\) (0/1 자료) 모비율 \(p\)
표본중앙값 \(\text{Med}(\mathbf{X})\) 모집단 중앙값

흔들림에도 규칙이 있다

통계량이 표본마다 다르다면 그것으로 무엇을 말할 수 있을까. 아무 값이나 나오는 것이 아니라 흔들림에 규칙이 있다는 것이 답이다. 가장 기본적인 규칙이 불편성이다.

추정량 \(\hat\theta\)를 무한히 되풀이해 계산한 값들의 평균이 참값과 같으면, 즉

\[ E[\hat{\theta}(\mathbf{X})] = \theta \]

이면 \(\hat\theta\)를 불편추정량이라 한다. 한 번의 추정이 맞는다는 뜻이 아니다. 어느 한 번은 크게, 다른 한 번은 작게 나오지만 한쪽으로 치우쳐 빗나가지는 않는다는 뜻이다. 과녁에 비유하면 명중한다는 말이 아니라 탄착군의 중심이 과녁 한가운데 있다는 말이다.

이 장에서 쓰는 두 추정량이 실제로 불편이라는 것은 증명할 수 있다. 분포를 가정할 필요조차 없고 i.i.d.와 유한한 분산이면 된다.

정리. 표본평균과 표본분산은 불편이다

\(X_1, \ldots, X_n\)이 평균 \(\mu\), 분산 \(\sigma^2\)인 i.i.d. 확률변수이면

\[ E[\bar X] = \mu, \qquad E[S^2] = \sigma^2 \]

이다.

증명

표본평균. 기댓값의 선형성만으로 끝난다. 독립성조차 쓰지 않는다.

\[ E[\bar X] = E\!\left[\frac1n \sum_i X_i\right] = \frac1n \sum_i E[X_i] = \frac1n \cdot n\mu = \mu \]

표본분산. 편차 \(X_i - \bar X\) 안에 \(\mu\)를 넣었다 빼는 것에서 출발한다. 모르는 \(\mu\)를 일부러 끌어들이는 이유는 \(E[(X_i-\mu)^2] = \sigma^2\)이라는 아는 사실을 쓰기 위해서다.

\[ \sum_i (X_i - \bar X)^2 = \sum_i \big((X_i - \mu) - (\bar X - \mu)\big)^2 = \sum_i (X_i - \mu)^2 - n(\bar X - \mu)^2 \]

가운데에서 오른쪽으로 갈 때 교차항이 정리된다. 제곱을 펼치면

\[ \sum_i (X_i-\mu)^2 - 2(\bar X - \mu)\sum_i (X_i - \mu) + n(\bar X - \mu)^2 \]

인데, \(\sum_i (X_i - \mu) = n(\bar X - \mu)\)이므로 가운데 항이 \(-2n(\bar X-\mu)^2\)이 되어 마지막 항과 합쳐져 \(-n(\bar X - \mu)^2\) 하나만 남는다.

기댓값을 취한다. 앞 항은 각 \(E[(X_i-\mu)^2] = \sigma^2\)이 \(n\)개이므로 \(n\sigma^2\)이고, 뒤 항은 독립성에서 \(\operatorname{Var}(\bar X) = \sigma^2/n\)이므로 \(n \cdot \sigma^2/n = \sigma^2\)이다.

\[ E\!\left[\sum_i (X_i - \bar X)^2\right] = n\sigma^2 - \sigma^2 = (n-1)\sigma^2 \]

양변을 \(n-1\)로 나누면 \(E[S^2] = \sigma^2\)이다. \(\square\)

\(n-1\)의 정체가 여기서 드러난다. 모평균 \(\mu\) 대신 표본평균 \(\bar X\)를 중심으로 쓰는 순간 제곱합이 정확히 \(\sigma^2\)만큼 줄어든다. \(\bar X\)가 자기 자료에 가장 가까이 붙어 있기 때문이며, 그 모자람을 메우려고 \(n\)이 아니라 \(n-1\)로 나눈다.

위 모의실험의 설정 그대로 \(\mu = 170\), \(\sigma = 6\), \(n = 25\)로 확인하면 \(E[\sum(X_i-\bar X)^2]\)의 실측값이 \(863.8\)로 \((n-1)\sigma^2 = 864\)와 맞고, \(E[S^2] = 35.99\)로 \(\sigma^2 = 36\)과 맞는다.

같은 논의를 더 자세히 다루는 곳은 5.6절 분산의 표본분포와 7장 베셀 보정이다.

추정은 둘째 단계다

불편추정량을 아무리 잘 골라도 자료 자체가 치우쳐 모였으면 소용이 없다. 위 정리가 요구하는 것은 \(X_i\)가 모집단에서 i.i.d.로 나왔다는 것이고, 그 조건은 추정 방법이 아니라 표본을 뽑는 방법이 지킨다.

전화를 받는 사람만 조사하거나 자원자만 모으면 \(E[\bar X] = \mu\)가 애초에 성립하지 않는다. 이때 \(\bar X\)는 모집단의 \(\mu\)가 아니라 뽑힐 가능성이 높았던 부분집단의 평균을 겨냥하게 되며, 표본을 아무리 키워도 그 치우침은 줄지 않는다. 1장의 편향과 무응답이 선택 편향과 무응답 편향을 나누어 다룬다.

순서를 기억해 두면 좋다. 먼저 치우치지 않게 모으고, 그다음에 추정한다. 이 절의 모든 논의는 첫 단계가 지켜졌다는 전제 위에 있다.

위 정리는 평균과 분산을 다루었다. 그렇다면 중앙값은 어떨까. 모집단이 작고 대칭이면 이 물음을 끝까지 손으로 따라갈 수 있다.

보기 1. 탁구공으로 보는 불편성. 0부터 32까지 번호가 적힌 탁구공 33개가 항아리에 들어 있다. 개수가 홀수라 모집단 중앙값이 정확히 16으로 떨어진다. 여기서 다섯 개를 비복원으로 뽑아 그 중앙값 \(\text{Med}\)를 적는다.

(1) \(\text{Med}\)가 모집단 중앙값 16의 불편추정량임을 보이고 \(\operatorname{sd}(\text{Med})\)를 구하시오.

(2) 뽑기를 50번 되풀이해 얻은 중앙값들의 평균은 16.44였다. 참값 16과 어긋난다. 이것을 편향의 증거로 읽어야 하는가.

풀이

(1) 해석적으로. 불편성은 대칭성만으로 나온다. 공에 적힌 수를 뒤집는 사상 \(b \mapsto 32 - b\)는 모집단 \(\{0, 1, \dots, 32\}\)를 자기 자신으로 옮기는 일대일 대응이므로, 어떤 표본 \(S\)를 뽑을 확률과 뒤집은 표본 \(32 - S\)를 뽑을 확률이 같다. 그런데 중앙값은 이 뒤집기를 그대로 따라간다.

\[ \text{Med}(32 - S) = 32 - \text{Med}(S) \]

따라서 \(\text{Med}\)와 \(32 - \text{Med}\)는 같은 분포를 갖고, 양변의 기댓값을 취하면 \(E[\text{Med}] = 32 - E[\text{Med}]\), 곧

\[ E[\text{Med}] = 16 \]

이다. 근사가 아니라 정확한 등식이며, 중앙값이라는 사실조차 쓰지 않았다. 뒤집기와 함께 움직이는 통계량이면 무엇이든 같은 논증이 통한다.

퍼짐은 분포를 직접 적어야 나온다. 중앙값이 \(m\)이려면 뽑힌 다섯 개 가운데 \(m\)보다 작은 것이 둘, 큰 것이 둘이어야 하므로

\[ P(\text{Med} = m) = \frac{\binom{m}{2}\binom{32-m}{2}}{\binom{33}{5}}, \qquad m = 2, 3, \dots, 30 \]

이다. 이 분포로 계산하면 \(\operatorname{Var}(\text{Med}) = 34\)가 딱 떨어져

\[ \operatorname{sd}(\text{Med}) = \sqrt{34} = 5.8310 \]

이다. 견주어 둘 것이 하나 있다. 같은 표본에서 표본평균을 쓰면 모분산이 \(\sigma^2 = (33^2-1)/12 = 90.67\)이고 비복원이므로 유한모집단 수정이 붙어

\[ \operatorname{Var}(\bar X) = \frac{\sigma^2}{5}\cdot\frac{33-5}{33-1} = 15.87, \qquad \operatorname{sd}(\bar X) = 3.9833 \]

이다. 둘 다 불편인데 중앙값 쪽이 \(1.46\)배 더 흔들린다. 불편성은 추정량을 고르는 기준이 되지 못한다는 것을 여기서 이미 볼 수 있다.

(2) 수치적으로. 정확한 분포를 완전열거로 얻고, 그 옆에 50번 모의실험을 나란히 둔다.

import matplotlib.pyplot as plt
import numpy as np
from math import comb

np.random.seed(0)
num_samples = 50

def exact_median_pmf():
    """크기 5짜리 비복원표본에서 표본중앙값의 **정확한** 분포.

    중앙값이 m이려면 m보다 작은 공 2개와 큰 공 2개가 함께 뽑혀야 하므로
    확률이 C(m,2)C(32-m,2)/C(33,5)이다. 모의실험이 아니라 완전열거다.
    """
    total = comb(33, 5)
    return {m: comb(m, 2) * comb(32 - m, 2) / total for m in range(2, 31)}

def main():
    # 모집단: 0부터 32까지 번호가 붙은 공 33개.
    # 개수가 홀수이므로 참 중앙값이 정확히 16으로 딱 떨어진다.
    balls = np.arange(33)
    print(f"모집단 중앙값 = {np.median(balls)}")

    pmf = exact_median_pmf()
    exact_mean = sum(m * q for m, q in pmf.items())
    exact_sd = sum((m - exact_mean) ** 2 * q for m, q in pmf.items()) ** 0.5
    print(f"정확한 E[Med] = {exact_mean:.6f},  sd(Med) = {exact_sd:.6f}")

    # 크기 5짜리 표본을 50번 뽑아 그때마다 표본중앙값을 기록한다.
    # 표본이 달라지면 중앙값도 달라진다는 것,
    # 즉 **통계량이 확률변수라는 것**이 이 보기의 전부다.
    data = []
    for _ in range(num_samples):
        sample = np.random.choice(balls, size=5, replace=False)
        data.append(np.median(sample))

    se = exact_sd / np.sqrt(num_samples)
    print(f"50회 표본중앙값의 평균 = {np.mean(data):.2f}")
    print(f"  그 평균의 표준오차 = {se:.4f},  z = {(np.mean(data) - 16) / se:+.3f}")

    # 되풀이를 20만 번으로 늘려 본다. 같은 표본에서 표본평균도 함께 기록해
    # 중앙값과 평균 가운데 어느 쪽이 덜 흔들리는지 견준다.
    meds, means = [], []
    for _ in range(200_000):
        sample = np.random.choice(balls, size=5, replace=False)
        meds.append(np.median(sample))
        means.append(sample.mean())
    var_pop = (33 ** 2 - 1) / 12                            # 0..32 의 모분산
    sd_mean = (var_pop / 5 * (33 - 5) / (33 - 1)) ** 0.5    # 유한모집단 수정 포함
    print(f"20만회 표본중앙값의 평균   = {np.mean(meds):.6f}")
    print(f"20만회 표본중앙값의 표준편차 = {np.std(meds, ddof=1):.4f}  (정확값 {exact_sd:.4f})")
    print(f"20만회 표본평균의 표준편차   = {np.std(means, ddof=1):.4f}  (정확값 {sd_mean:.4f})")

    # 값마다 몇 번 나왔는지 센다. 표본이 50개뿐이라 히스토그램보다
    # 점그림이 낫다(2.5절에서 본 대로 자료가 적을 때의 선택이다).
    data_dict = {}
    for num in data:
        data_dict[num] = data_dict.get(num, 0) + 1

    fig, ax = plt.subplots(figsize=(12, 3))
    # 같은 값을 세로로 쌓아 점그림을 만든다
    for num, freq in data_dict.items():
        ax.plot([num] * freq, range(1, freq + 1), 'ok')
    # 참 중앙값 16. 점들이 이 선 주위에 흩어지는지 확인한다.
    ax.plot([16, 16], [0, 5], "--r", alpha=0.3, label="True median")
    ax.legend()
    ax.set_title('Simulation-Based Distribution of Sample Median')
    ax.set_xlabel('Sample Median')
    ax.set_ylabel('Number of Samples')
    ax.spines['top'].set_visible(False)
    ax.spines['right'].set_visible(False)
    ax.spines['bottom'].set_position("zero")
    plt.show()

if __name__ == "__main__":
    main()

출력:

모집단 중앙값 = 16.0
정확한 E[Med] = 16.000000,  sd(Med) = 5.830952
50회 표본중앙값의 평균 = 16.44
  그 평균의 표준오차 = 0.8246,  z = +0.534
20만회 표본중앙값의 평균   = 16.004935
20만회 표본중앙값의 표준편차 = 5.8225  (정확값 5.8310)
20만회 표본평균의 표준편차   = 3.9830  (정확값 3.9833)

Simulation-Based Distribution of Sample Median

완전열거가 준 \(E[\text{Med}] = 16.000000\)과 \(\operatorname{sd}(\text{Med}) = 5.830952 = \sqrt{34}\)가 (1)의 유도와 정확히 맞는다. 20만 번 모의실험의 표준편차 \(5.8225\)와 \(3.9830\)도 정확값 \(5.8310\), \(3.9833\)과 맞는다.

16.44는 편향의 증거가 아니다. 되풀이 50번으로 얻은 평균의 표준오차가 \(\sqrt{34}/\sqrt{50} = 0.8246\)이므로 16.44는 16에서 겨우 \(0.53\) 표준오차 떨어져 있다. 50번을 20만 번으로 늘리면 \(16.0049\)로 내려앉는데, 이때의 표준오차는 \(\sqrt{34}/\sqrt{200000} = 0.0130\)이니 여전히 참값과 \(0.4\) 표준오차 안이다. 되풀이 횟수를 늘려 줄어드는 것은 편향이 아니라 몬테카를로 오차다. 편향이었다면 20만 번을 돌려도 그 자리에 남아 있었을 것이다.

그림에서 한 가지 더 눈에 띄는 것이 있다. 점들이 가로축의 아무 데나 찍히지 않고 정수 자리에만 찍힌다. 공에 정수만 적혀 있고 다섯 개 중 가운데 값을 고르므로 표본중앙값도 정수일 수밖에 없다. 통계량의 분포는 이렇게 모집단의 성격을 물려받는다.

좋은 추정량을 어떻게 만드는가

지금까지는 추정량이 주어져 있다고 보고 그 성질을 따졌다. 그렇다면 추정량은 애초에 어디서 오는가. 평균을 추정할 때 표본평균을 쓰는 것은 자연스러워 보이지만, 모집단이 낯선 분포일 때는 무엇을 계산해야 할지 막막하다.

가장 널리 쓰이는 답이 최대가능도추정이다. 발상은 한 문장으로 요약된다. 관측된 자료를 가장 그럴듯하게 만드는 모수값을 고른다.

핵심은 보는 방향을 뒤집는 데 있다. 확률을 계산할 때는 모수를 알고 자료가 나올 확률을 묻는다. 여기서는 반대로 자료를 고정해 놓고 모수를 움직인다. 같은 식을 모수의 함수로 읽는 것이며, 그렇게 읽은 것을 가능도라 부른다.

관측값 \(x_1, \ldots, x_n\)이 밀도 \(f(x \mid \theta)\)에서 독립으로 나왔다면 가능도는 각 관측값의 확률을 모두 곱한 값이고, 최대가능도추정값은 그것을 가장 크게 만드는 \(\theta\)다.

\[ \hat{\theta}_{\text{MLE}} = \arg\max_{\theta} \; L(\theta \mid \mathbf{x}) = \arg\max_{\theta} \prod_{i=1}^n f(x_i \mid \theta) \]

실제 계산은 곱이 아니라 로그를 취한 합으로 한다.

\[ \ell(\theta \mid \mathbf{x}) = \sum_{i=1}^n \log f(x_i \mid \theta) \]

로그를 쓰는 이유는 두 가지다. 미분하기에 합이 곱보다 훨씬 편하고, 확률을 수백 번 곱하면 컴퓨터에서 0으로 내려앉아 버리기 때문이다. 로그가 증가함수이므로 최댓값의 위치는 바뀌지 않는다.

정규분포에 적용하면

\(N(\mu, \sigma^2)\)에서 \(m\)개를 뽑았다고 하자. 가능도는 정규밀도를 모두 곱한 것이고

\[ L(\mu, \sigma^2) = \prod_{i=1}^m \frac{1}{\sqrt{2\pi\sigma^2}} \exp\!\left(-\frac{(x^{(i)} - \mu)^2}{2\sigma^2}\right) \]

로그를 취하면 상수를 빼고 다음이 남는다.

\[ \ell(\mu, \sigma^2) = -\frac{1}{2\sigma^2}\sum_{i=1}^m (x^{(i)} - \mu)^2 - \frac{m}{2}\log\sigma^2 + \text{상수} \]

\(\mu\)에 대해 미분해 0으로 두면 첫째 항의 제곱합을 가장 작게 하는 \(\mu\)를 고르라는 조건이 되고, 그 답이 표본평균이다. 이어서 \(\sigma^2\)에 대해 풀면 편차제곱의 평균이 나온다.

\[ \hat{\mu} = \frac{1}{m}\sum_{i=1}^m x^{(i)}, \qquad \hat{\sigma}^2 = \frac{1}{m}\sum_{i=1}^m (x^{(i)} - \hat{\mu})^2 \]

익숙한 두 공식이 원리 하나에서 함께 나왔다는 점이 이 방법의 매력이다.

다만 분산 쪽을 자세히 보라. \(m-1\)이 아니라 \(m\)으로 나눈다. 이 책이 \(S^2\)을 정의할 때 쓰는 \(m-1\)과 다르며, 그래서 최대가능도 분산추정량은 참값보다 조금 작게 나오는 편향을 갖는다. 최대가능도가 언제나 불편성을 주지는 않는다는 첫 신호이고, 5.6절과 6장에서 되풀이해 만날 주제다.

베르누이에 적용하면

0 또는 1만 나오는 시행에서는 가능도가 더 단순하다.

\[ L(p) = \prod_{i=1}^m p^{x^{(i)}}(1-p)^{1-x^{(i)}}, \qquad \ell(p) = \sum_{i=1}^m \left[ x^{(i)} \log p + (1-x^{(i)})\log(1-p) \right] \]

앞면이 나온 횟수를 \(k = \sum_{i=1}^m x^{(i)}\)라 두면 로그가능도가 한 줄로 줄어든다.

\[ \ell(p) = k \log p + (m - k)\log(1-p) \]

이것을 가장 크게 만드는 \(p\)를 찾는 일이 남았다.

보기 2. 베르누이 모수의 최대가능도추정. \(X_1, \ldots, X_m\)을 독립인 \(\text{Bernoulli}(p)\)로 관측해 \(1\)이 \(k\)번 나왔다.

(1) \(p\)의 최대가능도추정값을 해석적으로 구하시오.

(2) 참값 \(p = 0.7\)인 동전을 \(m = 100\)번 던진 자료로 로그가능도 곡선을 그려, (1)의 답이 그 봉우리에 놓이는지 확인하시오.

풀이

(1) 해석적으로. \(0 < p < 1\)에서 미분하면

\[ \ell'(p) = \frac{k}{p} - \frac{m-k}{1-p} \]

이고, \(\ell'(p) = 0\)은 \(k(1-p) = (m-k)p\), 곧 \(k = mp\)를 준다. 따라서

\[ \hat p = \frac{k}{m} = \frac{1}{m}\sum_{i=1}^m x^{(i)} \]

이다. 이 정류점이 최대임은 이계도함수가 보여 준다.

\[ \ell''(p) = -\frac{k}{p^2} - \frac{m-k}{(1-p)^2} < 0 \]

\(\ell\)이 \((0,1)\)에서 위로 오목하므로 정류점은 하나뿐이고 그것이 최대다. 끝점도 따로 볼 필요가 없다. \(k = 0\)이면 \(\ell(p) = m\log(1-p)\)가 감소함수라 \(\hat p = 0\), \(k = m\)이면 증가함수라 \(\hat p = 1\)이어서 \(\hat p = k/m\)이 그대로 성립한다.

최대가능도추정량이 표본비율이다. 너무 당연해 보이는 답이지만, 그 당연함이 원리 하나에서 유도되었다는 것이 요점이다.

(2) 수치적으로. \(p\)의 후보를 격자에 늘어놓고 각각의 로그가능도를 재어 가장 큰 곳을 찾는다.

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams["font.family"] = "Apple SD Gothic Neo"
plt.rcParams["axes.unicode_minus"] = False

np.random.seed(1)
p_true, m = 0.7, 100

# 참 p = 0.7 인 동전을 100번 던진다. 물론 실제로는 이 값을 모른다.
coins = np.random.binomial(n=1, p=p_true, size=m)
k = coins.sum()

# 로그가능도는 k log p + (m-k) log(1-p) 로 줄어든다. 확률을 100번 곱하면
# 0 으로 언더플로되므로 로그를 취해 합으로 바꾼다.
ps = np.linspace(0.01, 0.99, 100)
loglik = k * np.log(ps) + (m - k) * np.log(1 - ps)

grid_mle = ps[np.argmax(loglik)]   # 격자가 고른 최대점
exact_mle = k / m                  # (1) 에서 해석적으로 구한 값

print(f"앞면 k = {k},  m = {m}")
print(f"해석적  p-hat = k/m = {exact_mle:.4f}")
print(f"격자 최대점         = {grid_mle:.4f}  (격자 간격 {ps[1] - ps[0]:.4f})")

fig, (ax, az) = plt.subplots(1, 2, figsize=(12, 3.2),
                             gridspec_kw={"width_ratios": [1.6, 1]})

for a in (ax, az):
    a.plot(ps, loglik, color="#1565C0", lw=1.8, zorder=1)
    a.axvline(exact_mle, color="#D32F2F", ls="--", lw=1.6, zorder=3)
    a.axvline(grid_mle, color="#E65100", ls="-", lw=1.6, zorder=2)
    a.set_xlabel("$p$")
    a.spines[["top", "right"]].set_visible(False)

ax.set_ylabel("로그가능도 $\\ell(p)$")
ax.set_title("로그가능도 곡선 전체", fontsize=11)

# 오른쪽: 봉우리를 확대해 격자가 띄엄띄엄하다는 것을 보인다.
az.plot(ps, loglik, "o", ms=5, color="#1565C0", zorder=1)
az.set_xlim(exact_mle - 0.035, exact_mle + 0.035)
sel = np.abs(ps - exact_mle) < 0.045
az.set_ylim(loglik[sel].min(), loglik[sel].max() + 0.05)
az.set_title("봉우리 확대 — 격자점은 띄엄띄엄하다", fontsize=11)
az.plot([], [], color="#D32F2F", ls="--", lw=1.6,
        label=f"해석적 $\\hat p = k/m = {exact_mle:.4f}$")
az.plot([], [], color="#E65100", ls="-", lw=1.6,
        label=f"격자 최대점 $= {grid_mle:.4f}$")
az.legend(loc="lower center", fontsize=9)

plt.tight_layout()
plt.show()

출력:

앞면 k = 74,  m = 100
해석적  p-hat = k/m = 0.7400
격자 최대점         = 0.7425  (격자 간격 0.0099)

베르누이 로그가능도와 최대가능도추정값

왼쪽 곡선의 봉우리가 해석적 답과 같은 자리에 있다. 오른쪽은 그 봉우리를 확대한 것인데, 격자가 고른 \(0.7425\)가 해석적 답 \(0.7400\)에서 한 칸 비껴나 있다. 격자 간격이 \(0.0099\)여서 \(0.74\)가 후보에 아예 없기 때문이다. 해석적으로 푼 답은 정확하고, 격자 탐색은 격자만큼만 정확하다.

모수가 하나뿐인 이 문제에서는 격자를 쓸 이유가 없다. 그러나 미분해서 손으로 풀 수 없는 모형에서는 이런 수치 탐색이 유일한 길이 되며, 그때는 격자 대신 기울기를 따라 올라가는 방법을 쓴다. 6장의 최대가능도 최적화가 그 이야기다.

모집단 크기를 추정할 때

최대가능도가 진짜 힘을 발휘하는 것은 답이 당연하지 않을 때다. 호수의 물고기가 몇 마리인지 묻는 문제를 보자. 전부 잡아 셀 수는 없으니 두 번에 나누어 잡는다.

먼저 \(M\)마리를 잡아 표시를 남기고 놓아 준다. 시간이 지나 섞인 뒤에 \(n\)마리를 다시 잡는데, 그중 \(m\)마리에 표시가 있다. 두 번째로 잡은 \(n\)마리 가운데 표시된 것이 몇 마리인지는 4장에서 본 초기하분포를 따른다.

\[ P(m \mid N) = \frac{\binom{M}{m}\binom{N-M}{n-m}}{\binom{N}{n}} \]

여기서 자료 \((M, n, m)\)은 관측되었고 모르는 것은 \(N\)뿐이다. 그러니 이 식을 \(N\)의 함수로 읽고 가장 큰 값을 주는 \(N\)을 고르면 된다. 비례식이 주는 직관은 이렇다. 두 번째 표본에서 표시된 비율 \(m/n\)이 호수 전체에서 표시된 비율 \(M/N\)과 같아야 한다고 놓으면

\[ \hat{N} = \frac{M \cdot n}{m} \]

이다. 50마리에 표시하고 나중에 40마리를 잡았는데 10마리가 표시되어 있었다면 \(\hat N = 50 \times 40 / 10 = 200\)마리로 추정한다.

그런데 \(N\)은 정수이고 \(Mn/m\)은 대개 정수가 아니다. 가능도를 제대로 최대화하면 무엇이 나오는지 따져 볼 필요가 있다.

보기 3. 포획-재포획의 최대가능도추정. 위 초기하확률을 \(N\)의 함수로 읽어 \(L(N) = P(m \mid N)\)이라 두자.

(1) 가능도비 \(L(N)/L(N-1)\)을 계산해 최대가능도추정값이 \(\hat N = \lfloor Mn/m \rfloor\)임을 보이시오. \(Mn/m\)이 정수일 때는 무슨 일이 일어나는가.

(2) \(M = 50\), \(n = 40\), \(m = 10\)에서 \(N\)을 하나씩 바꿔 가며 가능도를 계산하면 최댓값이 200이 아니라 199에서 잡힌다. 왜 그런가.

풀이

(1) 해석적으로. \(N\)이 정수라 미분할 수 없으므로 이웃한 두 값의 비를 본다. \(L(N) = \binom{M}{m}\binom{N-M}{n-m}\big/\binom{N}{n}\)에서 \(\binom{M}{m}\)은 \(N\)과 무관하므로 약분되고

\[ \frac{L(N)}{L(N-1)} = \frac{\binom{N-M}{n-m}}{\binom{N-1-M}{n-m}} \cdot \frac{\binom{N-1}{n}}{\binom{N}{n}} \]

이다. \(\binom{a}{k}\big/\binom{a-1}{k} = a/(a-k)\)를 두 번 쓰면

\[ \frac{L(N)}{L(N-1)} = \frac{N-M}{N-M-n+m} \cdot \frac{N-n}{N} \]

을 얻는다. 이 비가 \(1\) 이상인 조건을 정리한다. 분모가 양수인 범위에서

\[ (N-M)(N-n) \ge N(N-M-n+m) \]

인데, 양변을 펼치면 \(N^2\), \(-MN\), \(-Nn\) 항이 모두 지워지고

\[ Mn \ge Nm, \qquad \text{곧} \qquad N \le \frac{Mn}{m} \]

만 남는다. 즉 \(L\)은 \(N \le Mn/m\)까지 오르다가 그 뒤로는 내려간다. 따라서

\[ \hat N = \left\lfloor \frac{Mn}{m} \right\rfloor \]

이다. 비례식이 주는 \(Mn/m\)에 바닥함수가 붙는다는 것이 요점이고, 그 까닭은 \(N\)이 정수라는 것 하나다.

\(Mn/m\)이 정수일 때는 특별한 일이 일어난다. \(N = Mn/m\)에서 위 부등식이 등호가 되므로 비가 정확히 \(1\), 곧

\[ L\!\left(\frac{Mn}{m}\right) = L\!\left(\frac{Mn}{m} - 1\right) \]

이다. 최대가능도추정값이 둘이고 가능도만으로는 어느 쪽도 고를 수 없다.

(2) 수치적으로. \(M = 50\), \(n = 40\), \(m = 10\)은 \(Mn/m = 200\)으로 나누어떨어지는 바로 그 경우다. 그러므로 \(L(199) = L(200)\)이고, 코드가 199를 찍는 것은 격자가 성겨서가 아니라 동점이기 때문이다.

import matplotlib.pyplot as plt
from fractions import Fraction
from math import comb
from scipy import special

def prob(n, c, r, t):
    """포획-재포획의 초기하확률.

    n: 전체 개체수(우리가 추정하려는 미지수)
    c: 1차에서 잡아 표시한 수
    r: 2차에서 잡은 수
    t: 2차에서 잡힌 것 중 표시가 있던 수

    2차 표본 r마리를 고르는 모든 방법 중,
    표시된 것 t마리와 안 된 것 r-t마리를 고르는 방법의 비율이다.
    """
    return special.comb(n - c, r - t) * special.comb(c, t) / special.comb(n, r)

def exact_prob(n, c, r, t):
    """같은 확률을 분수로 계산한다. 반올림이 끼어들지 않는다."""
    return Fraction(comb(n - c, r - t) * comb(c, t), comb(n, r))

def capture_recapture(c=50, r=40, t=10):
    # 가능한 최소 개체수. 표시된 50마리와 2차에서 새로 잡힌 30마리는
    # 서로 다른 개체이므로 최소 50 + 40 - 10 = 80마리는 있어야 한다.
    min_n = c + r - t
    ns = range(min_n, 10 * min_n)

    # n을 바꿔 가며 가능도를 계산한다.
    # **n은 모수이지 확률변수가 아니다.** 자료 (c, r, t)는 고정해 두고
    # "어떤 n이 이 자료를 가장 그럴듯하게 만드는가"를 묻는 것이다.
    probs = [prob(n, c, r, t) for n in ns]

    mle_idx = probs.index(max(probs))
    mle_n = mle_idx + min_n
    # (1) 에서 유도한 floor(c*r/t) 와 비교해 보라.
    print(f"c={c}, r={r}, t={t}:  격자 최대점 = {mle_n},  floor(c*r/t) = {c * r // t}")
    return list(ns), probs, mle_n

ns, probs, mle_n = capture_recapture()

# 199 와 200 의 가능도는 **정확히 같다.** 분수로 재면 드러난다.
print(f"정확한 L(199) == L(200) ? {exact_prob(199, 50, 40, 10) == exact_prob(200, 50, 40, 10)}")
print(f"부동소수점 L(199) - L(200) = {prob(199, 50, 40, 10) - prob(200, 50, 40, 10):+.3e}")

# t를 11로 바꾸면 c*r/t = 181.8... 이라 나누어떨어지지 않고 최대점이 하나뿐이다.
capture_recapture(c=50, r=40, t=11)

# 봉우리가 얼마나 평평한지 재 본다.
for n in (150, 200, 300, 400):
    print(f"L({n}) / L(200) = {prob(n, 50, 40, 10) / prob(200, 50, 40, 10):.3f}")

fig, ax = plt.subplots(figsize=(12, 3))
ax.plot(ns, probs, label='Likelihood')
ax.axvline(mle_n, color='r', linestyle='--', label=f'MLE: N = {mle_n}')
ax.set_xlabel('Population Size (N)')
ax.set_ylabel('Probability')
ax.set_title('Capture–Recapture: Likelihood vs Population Size')
ax.legend()
plt.show()

출력:

c=50, r=40, t=10:  격자 최대점 = 199,  floor(c*r/t) = 200
정확한 L(199) == L(200) ? True
부동소수점 L(199) - L(200) = +2.665e-15
c=50, r=40, t=11:  격자 최대점 = 181,  floor(c*r/t) = 181
L(150) / L(200) = 0.424
L(200) / L(200) = 1.000
L(300) / L(200) = 0.347
L(400) / L(200) = 0.071

Capture–Recapture: Likelihood vs Population Size

199가 나온 까닭이 드러났다. 분수로 재면 \(L(199)\)와 \(L(200)\)이 한 치도 다르지 않다. 그런데 부동소수점으로는 \(199\) 쪽이 \(2.7 \times 10^{-15}\)만큼 크게 계산되었고, 설령 비트까지 같았더라도 max()와 index()는 앞쪽 값을 고르므로 결과는 역시 199였을 것이다. 이 어긋남은 수치의 오차가 아니라 동점이며, 동점이 생긴다는 사실 자체가 (1)의 유도가 예측한 바다.

\(m\)을 11로 바꾸면 \(Mn/m = 181.82\)라 나누어떨어지지 않고, 격자가 찾은 답 181이 \(\lfloor 181.82 \rfloor = 181\)과 정확히 맞는다. 바닥함수가 제 몫을 하는 경우다.

곡선이 봉우리 주위에서 아주 평평하다는 점도 중요하다. \(N\)을 150으로 줄이거나 300으로 늘려도 가능도가 최댓값의 \(0.42\)배, \(0.35\)배로 남는다. 표시된 물고기 10마리라는 적은 정보로는 개체수를 정밀하게 못 맞힌다는 뜻이고, 실제 생태 조사에서 재포획 수를 늘리려 애쓰는 이유다.

연습문제에서는 이 절차를 직접 밟아 본다. 포획–재포획과 베르누이·정규의 최대가능도를 손으로 유도하고, 불편성과 일치성이 어떻게 다른지, 그리고 불편성을 포기하면 오히려 오차가 줄어드는 경우가 있는지까지 따져 본다.

연습문제

연습문제 1. 포획–재포획. \(M = 50\)마리의 물고기에 표시하여 놓아 주고, 나중에 \(n = 40\)마리를 잡았더니 \(m = 10\)마리가 표시되어 있었다. (a) 초기하 가능도 \(P(m \mid N)\)을 유도하라. (b) MLE \(\hat N\)을 구하라.

풀이

(a) \(P(m \mid N) = \binom{M}{m} \binom{N - M}{n - m} / \binom{N}{n}\)이며 초기하분포이다. 주어진 값을 넣으면 \(P(N) = \binom{50}{10}\binom{N-50}{30}/\binom{N}{40}\).

(b) \(N\)은 정수 모수라 미분할 수 없다. 가능도비 \(L(N)/L(N-1)\)을 따지면 \(N \le Mn/m\)까지 오르다가 내려가므로 \(\hat N = \lfloor Mn/m \rfloor\)이다(보기 3). 여기서는 \(Mn/m = 50 \cdot 40 / 10 = 200\)이 정수라 \(L(199) = L(200)\)인 동점이고, 둘 다 최대가능도추정값이다. 이 추정량은 "(표시된 수) × (잡은 총 수) / (잡힌 표시된 수)"라는 비례 추론에 해당한다.

포획–재포획은 야생동물 개체수 추정의 기본 방법이다. 변형(폐쇄/개방 모집단, 여러 번의 재포획, 표지 손실)을 통해 풍부한 추정량 계열이 만들어진다.

연습문제 2. 베르누이의 MLE. 동전을 100번 던져 앞면이 40번 나왔다. (a) 가능도 \(L(p)\)를 쓰라. (b) \(\hat p_{\text{MLE}}\)를 구하라.

풀이

(a) \(L(p) = \binom{100}{40} p^{40}(1-p)^{60} \propto p^{40}(1-p)^{60}\) (상수 배수는 최대화에 영향을 주지 않는다).

(b) 로그가능도: \(\ell(p) = 40\ln p + 60\ln(1-p)\). 미분하면 \(40/p - 60/(1-p) = 0 \Rightarrow p = 0.4\).

\(\hat p_{\text{MLE}} = 0.4\)로 표본비율과 같다. 일반적으로 \(X \sim \mathrm{Binomial}(n, p)\)에 대해 MLE는 \(\hat p = X/n\)이다.

연습문제 3. 정규분포 모수의 MLE. i.i.d. \(X_1, \ldots, X_n \sim N(\mu, \sigma^2)\)이 주어졌을 때 두 MLE를 모두 구하라.

풀이

로그가능도: \(\ell(\mu, \sigma^2) = -(n/2)\ln(2\pi\sigma^2) - (1/(2\sigma^2))\sum(X_i - \mu)^2\).

\(\partial \ell/\partial \mu = (1/\sigma^2)\sum(X_i - \mu) = 0 \Rightarrow \hat\mu = \bar X\).

\(\partial \ell/\partial \sigma^2 = -n/(2\sigma^2) + (1/(2\sigma^4))\sum(X_i - \hat\mu)^2 = 0 \Rightarrow \hat\sigma^2 = (1/n)\sum(X_i - \bar X)^2\).

참고: MLE는 \(n - 1\)이 아니라 \(n\)으로 나눈다. 따라서 \(\hat\sigma^2_{\text{MLE}}\)는 편향되어 있다: \(\mathbb{E}[\hat\sigma^2] = ((n-1)/n)\sigma^2\). 불편추정을 하려면 \(s^2 = \sum(X_i - \bar X)^2/(n - 1)\)을 사용한다(Bessel 수정).

MLE와 불편추정량의 구별은 반복해서 나타나는 주제이다. MLE는 점근적으로 최적이지만 유한표본에서는 편향될 수 있다.

연습문제 4. 충분통계량. 조건부분포 \(X \mid T\)가 \(\theta\)에 의존하지 않으면 통계량 \(T(X)\)가 \(\theta\)에 대해 충분하다고 한다. Fisher-Neyman 인수분해 정리를 서술하고, 이를 사용하여 \(X_i \sim \mathrm{Poisson}(\lambda)\)일 때 \(\sum X_i\)가 \(\lambda\)에 대해 충분함을 확인하라.

풀이

Fisher-Neyman 인수분해 정리: \(T(X)\)가 \(\theta\)에 대해 충분일 필요충분조건은 결합밀도가 다음과 같이 인수분해되는 것이다.

\[ f(x \mid \theta) = g(T(x), \theta) \cdot h(x) \]

여기서 \(g\)는 \(T(x)\)를 통해서만 \(\theta\)에 의존하고 \(h\)는 \(\theta\)에 의존하지 않는다.

포아송의 경우: \(f(x_1, \ldots, x_n \mid \lambda) = \prod_i \frac{e^{-\lambda} \lambda^{x_i}}{x_i!} = e^{-n\lambda} \lambda^{\sum x_i} / \prod_i x_i!\).

가능도가 \(g(\sum x_i, \lambda) \cdot h(x) = (e^{-n\lambda} \lambda^{\sum x_i}) \cdot (1/\prod x_i!)\)로 인수분해된다. 따라서 \(T(X) = \sum X_i\)는 충분통계량이다.

의의: \(\lambda\)에 관해 \(X_1, \ldots, X_n\)이 담고 있는 정보가 모두 \(\sum X_i\)에 집약되어 있다. MLE는 자료에 오직 \(T\)를 통해서만 의존하며, 추론에 자료 전체가 필요하지 않다. 이것이 Rao-Blackwell 정리를 통한 효율적 추정의 토대이다.

연습문제 5. Fisher 정보량. \(\sigma^2\)이 알려진 \(X \sim N(\mu, \sigma^2)\)에 대해 \(\mu\)에 관한 Fisher 정보량을 계산하라. 이 양이 왜 중요한가?

풀이

점수함수: \(\partial \log f/\partial \mu = (x - \mu)/\sigma^2\).

Fisher 정보량: \(I(\mu) = \mathbb{E}\!\left[(\partial \log f / \partial \mu)^2\right] = \mathbb{E}[(X - \mu)^2/\sigma^4] = \sigma^2/\sigma^4 = 1/\sigma^2\).

크기 \(n\)인 i.i.d. 표본에 대해서는 \(I_n(\mu) = n/\sigma^2\)이다.

왜 중요한가: Cramér-Rao 하한. \(\mu\)의 임의의 불편추정량의 분산은 적어도 \(1/I_n(\mu) = \sigma^2/n\)이다. \(\mathrm{Var}(\bar X) = \sigma^2/n\)이 정확히 성립하므로 \(\bar X\)는 Cramér-Rao 하한을 달성하며 효율적이다. 어떤 불편추정량도 이보다 나을 수 없다.

Fisher 정보량은 모수에 관해 표본이 담은 "정보량"을 정량화하고 추정량 분산의 하한을 준다. MLE의 점근이론, 실험설계, 정보기하학에서 쓰인다.

연습문제 6. MLE의 점근정규성. 일반적인 결과를 서술하라: \(\sqrt n (\hat\theta_{\text{MLE}} - \theta) \xrightarrow{d} N(0, 1/I(\theta))\)이며 \(I(\theta)\)는 관측값 하나당 Fisher 정보량이다. 포아송에 대해 확인하라.

풀이

Poisson(\(\lambda\))에서 \(\hat\lambda_{\text{MLE}} = \bar X\)이다. 관측값 하나당 Fisher 정보량은 \(I(\lambda) = 1/\lambda\)이다(\(\partial \log f/\partial \lambda = X/\lambda - 1\)이고 \(\mathbb{E}[(X/\lambda - 1)^2] = \mathrm{Var}(X)/\lambda^2 = 1/\lambda\)이므로).

점근분포: \(\sqrt n(\bar X - \lambda) \xrightarrow{d} N(0, \lambda)\)이며, 이는 \(1/I(\lambda) = \lambda\)와 일치한다.

중심극한정리로 직접 확인: \(\mathrm{Var}(X_i) = \lambda\)인 \(\bar X = (1/n)\sum X_i\)이므로 중심극한정리에 의해 \(\sqrt n(\bar X - \lambda) \to N(0, \lambda)\). ✓

일반적 의의: MLE는 점근적으로 정규분포를 따르며 그 분산은 관측값 하나당 Fisher 정보량의 역수이다. 이로부터 다음을 얻는다:

  • 점근 신뢰구간: \(\hat\theta \pm 1.96/\sqrt{n I(\hat\theta)}\) (\(I(\theta)\)의 대입추정값으로 \(I(\hat\theta)\)를 사용).
  • 점근 효율성: MLE는 점근적으로 Cramér-Rao 하한을 달성한다.

이 결과들이 현대 통계학에서 가능도 기반 추론이 중심적 위치를 차지하는 이유이다.

연습문제 7. 적률법. 표본에서 \(\bar x = 4.2\), \(s^2 = 8.4\)를 얻었고 자료가 \(\text{Gamma}(\text{형상}=k,\ \text{척도}=\theta)\)에서 나왔다고 하자. 적률법으로 \(k\)와 \(\theta\)를 추정하라. 최대가능도추정과 견주면 어떤 장단점이 있는가?

풀이

감마분포의 적률은 \(E[X] = k\theta\), \(\operatorname{Var}(X) = k\theta^2\)이다. 표본적률과 맞추면

\[ \hat k\hat\theta = 4.2, \qquad \hat k\hat\theta^2 = 8.4 \]

이고, 둘째 식을 첫째 식으로 나누면

\[ \hat\theta = \frac{s^2}{\bar x} = \frac{8.4}{4.2} = 2.0, \qquad \hat k = \frac{\bar x}{\hat\theta} = \frac{4.2}{2.0} = 2.1 \]

이다.

장점. 계산이 한 줄이다. 감마분포의 최대가능도방정식은

\[ \ln\hat k - \psi(\hat k) = \ln\bar x - \overline{\ln x} \]

꼴로 디감마함수가 들어 있어 수치적으로 풀어야 한다. 적률법 추정값은 그 반복의 좋은 출발점이 된다. 또 분포 전체를 가정하지 않고 적률만 맞추므로 모형이 조금 어긋나도 크게 망가지지 않는다.

단점. 일반적으로 최대가능도추정보다 비효율적이다. 자료의 정보를 처음 몇 개의 적률로만 요약하기 때문이다. 고차 적률을 쓰면 표집변동이 커져 더 불안정해지고, 추정값이 모수공간 밖으로 나가는 일도 있다(예: 분산 추정이 음수). 또 충분통계량을 쓰지 않으므로 정보 손실이 생긴다.

실무에서는 적률법을 초기값이나 빠른 점검으로 쓰고 최종 추정은 최대가능도로 하는 조합이 흔하다.

연습문제 8. 정규모집단에서 \(\hat\sigma^2_c = c\sum_i(X_i-\bar X)^2\) 꼴의 추정량을 생각하자. 평균제곱오차를 최소로 하는 \(c\)를 구하고, \(c = 1/(n-1)\)(불편)과 \(c = 1/n\)(최대가능도)과 견주어라.

풀이

\(W = \sum_i(X_i-\bar X)^2\)로 두면 \(W/\sigma^2 \sim \chi^2_{n-1}\)이므로

\[ E[W] = (n-1)\sigma^2, \qquad \operatorname{Var}(W) = 2(n-1)\sigma^4 \]

이다. 따라서

\[ \text{MSE}(c) = \operatorname{Var}(cW) + \{E[cW]-\sigma^2\}^2 = \left[2(n-1)c^2 + \{(n-1)c-1\}^2\right]\sigma^4 \]

이다. \(c\)로 미분해 0으로 두면

\[ 4(n-1)c + 2(n-1)\{(n-1)c-1\} = 0 \implies 2c + (n-1)c = 1 \implies c^* = \frac{1}{n+1} \]

을 얻는다.

세 추정량. MSE를 \(\sigma^4\) 단위로 적으면

\(c\) 이름 편향 MSE
\(1/(n-1)\) 불편 \(0\) \(\dfrac{2}{n-1}\)
\(1/n\) 최대가능도 \(-\sigma^2/n\) \(\dfrac{2n-1}{n^2}\)
\(1/(n+1)\) 최소 MSE \(-2\sigma^2/(n+1)\) \(\dfrac{2}{n+1}\)

\(n=10\)이면 각각 \(0.2222\), \(0.1900\), \(0.1818\)로, 불편추정량이 셋 중 가장 나쁘다.

뜻. 불편성은 좋은 성질이지만 최적성의 기준은 아니다. 편향을 조금 받아들이고 분산을 더 줄이면 전체 오차가 작아질 수 있으며, 이것이 편향-분산 맞바꿈이다. 능형회귀, 라소, 축소추정, 정칙화가 모두 같은 거래를 한다.

그런데도 실무에서 \(n-1\)을 쓰는 이유가 있다. 첫째, 불편성이 여러 표본을 결합할 때 좋은 성질을 준다(분산분석에서 제곱평균들을 더하고 나눌 때 편향이 누적되지 않는다). 둘째, 최소 MSE인 \(c=1/(n+1)\)은 모집단이 정규일 때만 최적이라 일반성이 없다. 셋째, \(n\)이 크면 셋의 차이가 \(O(1/n^2)\)로 사라진다.

연습문제 9. MLE의 불변성. \(\hat\theta\)가 \(\theta\)의 MLE이면 임의의 함수 \(g\)에 대해 \(g(\hat\theta)\)가 \(g(\theta)\)의 MLE임을 설명하라. \(X_i \sim \text{Bernoulli}(p)\)에서 오즈 \(p/(1-p)\)의 MLE를 구하라. 불편성에도 같은 성질이 있는가?

풀이

불변성. \(g\)가 일대일이면 모수를 \(\eta = g(\theta)\)로 바꿔 쓴 가능도가 \(L^*(\eta) = L(g^{-1}(\eta))\)이므로, \(L\)을 최대로 하는 \(\hat\theta\)에서 \(L^*\)가 최대가 되고 그 위치가 \(\hat\eta = g(\hat\theta)\)이다. \(g\)가 일대일이 아니면 유도가능도 \(L^*(\eta) = \sup_{\theta:\,g(\theta)=\eta}L(\theta)\)로 정의하면 같은 결론이 나온다.

오즈의 MLE. \(\hat p = \bar X\)이므로

\[ \widehat{\text{오즈}} = \frac{\bar X}{1-\bar X} \]

이다. 100번 중 40번 성공이면 \(0.4/0.6 = 2/3\)이다. 따로 최적화할 필요가 없다.

불편성에는 없다. \(E[\hat\theta] = \theta\)라 해도 일반적으로 \(E[g(\hat\theta)] \ne g(\theta)\)이다. 옌센 부등식에 따라 \(g\)가 볼록이면 \(E[g(\hat\theta)] \ge g(E[\hat\theta]) = g(\theta)\)로 위로 치우친다.

위 예에서도 \(x/(1-x)\)가 \((0,1)\)에서 볼록이므로 오즈의 MLE는 오즈를 과대추정한다. 게다가 \(\bar X = 1\)이면 값이 무한대가 되어 버린다. 그래서 로그오즈를 다룰 때는 \(\bar X\) 대신 \((k+0.5)/(n+1)\)처럼 살짝 보정한 값(하딘-피터스 보정)을 쓰기도 한다.

이 대비가 두 성질의 성격을 잘 보여 준다. 불변성은 "어떤 모수화로 문제를 적든 답이 같다"는 뜻이고, 불편성은 특정 모수화에 묶여 있다. 표준편차의 불편추정량이 분산의 불편추정량의 제곱근이 아니라는 사실도 같은 이야기다.

연습문제 10. 일치성과 불편성은 다르다. (가) 불편이지만 일치가 아닌 추정량, (나) 편향되었지만 일치인 추정량의 예를 각각 들어라.

풀이

(가) 불편이지만 일치가 아닌 경우. \(X_1,\dots,X_n \sim N(\mu,\sigma^2)\)에서 \(\hat\mu = X_1\)(첫 관측값만 쓴다)을 생각하자. \(E[X_1] = \mu\)로 불편이지만, \(n\)이 아무리 커져도 분포가 \(N(\mu,\sigma^2)\) 그대로라 \(\mu\)로 수렴하지 않는다. 일치가 아니다.

자료를 버리는 극단적인 예지만 요점은 분명하다. 불편성은 표본크기가 커지는 것과 아무 상관이 없는, 한 표본크기에서의 성질이다.

(나) 편향되었지만 일치인 경우. 같은 설정에서 최대가능도 분산추정량

\[ \hat\sigma^2_{\text{MLE}} = \frac1n\sum_i (X_i-\bar X)^2 \]

은 \(E[\hat\sigma^2_{\text{MLE}}] = \frac{n-1}{n}\sigma^2\)로 편향되어 있다. 그러나 편향이 \(-\sigma^2/n \to 0\)이고 분산도 0으로 가므로 \(\hat\sigma^2_{\text{MLE}} \xrightarrow{p} \sigma^2\)이다. 일치추정량이다.

다른 예로 포획-재포획 추정량 \(\hat N = Mn/m\)은 일치이지만 기댓값이 아예 존재하지 않는다. \(P(m = 0) > 0\)이라 \(Mn/m\)이 정의되지 않는 표본이 양의 확률로 나오기 때문이다(\(M = 50\), \(n = 40\), \(N = 200\)에서 \(P(m=0) \approx 2.2 \times 10^{-6}\)). 편향을 따지기 전에 기댓값부터 없는 셈이며, 분모에 \(1\)을 더한 채프먼 추정량 \(\hat N_C = (M+1)(n+1)/(m+1) - 1\)을 쓰는 까닭이 그것이다.

정리. 두 성질은 서로 독립적이다.

  • 불편성: \(E[\hat\theta_n] = \theta\). 고정된 \(n\)에서의 성질이며, "평균적으로 맞다"는 뜻이다.
  • 일치성: \(\hat\theta_n \xrightarrow{p} \theta\). \(n\to\infty\)에서의 성질이며, "자료를 모으면 결국 맞는다"는 뜻이다.

실무에서 더 중요한 쪽은 일치성이다. 일치가 아닌 추정량은 자료를 아무리 모아도 참값에 다가가지 않으므로 쓸 수 없다. 편향은 크기가 작고 \(n\)과 함께 사라지면 대개 감수할 만하며, 연습문제 8에서 보았듯 일부러 편향을 들여 오차를 줄이기도 한다.

충분조건 하나를 기억해 두면 편하다. 편향과 분산이 모두 0으로 가면 일치이다(MSE 수렴이 확률수렴을 함의하므로).


정리하며

표본에서 계산한 값은 고정된 수가 아니다. 표본이 바뀌면 함께 바뀌므로 확률변수이며, 이 사실을 받아들이는 것이 추론통계학으로 들어가는 문이다.

모수와 통계량은 성격이 정반대다. 모수는 고정되어 있으나 볼 수 없고, 통계량은 볼 수 있으나 흔들린다. 추론이란 흔들리는 것으로부터 고정된 것을 말하는 일이고, 그러려면 흔들림의 크기와 모양을 알아야 한다. 그것이 다음 절부터 다룰 표본분포다.

흔들림에도 규칙이 있다. 되풀이해 얻은 값들의 평균이 참값과 같으면 그 추정량을 불편이라 하며, 이는 한 번의 추정이 맞는다는 뜻이 아니라 한쪽으로 치우쳐 빗나가지 않는다는 뜻이다. 탁구공 실험에서 표본중앙값들이 16을 중심으로 흩어진 것이 그 모습이다.

추정량을 만드는 일반적인 방법으로 최대가능도를 보았다. 자료를 고정하고 모수를 움직여, 관측된 자료를 가장 그럴듯하게 만드는 값을 고른다. 정규분포에서는 표본평균이, 베르누이에서는 표본비율이 그렇게 나왔고, 답이 당연하지 않은 포획–재포획에서도 같은 원리가 개체수 추정값을 내놓았다.

앞으로 만날 신뢰구간과 가설검정은 예외 없이 "이 통계량이 어떤 분포를 따르는가"라는 물음에 기대고 있다. 그 물음에 답할 수 있는 통계량이 몇 개나 되는지, 그리고 답이 어떤 가정 위에서만 성립하는지가 5장의 나머지 내용이다.