Teorema Bayes

Pembaruan keyakinan dengan bukti dan cara berpikir laju dasar.

Daftar isi

Teorema Bayes membalik arah peluang bersyarat, dari peluang munculnya bukti apabila suatu kejadian benar menuju peluang kejadian itu apabila bukti teramati. Topik ini menganalisis satu detektor kerusakan mesin dengan dua cara, yaitu tabel frekuensi alami (natural frequencies) dan rumus Bayes, kemudian memverifikasi keduanya lewat simulasi. Perbedaan antara intuisi pertama dan hasil perhitungan menjadi pelajaran utamanya tentang kejadian yang jarang.

Skenario detektor dan frekuensi alami#

Sebuah pabrik memiliki 1000 mesin dengan laju dasar (base rate) kerusakan 2 persen, sehingga 20 mesin diperkirakan rusak pada suatu periode. Sensor pada pabrik itu memberi alarm dengan deteksi benar 0.95 apabila mesin rusak dan alarm palsu 0.10 apabila mesin sehat. Pertanyaannya adalah peluang mesin rusak apabila alarm berbunyi.

2%98%95%5%10%90%1000 mesinRusak: 20Sehat: 980Alarm: 19Tidak alarm: 1Alarm: 98Tidak alarm: 882
Pohon frekuensi alami seribu mesin dengan percabangan kondisi mesin dan respons alarm
Kondisi mesinAlarm berbunyiTidak berbunyiTotal
Rusak19120
Sehat98882980
Total1178831000

Pohon dan tabel di atas memakai frekuensi alami, yaitu bilangan bulat hasil pembagian populasi, sehingga setiap langkah dapat dihitung tanpa notasi peluang. Dari 20 mesin rusak, 95 persen memberi alarm atau 19 mesin, sedangkan dari 980 mesin sehat, 10 persen memberi alarm palsu atau 98 mesin. Kolom alarm berbunyi berisi 117 mesin, dan hanya 19 di antaranya benar-benar rusak, sehingga jawabannya adalah 19/117≈0.162419/117 \approx 0.1624.

Perhitungan sederhana ini berhasil karena frekuensi alami menerjemahkan persen menjadi jumlah benda yang dapat dihitung. Angka deteksi benar 0.95 dan alarm palsu 0.10 menyasar populasi yang berbeda, sehingga keduanya tidak boleh dibandingkan atau dijumlahkan secara langsung. Setelah diubah menjadi 19 dan 98 mesin, perbandingannya menjadi nyata dan ruang untuk salah baca menyusut.

Rumus Bayes#

Rumus Bayes menghasilkan angka yang sama tanpa tabel frekuensi. Dengan AA = mesin rusak dan BB = alarm berbunyi, penyebut rumus adalah P(B)P(B), yaitu peluang alarm yang dihitung dari gabungan dua jalur pohon. Nilainya diperoleh sebagai

P(B)=P(B∣A) P(A)+P(B∣Ac) P(Ac)=0.95×0.02+0.10×0.98=0.117 P(B) = P(B \mid A)\, P(A) + P(B \mid A^c)\, P(A^c) = 0.95 \times 0.02 + 0.10 \times 0.98 = 0.117
P(A∣B)=P(B∣A) P(A)P(B)=0.95×0.020.117≈0.1624 P(A \mid B) = \frac{P(B \mid A)\, P(A)}{P(B)} = \frac{0.95 \times 0.02}{0.117} \approx 0.1624

Pembilang 0.0190.019 adalah jumlah mesin rusak beralarm per anggota populasi, dan 0.019/0.1170.019/0.117 memberi 0.1624, persis 19/11719/117 pada tabel frekuensi alami. Kesamaan itu bukan kebetulan karena tabel memang membagi pembilang dan penyebut dengan jumlah populasi yang sama. Rumus dan frekuensi alami hanyalah dua bahasa untuk satu perhitungan.

Hasil tersebut dapat diperiksa melalui komplemennya pada tabel yang sama. Peluang mesin sehat apabila alarm berbunyi adalah 98/117≈0.837698/117 \approx 0.8376, dan jumlahnya dengan 0.1624 tepat 1. Sifat berjumlah 1 pada partisi semacam ini menjadi pemeriksaan cepat terhadap kekeliruan hitung.

Verifikasi dengan simulasi#

Skrip berikut menghitung rumus di atas, lalu mensimulasikan 100000 mesin dengan bibit acak 42. Status rusak diundi dari laju dasar 2 persen, kemudian respons alarm diundi sesuai kondisi mesinnya. Frekuensi mesin rusak pada kelompok beralarm memperkirakan P(A∣B)P(A \mid B) langsung dari data.

python deteksi-mesin.py
import numpy as np

# Parameter pabrik: 2 persen mesin rusak, sensor alarm dengan deteksi
# benar 0.95 bila mesin rusak dan alarm palsu 0.10 bila mesin sehat
p_rusak = 0.02
p_alarm_bila_rusak = 0.95
p_alarm_bila_sehat = 0.10

# Rumus Bayes dengan A = mesin rusak dan B = alarm berbunyi
p_alarm = p_alarm_bila_rusak * p_rusak + p_alarm_bila_sehat * (1 - p_rusak)
p_rusak_bila_alarm = p_alarm_bila_rusak * p_rusak / p_alarm
print(f"P(alarm)              = {p_alarm:.4f}")
print(f"P(rusak|alarm) rumus  = {p_rusak_bila_alarm:.4f}")

# Tabel frekuensi alami dari 100000 mesin hasil simulasi
rng = np.random.default_rng(42)
n = 100_000
rusak = rng.random(n) < p_rusak
alarm = rng.random(n) < np.where(rusak, p_alarm_bila_rusak, p_alarm_bila_sehat)

print(f"Rusak dan alarm       = {(rusak & alarm).sum()}")
print(f"Sehat tetapi alarm    = {(~rusak & alarm).sum()}")
print(f"Total alarm           = {alarm.sum()}")
print(f"P(rusak|alarm) simul  = {rusak[alarm].mean():.4f}")
text Keluaran
P(alarm)              = 0.1170
P(rusak|alarm) rumus  = 0.1624
Rusak dan alarm       = 1876
Sehat tetapi alarm    = 9749
Total alarm           = 11625
P(rusak|alarm) simul  = 0.1614

Frekuensi simulasi 0.1614 berdekatan dengan hasil rumus 0.1624, dan selisihnya wajar untuk 11625 alarm hasil undian. Perbandingan 1876 mesin rusak beralarm terhadap 9749 mesin sehat beralarm memperlihatkan sumber masalahnya, yaitu mayoritas alarm justru berasal dari mesin sehat. Populasi sehat 49 kali lipat populasi rusak, sehingga alarm palsu 10 persen tetap menghasilkan kelompok yang jauh lebih besar.

Cara berpikir Bayes memperlakukan perhitungan ini sebagai pembaruan keyakinan, dari prior 0.02 menuju posterior 0.1624 setelah alarm terdengar. Pembaruan berikutnya dapat memakai posterior tersebut sebagai prior yang baru begitu bukti kedua masuk, misalnya hasil pemeriksaan manual mesin. Rangkaian pembaruan semacam itulah yang membedakan penalaran Bayes dari penilaian angka satu kali.

Akar permasalahan ini dapat ditelusuri dengan mengubah laju dasar. Apabila laju kerusakan naik menjadi 20 persen, jawaban berubah menjadi 0.95×0.2/(0.95×0.2+0.10×0.8)≈0.70370.95 \times 0.2 / (0.95 \times 0.2 + 0.10 \times 0.8) \approx 0.7037, mendekati keandalan sensor yang dikenal. Data yang sama pada laju dasar berbeda memberi posterior berbeda, dan itulah inti cara berpikir laju dasar.

Ringkasan#

  • Teorema Bayes P(A∣B)=P(B∣A)P(A)/P(B)P(A \mid B) = P(B \mid A) P(A)/P(B) membalik arah syarat dengan bantuan peluang total pada penyebutnya.
  • Frekuensi alami menyelesaikan soal yang sama tanpa notasi, yaitu 19 mesin rusak dari 117 mesin beralarm atau 0.1624.
  • Laju dasar 2 persen membuat alarm palsu mendominasi, sehingga keandalan sensor 0.95 tidak boleh dibaca sebagai peluang kerusakan.
  • Simulasi 100000 mesin memberi frekuensi 0.1614 yang selaras dengan rumus dan tabel.

Referensi#