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
NormalKontinuFenomena alam, errornp.random.normal
BinomialDiskritCoba sukses/gagalnp.random.binomial
PoissonDiskritData hitungan, kejadian langkanp.random.poisson
EksponensialKontinuWaktu antar kejadiannp.random.exponential
UniformKontinuSampling acak, priornp.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.