Sepanjang Course ini kita melatih model, lalu memanggil predict() dan menerima satu jawaban: satu harga, satu label, satu angka. Padahal keputusan nyata jarang sesederhana itu — calon pembeli rumah perlu tahu seberapa lebar kisaran harga yang wajar, dan tim fraud perlu tahu seberapa yakin model sebelum menghentikan transaksi. Section Probabilistic Machine Learning mengganti kacamata kita: model bukan mesin penghasil satu angka, melainkan mesin penghasil distribusi peluang. Chapter ini meletakkan fondasinya: apa itu model sebagai distribusi, bagaimana sudut pandang frequentist dan Bayesian memperlakukan parameter secara berbeda, dan bagaimana distribusi prediktif dipakai untuk mengambil keputusan.

Prediksi Titik Menyembunyikan Setengah Informasi #

Pertimbangkan model regresi harga rumah yang menyatakan “rumah 75 m2 dihargai Rp88,8 juta”. Angka tunggal tersebut terasa informatif, tetapi pertanyaan lanjutan langsung membuka celahnya: berapa kisaran wajarnya? Rp85–Rp92? Atau Rp60–Rp120? Tanpa informasi sebaran, dua model yang sama-sama memprediksi Rp88,8 juta tidak bisa dibedakan — padahal yang satu mungkin sangat yakin dan yang lain sangat ragu. Prediksi titik memang berguna, namun prediksi titik menyembunyikan ketidakpastian, dan ketidakpastian justru bahan baku utama manajemen risiko.

Pandangan probabilistik menuntun kita menuliskan jawaban yang lebih kaya: alih-alih satu nilai y, model menghasilkan distribusi p(y | x) — peluang tiap kandidat harga jika luas rumahnya x. Dari distribusi tersebut kita bisa membaca prediksi titik (rata-rata atau median), interval (rentang dengan massa peluang 95%), bahkan peluang harga melewati anggaran pembeli. Informasi yang sama, tetapi kemasannya jauh lebih lengkap.

Model sebagai Distribusi atas Data #

Dalam kerangka probabilistik, sebuah model adalah keluarga distribusi atas data, dan training adalah proses memilih anggota keluarga yang paling cocok dengan data yang kita amati. Tiga bentuknya paling sering muncul:

  • Model generatif atas fitur: p(x) atau p(x | kelas) — dipakai klaster probabilistik seperti Gaussian Mixture Model dan oleh algoritme Naive Bayes.
  • Model bersyarat atas label: p(y | x) — bentuk yang dipelajari hampir semua classifier; keluaran predict_proba() di scikit-learn persis merupakan nilai p(kelas | x).
  • Model peluang bersama: p(x, y) — model paling lengkap sekaligus paling boros data saat dipelajari.

Kabar baiknya: algoritme yang sudah kita pakai diam-diam punya padanan probabilistik. Regresi least squares identik dengan asumsi derau Gaussian; regresi logistik adalah model p(y | x) berbentuk sigmoid; k-Means adalah batas khusus dari Gaussian Mixture Model. Pandangan probabilistik bukan ilmu baru yang terpisah, melainkan benang merah yang menyatukan algoritme-algoritme yang telah kita bahas.

Parameter: Angka Tetap atau Variabel Acak #

Dua mazhab besar menjawab pertanyaan “apa itu parameter θ” secara berbeda. Mazhab frequentist memperlakukan parameter sebagai angka tetap yang tidak diketahui — tugas kita memperkirakannya dari data, misalnya lewat maximum likelihood (bab berikutnya). Mazhab Bayesian memperlakukan parameter sebagai variabel acak dengan distribusi keyakinan sendiri: keyakinan awal (prior) diperbarui oleh data menjadi keyakinan akhir (posterior).

AspekFrequentistBayesian
Status parameterAngka tetap yang tidak diketahuiVariabel acak dengan distribusi
Bahan masukanData sajaPrior + data
Keluaran utamaSatu taksiran θ̂ plus interval kepercayaanDistribusi posterior p(θ | data)
Prediksi barup(y | x, θ̂) — plug-inRata-rata p(y | x, θ) terhadap posterior
Contoh pustaka di Course iniscikit-learn (mayoritas estimator)NumPy/SciPy murni (bayangan posterior)

Keduanya bukan kubu yang berhadapan secara mutlak; praktisi memilih sesuai kebutuhan. Pendekatan plug-in frequentist cepat dan menjadi standar scikit-learn, sedangkan pendekatan Bayesian unggul saat data sedikit dan pengetahuan domain sanggup diubah menjadi prior yang jujur. Yang tidak boleh tertukar adalah objeknya: interval kepercayaan frequentist berkaitan dengan prosedur pengambilan sampel, sedangkan interval dari posterior menyatakan sebaran keyakinan kita atas parameter setelah melihat data.

Distribusi Prediktif dalam Praktik #

Sekarang kita turunkan konsep ke kode murni NumPy/SciPy. Skenarionya: 60 rumah sintetis dengan hubungan linear luas–harga plus derau Gaussian. Model np.polyfit memberi garis regresi; simpangan residual memberi lebar derau; kombinasi keduanya menjadi distribusi prediktif untuk rumah baru.

python
# Prediksi tunggal vs distribusi prediktif pada regresi linear sederhana.
# Kisah: harga rumah (juta Rp) ditentukan dari luas (m2) + derau Gaussian.

import numpy as np
from scipy import stats

# 1) Data sintetis 60 rumah: harga = 30 + 0.8*luas + derau N(0, 6).
rng = np.random.default_rng(42)
n = 60
luas = rng.uniform(60, 120, n)                        # m2
harga = 30 + 0.8 * luas + rng.normal(0, 6.0, n)       # juta Rp

# 2) Model regresi linear (least squares) + simpangan residual.
k, b = np.polyfit(luas, harga, deg=1)
galat = harga - (k * luas + b)
sigma = float(np.sqrt((galat ** 2).mean()))
print(f"Model: harga = {k:.3f} * luas + {b:.3f}")
print(f"Simpangan residual (sigma) = {sigma:.3f} juta Rp")

# 3) Prediksi titik vs distribusi prediktif untuk dua rumah baru.
z = stats.norm.ppf(0.975)  # z = 1.960 untuk interval dua sisi 95%
for luas_baru in (75.0, 118.0):
    titik = k * luas_baru + b
    dist = stats.norm(loc=titik, scale=sigma)
    bawah = titik - z * sigma
    atas = titik + z * sigma
    print(f"\nLuas {luas_baru:.0f} m2:")
    print(f"  prediksi titik : {titik:8.3f} juta Rp")
    print(f"  interval 95%   : [{bawah:.3f}, {atas:.3f}]")
    print(f"  pdf di titik   : {dist.pdf(titik):.6f}")
    print(f"  pdf di +2sigma : {dist.pdf(titik + 2 * sigma):.6f}")

# 4) Pakai distribusi untuk keputusan: anggaran pembeli.
anggaran = 100.0
titik75 = k * 75 + b
dist75 = stats.norm(loc=titik75, scale=sigma)
print(f"\nRumah 75 m2, anggaran {anggaran:.0f} juta Rp:")
print(f"  P(harga <= anggaran) = {dist75.cdf(anggaran):.3f}")
print(f"  P(harga >  anggaran) = {dist75.sf(anggaran):.3f}")

# 5) Cakupan empiris: proporsi residual data latih di dalam +-1.96 sigma.
dalam = float(np.mean(np.abs(galat) <= z * sigma))
print(f"\nCakupan empiris interval 95% pada data latih: {dalam:.3f}")

Output yang Dihasilkan:

text
Model: harga = 0.795 * luas + 29.233
Simpangan residual (sigma) = 4.487 juta Rp

Luas 75 m2:
  prediksi titik :   88.842 juta Rp
  interval 95%   : [80.048, 97.636]
  pdf di titik   : 0.088914
  pdf di +2sigma : 0.012033

Luas 118 m2:
  prediksi titik :  123.018 juta Rp
  interval 95%   : [114.224, 131.812]
  pdf di titik   : 0.088914
  pdf di +2sigma : 0.012033

Rumah 75 m2, anggaran 100 juta Rp:
  P(harga <= anggaran) = 0.994
  P(harga >  anggaran) = 0.006

Cakupan empiris interval 95% pada data latih: 0.950

Mari kita bedah baris-baris kode di atas:

  1. Baris 8–11 (data sintetis): rng.uniform(60, 120, n) menghasilkan luas acak dan rng.normal(0, 6.0, n) menambahkan derau Gaussian — generator dengan seed 42 memastikan data sama pada setiap eksekusi. Derau inilah sumber ketidakpastian yang akan kita ukur.
  2. Baris 14–16 (model + lebar derau): np.polyfit(luas, harga, deg=1) mengembalikan kemiringan k dan intersep b dari garis least squares. Simpangan residual sigma dihitung dari akar rata-rata kuadrat galat — taksiran lebar distribusi derau, bukan bagian dari garis itu sendiri.
  3. Baris 21–31 (distribusi prediktif): stats.norm(loc=titik, scale=sigma) membangun objek distribusi Gaussian yang berpusat di prediksi titik. Dari objek tersebut, ppf, pdf, dan cdf dibaca langsung — interval 95% dihitung dengan z = 1,960 dari stats.norm.ppf(0.975), bukan angka hard-coded.
  4. Baris 33–39 (keputusan berbasis peluang): pembeli dengan anggaran Rp100 juta tidak hanya tahu prediksi Rp88,8 juta, tetapi juga P(harga ≤ 100) = 0,994 dari cdf — keputusan “amankan rumah ini” kini berbasis risiko terukur, bukan dugaan tanpa dasar.
  5. Baris 42–43 (cakupan empiris): proporsi residual yang jatuh di dalam ±1,96σ adalah 0,950 — tepat sasaran. Pemeriksaan sederhana ini menjadi rujukan cepat apakah asumsi Gaussian masih masuk akal untuk data kita.

Mengapa Ketidakpastian Layak Dihitung #

Ada tiga alasan praktis mengapa kita berusaha menulis model sebagai distribusi. Pertama, keputusan bermuatan risiko membutuhkan lebih dari satu angka: tim kredit perlu membandingkan peluang gagal bayar terhadap bunga yang dipatok, dan jumlah peluang tidak bisa ditimbang tanpa angka yang bermakna. Kedua, komunikasi yang jujur: interval yang lebar di wilayah data yang jarang adalah pengakuan terbuka bahwa model belum belajar banyak di sana — lebih baik diakui daripada disembunyikan di balik prediksi titik yang tampak percaya diri. Ketiga, diagnosis model: distribusi yang terlalu sempit atau terlalu lebar dibanding frekuensi nyata adalah gejala miskalibrasi yang bisa diukur dan diperbaiki.

Mesin penghitung utama dunia probabilistik adalah satu teorema berusia lebih dari dua setengah abad — aturan sederhana untuk membalik arah pengondisian peluang, dari “peluang gejala jika penyakit” menjadi “peluang penyakit jika gejala”. Chapter berikutnya, Teorema Bayes untuk Machine Learning, membedah teorema tersebut dari nol sampai penerapannya pada classifier Naive Bayes.

Referensi Resmi #