주요 개념
- 최대 우도 추정(Maximum Likelihood Estimation)
- 우도 함수(Likelihood Function)
최대 우도(Maximum Likelihood)란 도출된 결과의 각 가설마다 계산된 가능도(우도) 값 중 가장 큰 값을 말한다. 즉 발생할 확률이 가장 큰 가설이라 할 수 있다. 하지만 만약 모수가 알려지지 않은 어떤 \( \theta \)인 확률분포가 있다면 여기서 뽑은 표본들을 이용해 \( \theta \)를 추정할 수 있다. 이를 최대 우도 추정(Maximum Liklihood Estimation, MLE)라고 한다. 우도 또한 정확한 수치가 아닌 추정에 가깝기 때문에 이러한 방식을 적용하기에 적절하다 볼 수 있다.
가장 대표적인 예시인 동전던지기를 예를 들어보자. 만약 10번을 던지고 이때 앞면이 8번 나왔다고 해서 앞면이 나올 확률을 80%라고 보기는 무리가 있다. 하지만 동전을 1000번 던질 때 앞면과 뒷면이 각각 500번씩 나오는 것을 확신할 수 있을까? 그럴 수도 있지만 정확하게 500번씩이라고 장담하기는 힘들다.
참고로 이런 True 또는 False로만 결과가 나오는 실험을 베르누이 시행(Bernoulli Trial)이라고 한다. True, False 뿐만 아니라 모든 이분법적 결론이 도출되는 것을 베르누이 시행으로 볼 수 있다. 새로 태어난 아이가 남자인가, 지각을 하였는가 등도 이에 해당한다.
다시 돌아와 이 동전던지기 실험은 성공확률이 p인 베르누이 시행을 n번 반복했을 때의 앞면 횟수는 이항 분포(Binomial Distribution)를 따른다. 해당 실험에서 어떠한 모수 \( \theta \)는 동전을 한 번 던졌을 때의 확률 p가 된다. 아래는 이항 분포 공식이다.
$$ {n \choose k}p^k(1-p)^{n-k} $$
$$ {n \choose k}={n! \over k!(n-k)!} $$
동전 던지기 예제에서 p=0.5, 총 시행 횟수 n=10, 앞면이 나온 횟수 k=8이라 가정하면 \( {10 \choose 8}(0.5)^8(0.5)^2 = 0.0439 \)이다. 이 경우처럼 True, False 확률이 명확해 보여 p를 0.5로 고정할 수 있었다. 하지만 실생활서 마주할 수 있는 여러 문제들은 p에 대해 정확하게 정의하기 쉽지 않다. 베르누이 시행이라고 해서 무조건 p가 50%가 되지는 않는데, 만약 비가 오거나 오지 않을 수 있지만 일반적으로 비가 올 확률이 50%가 되지는 않기 때문이다. 여기서 p가 바로 모수이다.
즉 p에 의해 확률이 변하게 되는데 우도 함수(Likelihood Function) \( L(\theta) \)를 최대로 만드는 모수 p에 해당하는 \( \theta \)값에 대한 추정치를 \( \theta' \)이라 하고 이 \( \theta' \)을 최대 우도 추정치라고 부른다. 우도함수가 최대가 되는 모수를 찾기 위해 \( \theta \)에 대한 편미분을 수행하고 0이 되는 지점을 구하면 된다. 미분이 불가능한 경우 경사 하강법 등의 방식을 통해 점진적으로 모수를 추정할 수 있다.
$$ ∂L(\theta)/∂\theta = 0 $$
아래는 이항분포 그래프이다.
계속해서 이항분포를 이용해서 우도 함수를 보면 식은 아래와 같다.
$$ L(p) = p^k(1-p)^{n-k} $$
이항 분포의 우도 함수는 확률 질량 함수(probability mass function, pmf)와 유사하다. 다만 확률 질량 함수는 고정된 모수에 대한 시행 횟수와 성공 횟수 입력하여 확률을 얻을 수 있고, 우도(가능도) 함수는 고정된 시행 횟수와 성공 횟수에 대해 모수를 입력하여 가능도를 얻은 것이다.
$$ PMF(n, k) = 확률 $$
$$ L(n, k) = 우도(가능도) $$
확률 질량 함수는 이산 확률 변수에서 특정 값에 대한 확률을 나타내는 함수인데 예를 들어 주사위를 한 번 굴릴 때 값을 나타내는 확률 변수 X가 있을 때 이 확률 변수에 대응하는 확률 질량 함수는 1/6이 된다는 것이다.
반대 개념으로는 확률 밀도 함수(probability density function, pdf)가 있다. 구간에 대해 어떠한 확률 변수 X가 포함될 확률을 의미한다.
다시 돌아와 n이 10, k가 8일 때 우도 함수의 p를 0.1~0.9까지 바꿔가며 대입하면 아래와 같은 결과가 나온다.
import matplotlib.pyplot as plt
import numpy as np
from scipy.special import comb
k = 8 # 성공 횟수
n = 10 # 시행 횟수
def pmf(n, k, p):
return comb(n, k)*(p**k)*((1-p)**(n-k))
def likelihood(n, k, p):
return p**k*((1-p)**(n-k))
# result = [pmf(n, k, p/10) for p in np.arange(0.1, 1, 0.1)]
result = [likelihood(n, k, p) for p in np.arange(0.1, 1, 0.1)]
sum = 0
print("n="+str(n)+', k='+str(k))
for i, val in enumerate(result):
sum += val
print(str((i+1)/10)+' : '+str(val))
print("sum : ", sum)
plt.bar(range(1, 10), result)
plt.title("n="+str(n)+', k='+str(k))
plt.xlabel("x/10")
plt.show()
# n=10, k=8
# 0.1 : 8.100000000000005e-09
# 0.2 : 1.6384000000000011e-06
# 0.3 : 3.2148900000000034e-05
# 0.4 : 0.0002359296000000001
# 0.5 : 0.0009765625
# 0.6 : 0.0026873855999999994
# 0.7 : 0.005188320900000001
# 0.8 : 0.0067108864
# 0.9 : 0.004304672099999999
# sum : 0.020137552500000003
우도 함수는 확률을 나타내는 것이 아니므로 모든 결과의 합이 1이 되지는 않는다.
이 수치에 대한 해석은 p=0.8일 때가 가장 이 데이터를 잘 설명한다는 의미로 해석할 수 있다. 만약 k가 5가 된다면 p가 0.5일 때의 가능도가 가장 높을 것이다.
말장난 같아보이는 방식이지만 이는 회귀 분석이 가지고 있는 문제점과 한계에 대응하기 위한 방법인 동시에 이 복잡하고 귀찮은 계산이 컴퓨터가 빠르게 해결할 수 있기에 유용한 방법이 된다. 또한 확률 분포의 종류가 정해지면 계산 방식은 모두 동일하다는 장점도 있다. 표준오차의 추정 역시 이와 같이 계산되고 표현될 수도 있다.
즉, 최대 우도 추정은 특정한 분포에 대한 설명이 아닌 일반적인 이러한 방식을 사용하는 분석 방법의 수단 중 하나이다.
관련 포스트
소스 코드