Kepercayaan awal

Analisis Data Bayesian dengan Python

Michal Oleszak

Machine Learning Engineer

Distribusi prior

  • Distribusi prior merefleksikan pengetahuan kita tentang parameter sebelum melihat data:
    • tidak tahu apa-apa → distribusi uniform (semua nilai sama mungkin)
    • posterior lama → dapat diperbarui dengan data baru

 

  • Kita bisa memilih distribusi probabilitas apa pun sebagai prior untuk memasukkan info eksternal ke model:
    • pendapat ahli
    • pengetahuan umum
    • riset sebelumnya
    • keyakinan subjektif
Analisis Data Bayesian dengan Python

Dampak prior

Dua plot kerapatan saling ditumpuk, satu untuk prior, satu untuk posterior. Prior uniform, posterior berbentuk lonceng, sedikit lebih tinggi.

Dua plot kerapatan saling ditumpuk, satu untuk prior, satu untuk posterior. Prior uniform, posterior berbentuk lonceng, sedikit lebih tinggi dan miring ke kanan.

Dua plot kerapatan saling ditumpuk, satu untuk prior, satu untuk posterior. Prior uniform, posterior berbentuk lonceng, jauh lebih tinggi.

Dua plot kerapatan saling ditumpuk, satu untuk prior, satu untuk posterior. Prior uniform, posterior berbentuk lonceng, jauh lebih tinggi sekali.

Analisis Data Bayesian dengan Python

Distribusi prior

  • Distribusi prior dipilih sebelum melihat data.
  • Pilihan prior dapat memengaruhi hasil posterior (terutama saat data sedikit).
  • Untuk menghindari cherry-picking, pilihan prior harus:
    • dinyatakan jelas,
    • dapat dijelaskan: berbasis riset sebelumnya, asumsi masuk akal, pendapat ahli, dll.
Analisis Data Bayesian dengan Python

Memilih prior yang tepat

Kepercayaan awal: peluang kepala lebih kecil

Plot kerapatan berbentuk lonceng, miring ke kiri, puncak sekitar 0,25.

Beberapa pilihan lebih baik dari yang lain!

 

Plot kerapatan berbentuk lonceng, miring ke kiri, puncak sekitar 0,25, sedikit lebih sempit dari plot sebelumnya.

Analisis Data Bayesian dengan Python

Conjugate priors

  • Beberapa prior, dikalikan dengan likelihood tertentu, menghasilkan posterior yang sudah dikenal.
  • Ini disebut conjugate priors.
  • Untuk pelemparan koin:
    • jika kita memilih prior Beta(a, b),
    • maka posteriornya Beta(#heads + a, #tosses - #heads + b)
  • Kita dapat sampling dari posterior dengan numpy.
  • get_heads_prob() dari Bab 1:
    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)
    
Analisis Data Bayesian dengan Python

Dua cara mendapatkan posterior

Simulasi

  • Jika posterior diketahui, kita bisa sampling dengan numpy:
    draws = np.random.beta(2, 4, 1000)
    
  • Hasil: array berisi 1000 sampel posterior:
    array([0.05941031, ..., 0.70015975])
    
  • Dapat dipetakan dengan
    sns.kdeplot(draws)
    

Perhitungan

  • Jika posterior tidak diketahui, kita dapat menghitungnya dengan pendekatan grid.
  • Hasil: probabilitas posterior untuk tiap elemen grid:
           head_prob  posterior_prob
    0           0.00        0.009901
    1           0.01        0.003624
               ...           ...
    10199       0.99        0.003624
    10200       1.00        0.009901
    
  • Dapat dipetakan dengan
    sns.lineplot(df["head_prob"], df["posterior_prob"])
    
Analisis Data Bayesian dengan Python

Ayo berlatih!

Analisis Data Bayesian dengan Python

Preparing Video For Download...