마르코프 몬테카를로와 모델 피팅

Python으로 배우는 Bayesian 데이터 분석

Michal Oleszak

Machine Learning Engineer

프로덕션에서의 베이즈 데이터 분석

  • 격자 근사: 매개변수가 많으면 비효율적
  • 알려진 사후분포에서의 샘플링: 공액 사전분포 필요
  • 마르코프 체인 몬테카를로(MCMC): 미지의 사후분포에서 샘플링!
Python으로 배우는 Bayesian 데이터 분석

몬테카를로

  • 난수를 생성해 어떤 값을 근사합니다
  • 공식으로부터, $\pi r^2 \simeq 78.5$

반지름 5인 원.

Python으로 배우는 Bayesian 데이터 분석

몬테카를로

  • 난수를 생성해 어떤 값을 근사합니다
  • 공식으로부터, $\pi r^2 \simeq 78.5$
  • 원을 둘러싸는 10x10 정사각형을 그립니다.

반지름 5인 원과 그 위에 정의된 정사각형.

Python으로 배우는 Bayesian 데이터 분석

몬테카를로

  • 난수를 생성해 어떤 값을 근사합니다
  • 공식으로부터, $\pi r^2 \simeq 78.5$
  • 원을 둘러싸는 10x10 정사각형을 그립니다.
  • 정사각형 안에서 임의의 점 25개를 샘플링합니다.
  • 원 안의 점은 몇 개인가요? $19/25=76\%$
  • 원의 면적 근사: 76% * 100 = 76

반지름 5인 원, 정사각형, 그리고 정사각형 안의 무작위 25개 점.

Python으로 배우는 Bayesian 데이터 분석

마르코프 체인

  • 상태의 연쇄를 모델링하며, 주어진 확률로 상태 전이가 일어납니다.
Python으로 배우는 Bayesian 데이터 분석

마르코프 체인

  • 상태의 연쇄를 모델링하며, 주어진 확률로 상태 전이가 일어납니다.

곰은 다음에 무엇을 할까요:

hunt eat sleep
hunt 0.1 0.8 0.1
eat 0.05 0.4 0.55
sleep 0.8 0.15 0.05
  • 시간이 충분히 지나면, 시작 상태와 무관하게 전이 확률이 같아집니다.
Python으로 배우는 Bayesian 데이터 분석

마르코프 체인

  • 상태의 연쇄를 모델링하며, 주어진 확률로 상태 전이가 일어납니다.

곰은 다음에 무엇을 할까요:

hunt eat sleep
hunt 0.1 0.8 0.1
eat 0.05 0.4 0.55
sleep 0.8 0.15 0.05
  • 시간이 충분히 지나면, 시작 상태와 무관하게 전이 확률이 같아집니다.

먼 미래에 곰은 무엇을 할까요:

hunt eat sleep
hunt 0.28 0.44 0.28
eat 0.28 0.44 0.28
sleep 0.28 0.44 0.28
Python으로 배우는 Bayesian 데이터 분석

마르코프 체인 몬테카를로

번호가 매겨진 축 위에 빨간 점 하나.

Python으로 배우는 Bayesian 데이터 분석

마르코프 체인 몬테카를로

번호가 매겨진 축 위에 점 두 개, 빨간색과 검은색.

Python으로 배우는 Bayesian 데이터 분석

마르코프 체인 몬테카를로

번호가 매겨진 축 위에 점 두 개, 빨간색과 초록색.

Python으로 배우는 Bayesian 데이터 분석

마르코프 체인 몬테카를로

번호가 매겨진 축 위에 점 세 개, 빨간색 하나, 초록색 하나, 검은색 하나.

Python으로 배우는 Bayesian 데이터 분석

마르코프 체인 몬테카를로

번호가 매겨진 축 위에 점 두 개, 빨간색 두 개와 초록색 하나.

Python으로 배우는 Bayesian 데이터 분석

마르코프 체인 몬테카를로

번호가 매겨진 축 위에 점 네 개, 빨간색 두 개와 초록색 두 개.

Python으로 배우는 Bayesian 데이터 분석

마르코프 체인 몬테카를로

번호가 매겨진 축 위에 점 일곱 개, 빨간색 두 개와 초록색 다섯 개.

Python으로 배우는 Bayesian 데이터 분석

마르코프 체인 몬테카를로

번호가 매겨진 축 위에 많은 점, 일부는 빨간색, 대부분은 초록색.

Python으로 배우는 Bayesian 데이터 분석

집계된 광고 데이터

print(ads_aggregated)
           date  clothes_banners_shown  sneakers_banners_shown  num_clicks
0    2019-01-01                     20                      18           2
1    2019-01-02                     24                      19           8
2    2019-01-03                     20                      20           5
..          ...                    ...                     ...         ...
148  2019-05-29                     24                      25           8
149  2019-05-30                     26                      27          11
150  2019-05-31                     26                      24           8

[151 rows x 4 columns]
Python으로 배우는 Bayesian 데이터 분석

pyMC3로 선형 회귀

formula = "num_clicks ~ clothes_banners_shown + sneakers_banners_shown"


with pm.Model() as model: pm.GLM.from_formula(formula, data=ads_aggregated)
# Print model specification print(model)
# Sample posterior draws trace = pm.sample(draws=1000, tune=500)

pymc3 출력: 모델 파라미터의 사전분포 목록.

Python으로 배우는 Bayesian 데이터 분석

MCMC를 연습해 봅시다!

Python으로 배우는 Bayesian 데이터 분석

Preparing Video For Download...