아래 글을 읽고 베이즈 추론의 핵심 개념을 명확하게 이해하기 위하여 이 문서를 작성합니다. 인용한 글은 인용 구역으로 표시하였습니다.
- How Bayesian inference works - Brandon Rohrer
측정 몸무게, 실제 몸무게, 추정 몸무게
On our last visit, we got three measurements before she became unmanageable: 13.9 lb, 17.5 lb and 14.1 lb. There is a standard statistical interpretation for this. We can calculate the mean, standard deviation and standard error for this set of numbers and create a distribution for Reign’s actual weight.
강아지의 실제 몸무게는 하나의 값을 가지겠지만 그 값의 크기가 얼마인지는 정확하게 알 수 없습니다. 다만 저울과 같은 도구를 사용하여 얻는 측정 몸무게 값들로부터 강아지의 실제 몸무게를 추정할 수 있을 뿐입니다.
- 추정: 수학 통계에서, 어떤 모집단(母集團)으로부터 뽑아낸 표본을 바탕으로 하여 그 모집단의 평균ㆍ분산 따위를 헤아리는 일. - 출처: 네이버 사전
실제 몸무게를 좀 더 정확하게 추정하기 위하여 다음과 같은 방법들을 사용하기도 합니다.
- 여러 번 측정하고 측정값들의 평균을 구한다.
- 여러 번 측정하고 대다수의 값과 너무 크게 차이나는 일부 값들을 버린 후 나머지 측정값들로 평균을 구한다.
- 여러 번 측정하고 기존에 알고 있던 측정값과 가까운 측정값들에게는 높은 가중치를 부여하고 멀리 떨어져 있는 측정값들에게는 낮은 가중치를 부여하여 측정값들의 평균을 구한다.
측정 몸무게의 분포에 대한 전제
이제 이 글을 전개함에 있어서 바탕이 되는 하나의 전제를 아래와 같이 설정합니다.- 강아지의 실제 몸무게가 w_actual일 때 측정 몸무게 값들의 확률분포는 정규분포를 따른다. 정규분포의 평균은 w_actual이고 표준편차는 저울의 성능과 강아지가 측정하는 동안 얼마나 조용히 있느냐에 따라 달라질 수 있다. 이 글에서는 논의를 단순화하기 위하여 표준편차를 항상 1.0으로 고정시킨다.
- 모델: 강아지의 실제 몸무게가 w_actual일 때 측정 몸무게 값들의 확률분포는 정규분포를 따른다.
- 파라미터: 정규분포의 파라미터는 평균과 표준편차이다. 평균은 w_actual이고 표준편차는 저울의 성능과 강아지가 측정하는 동안 얼마나 조용히 있느냐에 따라 달라질 수 있다. 이 글에서는 논의를 단순화하기 위하여 표준편차를 항상 1.0으로 고정시킨다.
측정 몸무게로부터 실제 몸무게 추정
그렇다면 강아지의 실제 몸무게가 어떤 값일 때 세 번 측정하여 다음과 같은 측정 몸무게 값들을 얻을 가능성이 가장 높을까요?- 측정 몸무게: 13.9 lb, 17.5 lb and 14.1 lb
- 13.0 lb
- 14.5 lb
- 16.0 lb
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt
%matplotlib inline
w_measured_arr = sorted([13.9, 17.5, 14.1])
def plot_measured_weight_probability_density(w_actual, s_actual, w_measured_arr):
x = np.arange(10, 20, 0.1)
y = stats.norm.pdf(x, w_actual, s_actual)
p_measured = stats.norm.pdf(w_measured_arr, w_actual, s_actual)
plt.plot(x, y)
plt.plot(w_measured_arr, p_measured, 'o')
plt.vlines(w_measured_arr, 0, 0.40, colors='r')
plt.grid(True)
plt.title(f'actual weight: {w_actual:.1f} lb')
plt.xlabel('measured weight')
plt.ylabel('probability density')
plt.figure(figsize = (15, 4))
# subplot-1
w_actual = 13.0
s_actual = 1.0
plt.subplot(131)
plot_measured_weight_probability_density(w_actual, s_actual, w_measured_arr)
# subplot-2
w_actual = 14.5
plt.subplot(132)
plot_measured_weight_probability_density(w_actual, s_actual, w_measured_arr)
# subplot-3
w_actual = 16.0
plt.subplot(133)
plot_measured_weight_probability_density(w_actual, s_actual, w_measured_arr)
plt.show()

위의 세 그래프 중에서 실제 몸무게가 14.5 lb인 경우 세 개의 측정 몸무게 값을 얻을 가능성이 가장 높아 보입니다. 실제 몸무게가 주어질 때 얻게 되는 측정 몸무게의 분포 곡선이 확률밀도함수라는 점을 이용하여 실제 몸무게일 가능성을 수치로 나타내고 비교할 수 있습니다. 세 측정값에 해당하는 확률밀도를 모두 곱하여 얻는 값을 우도(likelihood)라고 부르고 이 값의 크기를 서로 비교합니다.
def get_likelihood(w_actual, s_actual, w_measured_arr):
p_measured = stats.norm.pdf(w_measured_arr, w_actual, s_actual)
likelihood = np.prod(p_measured)
return likelihood
w_actual_arr = [13.0, 14.5, 16.0]
likelihood_arr = []
for w_actual in w_actual_arr:
likelihood = get_likelihood(w_actual, s_actual, w_measured_arr)
likelihood_arr.append(likelihood)
print(f'actual weight = {w_actual:.1f}, likelihood = {likelihood:.3e}')
plt.plot(w_actual_arr, likelihood_arr, 'o')
plt.xlim(10, 20)
plt.ylim(0, 0.8e-3)
plt.grid(True)
plt.title('Likelihood distribution')
plt.xlabel('actual weight')
plt.ylabel('likelihood')
plt.show()
actual weight = 13.0, likelihood = 9.265e-07
actual weight = 14.5, likelihood = 5.439e-04
actual weight = 16.0, likelihood = 3.738e-04

'수학 > 베이지안 추론' 카테고리의 다른 글
| 베이즈 추론 명확하게 이해하기: 강아지 몸무게 추정 (3/3) (0) | 2025.12.09 |
|---|---|
| 베이즈 추론 명확하게 이해하기: 강아지 몸무게 추정 (2/3) (0) | 2025.12.09 |
| 유방암 양성예측도, 베이지안 추론으로 설명하기 (0) | 2025.10.09 |
| 몬티 홀 문제, 베이지안 추론으로 설명하기 (0) | 2025.10.09 |
| 믿음의 정량화 및 수정 과정 (0) | 2025.10.09 |