Bab 3 ~4 jam
Dasar-Dasar Statistika
Bangun fondasi matematika yang dibutuhkan untuk machine learning — dari statistika deskriptif hingga uji hipotesis.
3.1 Statistika Deskriptif
Statistika deskriptif merangkum data melalui ukuran tendensi sentral, sebaran, dan bentuk.
Ukuran Tendensi Sentral
import numpy as np
data = np.array([23, 45, 67, 12, 89, 34, 56, 78, 90, 11])
np.mean(data) # 50.5 — rata-rata
np.median(data) # 50.5 — nilai tengah
# Modus: nilai paling sering (gunakan scipy.stats.mode)
Ukuran Sebaran
np.std(data) # 29.03 — simpangan baku
np.var(data) # 842.85 — varians
np.percentile(data, [25, 50, 75]) # Batas IQR
np.max(data) - np.min(data) # Rentang: 79
IQR = Q₃ − Q₁ = Persentil(75) − Persentil(25)
Catatan: Rata-rata sensitif terhadap pencilan; median lebih robust. Untuk data miring, gunakan median + IQR daripada rata-rata + simpangan baku.
3.2 Teori Probabilitas
Probabilitas mengukur ketidakpastian. Ini menjadi fondasi matematika untuk inferensi statistik dan machine learning.
Aturan Penting
P(A∪B) = P(A) + P(B) − P(A∩B)
P(A∩B) = P(A) · P(B|A)
P(A̅) = 1 − P(A)
Konsep Penting
- Independensi: P(A∩B) = P(A)·P(B)
- Bersyarat: P(A|B) = P(A∩B) / P(B)
- Hukum Total Prob.: P(A) = Σ P(A|Bᵢ)P(Bᵢ)
Untuk ML: Klasifikasi Naive Bayes dibangun seluruhnya dari teorema Bayes dengan asumsi independensi (naive). Memahami probabilitas bersyarat sangat penting.
3.3 Distribusi Umum
| Distribusi | Tipe | Penggunaan | Python |
|---|---|---|---|
| Normal | Kontinu | Fenomena alam, error | np.random.normal |
| Binomial | Diskrit | Coba sukses/gagal | np.random.binomial |
| Poisson | Diskrit | Data hitungan, kejadian langka | np.random.poisson |
| Eksponensial | Kontinu | Waktu antar kejadian | np.random.exponential |
| Uniform | Kontinu | Sampling acak, prior | np.random.uniform |
import scipy.stats as stats
# Distribusi normal: μ=0, σ=1
x = np.linspace(-4, 4, 100)
pdf = stats.norm.pdf(x, loc=0, scale=1)
cdf = stats.norm.cdf(x, loc=0, scale=1)
# P(X <= 1.96) untuk normal standar
stats.norm.cdf(1.96) # 0.975
f(x) = (1/σ√2π) · exp(−(x−μ)² / 2σ²)
3.4 Uji Hipotesis
Uji hipotesis adalah kerangka kerja untuk membuat keputusan tentang parameter populasi berdasarkan data sampel.
Kerangka Kerja
- 1. Nyatakan H₀ (nol) dan H₁ (alternatif)
- 2. Pilih tingkat signifikansi α (umumnya 0.05)
- 3. Hitung statistik uji
- 4. Hitung p-value
- 5. Tolak H₀ jika p-value < α
Uji Umum
- t-test: Membandingkan dua rata-rata
- Chi-kuadrat: Asosiasi kategorikal
- ANOVA: Membandingkan 3+ rata-rata
- Mann-Whitney: Non-parametrik 2 kelompok
- KS test: Perbandingan distribusi
from scipy import stats
# t-test dua sampel
grup_a = np.random.normal(100, 15, 50)
grup_b = np.random.normal(110, 15, 50)
t_stat, p_value = stats.ttest_ind(grup_a, grup_b)
print(f"t={t_stat:.3f}, p={p_value:.4f}")
# Uji chi-kuadrat
tabel = np.array([[10, 20, 30], [20, 20, 20]])
chi2, p, dof, expected = stats.chi2_contingency(tabel)
Penting: Signifikansi statistik ≠ signifikansi praktis. Dengan sampel besar, efek yang sangat kecil pun menjadi "signifikan". Selalu laporkan ukuran efek bersama p-value.
3.5 Pemikiran Bayesian
Statistika Bayesian memperlakukan parameter sebagai variabel acak dengan distribusi prior, memperbarui keyakinan seiring data baru masuk.
P(θ|D) = P(D|θ) · P(θ) / P(D)
Posterior
P(θ|D)
Likelihood
P(D|θ)
Prior
P(θ)
# Uji A/B Bayesian dengan PyMC (konseptual)
import pymc as pm
with pm.Model() as model:
prior = pm.Uniform('rate', lower=0, upper=1)
likelihood = pm.Binomial('obs', n=1000, p=prior, observed=120)
trace = pm.sample(2000, tune=1000)
Latihan: Simulasikan lemparan koin (adil vs bias) dan gunakan pembaruan Bayesian untuk memperkirakan bias. Mulai dengan prior uniform, perbarui setelah 10, 50, 100, dan 500 lemparan.