데이터 분석에서 모수(Parameter) 추정은 모집단의 특성을 파악하고, 예측과 의사결정에 활용하기 위한 핵심 과정이다. 본 글에서는 기본 개념부터 대표적인 추정 방법, 실제 데이터 분석에서의 적용까지 단계별로 설명한다.
즉, 대부분의 모수는 직접 알 수 없으므로, 표본 통계량을 통해 추정한다.
import numpy as np
data = np.array([5.1, 4.9, 5.0, 5.2, 5.1, 5.0])
mu_hat = np.mean(data) # 모평균 추정
sigma2_hat = np.var(data) # 모분산 추정 (MLE 기준)
sigma_hat = np.std(data) # 모표준편차 추정
print(mu_hat, sigma2_hat, sigma_hat)
아이디어: 관측된 데이터가 나올 확률(우도, Likelihood)이 가장 커지도록 모수 값을 선택
과정
우도 함수 정의
로그우도로 변환
로그우도 최대화 → 모수 추정값 θ^
예시: 정규분포 N(μ, σ²)
동전 던지기 예제
- 동전이 앞면이 나올 확률 θ를 추정한다고 하자. 10번 던져 7번 앞면이 나왔다면,
우도 함수는 :
로그우도를 최대화하면 θ^MLE = 0.7
데이터 탐색
평균, 분산, 표준편차, 히스토그램 등을 확인
분포 가정
데이터가 따를 확률분포(정규, 베르누이, 포아송 등) 선택
모수 추정 방법 선택
추정치 계산
Python, R 등으로 계산
신뢰구간 계산
모수 추정의 불확실성을 표현
import numpy as np
from scipy.stats import norm
# 데이터: 정규분포 샘플
data = np.array([5.1, 4.9, 5.0, 5.2, 5.1, 5.0])
# MLE: 평균과 분산 추정
mu_mle = np.mean(data)
sigma_mle = np.std(data)
print("MLE:", mu_mle, sigma_mle)
# MAP: 사전분포가 N(5, 0.1^2)일 경우
prior_mu = 5
prior_sigma = 0.1
sigma_likelihood = sigma_mle / np.sqrt(len(data))
# MAP 추정 (정규-정규 Conjugate)
mu_map = (mu_mle/sigma_likelihood**2 + prior_mu/prior_sigma**2) / (1/sigma_likelihood**2 + 1/prior_sigma**2)
print("MAP:", mu_map)