Pemutakhiran Bayesian

Revisi keyakinan berurutan dari data yang masuk, lewat simulasi.

Daftar isi

Keyakinan yang telah diperbarui sekali biasanya belum berhenti di situ, karena data sering datang bertahap. Topik ini membahas pemutakhiran Bayesian berurutan, yaitu posterior dari satu kelompok data dipakai sebagai prior bagi kelompok berikutnya. Contohnya mengikuti lima hari latihan soal seorang siswa, dan bagian akhir membuktikan bahwa pemutakhiran bertahap menghasilkan posterior yang sama dengan memproses seluruh data sekaligus.

Posterior menjadi prior berikutnya#

Pemutakhiran Bayesian tidak membedakan keyakinan lama dan keyakinan baru. Prior hari ini hanyalah posterior dari data kemarin, sedangkan data hari ini masuk melalui likelihood miliknya sendiri. Rumus Teorema Bayes yang sama diterapkan berulang kali, sehingga siklusnya berjalan seperti pada diagram berikut.

Priorkeyakinan awal×Likelihoodbawaan data baruPosteriorkeyakinan terbaruposterior menjadi prior bagi data berikutnya
Siklus pemutakhiran Bayesian dari prior dan likelihood menuju posterior yang kembali menjadi prior

Kotak ketiga pada diagram tidak menjadi akhir proses. Posterior melengkung kembali ke posisi prior, lalu menunggu kelompok data berikutnya, dan siklus ini dapat berjalan berulang kali tanpa mengubah rumusnya. Perkalian likelihood antarhari mengasumsikan hasil tiap hari saling bebas apabila θ\theta diketahui, asumsi yang wajar untuk soal latihan pada hari yang berbeda.

Pada keluarga konjugat Beta-Binomial, siklus tersebut memiliki bentuk singkat yang mudah diingat. Prior Beta(a,b)\mathrm{Beta}(a, b) yang bertemu data berupa yy jawaban benar dari nn soal berubah menjadi posterior Beta(a+y, b+n−y)\mathrm{Beta}(a + y,\ b + n - y), sebagaimana ditunjukkan rumus berikut.

Beta(a,b)⟶Beta(a+y, b+n−y) \mathrm{Beta}(a, b) \longrightarrow \mathrm{Beta}(a + y,\ b + n - y)

Parameter aa menjumlah seluruh jawaban benar yang pernah teramati, sedangkan bb menjumlah seluruh jawaban salah. Metode kisi pada topik ini sengaja tetap dipakai agar langkah perkalian dan normalisasinya terlihat, kemudian bentuk analitik di atas dipakai sebagai pembandingnya.

Rangkaian lima hari memberi gambaran nyata tentang cara parameter itu bergerak. Setiap jawaban benar menaikkan parameter aa dan setiap jawaban salah menaikkan parameter bb, sehingga rerata posterior a/(a+b)a/(a+b) bergeser mengikuti skor harian. Jumlah a+ba+b yang membesar dari 2 menjadi 52 adalah penanda bertambahnya informasi, dan kurva yang makin sempit adalah wujud visual penanda tersebut.

Pemutakhiran hari demi hari#

Contoh berjalan memakai catatan lima hari latihan, masing-masing sepuluh soal. Hari pertama menghasilkan 8 jawaban benar, hari kedua 9, hari ketiga 7, hari keempat 9, dan hari kelima 10. Program berikut memproses data satu hari pada satu waktu, mencetak rerata posterior setelah setiap hari, lalu menggambar seluruh evolusi kurvanya.

python pemutakhiran-harian.py
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt

# Data latihan lima hari, masing-masing sepuluh soal: pasangan (benar, total soal)
batch = [(8, 10), (9, 10), (7, 10), (9, 10), (10, 10)]

# Grid theta yang sama dipakai sepanjang pemutakhiran
theta = np.linspace(0.0, 1.0, 1000)
prior = np.ones_like(theta)  # prior uniform sebelum hari pertama

# Simpan setiap kurva untuk gambar evolusinya
kurva = [prior]
for hari, (y, n) in enumerate(batch, start=1):
    likelihood = stats.binom.pmf(y, n, theta)
    posterior = prior * likelihood
    posterior /= np.trapezoid(posterior, theta)
    rerata = np.trapezoid(theta * posterior, theta)
    print(f"Hari {hari}: benar {y} dari {n}, rerata posterior = {rerata:.4f}")
    kurva.append(posterior)
    prior = posterior  # posterior hari ini menjadi prior hari berikutnya

# Gambar evolusi: prior awal berwarna abu-abu, posterior harian makin tua warnanya
fig, ax = plt.subplots(figsize=(7, 4), constrained_layout=True)
ax.plot(theta, kurva[0], color="#999999", linewidth=2, label="Prior awal")
warna = plt.cm.Blues(np.linspace(0.35, 0.95, len(batch)))
for hari in range(1, len(kurva)):
    ax.plot(theta, kurva[hari], color=warna[hari - 1], linewidth=2, label=f"Hari {hari}")
ax.set_xlabel("Nilai theta (proporsi benar)")
ax.set_ylabel("Densitas")
ax.set_title("Evolusi posterior lima hari latihan")
ax.legend()
fig.savefig("evolusi-posterior.png", dpi=110)
text Keluaran
Hari 1: benar 8 dari 10, rerata posterior = 0.7500
Hari 2: benar 9 dari 10, rerata posterior = 0.8182
Hari 3: benar 7 dari 10, rerata posterior = 0.7812
Hari 4: benar 9 dari 10, rerata posterior = 0.8095
Hari 5: benar 10 dari 10, rerata posterior = 0.8462

Evolusi posterior lima hari, dari prior awal yang datar hingga kurva biru tua yang sempit di sekitar 0.85
Evolusi posterior lima hari, dari prior awal yang datar hingga kurva biru tua yang sempit di sekitar 0.85

Rerata posterior bergerak mengikuti data dan bukan hanya menuruni tangga naik. Nilainya naik menjadi 0.8182 setelah hari kedua, kemudian turun ke 0.7812 ketika hari ketiga hanya mencatat 7 jawaban benar, lalu kembali naik sepanjang dua hari terakhir. Perilaku dua arah inilah yang membedakan pemutakhiran dari sekadar penghitungan rata-rata berjalan.

Bentuk kurva pada gambar memberi informasi kedua. Kurva hari pertama masih lebar karena hanya bertumpu pada sepuluh soal, sedangkan kurva hari kelima menyempit jauh di sekitar 0.85 setelah lima puluh soal diakumulasi. Penyempitan itu menyatakan penyusutan ketidakpastian, sesuatu yang tidak terbaca dari rerata semata.

Setiap rerata harian juga dapat diverifikasi dengan bentuk analitiknya. Setelah hari pertama, posterior berparameter 9 dan 3 sehingga reratanya 9/12=0.75009/12 = 0.7500, dan setelah hari kelima berparameter 44 dan 8 sehingga reratanya 44/52=0.846244/52 = 0.8462. Kesesuaian angka kisi dengan perhitungan pecahan semacam ini menjadi pemeriksaan cepat sebelum gambar dibaca lebih lanjut.

Berurutan sama dengan sekaligus#

Perkalian pada penyebut rumus Bayes bersifat asosiatif, sehingga mengalikan prior dengan likelihood hari pertama, kedua, dan seterusnya memberikan hasil yang sama dengan mengalikan seluruh likelihood sekaligus. Konsekuensinya, posterior akhir tidak bergantung pada cara kelompok data dibagi, dan urutan kedatangannya pun tidak mengubah kurva akhirnya. Sifat semacam ini patut dibuktikan langsung agar statusnya bukan sekadar klaim.

python verifikasi-berurutan.py
import numpy as np
from scipy import stats

# Data gabungan lima hari: 8 + 9 + 7 + 9 + 10 = 43 benar dari 50 soal
y_total, n_total = 43, 50
theta = np.linspace(0.0, 1.0, 1000)

# Pemutakhiran berurutan, posterior setiap hari menjadi prior hari berikutnya
prior = np.ones_like(theta)
for y, n in [(8, 10), (9, 10), (7, 10), (9, 10), (10, 10)]:
    posterior = prior * stats.binom.pmf(y, n, theta)
    posterior /= np.trapezoid(posterior, theta)
    prior = posterior
berurutan = posterior

# Pemutakhiran sekaligus atas seluruh data dari prior uniform yang sama
sekaligus = stats.binom.pmf(y_total, n_total, theta)
sekaligus /= np.trapezoid(sekaligus, theta)

# Verifikasi analitik: posterior akhir adalah Beta(1 + 43, 1 + 50 - 43) = Beta(44, 8)
analitik = stats.beta.pdf(theta, 1 + y_total, 1 + n_total - y_total)

print(f"Selisih maksimum berurutan vs sekaligus = {np.abs(berurutan - sekaligus).max():.2e}")
print(f"Selisih maksimum sekaligus vs analitik  = {np.abs(sekaligus - analitik).max():.2e}")
print(f"Rerata posterior akhir                  = {np.trapezoid(theta * sekaligus, theta):.4f}")
print(f"Rerata analitik Beta(44, 8)             = {stats.beta.mean(44, 8):.4f}")
text Keluaran
Selisih maksimum berurutan vs sekaligus = 3.73e-14
Selisih maksimum sekaligus vs analitik  = 3.55e-15
Rerata posterior akhir                  = 0.8462
Rerata analitik Beta(44, 8)             = 0.8462

Selisih antara jalur berurutan dan jalur sekaligus hanya 3.73×10−143.73 \times 10^{-14}, yang merupakan error pembulatan angka pecahan pada komputer, bukan perbedaan metode. Kedua jalur sama persis secara matematis, dan perhitungan analitik Beta(44, 8) menegaskannya dengan selisih 3.55×10−153.55 \times 10^{-15}. Rerata akhir 0.8462 sama dengan 44/5244/52, yaitu perbandingan jawaban benar 44 terhadap total parameter posterior a+b=52a + b = 52.

Sifat tak bergantung urutan ini terlihat pula pada parameternya. Mengurutkan ulang kelima kelompok data hanya mengurutkan ulang perkalian likelihood, dan hasil kali bilangan tidak bergantung pada urutannya, sehingga parameter akhir tetap a=44a = 44 dan b=8b = 8. Yang berubah oleh urutan hanyalah jalur perjalanannya, yaitu deret rerata yang dilalui dari prior awal menuju posterior akhir.

Ringkasan#

  • Posterior dari satu kelompok data menjadi prior bagi kelompok berikutnya, sehingga siklus prior, likelihood, dan posterior berulang sebanyak datanya.
  • Pada keluarga konjugat Beta-Binomial, siklus itu mempersingkat menjadi Beta(a,b)\mathrm{Beta}(a, b) menuju Beta(a+y, b+n−y)\mathrm{Beta}(a + y,\ b + n - y).
  • Lima hari latihan dengan skor 8, 9, 7, 9, dan 10 dari 10 menggeser rerata posterior dari 0.7500 ke 0.8462 sekaligus menyempitkan kurvanya.
  • Pemutakhiran berurutan dan pemutakhiran sekaligus menghasilkan kurva yang selisihnya hanya 3.73×10−143.73 \times 10^{-14}, dan posterior akhirnya diverifikasi sebagai Beta(44, 8).

Referensi#