06 β Statistics Essentials untuk ML
Estimasi: 6 jam Prasyarat: 04-linear-algebra.md, 05-calculus-intuition.md Tujuan: Paham distribusi, probabilitas, dan konsep statistik yang muncul terus di ML.
WAJIB: tonton StatQuest "Statistics Fundamentals" playlist di YouTube. Best statistik teacher di internet.
Kenapa Materi Ini Penting?
Statistik dan probabilitas adalah bahasa ketidakpastian β dan ML adalah machine learning under uncertainty. Setiap loss function, evaluation metric, sampling strategy, dan output LLM diatur oleh statistik.
flowchart LR
Stat["π Statistik"] --> LF["π― Loss Function<br/>(MSE, Cross-Entropy)"]
Prob["π² Probabilitas"] --> NTP["π€ Next Token Prediction<br/>(softmax over vocab)"]
Dist["π Distribution"] --> Init["βοΈ Weight Init<br/>(normal/xavier)"]
Bayes["π§ Bayes"] --> Class["π·οΈ Naive Bayes<br/>+ Bayesian DL"]
Met["π Metrics"] --> Eval["β
Model Evaluation<br/>(precision, recall)"]
| Konsep Statistik | Dipakai di Mana di AI/ML |
|---|---|
| Mean/Std | Normalisasi input, batch normalization |
| Normal distribution | Inisialisasi weight, dropout, noise injection |
| Probabilitas | Output LLM = distribusi probabilitas atas vocab |
| Cross-entropy | Loss function paling umum untuk klasifikasi |
| Bayes' theorem | Spam filter, Bayesian neural net, anomaly detection |
| Sampling | Top-k, top-p, temperature di LLM generation |
| Confusion matrix | Evaluasi binary/multi-class classifier |
| CLT | Justifikasi kenapa banyak hal "normal" |
Bottom line: ChatGPT itu = probability machine. Saat dia "milih kata berikutnya", dia sampling dari distribusi probabilitas. Paham statistik = paham kenapa LLM kadang random dan bagaimana mengontrolnya.
Bagian 1 β Statistik Deskriptif
Cara meringkas data.
Mean (Rata-rata)
mean = sum / count
import numpy as np
data = np.array([85, 70, 92, 88, 75])
data.mean() # 82.0
Sensitif terhadap outlier:
np.array([1, 2, 3, 4, 100]).mean() # 22.0 (skewed!)
Median
Nilai tengah setelah di-sort. Robust ke outlier.
np.median([1, 2, 3, 4, 100]) # 3
Mode
Nilai paling sering muncul.
from scipy import stats
stats.mode([1, 2, 2, 3, 3, 3, 4]).mode # 3
Variance & Standard Deviation
Mengukur sebaran data dari mean.
variance = mean((x - mean)Β²)
std = βvariance
data = np.array([10, 20, 30, 40, 50])
data.var() # 200
data.std() # 14.14
Intuisi:
- std kecil β data nempel dekat mean
- std besar β data tersebar lebar
Analogi "kerumunan": std itu seperti seberapa berkumpul vs tersebar sebuah keramaian. Std kecil = kerumunan padat di satu titik. Std besar = orang-orang menyebar luas. Mean = "pusat massa" kerumunan.
flowchart LR
Std["π Standard Deviation"] --> Small["π― Std kecil<br/>(misal 1)"]
Std --> Med["π Std sedang<br/>(misal 10)"]
Std --> Big["π Std besar<br/>(misal 100)"]
Small --> S1["Data padat dekat mean"]
Med --> M1["Data sebar moderat"]
Big --> B1["Data sangat sebar"]
Quantile / Percentile
np.percentile(data, 25) # Q1 (25%)
np.percentile(data, 50) # median
np.percentile(data, 75) # Q3
IQR (Interquartile Range) = Q3 - Q1. Robust measure of spread.
Skewness & Kurtosis (Sekedar Tahu)
- Skewness β asimetri distribusi (left-skewed, right-skewed)
- Kurtosis β tinggi puncak (heavy-tailed atau tidak)
Bagian 2 β Distribusi Penting
Normal Distribution (Gaussian)
Bel curve. Distribusi paling penting di statistik dan ML.
Analogi "lonceng": normal distribution itu seperti bentuk lonceng. Kebanyakan orang berkumpul di tengah (dekat rata-rata), sedikit di pinggir kiri/kanan, dan sangat sedikit di ekor jauh. Tinggi badan, IQ, error pengukuran β semua mengikuti pola lonceng ini.
Cara Membaca Diagram:
- Node atas = distribusi normal dengan dua parameter utama.
- Cabang kiri (Mean ΞΌ) = pusat lonceng; (Std Ο) = lebar lonceng.
- Tiga node kanan = persentase data dalam Β±1Ο, Β±2Ο, Β±3Ο.
Walkthrough Step-by-Step:
- Tentukan mean ΞΌ untuk menggeser pusat lonceng.
- Tentukan std Ο untuk mengontrol seberapa lebar/tinggi lonceng.
- Gunakan rule 68-95-99.7 untuk mengetahui proporsi data di tiap interval.
Analogi Sehari-hari: seperti distribusi nilai ujian β kebanyakan murid di sekitar rata-rata, sedikit yang nilainya sangat tinggi atau sangat rendah.
Diagram statis Mermaid sebagai fallback:
flowchart TD
N["π Normal Distribution"] --> M["π Mean ΞΌ<br/>(pusat lonceng)"]
N --> S["π Std Ο<br/>(lebar lonceng)"]
N --> R1["68% data dalam Β±1Ο"]
N --> R2["95% data dalam Β±2Ο"]
N --> R3["99.7% data dalam Β±3Ο"]
import numpy as np
import matplotlib.pyplot as plt
data = np.random.normal(loc=0, scale=1, size=1000) # mean=0, std=1
plt.hist(data, bins=50)
plt.show()
Property:
- 68% data dalam Β±1 std
- 95% dalam Β±2 std
- 99.7% dalam Β±3 std (rule 68-95-99.7)
Mana yang terdistribusi normal?
- Tinggi badan manusia
- IQ
- Error pengukuran
- Sum of many independent events (Central Limit Theorem)
Uniform Distribution
Setiap nilai dalam range punya probabilitas sama.
np.random.uniform(0, 1, 1000)
Analogi "dadu fair": uniform distribution itu seperti dadu fair β setiap angka 1-6 punya peluang sama (1/6). Tidak ada favorit. Datar dari ujung ke ujung.
flowchart LR
U["π² Uniform"] --> Eq["Semua nilai<br/>peluang sama"]
N["π Normal"] --> Mid["Tengah dominan,<br/>ekor jarang"]
Bernoulli & Binomial
- Bernoulli: 1 kali coba, sukses atau gagal (e.g. flip coin)
- Binomial: n kali coba, hitung jumlah sukses
np.random.binomial(n=10, p=0.5, size=1000) # 10 flip, p=0.5
Poisson
Jumlah kejadian dalam interval waktu (e.g. customer datang per jam).
Distribusi yang Sering Muncul di NLP/LLM
- Categorical / Multinomial β pilih 1 dari N kategori (e.g. next token prediction!)
- Softmax distribution β output LLM untuk vocab
Bagian 3 β Central Limit Theorem (CLT)
Salah satu teorema paling indah di statistik.
Pernyataan
Sum (atau mean) dari banyak variabel random independen mendekati normal distribution, tanpa peduli distribusi asalnya.
Implikasi
- Average of dice rolls β mendekati normal
- Mean of survey samples β normal (asal sample size cukup besar, n>30)
- Test scores from random students β mirip normal
Aplikasi ML: banyak teorema asumsi normal. CLT memberikan justifikasi.
Bagian 4 β Probabilitas Dasar
Definisi
Probability = chance kejadian, dari 0 (tidak akan terjadi) sampai 1 (pasti).
P(A) = (jumlah kasus favorable) / (total kasus)
Analogi "ukuran ketidakpastian": probabilitas itu seperti berat keyakinan. P=1 berarti yakin 100% terjadi. P=0 berarti yakin 100% tidak terjadi. P=0.5 = ragu maksimal (50/50). Semua angka di antaranya = derajat keyakinan.
flowchart LR
Z["P = 0<br/>β Mustahil"] --> Q["P = 0.25<br/>π§οΈ Tidak mungkin"]
Q --> H["P = 0.5<br/>π€· Ragu maksimal"]
H --> T["P = 0.75<br/>βοΈ Mungkin"]
T --> O["P = 1<br/>β
Pasti"]
Aksioma
- 0 β€ P(A) β€ 1
- P(sample space) = 1
- P(A βͺ B) = P(A) + P(B) jika A dan B disjoint
Independent vs Dependent
Independent: terjadinya A tidak mempengaruhi B
P(A β© B) = P(A) Γ P(B)
Dependent: terjadinya A mempengaruhi B
P(A β© B) = P(A) Γ P(B|A)
Conditional Probability
P(A|B) = P(A β© B) / P(B)
"Probabilitas A given B sudah terjadi."
Contoh:
- P(hujan) = 0.3
- P(macet) = 0.4
- P(macet | hujan) = 0.8 (kalau hujan, macet jauh lebih mungkin)
Bagian 5 β Bayes' Theorem (Wajib Paham!)
Salah satu rumus paling penting di ML.
Rumus
P(A|B) = P(B|A) Γ P(A) / P(B)
Intuisi
Update belief dengan evidence baru:
posterior = (likelihood Γ prior) / evidence
Analogi "update keyakinan": Bayes itu seperti detektif yang update kecurigaan setelah dapat bukti baru. Mulai dengan keyakinan awal (prior), liat bukti, hitung seberapa mungkin bukti itu muncul kalau hipotesis benar (likelihood), kemudian update keyakinan jadi posterior. Setiap bukti baru = update lagi.
Cara Membaca Diagram:
- Tiga node kiri = bahan baku update: prior, evidence, likelihood.
- Node tengah (Update) = formula Bayes yang menggabungkan ketiganya.
- Node kanan (Posterior) = keyakinan baru setelah bukti.
- Edge balik (putus-putus) = posterior jadi prior baru saat datang bukti berikutnya.
Walkthrough Step-by-Step:
- Mulai dari prior P(A) = keyakinan awal sebelum lihat data.
- Saat datang evidence B, hitung likelihood P(B|A).
- Terapkan Bayes: posterior = (likelihood Γ prior) / evidence.
- Posterior baru menjadi prior untuk update berikutnya β proses iteratif.
Analogi Sehari-hari: Detektif menyelidiki kasus. Mulai dengan dugaan awal, terima fakta baru satu per satu, dan setiap fakta menggeser keyakinan ke kesimpulan akhir.
Diagram statis Mermaid sebagai fallback:
flowchart LR
Prior["π§ Prior P(A)<br/>keyakinan awal"] --> Update["β‘ Update<br/>(Bayes)"]
Evidence["π Evidence B<br/>bukti baru"] --> Update
Like["π Likelihood P(B|A)"] --> Update
Update --> Post["π― Posterior P(A|B)<br/>keyakinan baru"]
Post -.->|"ulangi saat<br/>ada bukti baru"| Prior
Contoh Klasik: Tes Medis
Misalkan:
- Penyakit X menyerang 1% populasi β P(disease) = 0.01
- Tes positif kalau punya penyakit: 95% β P(positive|disease) = 0.95
- Tes positif palsu: 5% β P(positive|no disease) = 0.05
Pertanyaan: kalau tes positif, berapa probabilitas benar-benar sakit?
P(disease|positive) = P(positive|disease) Γ P(disease) / P(positive)
P(positive) = P(positive|disease) Γ P(disease) + P(positive|no disease) Γ P(no disease)
= 0.95 Γ 0.01 + 0.05 Γ 0.99
= 0.0095 + 0.0495
= 0.059
P(disease|positive) = 0.95 Γ 0.01 / 0.059
= 0.16
Hanya 16%! Walau tes 95% akurat, karena penyakit jarang, kebanyakan positif sebenarnya false positive.
Pelajaran: prior matters. Banyak kesalahan logika sehari-hari karena ignore base rate.
Worked Example β Visualisasi Bayes Update
Bayangkan 10.000 orang:
10.000 orang total
βββ 100 sakit (1%)
β βββ 95 tes positif β
(true positive)
β βββ 5 tes negatif β (false negative)
βββ 9.900 sehat (99%)
βββ 495 tes positif β (false positive)
βββ 9.405 tes negatif β
(true negative)
Total tes positif = 95 + 495 = 590
Yang BENERAN sakit dari 590 positif = 95
P(sakit | positif) = 95/590 β 16%
flowchart TD
Pop["π₯ 10.000 orang"] --> Sick["π€ 100 sakit (1%)"]
Pop --> Well["πͺ 9.900 sehat (99%)"]
Sick --> TP["β
95 positif<br/>(true positive)"]
Sick --> FN["β 5 negatif<br/>(false negative)"]
Well --> FP["β οΈ 495 positif<br/>(FALSE POSITIVE!)"]
Well --> TN["β
9.405 negatif<br/>(true negative)"]
TP --> Pos["π Total positif: 590"]
FP --> Pos
Pos --> Result["π― P(sakit|positif)<br/>= 95/590 β 16%"]
Insight: false positive (495) jauh lebih banyak dari true positive (95) β meskipun tes 95% akurat. Ini sebabnya disease screening untuk penyakit jarang sering memberi hasil menyesatkan.
Aplikasi di ML
- Naive Bayes Classifier β implementasi langsung Bayes
- Bayesian Inference β update parameter model dengan evidence baru
- Bayesian Networks β model probabilistic graphical
Bagian 6 β Hypothesis Testing (Sneak Peek)
Konsep
- Bikin null hypothesis Hβ (default, no effect)
- Bikin alternative Hβ (ada effect)
- Hitung p-value β probabilitas observasi seekstrim ini, jika Hβ benar
- Kalau p-value < threshold (biasanya 0.05) β tolak Hβ
Analogi "kejutan": p-value itu seperti seberapa mengejutkan hasilnya kalau asumsi default (Hβ) benar. p-value kecil = "hasil ini sangat aneh kalau Hβ benar β mungkin Hβ salah". p-value besar = "hasil ini wajar saja, tidak ada alasan menolak Hβ".
flowchart TD
H0["π Hβ: tidak ada efek<br/>(default skeptis)"] --> Exp["π§ͺ Eksperimen<br/>kumpul data"]
Exp --> P["π― Hitung p-value"]
P --> Q{"p < 0.05?"}
Q -->|"Iya π²<br/>(mengejutkan!)"| Reject["β Tolak Hβ<br/>(efek nyata)"]
Q -->|"Tidak π΄<br/>(biasa saja)"| Keep["β
Terima Hβ<br/>(belum cukup bukti)"]
Contoh
Hβ: koin fair (P(head) = 0.5) Hβ: koin tidak fair
Lempar 100 kali, dapat 70 head. p-value = ?
Kalau Hβ benar, peluang dapat 70+ head dari 100 = sangat kecil. p-value < 0.05 β tolak Hβ.
Tipe Error
- Type I: tolak Hβ padahal benar (false positive)
- Type II: terima Hβ padahal salah (false negative)
Konteks ML: A/B testing model versions, evaluating model improvements.
Bagian 7 β Correlation vs Causation
Correlation
Ukuran "sejauh mana 2 variabel berubah bersama".
Pearson correlation (-1 sampai 1):
- 1 = perfect positive (naik bersama)
- 0 = no correlation
- -1 = perfect negative (satu naik, satu turun)
np.corrcoef(x, y)
Klasik: Correlation β Causation
Es krim sales correlate dengan kasus tenggelam. Apakah es krim menyebabkan tenggelam? Tidak. Variable ketiga (panas) menyebabkan keduanya.
Penting di ML: model bisa belajar correlation. Untuk causal claim butuh causal inference (bidang sendiri).
Bagian 8 β Sampling
Population vs Sample
- Population: semua data yang relevan (semua orang Indonesia)
- Sample: subset (1000 orang yang di-survey)
Sampling Methods
- Random sampling β paling umum
- Stratified β pertahankan proporsi grup
- Systematic β tiap N item
- Cluster β grup geografis
Sampling Bias
Salah pilih sample β kesimpulan salah.
Contoh: survey internet β bias terhadap internet users.
Konteks ML: training data bias = model bias. Hati-hati kapan sample mewakili population.
Bagian 9 β Train/Validation/Test Split
Penting di ML. Sudah disebutkan di Fase 1, sekarang lebih detail.
Pembagian
[--------- Training (60-80%) ---------|--Val (10-20%)--|--Test (10-20%)--]
- Training β train model
- Validation β tune hyperparameters, monitor overfitting
- Test β evaluasi final, sekali pakai
Aturan Emas
JANGAN PERNAH train pakai test set. Itu seperti murid lihat soal ujian sebelum ujian.
Cross-Validation (k-Fold)
Untuk dataset kecil:
Fold 1: [Test|Train|Train|Train|Train]
Fold 2: [Train|Test|Train|Train|Train]
...
Fold 5: [Train|Train|Train|Train|Test]
Train 5 kali, average performance. Lebih reliable estimate.
from sklearn.model_selection import cross_val_score
scores = cross_val_score(model, X, y, cv=5)
print(scores.mean(), scores.std())
Bagian 10 β Metrics
Klasifikasi
Confusion Matrix:
Predicted
Pos Neg
Actual Pos TP FN
Neg FP TN
- Accuracy = (TP+TN) / total
- Precision = TP / (TP+FP) β "dari yang predict positive, berapa benar?"
- Recall = TP / (TP+FN) β "dari yang aktual positive, berapa terdeteksi?"
- F1 = harmonic mean (precision, recall)
Aturan praktis:
- Class imbalance? β precision/recall lebih informatif dari accuracy
- Cost false positive tinggi (e.g. spam filter buang email penting)? β precision penting
- Cost false negative tinggi (e.g. kanker terlewat)? β recall penting
Regresi
- MSE/RMSE β average squared error
- MAE β average absolute error
- RΒ² β proporsi variance explained (0-1, semakin tinggi semakin baik)
Classification Probabilistic
- AUC-ROC β area under ROC curve
- Log loss β penalty untuk confidence yang salah
Cek Pemahaman
- Bisa hitung mean, median, std?
- Tahu apa itu normal distribution dan rule 68-95-99.7?
- Paham CLT secara konseptual?
- Bisa apply Bayes' theorem?
- Tahu beda correlation dan causation?
- Tahu kenapa train/test split penting?
- Paham precision vs recall?
Hubungan dengan AI/ML
flowchart TD
LLM["π€ LLM (e.g. GPT)"] --> NTP["π€ Next token prediction"]
NTP --> Logits["π Logits per vocab"]
Logits --> Soft["π² Softmax β distribusi probabilitas"]
Soft --> Sample{"π― Sampling strategy"}
Sample --> Greedy["π Greedy<br/>(max prob)"]
Sample --> Top["π Top-k / Top-p"]
Sample --> Temp["π‘οΈ Temperature<br/>(skala distribusi)"]
Greedy --> Out["π€ Token terpilih"]
Top --> Out
Temp --> Out
| Konsep Statistik | Manifestasi di LLM/ML |
|---|---|
| Probabilitas | Output LLM = P(token|context) untuk semua vocab |
| Softmax | Convert logits ke distribusi probabilitas valid |
| Cross-entropy loss | Beda antara predicted distribusi dan target |
| Sampling (top-k, top-p) | Cara LLM "milih" kata berikutnya |
| Temperature | Tinggi = lebih random, rendah = lebih deterministic |
| Normal init | Inisialisasi weight (nn.init.normal_) |
| Batch norm | Standarisasi (mean=0, std=1) per batch |
| Dropout | Bernoulli sampling pada neuron saat training |
| Confusion matrix | Evaluasi classifier (toxic detection, intent classification) |
Insight kunci: saat ChatGPT "mikir kata berikutnya", dia sebenarnya sampling dari distribusi probabilitas atas ~50.000 token. Temperature, top-k, top-p semua mengontrol bagaimana sampling dilakukan. Statistik ada di setiap step.
Common Mistakes & FAQ
"p-value = probabilitas Hβ benar?"
TIDAK! Ini kesalahpahaman paling umum.
- Salah: "p-value 0.03 = ada 3% chance Hβ benar"
- Benar: "p-value 0.03 = kalau Hβ benar, ada 3% chance dapat hasil seekstrim ini"
P-value adalah P(data | Hβ), bukan P(Hβ | data). Bedanya halus tapi penting (ini sebenarnya aplikasi Bayes' theorem).
"Correlation tinggi = causation, kan?"
Tidak. Es krim sales dan kasus tenggelam berkorelasi (keduanya naik di musim panas), tapi es krim tidak menyebabkan orang tenggelam. Variable ketiga (cuaca panas) menyebabkan keduanya. Untuk causal claim butuh randomized experiment atau causal inference framework.
"Mean lebih baik dari median, kan?"
Tergantung. Mean = rata-rata, median = nilai tengah.
- Mean baik untuk data simetris tanpa outlier
- Median lebih robust kalau ada outlier ekstrem
Contoh: gaji di startup. Kalau founder dapat 100x gaji junior, mean gaji "tinggi" tapi menyesatkan. Median lebih representatif.
"Accuracy 95% = model bagus?"
Tidak selalu. Kalau dataset class imbalance (mis. 95% class 0, 5% class 1), model yang selalu predict class 0 dapat 95% accuracy β tanpa belajar apa-apa. Pakai precision, recall, F1 untuk class imbalance.
"Probability vs likelihood, beda?"
- Probability =
P(data | parameter)β anggap parameter fixed, hitung peluang data - Likelihood =
L(parameter | data)β anggap data fixed, hitung "seberapa cocok" parameter
Bentuknya mirip secara matematika tapi interpretasinya beda. Maximum Likelihood Estimation (MLE) = cari parameter yang memaksimalkan likelihood.
"Variance vs standard deviation?"
StdΒ² = variance. Std punya unit yang sama dengan data (mis. rupiah), variance dalam unit kuadrat (rupiahΒ²). Std lebih intuitif untuk dibaca; variance lebih sering muncul di rumus.
"Kenapa pakai squared error, bukan absolute error?"
- MSE = mean((y_pred - y_true)Β²) β penalti besar untuk error besar, smooth (bisa diturunkan)
- MAE = mean(|y_pred - y_true|) β penalti linear, lebih robust ke outlier
MSE lebih populer karena turunannya enak. Tapi MAE lebih baik kalau dataset banyak outlier.
"Confusion matrix kebalik (TP/FP) β gimana ngafalin?"
Pakai pola "Actual baris, Predicted kolom":
- True/False = apakah prediksinya benar?
- Positive/Negative = apa yang di-prediksi?
Jadi False Positive = prediksi positif tapi salah (= aktual negatif). False Negative = prediksi negatif tapi salah (= aktual positif, tapi kelewatan).
Challenge 3.6
Challenge 1 β Tonton StatQuest
Playlist "Statistics Fundamentals" oleh Josh Starmer. Wajib episode:
- Histograms
- Population/Sample
- Normal Distribution
- Mean/Median/Mode
- Variance/SD
- Hypothesis Testing
- p-values
Tulis 10 insight di jurnal.
Challenge 2 β Statistik Deskriptif Manual
Diberikan data: [12, 15, 18, 22, 25, 30, 32, 35, 40, 100]
Hitung manual:
- Mean
- Median
- Variance
- Std
- Q1, Q3, IQR
- Identifikasi outlier (definisi: > Q3 + 1.5ΓIQR)
Cek dengan NumPy.
Challenge 3 β Plot Distribusi
Pakai matplotlib + numpy:
import numpy as np
import matplotlib.pyplot as plt
# 4 distribusi
fig, axes = plt.subplots(2, 2, figsize=(10, 8))
# Normal
data = np.random.normal(0, 1, 10000)
axes[0, 0].hist(data, bins=50)
axes[0, 0].set_title("Normal")
# Uniform
data = np.random.uniform(0, 1, 10000)
axes[0, 1].hist(data, bins=50)
axes[0, 1].set_title("Uniform")
# Exponential
data = np.random.exponential(1, 10000)
axes[1, 0].hist(data, bins=50)
axes[1, 0].set_title("Exponential")
# Binomial
data = np.random.binomial(20, 0.5, 10000)
axes[1, 1].hist(data, bins=20)
axes[1, 1].set_title("Binomial")
plt.tight_layout()
plt.show()
Observasi: bentuk masing-masing.
Challenge 4 β Demonstrasi CLT
import numpy as np
import matplotlib.pyplot as plt
# Distribusi original β uniform (bukan normal!)
population = np.random.uniform(0, 100, 100000)
plt.subplot(1, 2, 1)
plt.hist(population, bins=50)
plt.title("Population (Uniform)")
# Mean dari banyak sample
sample_means = []
for _ in range(10000):
sample = np.random.choice(population, size=30)
sample_means.append(sample.mean())
plt.subplot(1, 2, 2)
plt.hist(sample_means, bins=50)
plt.title("Sample Means (looks Normal!)")
plt.show()
Walau population uniform, sample means β normal. Itu CLT.
Challenge 5 β Bayes' Theorem Problem
Spam filter:
- 30% email adalah spam
- 95% spam mengandung kata "lottery"
- 5% non-spam mengandung kata "lottery"
Email mengandung "lottery". Berapa probabilitas spam?
Hitung manual + verifikasi dengan code.
Challenge 6 β Confusion Matrix Manual
Diberikan:
y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0]
y_pred = [1, 0, 1, 0, 0, 1, 1, 0, 1, 1]
Hitung manual:
- TP, TN, FP, FN
- Accuracy
- Precision (untuk class 1)
- Recall (untuk class 1)
- F1
Verifikasi dengan sklearn:
from sklearn.metrics import confusion_matrix, classification_report
print(confusion_matrix(y_true, y_pred))
print(classification_report(y_true, y_pred))
Challenge 7 β Real Dataset Analysis
Pakai dataset Kaggle (mis. Titanic):
- Load CSV
- Statistik deskriptif (mean, std, dll) per kolom numeric
- Distribusi tiap kolom (histogram)
- Correlation matrix
- Jelaskan 3 insight yang kamu lihat
import pandas as pd
df = pd.read_csv("titanic.csv")
df.describe()
df.hist()
df.corr()
Challenge 8 β Refleksi
Tulis: "Setelah belajar statistik, apa yang sebelumnya membingungkan tentang ML sekarang masuk akal?"
400-500 kata.
Selanjutnya: challenges.md β final challenge konsolidasi Fase 3 sebelum lanjut ke NumPy/Pandas di Fase 4.