Loading [MathJax]/jax/output/CommonHTML/jax.js
본문 바로가기

통계/베이지안

베이지안 추론 예시

0. INTRO

이전 글 : 베이지안 추론이 뭔데?

1. 베이지안 추론 예시 (With 파이썬)

이번에는 베이지안 추론 과정을 파이썬 코드로 확인해보고자 한다. (파이썬 코드는 출처에 기재된 사이트를 참고했다.)

예제 : 아이돌일까, 농부일까?

태태라는 사람이 있다.

그는 세계 미남 1위이다.

그는 춤추고 노래부르는 걸 좋아하며 사람들의 관심을 즐길 줄 아는 사교성을 가지고 있다. 여러분은 태태가 아이돌이라고 생각하는가 아니면 농부라고 생각하는가?

위 설명을 고려해본다면 태태는 아이돌일 가능성이 더 커보이고 대다수의 사람들이 이에 동의할 것이다. 하지만 여기에 직업적인 배경 분포를 가정해보자. 가령, 남자아이돌과 남자 농부의 비율이 1:24이라고 한다면 태태는 통계적으로 농부일 가능성이 더 크다!

이와 같은 오류를 해결하기 위해서 베이지안 추론을 적용해보도록 하자. 계산의 편의성을 위해 이 세상에 아이돌과 농부라는 두 가지 직업만 존재한다고 가정하자. 그리고 농부가 아이돌보다 24배 많다. 이제부터 앞서 배운 사전확률, 사후확률을 파악하고 계산해보도록 하자.

태태가 아이돌일 사건을 A라고 하자. 태태에 대한 정보가 없다면 P(A)=1/25=0.04이 사전확률이 된다. 이제 태태의 친구로부터 그에 대한 정보를 얻었다고 가정하자. 이를 X라고 부를 것이다. 여기서 우리가 알고 싶은 확률은 태태의 정보를 안다는 가정에서 태태가 아이돌일 확률인 P(A|X) 이다. 이를 계산하기 위해, 베이지안 정리를 잠시 떠올려보도록 하자. P(A|X)=P(X|A)P(A)P(X)

  • P(X|A)는 태태가 아이돌일 경우, 그의 친구가 앞서 설명한 바와 같이 그를 서술할 가능성이다. 아마 거의 1에 가까울 것이다. 여기서 우리는 90%라고 하자
  • P(X)는 누군가가 그의 친구가 그를 설명한대로 진술할 가능성이다. 바로 계산하기 어려우므로 다음과 같은 논리를 구성해서 구해보자. P(X) = P(X and A) + P(X and A) = P(X|A)P(A) + PX|A)P(A) 여기서 P(A)는 태태가 아이돌이 아닐 확률, 즉 농부일 확률을 가리키므로 P(A) = 1 - 0.04 = 0.96이다. 또한, $ P(X|A) X $의 확률이다. 이를 20%라고 하자. P(X) = 0.9×0.04+0.2×0.96 = 0.228

모두 합치면 다음과 같다. P(A|X)=0.91/250.228=0.158

절대적인 수치로는 아이돌보다 농부일 확률이 높게 나온다. 하지만 여기서 우리가 주목해야 할 점은 태태의 정보를 고려하여 사후확률을 계산하였을 때, 사전확률과 확연한 차이를 보인다는 것이다. 이게 바로 베이지안 추론에서의 믿음의 업데이트 과정이라고 할 수 있겠다!

%matplotlib lib inline
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
matplotlib.rc('font', family='Malgun Gothic') # plot에 한글을 출력하기 위해서 필요하다

colors = ['#348ABD', "#A60628"]
prior = [1/25., 24/25.]  # 사전확률 : [P(A), P(~A)] 
posterior = [0.158, 1-0.158]  # 사후확률 : [P(A|X), P(~A|X)]
plt.bar([0, .7], prior, alpha=0.7, width=0.25,
        color=colors[0], label="사전확률", 
        lw="3", edgecolor='#348ABD')

plt.bar([0+0.25, .7+0.25], posterior, alpha=0.7, 
        width=0.25, color=colors[1], label='사후확률', 
        lw="3", edgecolor='#A60628')

plt.xticks([0.12, 0.82], ['아이돌', '농부'])
plt.title('태태의 직업에 대한 사전확률과 사후확률')
plt.ylabel('확률')
plt.legend(loc='upper left')

출처 :

『프로그래머를 위한 베이지안 with 파이썬』 (캐머런 데이비슨 필론 지음, 곽승주 옮김, 길벗, 2017)

https://github.com/ExcelsiorCJH/Bayesian-with-Python

'통계 > 베이지안' 카테고리의 다른 글

베이지안 추론이 뭔데?  (0) 2020.01.07