Supervised Learning:
Regresi & Klasifikasi
Supervised learning adalah inti dari machine learning praktis — model belajar dari data berlabel untuk membuat prediksi pada data baru. Sesi ini memperkenalkan konsep, pipeline, algoritma utama, dan cara mengevaluasi model.
1. Supervised vs Unsupervised Learning
Supervised learning seperti belajar dengan guru yang memberi contoh berulabel: "ini foto kucing (label: kucing), ini foto anjing (label: anjing)." Model belajar dari pasangan input–label untuk memprediksi label pada data baru.
Unsupervised learning seperti anak yang diberi ribuan foto hewan tanpa keterangan — ia sendiri menemukan pola: "kelompok ini mirip satu sama lain." Tidak ada jawaban benar yang diberikan.
| Aspek | Supervised | Unsupervised |
|---|---|---|
| Label Y | Ada | Tidak ada |
| Tujuan | Prediksi / klasifikasi | Temukan struktur tersembunyi |
| Evaluasi | Bandingkan prediksi vs label aktual | Lebih sulit — tidak ada "jawaban benar" |
| Contoh algoritma | Linear Regression, Decision Tree, SVM | K-Means, PCA, DBSCAN |
2. Pipeline Machine Learning
3. Regresi: Prediksi Nilai Numerik
Regresi memodelkan hubungan antara target Y (numerik) dan satu atau lebih prediktor X. Output model adalah angka — bukan kategori.
ŷ = β₀ + β₁X₁ + β₂X₂ + ... + βₚXₚ
β₀ = intercept | β₁…βₚ = koefisien masing-masing prediktor
Model dilatih dengan meminimalkan RSS (Residual Sum of Squares) = Σ(yᵢ − ŷᵢ)²
Metrik Evaluasi Regresi
| Metrik | Rumus | Interpretasi | Kelebihan |
|---|---|---|---|
| MAE | Σ|yᵢ−ŷᵢ|/n | Rata-rata kesalahan absolut — unit sama dengan Y | Mudah dipahami, robust terhadap outlier |
| RMSE | √(Σ(yᵢ−ŷᵢ)²/n) | Seperti MAE tapi menghukum kesalahan besar lebih berat | Paling umum dilaporkan |
| R² | 1 − RSS/TSS | % variansi Y yang dijelaskan model. 1.0 = sempurna | Normalized, mudah dibandingkan antar model |
4. Klasifikasi: Prediksi Kategori
Klasifikasi memprediksi kelas diskrit dari sebuah input. Target Y adalah kategori (lulus/tidak, spam/bukan, sakit/sehat).
Gmail mengevaluasi setiap email: spam atau bukan spam? Keputusan ini berdasarkan ratusan fitur: kata tertentu, pengirim asing, banyak link, huruf kapital berlebihan. Model klasifikasi melakukan hal persis sama — memetakan fitur ke label kelas. Kesalahan ada dua jenis: email penting masuk spam (FN) atau spam lolos ke inbox (FP). Keduanya punya konsekuensi berbeda!
True Positive
85
False Negative
(Type II Error)
12
False Positive
(Type I Error)
8
True Negative
95
5. Algoritma Supervised Learning Populer
6. Cross-Validation: Evaluasi yang Lebih Andal
Evaluasi dengan satu train-test split bisa beruntung atau sial. K-Fold Cross-Validation memberikan estimasi lebih stabil.
Data dibagi k=5 bagian. Tiap iterasi, satu bagian jadi validation, sisanya training. Ulangi 5 kali. Rata-ratakan 5 skor.
Iter 1: [■][□][□][□][□] → score₁
Iter 2: [□][■][□][□][□] → score₂
Iter 3: [□][□][■][□][□] → score₃
Iter 4: [□][□][□][■][□] → score₄
Iter 5: [□][□][□][□][■] → score₅
Final = mean(score₁…₅) ± std
7. Overfitting, Underfitting, dan Bias-Variance Tradeoff
8. Praktik Python
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression, LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import mean_absolute_error, r2_score, classification_report
np.random.seed(42)
n = 200
jam_belajar = np.random.normal(4, 1.5, n).clip(1, 8)
kehadiran = np.random.normal(80, 12, n).clip(40, 100)
nilai_uts = (30 + 7*jam_belajar + 0.4*kehadiran
+ np.random.normal(0, 5, n)).clip(0, 100)
lulus = (nilai_uts >= 60).astype(int)
X = pd.DataFrame({'jam_belajar': jam_belajar, 'kehadiran': kehadiran})
# ── REGRESI: prediksi nilai UTS ──────────────────
X_tr, X_te, y_tr, y_te = train_test_split(X, nilai_uts, test_size=0.2, random_state=42)
reg = LinearRegression().fit(X_tr, y_tr)
y_pred = reg.predict(X_te)
print("=== REGRESI LINEAR ===")
print(f"Koefisien: jam_belajar={reg.coef_[0]:.2f}, kehadiran={reg.coef_[1]:.2f}")
print(f"MAE : {mean_absolute_error(y_te, y_pred):.2f}")
print(f"R² : {r2_score(y_te, y_pred):.3f}")
cv_r2 = cross_val_score(reg, X, nilai_uts, cv=5, scoring='r2')
print(f"CV R²: {cv_r2.mean():.3f} ± {cv_r2.std():.3f}")
# ── KLASIFIKASI: prediksi lulus/tidak ────────────
sc = StandardScaler()
X_tr2, X_te2, y_tr2, y_te2 = train_test_split(X, lulus, test_size=0.2, random_state=42)
X_tr2s = sc.fit_transform(X_tr2); X_te2s = sc.transform(X_te2)
print("\n=== KLASIFIKASI ===")
for name, clf in {
'Logistic Regression': LogisticRegression(),
'Random Forest': RandomForestClassifier(100, random_state=42)
}.items():
clf.fit(X_tr2s, y_tr2)
acc = clf.score(X_te2s, y_te2)
cv = cross_val_score(clf, sc.fit_transform(X), lulus, cv=5)
print(f"{name}: acc={acc:.3f} | CV={cv.mean():.3f}±{cv.std():.3f}")
# Classification report untuk Random Forest
rf = RandomForestClassifier(100, random_state=42).fit(X_tr2s, y_tr2)
print("\n", classification_report(y_te2, rf.predict(X_te2s),
target_names=['Tidak Lulus', 'Lulus']))
=== REGRESI LINEAR ===
Koefisien: jam_belajar=7.15, kehadiran=0.38
MAE : 4.87
R² : 0.891
CV R²: 0.882 ± 0.024 ← konsisten di 5 fold
=== KLASIFIKASI ===
Logistic Regression: acc=0.925 | CV=0.918±0.031
Random Forest : acc=0.950 | CV=0.941±0.022
precision recall f1-score support
Tidak Lulus 0.91 0.93 0.92 29
Lulus 0.97 0.96 0.96 71
accuracy 0.95 100
Uji Pemahaman Sesi 13
- Supervised learning: belajar dari data berlabel untuk prediksi baru. Regresi (target numerik) vs Klasifikasi (target kategori)
- Pipeline ML 6 langkah: definisi masalah → persiapan data → split → latih → evaluasi+tuning → deploy
- Test set hanya boleh digunakan sekali di akhir — mencegah estimasi optimistis yang palsu
- Metrik regresi: MAE (robust, mudah dipahami), RMSE (sensitif outlier), R² (proporsi variansi dijelaskan)
- Confusion matrix: TP, TN, FP, FN — dasar semua metrik klasifikasi
- Accuracy menyesatkan untuk data tidak seimbang. Gunakan Precision/Recall/F1 sesuai konteks
- Recall kritis saat FN mahal (diagnosa penyakit). Precision kritis saat FP mahal (spam filter)
- Overfitting: train jauh lebih baik dari test → high variance → regularisasi, ensemble, lebih banyak data
- Underfitting: keduanya buruk → high bias → model lebih kompleks, tambah fitur relevan
- Cross-validation 5-fold memberikan estimasi performa lebih stabil dari single split