Bab Distribusi Uniform memperkenalkan sebaran yang merata di dalam sebuah rentang, dan Normal Distribution memperkenalkan sebaran lonceng yang simetris. Keduanya mengizinkan nilai negatif. Padahal banyak kuantitas nyata tidak pernah negatif: waktu antar kedatangan pelanggan, total waktu menunggu, maupun proporsi campuran bahan. Untuk kebutuhan itu Generator menyediakan tiga method bertetangga: exponential(), gamma(), dan beta().

Bab ini memakai pola yang sama dengan bab-bab lain pada section ini: setiap Generator dibuat dengan np.random.default_rng(seed) agar output dapat direproduksi, lalu sampel berukuran besar dijadikan bahan uji empiris terhadap mean teoretis. Ketiga distribusi juga saling terkait: gamma adalah penjumlahan beberapa eksponensial, dan eksponensial adalah pasangan kontinu dari Poisson pada Binomial dan Poisson Distribution.

Waktu Antar Kedatangan dengan rng.exponential #

Bayangkan kasir minimarket yang rata-rata dilalui satu pelanggan setiap dua menit. Jarak waktu antara dua pelanggan berturut-turut tidak selalu dua menit — bisa 30 detik, bisa juga lima menit — tetapi sebarannya punya pola khas: makin lama jeda, makin jarang terjadi. Pola itu dimodelkan distribusi eksponensial dengan satu parameter scale, dan sifat pentingnya sederhana: scale adalah mean sebaran tersebut.

python
import numpy as np

rng = np.random.default_rng(42)
jeda = rng.exponential(scale=2.0, size=100_000)
print(jeda[:5].round(2))
print("mean sampel  :", round(float(jeda.mean()), 3))
print("mean teoretis:", 2.0)

Output yang Dihasilkan:

text
[4.81 4.67 4.77 0.56 0.17]
mean sampel  : 2.007
mean teoretis: 2.0

Bedah baris demi baris:

  1. Baris 4 (rng.exponential(scale=2.0, size=100_000)): method membangkitkan 100.000 jeda antar kedatangan dengan mean 2,0 menit per kedatangan; hasilnya array float64.
  2. Baris 5 (jeda[:5].round(2)): hanya lima sampel pertama yang dicetak — ribuan angka mentah tidak nyaman dibaca, dan pembulatan dua desimal sudah cukup untuk menangkap besaran nilainya.
  3. Baris 6-7: mean sampel 2,007 hanya melenceng 0,007 menit dari scale=2.0; semakin besar size, selisihnya makin kecil.

Waktu Tunggu ke-k Kedatangan dengan rng.gamma #

Kasir pada contoh tadi baru boleh istirahat setelah pelanggan ketiga datang. Berapa total waktu menunggu sampai kedatangan ketiga? Jawabannya adalah penjumlahan tiga jeda antar kedatangan — dan jumlah dari k variabel eksponensial berdistribusi gamma dengan shape=k. Karena tiap eksponensial bermean scale, mean gammanya adalah shape * scale.

python
import numpy as np

rng = np.random.default_rng(42)
eksp = rng.exponential(scale=2.0, size=(50_000, 3))
tunggu_sum = eksp.sum(axis=1)
tunggu_gamma = rng.gamma(shape=3, scale=2.0, size=50_000)
print("sum 3 eksponensial:", round(float(tunggu_sum.mean()), 3))
print("gamma(3, 2.0)     :", round(float(tunggu_gamma.mean()), 3))
print("contoh gamma [:5] :", tunggu_gamma[:5].round(2))

Output yang Dihasilkan:

text
sum 3 eksponensial: 6.01
gamma(3, 2.0)     : 6.006
contoh gamma [:5] : [ 6.66  3.99  7.79  4.27 10.33]

Bedah baris demi baris:

  1. Baris 5 (rng.exponential(scale=2.0, size=(50_000, 3))): membuat 50.000 baris; tiap baris memuat tiga jeda antar kedatangan milik satu skenario.
  2. Baris 6 (eksp.sum(axis=1)): penjumlahan sepanjang axis=1 merapat tiap baris menjadi satu total — waktu menunggu sampai kedatangan ketiga.
  3. Baris 7 (rng.gamma(shape=3, scale=2.0, size=50_000)): membangkitkan kuantitas yang sama secara langsung. Mean keduanya, 6,01 dan 6,006, mendekati teori 3 * 2.0 = 6.0.

Distribusi gamma adalah versi umum dari eksponensial: shape=1 mengembalikan eksponensial biasa, sedangkan shape pecahan diperbolehkan untuk kuantitas akumulatif lain seperti curah hujan harian.

Proporsi dengan rng.beta #

Eksponensial dan gamma menghasilkan bilangan positif tanpa batas atas. Sebaliknya, rng.beta(a, b) menghasilkan nilai di antara 0 dan 1, sehingga tepat untuk proporsi. Contoh: sebuah iklan mendapat 10 klik dengan 2 konversi. Proporsi konversi yang sesungguhnya tidak diketahui pasti; beta(a=2, b=8) membangkitkan nilai proporsi yang masuk akal, terpusat di sekitar 2/(2+8) = 0.2. Pola yang sama dipakai untuk proporsi bahan campur, misalnya rancangan 2 kg arabika terhadap 8 kg robusta pada racikan kopi.

python
import numpy as np

rng = np.random.default_rng(42)
proporsi = rng.beta(a=2.0, b=8.0, size=100_000)
print(proporsi[:5].round(2))
print("mean sampel  :", round(float(proporsi.mean()), 3))
print("mean teoretis:", 0.2)

Output yang Dihasilkan:

text
[0.17 0.19 0.28 0.21 0.3 ]
mean sampel  : 0.2
mean teoretis: 0.2

Dua argumen a dan b bekerja seperti “bobot keberhasilan” dan “bobot kegagalan”: a=2 yang kecil membuat sampel condong ke nilai rendah, sementara b=8 menekan sebaran ke arah 0. Bila perannya dibalik — a=8, b=2 — pusat sebaran berpindah mendekati 0,8.

Tabel Ringkas dan Uji Mean Empiris #

MethodParameterRentang nilaiMean teoretisContoh kasus
rng.exponential(scale)scale(0, ∞)scalejeda antrean kasir minimarket
rng.gamma(shape, scale)shape, scale(0, ∞)shape * scalemenunggu pelanggan ke-3
rng.beta(a, b)a, b(0, 1)a/(a+b)proporsi konversi iklan

Satu blok terakhir merangkum verifikasi mean sampel terhadap mean teoretis untuk ketiganya sekaligus:

python
import numpy as np

rng = np.random.default_rng(42)
kasus = [
    ("exponential(2.0)", rng.exponential(2.0, 100_000), 2.0),
    ("gamma(3, 2.0)", rng.gamma(3, 2.0, 100_000), 6.0),
    ("beta(2, 8)", rng.beta(2.0, 8.0, 100_000), 0.2),
]
for nama, sampel, teori in kasus:
    print(f"{nama:18s} mean sampel={round(float(sampel.mean()), 3)}  teori={teori}")

Output yang Dihasilkan:

text
exponential(2.0)   mean sampel=2.007  teori=2.0
gamma(3, 2.0)      mean sampel=6.003  teori=6.0
beta(2, 8)         mean sampel=0.2  teori=0.2

Ketiga mean sampel berlabuh di dekat nilai teoretisnya — bukti bahwa parameter yang kita berikan memang mengendalikan pusat sebaran. Ketiga method ini selalu mengembalikan float64; bila kebutuhannya bilangan bulat acak, gunakan method pada Random Integer dan Sampling. Kombinasi ketiganya dengan sampel normal membuka banyak skenario simulasi, mulai dari antrean hingga pemodelan proporsi.