추정량의 성질
먼저 읽을 장 11.5 기댓값·부등식·극한정리
논문의 표에 "감쇠비 0.112"라고 적혀 있다고 하자. 이 숫자는 실험을 다시 하면 또 나올까. 0.11과 0.12 중 어느 쪽이 참값에 더 가까울까. 이 숫자를 만든 계산 규칙은 참값을 체계적으로 과소평가하지는 않을까. 이 질문에 답하려면 숫자 하나가 아니라 그 숫자를 만든 규칙, 즉 추정량을 평가해야 한다.
이 장은 추정량을 평가하는 네 가지 기준인 편향·분산·일관성·효율성을 다룬다. 이 기준은 이후 모든 장의 바탕이 된다. 최대우도 추정이 왜 좋은지(12.2장), 신뢰구간의 폭이 어디서 오는지(12.4장), 모델 비교에서 표준편차와 표준오차가 왜 다른지(12.5장)가 모두 여기서 출발한다.
학습 목표
- 모집단·표본·추정량을 구분한다
- 편향·분산·일관성·효율성을 평가한다
기본 개념
통계적 추론은 "보이지 않는 전체"에 대해 "보이는 일부"로 말하는 일이다. 이 둘을 섞어 쓰면 결론이 무엇에 대한 것인지 흐려진다. 먼저 여섯 용어를 구분한다.
| 용어 | 정의 | 진동자 예 |
|---|---|---|
| 모집단(population) | 관심 있는 값 전체의 분포. 대개 무한하거나 접근할 수 없다 | 이 장비로 이 진동자를 측정할 때 나올 수 있는 모든 고유진동수 측정값의 분포 |
| 모수(parameter) | 모집단의 고정된 미지량 | 측정값 분포의 평균 , 표준편차 |
| 표본(sample) | 모집단에서 뽑은 확률변수들. 이 장에서는 독립이고 같은 분포(i.i.d.)를 따른다고 가정한다 | 25번의 측정 |
| 통계량(statistic) | 표본만으로 계산되는 함수. 미지의 모수가 들어가면 안 된다 | , 표본 표준편차 , 중앙값 |
| 추정량(estimator) | 모수를 추정하려고 쓰는 통계량 | 를 추정하는 |
| 추정값(estimate) | 실제 표본을 추정량에 넣어 얻은 숫자 | 1.963 Hz |
가장 중요한 구분은 추정량과 추정값이다. 추정량은 표본이라는 확률변수의 함수이므로 그 자체가 확률변수이고, 분포를 가진다. 이 분포를 표본분포(sampling distribution)라 한다. 추정값은 그 분포에서 한 번 뽑힌 숫자다. 이 장에서 다루는 bias·분산·일관성·효율성은 모두 표본분포의 성질이다. 숫자 하나인 추정값에는 bias도 분산도 없다.
표본분포는 "같은 실험을 무한히 반복하면 추정값이 어떻게 흩어지는가"를 뜻한다. 현실에서는 실험을 한 번만 하지만, 시뮬레이션에서는 모집단을 정해 두고 반복할 수 있다. 평균 2.0 Hz, 표준편차 0.5 Hz인 정규분포를 모집단으로 두고, 25번 측정하는 실험을 10,000번 반복한다.
import numpy as np
rng = np.random.default_rng(0)
mu_hz, sigma_hz, n = 2.0, 0.5, 25 # 모집단: 고유진동수 측정값의 분포
x = rng.normal(mu_hz, sigma_hz, size=n) # 실제로 손에 쥔 표본 하나, (n,)
print(f"이 표본의 추정값 x̄ = {x.mean():.3f} Hz, 추정 표준오차 s/√n = {x.std(ddof=1) / np.sqrt(n):.3f} Hz")
reps = rng.normal(mu_hz, sigma_hz, size=(10000, n)) # 같은 실험을 10,000번 반복, (R, n)
xbar = reps.mean(axis=1) # 추정량의 표본분포, (R,)
print(f"반복 실험의 x̄ 평균 {xbar.mean():.3f} Hz, 표준편차 {xbar.std():.3f} Hz")
print(f"이론값 평균 {mu_hz:.3f} Hz, σ/√n {sigma_hz / np.sqrt(n):.3f} Hz")이 표본의 추정값 x̄ = 1.963 Hz, 추정 표준오차 s/√n = 0.087 Hz 반복 실험의 x̄ 평균 2.000 Hz, 표준편차 0.100 Hz 이론값 평균 2.000 Hz, σ/√n 0.100 Hz
첫 줄이 현실의 상황이다. 표본은 하나뿐이고, 추정값 1.963 Hz와 그 불확실성의 추정 0.087 Hz만 손에 있다. 아래 두 줄은 시뮬레이션만 볼 수 있는 표본분포다. 추정량 의 표준편차는 이론값 Hz와 맞는다. 이처럼 추정량의 표준편차를 표준오차(standard error, SE)라 한다. 11.5장의 기댓값 성질로 바로 유도된다.
두 번째 등호에 표본의 독립성이 쓰였다. 현실에서는 를 모르므로 표본 표준편차 로 바꾼 을 쓰고, 이것이 첫 줄의 0.087 Hz다. 표준편차 는 측정값 하나의 퍼짐(모집단의 성질)이고, 표준오차는 추정량의 퍼짐이다. 을 늘리면 표준오차는 0으로 가지만 는 로 간다.
편향과 분산
추정량이 "좋다"는 말은 표본분포가 참값 근처에 좁게 모여 있다는 뜻이다. 이를 두 방향으로 나눠 잰다.
bias는 표본분포의 중심이 참값에서 얼마나 벗어났는가, 분산은 표본분포가 얼마나 퍼졌는가다. bias가 0인 추정량을 불편 추정량(unbiased estimator)이라 한다. 과녁에 비유하면 bias는 탄착군의 중심이 과녁 중심에서 벗어난 정도, 분산은 탄착군의 크기다.
두 성질을 하나로 합친 기준이 평균제곱오차(mean squared error, MSE)다.
유도는 로 나눠 제곱을 전개하면 된다. 교차항 는 기댓값이 0이므로 사라진다. 이 분해가 말하는 것은, bias를 조금 허용하는 대신 분산을 크게 줄이면 MSE가 줄 수 있다는 것이다. 이것이 bias–variance trade-off이고, 정규화(12.2장의 MAP, 16.2장)와 베이지안 수축(13.3장)이 모두 이 원리를 쓴다.
분산 추정량. 대표적인 예가 분산의 추정이다. 편차 제곱합 을 무엇으로 나눌지에 따라 세 후보가 있다.
이므로 로 나눈 이 불편이다. 가 표본에 가장 가깝게 맞춰진 중심이라 편차가 참 평균에서 잰 것보다 체계적으로 작고, 그만큼을 나누는 수에서 보정하는 것이다. 으로 나눈 은 12.2장에서 보게 될 정규분포의 최대우도 추정량이고, bias는 이다. 정규분포에서 로 세 추정량을 비교한다.
sigma2, n = 1.0, 5
X = rng.normal(0.0, np.sqrt(sigma2), size=(200000, n)) # (R, n)
ss = ((X - X.mean(axis=1, keepdims=True)) ** 2).sum(axis=1) # 편차 제곱합, (R,)
print("나누는 수 bias variance MSE bias²+variance")
for d in (n - 1, n, n + 1):
est = ss / d
bias, var = est.mean() - sigma2, est.var()
mse = np.mean((est - sigma2) ** 2)
print(f"n{d - n:+d} = {d} {bias:+.4f} {var:.4f} {mse:.4f} {bias**2 + var:.4f}")나누는 수 bias variance MSE bias²+variance n-1 = 4 -0.0002 0.5031 0.5031 0.5031 n+0 = 5 -0.2002 0.3220 0.3620 0.3620 n+1 = 6 -0.3335 0.2236 0.3348 0.3348
세 줄 모두 마지막 두 열이 같아 MSE 분해가 성립한다. 정규분포의 이론값(bias , MSE )과도 맞는다. 불편 추정량 의 MSE가 가장 크고, 가장 크게 편향된 쪽이 가장 작다. 나누는 수를 늘리면 bias가 커지는 대신 분산이 그보다 더 빨리 줄기 때문이다.
그렇다면 늘 로 나누면 될까. 그렇지 않다. MSE를 최소로 만드는 나누는 수는 분포의 꼬리 두께에 따라 달라진다(실습에서 확인한다). 그리고 MSE가 유일한 기준도 아니다. 여러 실험실의 추정값을 평균할 때는 분산은 줄어도 bias는 줄지 않으므로 불편 추정량이 낫다. 어떤 추정량이 "좋은지"는 평가 기준을 정해야 답할 수 있다.
점근적 성질
표본 크기가 커질 때 추정량이 어떻게 행동하는지는 작은 에서의 bias보다 더 기본적인 요구다. 데이터를 아무리 모아도 참값에 다가가지 않는 추정량은 쓸 이유가 없다.
일관성(consistency). 일 때 추정량이 참값으로 확률수렴하면, 즉 모든 에 대해
이면 일관 추정량이라 한다. 충분조건 하나는 , 즉 bias와 분산이 모두 0으로 가는 것이다(Chebyshev 부등식, 11.5장). 의 일관성은 대수의 법칙 그 자체다.
불편성과 일관성은 서로 다른 성질이다. 두 극단적인 예로 확인한다.
- 표본 개 중 첫 관측값 만 쓰는 추정량: 이므로 불편이지만, 분산이 과 무관하게 이므로 일관성이 없다.
- 으로 나눈 분산 : bias 으로 편향이지만, bias와 분산이 모두 0으로 가므로 일관성이 있다.
print(" n X₁의 sd x̄의 sd σ̂²(÷n)의 bias σ̂²(÷n)의 sd")
for n in (10, 100, 1000):
X = rng.normal(0.0, 1.0, size=(5000, n)) # 참값: 평균 0, 분산 1, (R, n)
v = X.var(axis=1) # 나누는 수 n (np.var 기본값)
print(f"{n:5d} {X[:, 0].std():.3f} {X.mean(axis=1).std():.3f} {v.mean() - 1:+.4f} {v.std():.4f}")n X₁의 sd x̄의 sd σ̂²(÷n)의 bias σ̂²(÷n)의 sd 10 0.998 0.315 -0.0958 0.4295 100 1.000 0.102 -0.0120 0.1411 1000 1.012 0.032 -0.0016 0.0450
의 퍼짐은 이 100배가 되어도 1 근처에 머문다. 의 퍼짐은 비율로 줄고(0.315 → 0.102 → 0.032), 은 bias와 퍼짐이 함께 0으로 간다.
점근 정규성(asymptotic normality). 많은 추정량은 일관성에 더해, 이 클 때 표본분포가 정규분포에 가까워진다.
여기서 는 분포수렴, 는 점근 분산이다. 에 대해서는 중심극한정리(11.5장)가 바로 이 명제이고 이다. 점근 정규성은 실용적으로 중요하다. 추정량의 분포를 평균과 표준오차 두 숫자로 요약할 수 있게 해 주고, "추정값 ± 1.96 × 표준오차"라는 근사 95% 신뢰구간(12.4장)의 근거가 된다. 다만 "이 크면"이 얼마나 커야 하는지는 분포와 추정량에 따라 다르다. 꼬리가 두꺼운 분포에서는 수백 개로도 부족할 수 있다.
효율성
같은 모수를 추정하는 일관 추정량이 여러 개라면 어느 쪽을 쓸까. 정규분포의 중심 는 평균으로도 중앙값으로도 추정할 수 있고, 둘 다 불편이고 일관적이다(분포가 대칭이므로). 차이는 분산에 있다. 같은 데이터에서 분산이 작은 추정량이 정보를 더 잘 쓰는 것이다. 이를 효율성(efficiency)이라 한다.
그렇다면 분산을 끝없이 줄일 수 있을까. 데이터가 담은 정보의 양에 따라 하한이 정해진다. 모형 에서 관측 하나가 에 대해 담은 정보의 양을 Fisher 정보(Fisher information)로 잰다.
두 번째 등호는 미분과 적분의 순서를 바꿀 수 있는 정칙 조건(regularity condition) 아래에서 성립한다. 를 score라 한다. 직관적으로 Fisher 정보는 로그 확률이 에 대해 얼마나 뾰족하게 휘는가다. 를 조금만 바꿔도 데이터의 확률이 크게 달라지면 데이터로 를 잘 가려낼 수 있고, 정보가 크다. 이 로그 확률을 의 함수로 본 것이 12.2장의 로그우도다.
독립 관측 개의 정보는 이고, 정칙 조건 아래에서 모든 불편 추정량은 다음 Cramér–Rao 하한(Cramér–Rao lower bound, CRLB)을 넘지 못한다.
하한을 달성하는 불편 추정량을 효율적(efficient)이라 하고, 두 추정량의 분산의 비를 상대 효율이라 한다. 몇 가지 예를 계산해 둔다.
| 모형 | 관측 하나의 | CRLB | 하한을 달성하는 추정량 |
|---|---|---|---|
| 정규 , 알려짐 | |||
| Poisson() | |||
| Laplace(위치 , 척도 ), 알려짐 | 중앙값(점근적으로) |
정규분포와 Laplace 분포에서 평균과 중앙값의 분산을 CRLB와 비교한다. 두 분포 모두 CRLB가 이 되도록 맞췄으므로, 가 1에 가까울수록 효율적이다.
n, R = 100, 20000
samples = {
"정규 N(0,1)": rng.normal(0.0, 1.0, size=(R, n)), # CRLB = 1/n
"Laplace(0,1)": rng.laplace(0.0, 1.0, size=(R, n)), # CRLB = b²/n = 1/n
}
print("분포 n·Var(평균) n·Var(중앙값) n·CRLB")
for name, X in samples.items():
print(f"{name:14s} {n * X.mean(axis=1).var():.3f} {n * np.median(X, axis=1).var():.3f} 1.000")분포 n·Var(평균) n·Var(중앙값) n·CRLB 정규 N(0,1) 1.000 1.533 1.000 Laplace(0,1) 1.994 1.155 1.000
정규분포에서는 평균이 하한을 달성하고, 중앙값은 분산이 약 1.5배다. 점근적으로 이 비는 로, 정규 데이터에서 중앙값으로 평균과 같은 정밀도를 얻으려면 표본이 약 57% 더 필요하다. Laplace 분포에서는 순위가 뒤집힌다. 평균의 분산은 분포의 분산 을 따라 하한의 두 배이고, 중앙값이 하한에 훨씬 가깝다(에서 1.155, 에서 1). 어떤 추정량이 효율적인지는 모형이 정한다.
이 결과는 연구에서 두 가지로 쓰인다. 첫째, CRLB는 실험 설계의 한계를 알려 준다. 어떤 측정 방식의 Fisher 정보를 계산하면, 아무리 좋은 분석법을 써도 넘을 수 없는 정밀도를 실험 전에 알 수 있다. 25.3장의 실험 설계는 Fisher 정보를 크게 만드는 측정 조건을 고르는 문제로 쓸 수 있다. 둘째, 효율성은 모형 가정에 의존한다. 정규 잡음을 가정한 평균(제곱손실)은 그 가정이 맞으면 최선이지만, 이상치가 섞이거나 꼬리가 두꺼우면 중앙값(절댓값손실) 같은 robust 추정량이 더 정밀하다. 12.3장에서 다룰 "손실이 대표값을 고른다"는 선택이 여기서는 정밀도의 문제로 나타난다.
실습
분산의 세 추정량(, , 로 나누기)을 분포와 표본 크기를 바꿔 가며 비교한다. 코드는 labs/statistical-inference/estimators/variance_estimators.py다. 세 분포는 모두 분산이 1이 되도록 맞췄고, 꼬리가 얇은 균등분포, 정규분포, 꼬리가 두꺼운 Laplace 분포 순서다. 마지막 열은 MSE를 가장 작게 만드는 나누는 수 의 시뮬레이션 값이다(의 MSE를 로 미분해 0으로 두면 얻는다). 집필 시점의 실행 결과는 다음과 같다(시드 0, 반복 200,000번).
분포 n 나누는 수 bias variance MSE | MSE 최소 나누는 수 d* 균등 5 4 +0.0007 0.2599 0.2599 | 5.04 균등 5 5 -0.1994 0.1663 0.2061 | 균등 5 6 -0.3329 0.1155 0.2263 | 균등 20 19 -0.0005 0.0451 0.0451 | 19.85 균등 20 20 -0.0505 0.0407 0.0433 | 균등 20 21 -0.0957 0.0369 0.0461 | 정규 5 4 -0.0015 0.5002 0.5002 | 6.00 정규 5 5 -0.2012 0.3202 0.3606 | 정규 5 6 -0.3344 0.2223 0.3341 | 정규 20 19 -0.0021 0.1053 0.1053 | 20.97 정규 20 20 -0.0520 0.0951 0.0978 | 정규 20 21 -0.0972 0.0862 0.0957 | Laplace 5 4 +0.0024 1.1095 1.1096 | 8.44 Laplace 5 5 -0.1981 0.7101 0.7493 | Laplace 5 6 -0.3317 0.4931 0.6032 | Laplace 20 19 +0.0002 0.2560 0.2560 | 23.87 Laplace 20 20 -0.0498 0.2310 0.2335 | Laplace 20 21 -0.0950 0.2096 0.2186 |
결과를 읽는 법은 세 가지다.
- bias는 분포와 상관없다. 세 분포 모두 bias가 약 이다. 은 분포의 모양을 쓰지 않고 유도되기 때문이다.
- 분산과 MSE 순위는 분포에 따라 달라진다. 꼬리가 얇은 균등분포에서는 이, 정규분포에서는 이 MSE를 가장 작게 만든다(, ). 꼬리가 두꺼운 Laplace에서는 가 보다도 훨씬 크다(에서 8.44). 꼬리가 두꺼울수록 가 크게 튀므로 더 강하게 줄여야 한다.
- 이 커지면 차이가 줄어든다. 세 추정량은 모두 일관적이므로, 에서 MSE 차이는 보다 훨씬 작다. 어떤 추정량을 고르느냐는 작은 표본에서 가장 중요하다.
이어서 연습문제를 푼다. 임의의 추정량과 모집단에 대해 bias·분산·MSE를 시뮬레이션으로 재는 함수를 만든다.
실패 사례
- 불편 추정량이 항상 더 좋다고 생각하는 것. 불편성은 표본분포의 중심에 대한 성질일 뿐이고 퍼짐은 말하지 않는다. 정규분포의 분산 추정에서 불편 추정량은 MSE가 가장 컸다. 정규화된 회귀(ridge)나 베이지안 수축 추정량은 일부러 편향을 넣어 MSE를 줄인다. 반대로, 여러 연구의 추정값을 평균할 때처럼 평균해도 bias가 남는 상황에서는 불편성이 중요하다. 기준을 먼저 정한다.
- 추정값 하나에 bias나 분산이 있다고 말하는 것. "이 결과는 편향되었다"는 말은 결과를 만든 절차(추정량)에 대한 주장이어야 한다. 숫자 하나로는 bias를 판단할 수 없고, 반복 실험이나 시뮬레이션, 또는 이론으로 판단한다.
- 표준편차와 표준오차를 섞어 쓰는 것. 측정값의 퍼짐()과 추정량의 퍼짐()은 배 다르다. 어느 것을 보고하는지 밝히지 않으면 독자는 결과의 정밀도를 판단할 수 없다(12.5장).
- 독립이 아닌 표본에 을 쓰는 것. 같은 셀의 반복 측정, 시계열의 인접 시점, 같은 환자의 여러 영상은 독립 표본이 아니다. 관측 수를 에 넣으면 표준오차를 과소평가한다.
- 효율성을 모형과 떼어 말하는 것. "평균이 중앙값보다 정밀하다"는 정규 잡음에서만 맞다. 꼬리가 두꺼운 잡음에서는 반대다.
통과 기준
- 주어진 추정량(예: )의 bias와 분산을 수식으로 유도하고, 시뮬레이션 결과가 그 값과 맞음을 보인다.
- 실습 결과에서 MSE를 최소로 만드는 나누는 수가 분포에 따라 왜 달라지는지 bias와 분산으로 설명한다.
- 연습문제(
bias-variance-mse)의 테스트를 통과한다.