Membangun fondasi statistika & probabilitas untuk data science: distribusi data, statistik inferensial, uji hipotesis, dan p-value — dilengkapi praktik uji hipotesis nyata dengan Python dan scipy

Setelah di episode 2 kita menguasai peta proyek CRISP-DM, pada episode ini kita turun ke fondasi matematis yang membedakan data scientist dari sekadar "orang yang menjalankan library": statistika & probabilitas.
Mengapa penting? Karena hampir semua keputusan dalam data science adalah keputusan di bawah ketidakpastian. Apakah model ini benar-benar lebih baik dari baseline, atau hanya kebetulan? Apakah kenaikan metrik ini signifikan, atau karena variasi acak? Tanpa statistika, kalian tidak punya cara menjawab — dan akan mudah tertipu oleh angka yang terlihat meyakinkan. Statistika adalah alat untuk berpikir jujur tentang data.
Probabilitas mengukur seberapa mungkin sebuah kejadian terjadi, dari 0 (tidak mungkin) sampai 1 (pasti). Dua konsep yang wajib dikuasai:
P(A dan B) — peluang dua hal terjadi bersamaan. Contoh: peluang customer melakukan pembelian dan juga churn.P(A|B) — peluang A terjadi diberikan B terjadi. Contoh: peluang churn diberikan customer menghubungi support 3 kali.Rumus Bayes adalah fondasi dari banyak metode data science (termasuk Naive Bayes dan Bayesian optimization):
P(A|B) = P(B|A) * P(A) / P(B)
Intuisi sederhananya: keyakinan kita diperbarui ketika ada bukti baru. Jika 1% customer churn (prior) tetapi pelanggan yang komplain 3 kali punya peluang churn 40%, maka bukti komplain mengubah keyakinan kita. Cara berpikir bayesian inilah yang dipakai untuk update model saat data baru masuk — kembali lagi di episode 15 dan 25.
Data mengikuti pola tertentu yang bisa digambarkan sebagai distribusi. Dua yang paling penting:
Distribusi berbentuk lonceng simetris di sekitar rata-rata. Banyak fenomena alam & bisnis mendekatinya: tinggi badan, kesalahan pengukuran, permintaan produk. Sifat kuncinya aturan empiris:
| Rentang | Proporsi Data |
|---|---|
| Mean ± 1 standar deviasi | ±68% |
| Mean ± 2 standar deviasi | ±95% |
| Mean ± 3 standar deviasi | ±99.7% |
Aturan ini berguna untuk mendeteksi outlier: nilai yang jauh melebihi mean ± 3 SD patut dicurigai.
Tidak semua data normal. Pendapatan rumah tangga, waktu sesi, dan ukuran transaksi biasanya right-skewed: mayoritas kecil, sedikit sangat besar. Inilah alasan mengapa median sering lebih informatif daripada mean untuk data ini — dan mengapa log-transform menjadi tool penting di episode 10.
import numpy as np
from scipy import stats
data = np.random.exponential(scale=2.0, size=5000)
print("mean :", round(data.mean(), 2))
print("median:", round(np.median(data), 2))
print("skew :", round(stats.skew(data), 2))Perhatikan mean yang lebih besar dari median dan skewness positif — ciri khas distribusi right-skewed.
| Jenis | Menjawab | Contoh |
|---|---|---|
| Deskriptif | Apa yang data ini katakan? | mean, median, variansi, persentil |
| Inferensial | Apa yang data ini simpulkan tentang populasi? | uji hipotesis, confidence interval |
Data science memakai keduanya. Deskriptif untuk eksplorasi (episode 6), inferensial untuk keputusan — terutama saat kita hanya punya sampel dari populasi besar.
Uji hipotesis adalah prosedur formal untuk mengambil keputusan dengan bukti data. Alurnya:
H0) — status quo, biasanya "tidak ada efek".H1) — "ada efek".< alpha (biasanya 0.05), tolak H0.Warning
Kesalahan paling umum: menganggap p-value sebagai "peluang H0 benar". Itu salah. p-value hanya menjawab: jika tidak ada efek, seberapa ekstrem data yang kita amati? p-value kecil berarti data tidak konsisten dengan H0 — bukan berarti efeknya besar.
Studi kasus: kita ingin tahu apakah pelatihan baru meningkatkan skor tim customer service. Kita punya skor sebelum dan sesudah pelatihan untuk orang yang sama — ini uji berpasangan.
import numpy as np
from scipy import stats
np.random.seed(42)
before = np.random.normal(70, 8, 30)
after = before + np.random.normal(4, 4, 30)
t_stat, p_value = stats.ttest_rel(after, before)
print(f"t-statistic: {t_stat:.3f}")
print(f"p-value : {p_value:.4f}")Jika p-value < 0.05, kita menolak H0 dan menyimpulkan pelatihan signifikan meningkatkan skor. Coba jalankan dan lihat outputnya — perhatikan bahwa keputusan didasarkan pada p-value, bukan sekadar selisih mean.
Rentang nilai yang kemungkinan besar memuat parameter populasi. Interval 95% berarti: jika kita mengulang eksperimen berkali-kali, 95% interval yang dihasilkan akan memuat nilai sebenarnya.
import numpy as np
from scipy import stats
sample = np.random.normal(100, 15, 200)
se = sample.std(ddof=1) / np.sqrt(len(sample))
ci_low, ci_high = stats.t.interval(0.95, len(sample) - 1,
loc=sample.mean(), scale=se)
print(f"mean: {sample.mean():.2f}, 95% CI: [{ci_low:.2f}, {ci_high:.2f}]")Interval yang lebar = ketidakpastian tinggi (sampel kecil atau variansi besar); interval sempit = estimasi lebih presisi.
| Situasi | Uji |
|---|---|
| Dua grup independen, data normal | t-test independen |
| Dua pengukuran orang sama | t-test berpasangan |
| Lebih dari dua grup | ANOVA |
| Data tidak normal / ordinal | Mann-Whitney / Kruskal-Wallis |
| Hubungan antar dua variabel | Chi-square (kategorikal), korelasi (numerik) |
Episode 16 akan memakai uji ini untuk A/B testing — jadi pastikan pemahaman dasar ini kuat.
Inti yang harus dibawa pulang:
Di episode 4 selanjutnya kita akan masuk ke Python data stack — NumPy dan Pandas dengan vectorized operations — bahasa yang akan kalian pakai untuk memanipulasi data di setiap episode berikutnya. Pastikan environment dari episode 0 sudah siap, karena mulai sekarang praktiknya penuh kode. Sampai jumpa di episode 4!