
점추정(Point Estimation): 데이터에서 모수를 추정하는 첫 번째 원리
- 6큰 수의 법칙과 중심극한정리: 통계학이 작동하는 이유
- 7정보이론으로 보는 DL 손실함수: 엔트로피, KL 발산, 교차 엔트로피
- 8점추정(Point Estimation): 데이터에서 모수를 추정하는 첫 번째 원리읽는 중
- 9최대우도추정(MLE)과 적률법(MoM): 추정량을 체계적으로 찾는 두 가지 방법
- 10신뢰구간(Confidence Interval): 추정의 불확실성을 수량화하는 방법
“이 동전의 앞면 확률은 정확히 얼마인가?”, “고객의 평균 체류 시간은 얼마인가?”, “이 약의 효과 크기는 얼마인가?” 확률분포를 안다고 이런 질문에 답할 수 있는 건 아니다. 모집단의 진짜 값(모수)을 모르는 상태에서, 표본 데이터만으로 그 값을 추측해야 한다. 여기서 통계적 추론(Statistical Inference)이 시작된다.
그 첫 번째 질문은 이것이다. 모수를 하나의 숫자로 추정한다면, 어떤 값이 가장 좋은가?
모수란 무엇인가?
통계적 모형의 구조
통계적 추론의 첫 단계는 데이터가 어떤 확률 모형에서 생성되었는지 가정하는 데서 시작한다. 어떤 공장에서 생산되는 볼트의 길이를 측정한다고 하자. 측정값 이 정규분포 를 따른다고 가정하면, 여기서 와 가 바로 모수(Parameter)다.
모수(Parameter, ) 는 확률분포의 형태를 결정하는 미지의 상수다. 이 값은 모집단의 특성을 완전히 규정하지만, 우리는 그 참값을 직접 알 수 없다.
| 분포 | 모수 | 의미 |
|---|---|---|
| 성공 확률 | ||
| 평균, 분산 | ||
| 단위 시간당 평균 발생 횟수 | ||
| 발생률 (또는 = 평균 대기시간) |
모수 공간
모수가 취할 수 있는 모든 값의 집합을 모수 공간(Parameter Space, ) 이라 한다. 는 , 는 , 는 다. 모수 공간을 명시하는 이유는 추정값이 이 공간 안에 있어야 의미가 있기 때문이다. 확률을 추정했는데 1.3이 나온다면 뭔가 잘못되었다고 볼 수 있다.
추정량과 추정값: 함수 vs 숫자
점추정에서 가장 중요한 구분이 하나 있다.
추정량(Estimator) : 데이터를 입력으로 받아 모수의 추정값을 출력하는 함수(규칙). 데이터를 넣기 전의 “레시피”이다.
추정값(Estimate) : 실제 관측된 데이터를 추정량에 넣어 계산한 구체적인 숫자.
이 구분이 중요한 이유는 추정량이 확률변수이고 추정값은 상수이기 때문이다. 추정량의 성질(편향, 분산 등)을 논할 수 있는 것은, 그것이 아직 데이터가 주어지기 전의 확률변수라는 점에서 비롯된다.
import numpy as np
np.random.seed(42)
true_mu = 5.0 # 실제로는 모르는 값
# 추정량은 하나지만, 표본이 달라지면 추정값이 달라진다
for i in (1, 2):
sample = np.random.normal(true_mu, 2, size=10)
print(f"표본 {i}의 추정값: {np.mean(sample):.4f}")
# 표본 1의 추정값: 5.8961
# 표본 2의 추정값: 3.4187이 “표본마다 달라지는 정도”가 곧 추정량의 분산이고, 추정량의 품질을 따지는 출발점이 된다.
대표적 점추정량: 표본 평균과 표본 분산
표본 평균
모집단 평균 를 추정하는 가장 자연스러운 추정량이다.
큰 수의 법칙이 이 직관을 수학적으로 보장한다. 이 커지면 는 에 수렴한다.
표본 분산: 왜 n이 아니라 n-1로 나누는가?
모집단 분산 의 추정량으로 두 가지 후보가 있다.
으로 나누는 것이 자연스러워 보이지만, 통계학에서는 로 나누는 를 표준으로 쓴다. 핵심은 자유도(Degrees of Freedom)에 있다. 개의 편차 는 서로 독립이 아니다. 이들의 합이 항상 0이기 때문이다.
개의 편차 중 개만 자유롭게 변할 수 있고 마지막 하나는 나머지에 의해 결정된다. 자유롭게 변하는 정보의 개수가 이므로 로 나누는 것이 맞다. 이것을 베셀 보정(Bessel’s Correction)이라 한다. 수학적으로 확인하면 다음과 같다.
으로 나누면 평균적으로 보다 작은 값이 나온다. 즉 모분산을 과소추정하는 경향이 있고, 로 나누면 이 편향이 정확히 사라진다.
import numpy as np
np.random.seed(42)
true_var = 4.0 # σ² = 4
n, n_simulations = 10, 100_000
biased_estimates, unbiased_estimates = [], []
for _ in range(n_simulations):
sample = np.random.normal(0, np.sqrt(true_var), size=n)
biased_estimates.append(np.var(sample, ddof=0)) # n으로 나눔
unbiased_estimates.append(np.var(sample, ddof=1)) # n-1로 나눔
print(f"σ² = {true_var}")
print(f"E[S̃²] (n으로 나눔): {np.mean(biased_estimates):.4f}")
print(f"E[S²] (n-1로 나눔): {np.mean(unbiased_estimates):.4f}")
# σ² = 4.0
# E[S̃²] (n으로 나눔): 3.6008
# E[S²] (n-1로 나눔): 4.0009으로 나눈 의 평균은 3.60으로 참값 4보다 체계적으로 작다. 로 나눈 는 거의 정확히 4에 수렴한다.
주의
Python에서 np.var()와 np.std()의 기본값은 ddof=0(n으로 나눔)이므로, 통계적 추정 목적이라면 반드시 ddof=1을 지정해야 한다. 반면 pandas의 .var()와 .std()는 기본값이 ddof=1이다.
한 가지 더 주의할 것이 있다. 이 에 비편향이라고 해서 이 에 비편향인 것은 아니다. 제곱근은 오목 함수이므로 젠슨 부등식에 의해 가 되고, 표본 표준편차는 평균적으로 모표준편차를 밑돈다. 개별 표본의 가 늘 보다 작다는 뜻이 아니라 편향의 방향이 한쪽이라는 뜻이다. 비편향성은 비선형 변환을 통과하지 못한다.
좋은 추정량의 조건
같은 모수를 추정하는 방법은 여러 가지다. 모집단 평균 를 추정하려면 표본 평균을 쓸 수도, 중앙값을 쓸 수도, 최솟값과 최댓값의 평균을 쓸 수도 있다. 어떤 추정량이 더 좋은지 판단할 기준이 필요하다.
비편향성 (Unbiasedness)
추정량 가 비편향(Unbiased)이라 함은 다음을 뜻한다.
무수히 많은 표본에 대해 반복하면 그 평균이 참값과 정확히 일치한다는 뜻이다. 한 번의 추정이 정확할 필요는 없지만 평균적으로는 맞춘다. 편향(Bias)은 이 기대값과 참값의 차이다.
앞서 확인했듯이 표본 평균 는 이므로 비편향이고, 으로 나눈 는 이므로 편향()이 있으며, 로 나눈 는 비편향이다.
일치성 (Consistency)
추정량 이 일치추정량(Consistent Estimator)이라 함은 다음을 뜻한다.
데이터가 많아질수록 추정량이 참값에 수렴한다는 것이다. 큰 수의 법칙이 바로 표본 평균의 일치성을 보장한다.
비편향성과 일치성은 서로 다른 개념이며, 어느 쪽도 다른 쪽을 함의하지 않는다.
- 비편향이지만 비일치: (첫 관측값만 사용)이 그 예다. 이므로 비편향이지만, 을 아무리 키워도 분산이 로 그대로 남아 참값에 수렴하지 않는다.
- 편향이지만 일치: 가 그 예다. 편향이 이므로 이면 편향이 0으로 사라진다.
실전에서는 일치성이 비편향성보다 중요한 경우가 많다. 데이터가 충분하면 결국 정답에 도달한다는 보장이 있기 때문이다.
50개의 시뮬레이션 궤적(반투명)이 모두 0으로 수렴한다. 빨간 선은 이론적 기대 오차 σ√(2/π)/√n.
에서 표본 평균의 평균 절대 오차는 에서 1.07이던 것이 에서 0.024까지 떨어진다. 이론적으로 평균 오차는 에 비례하므로, 을 4배로 늘리면 오차가 절반으로 줄어든다.
효율성 (Efficiency)
두 추정량이 모두 비편향일 때 분산이 작은 쪽이 더 효율적이다.
정규분포 에서 를 추정하는 경우를 보자.
| 추정량 | 비편향? | 분산 (점근) |
|---|---|---|
| 표본 평균 | ✓ | |
| 표본 중앙값 | ✓ |
두 추정량 모두 비편향이지만 표본 평균의 분산이 더 작다. 이 클 때 표본 평균은 중앙값보다 약 57% 더 효율적이다. 단, 이건 정규분포일 때의 이야기이고 이상치가 많은 분포에서는 중앙값이 더 안정적(robust)일 수 있다.
크래머-라오 하한 (Cramér-Rao Lower Bound)
비편향 추정량의 분산에는 이론적 최솟값이 존재한다. 이것이 크래머-라오 하한(CRLB)이다.
여기서 는 피셔 정보량(Fisher Information)으로, 하나의 관측값이 모수에 대해 담고 있는 정보의 양을 측정한다.
이 하한에 정확히 도달하는 추정량을 효율적 추정량(Efficient Estimator) 또는 최적 비편향 추정량이라 한다. 정규분포에서 는 에 대한 효율적 추정량이다.
MSE: 편향과 분산을 하나로
비편향성만으로는 부족하다
분산이 매우 큰 비편향 추정량보다, 약간의 편향이 있더라도 분산이 작은 추정량이 실전에서 더 쓸모 있을 수 있다. 이 트레이드오프를 하나의 지표로 요약한 것이 평균제곱오차(Mean Squared Error, MSE)다.
편향-분산 분해 (Bias-Variance Decomposition)
증명은 간단하다. 를 로 분해하면 다음과 같다.
전개하면 교차항의 기댓값이 0이 되므로 ():
이 분해가 전달하는 메시지는 명확하다. 비편향 추정량은 Bias가 0이므로 분산만 줄이면 되고, 편향 추정량은 편향을 조금 키워서 분산을 크게 줄일 수 있다면 전체 MSE가 작아진다.
과녁 비유
과녁 중심(◎)이 참값 θ, 점들이 개별 추정값, 다이아몬드(◆)가 추정값의 평균이다.
왼쪽 아래(편향 높음 + 분산 낮음)의 경우가 흥미롭다. 점들이 과녁 중심에서 벗어나 있지만 모여 있다. MSE 관점에서 이것이 오른쪽 위(비편향 + 분산 높음)보다 나을 수 있다.
시뮬레이션: 편향된 추정량이 더 나을 수 있다
으로 나눈 표본분산(편향)과 로 나눈 표본분산(비편향)의 MSE를 비교해 보자. 표본 크기를 로 작게 잡았는데, 편향의 영향이 작은 표본에서 가장 뚜렷하게 드러나기 때문이다.
import numpy as np
np.random.seed(42)
true_var, n, n_sims = 4.0, 5, 100_000
biased, unbiased = np.empty(n_sims), np.empty(n_sims)
for i in range(n_sims):
sample = np.random.normal(0, np.sqrt(true_var), size=n)
biased[i] = np.var(sample, ddof=0) # n으로 나눔
unbiased[i] = np.var(sample, ddof=1) # n-1로 나눔
for name, est in [("n으로 나눔", biased), ("n-1로 나눔", unbiased)]:
bias = est.mean() - true_var
print(f"{name:>10}: E={est.mean():.4f} Bias²={bias**2:.4f} "
f" Var={est.var():.4f} MSE={np.mean((est - true_var)**2):.4f}")
# n으로 나눔: E=3.2062 Bias²=0.6301 Var=5.1593 MSE=5.7895
# n-1로 나눔: E=4.0077 Bias²=0.0001 Var=8.0614 MSE=8.0615편향된 추정량(으로 나눔)의 MSE가 비편향 추정량보다 오히려 작다. 편향(Bias² ≈ 0.63)이 있지만 분산이 훨씬 작아서(5.16 vs 8.06) 전체 MSE에서 이긴다. 이 커지면 편향이 0에 수렴하면서 두 추정량의 MSE가 비슷해진다. 비편향이 항상 좋은 것은 아니다.
이 분해가 ML에서 규제(Regularization)의 수학적 근거이기도 하다. Ridge 회귀에서 가중치에 페널티를 부과하면 추정량에 편향이 생기지만 분산이 크게 줄어들어, 결과적으로 테스트 오차가 감소한다.
충분 통계량: 정보 손실 없는 요약
통계량(Statistic)은 표본만으로 계산되는 함수다. 모수를 몰라도 값을 얻을 수 있어야 하므로 표본 평균은 통계량이지만 는 아니다. 개의 데이터를 하나의 숫자로 압축하면 당연히 정보가 손실될 수 있다. 그런데 모수 추정에 필요한 정보는 하나도 잃지 않으면서 데이터를 요약하는 통계량이 존재한다. 이것이 충분 통계량(Sufficient Statistic)이다. 동전을 100번 던져 앞면이 62번 나왔다면, 던진 순서(HHTHT…)의 세부 정보는 추정에 아무 정보도 더해 주지 않는다.
통계량 가 모수 에 대해 충분하다 함은, 가 주어졌을 때 데이터 의 조건부 분포가 에 의존하지 않는다는 것이다.
충분 통계량을 찾는 실용적인 도구가 Fisher-Neyman 분해 정리(Factorization Theorem)다.
가 에 대해 충분할 필요충분조건은, 결합 확률(밀도)함수가 다음과 같이 분해되는 것이다.
여기서 는 데이터에 를 통해서만 의존하고, 는 와 무관하다.
에 적용해 보자.
로 놓으면 , 로 분해된다. 따라서 성공 횟수 가 에 대한 충분 통계량이다. 100개의 0/1 데이터를 숫자 하나로 압축했지만 모수 추정에 필요한 정보는 하나도 잃지 않은 셈이다.
핵심 요약
- 모수(Parameter): 확률분포를 결정하는 미지의 상수. 직접 관측할 수 없고, 데이터로 추정해야 한다.
- 추정량 vs 추정값: 추정량은 함수(확률변수), 추정값은 구체적인 숫자. 추정량의 성질(편향, 분산)을 따질 수 있다.
- 비편향성: . 평균적으로 참값을 맞추지만, 한 번의 추정이 정확하다는 보장은 아니다.
- 일치성: 이면 추정량이 참값에 수렴. 비편향성과 서로를 함의하지 않는다.
- MSE = Bias² + Var: 편향을 약간 허용해서 분산을 크게 줄이면 전체 오차가 감소할 수 있다.
- 베셀 보정: 표본 분산에서 로 나누는 이유. 자유도가 이기 때문이다. 단, 는 에 비편향이 아니다.
- 충분 통계량: 모수 추정에 필요한 모든 정보를 담고 있는 데이터 요약. Fisher-Neyman 분해 정리로 찾을 수 있다.
마치며
점추정은 “데이터를 하나의 숫자로 요약해서 모수를 추측한다”는 단순한 아이디어에서 출발한다. 하지만 그 안에 비편향성, 일치성, 효율성, MSE라는 정교한 평가 체계가 들어 있다. 특히 MSE의 편향-분산 분해는 통계학의 도구를 넘어 머신러닝 전반의 사고 틀이 된다.
표본 평균이나 표본 분산은 직관적으로 자연스러운 추정량이었다. 임의의 확률분포에서 체계적으로 최적의 추정량을 찾으려면 별도의 방법론이 필요하다.
함께 보면 좋은 글
참고자료
- Wasserman, L. (2004). All of Statistics, Chapter 6: Models, Statistical Inference, and Learning.
- Casella, G. & Berger, R. (2002). Statistical Inference (2nd ed.), Chapter 7: Point Estimation.
- MIT 18.650: Statistics for Applications
- Harvard Stat 110: Probability Course