사전 믿음

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

Michal Oleszak

Machine Learning Engineer

사전분포

  • 사전분포는 데이터를 보기 전 모수에 대한 지식을 반영합니다:
    • 정보 없음 → 균등분포(모든 값이 동일 확률)
    • 이전 사후 → 새 데이터로 갱신 가능

 

  • 외부 정보를 포함하려면 임의의 확률분포를 사전으로 선택할 수 있습니다:
    • 전문가 의견
    • 상식/관행
    • 선행 연구
    • 주관적 믿음
Python으로 배우는 Bayesian 데이터 분석

사전의 영향

사전분포와 사후분포 두 밀도 그래프가 겹쳐 있음. 사전은 균등, 사후는 약간 더 높은 종 모양.

사전분포와 사후분포 두 밀도 그래프가 겹쳐 있음. 사전은 균등, 사후는 약간 더 높고 오른쪽으로 치우친 종 모양.

사전분포와 사후분포 두 밀도 그래프가 겹쳐 있음. 사전은 균등, 사후는 훨씬 더 높은 종 모양.

사전분포와 사후분포 두 밀도 그래프가 겹쳐 있음. 사전은 균등, 사후는 매우 높은 종 모양.

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

사전분포

  • 사전분포는 데이터를 보기 전에 정합니다.
  • 사전 선택은 사후에 영향을 줄 수 있습니다(데이터가 적을수록 큼).
  • 선택의 자의성을 줄이려면 사전 선택은:
    • 명확히 공개하고,
    • 설명 가능해야 합니다: 선행 연구, 합리적 가정, 전문가 의견 등 기반.
Python으로 배우는 Bayesian 데이터 분석

적절한 사전 선택

우리의 사전 믿음: 앞면이 덜 나옴

종 모양이지만 왼쪽으로 기운 밀도 그래프. 약 0.25에서 최고점.

어떤 선택은 더 적합합니다!

 

종 모양이지만 왼쪽으로 기운 밀도 그래프. 약 0.25에서 최고점이며 이전보다 약간 좁음.

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

켤레 사전

  • 특정 가능도와 곱하면, 일부 사전은 알려진 사후를 만듭니다.
  • 이를 켤레 사전이라 합니다.
  • 동전 던지기에서는:
    • 사전을 Beta(a, b)로 두면,
    • 사후는 Beta(#heads + a, #tosses - #heads + b)입니다.
  • 사후는 numpy로 샘플링할 수 있습니다.
  • 1장의 get_heads_prob() 함수:
    def get_heads_prob(tosses):
      num_heads = np.sum(tosses)
      # prior: Beta(1,1)
      return np.random.beta(num_heads + 1, len(tosses) - num_heads + 1, 1000)
    
Python으로 배우는 Bayesian 데이터 분석

사후를 구하는 두 가지 방법

시뮬레이션

  • 사후가 알려져 있으면 numpy로 샘플링합니다:
    draws = np.random.beta(2, 4, 1000)
    
  • 결과: 사후에서 1000개 추출한 배열:
    array([0.05941031, ..., 0.70015975])
    
  • 다음으로 시각화:
    sns.kdeplot(draws)
    

계산

  • 사후가 알려지지 않았으면 그리드 근사로 계산합니다.
  • 결과: 각 그리드의 사후 확률:
           head_prob  posterior_prob
    0           0.00        0.009901
    1           0.01        0.003624
               ...           ...
    10199       0.99        0.003624
    10200       1.00        0.009901
    
  • 다음으로 시각화:
    sns.lineplot(df["head_prob"], df["posterior_prob"])
    
Python으로 배우는 Bayesian 데이터 분석

사전으로 연습해 봅시다!

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

Preparing Video For Download...