MA1420 · DATA SAINS · SESI 13

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

💡 ILUSTRASI — BELAJAR DENGAN DAN TANPA GURU

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.

🎓
Supervised Learning
Data training punya label (jawaban benar). Model belajar memetakan input X → output Y dari contoh berlabel.
Prediksi harga Deteksi spam Diagnosa penyakit
🔍
Unsupervised Learning
Tidak ada label. Model menemukan pola, struktur, atau kelompok tersembunyi secara mandiri.
Segmentasi pelanggan Deteksi anomali Reduksi dimensi
AspekSupervisedUnsupervised
Label YAdaTidak ada
TujuanPrediksi / klasifikasiTemukan struktur tersembunyi
EvaluasiBandingkan prediksi vs label aktualLebih sulit — tidak ada "jawaban benar"
Contoh algoritmaLinear Regression, Decision Tree, SVMK-Means, PCA, DBSCAN

2. Pipeline Machine Learning

1
Definisi Masalah
Regresi (target numerik) atau klasifikasi (target kategori)? Apa metrik sukses? Berapa data tersedia?
2
Persiapan Data
Cleaning, imputasi, encoding kategorikal, scaling, feature engineering. Output: matriks X dan vektor y siap pakai.
← sesi 9–12 sudah kita pelajari!
3
Split Data: Train / Validation / Test
Train (60–80%) untuk fit model. Validation untuk tuning hyperparameter. Test hanya digunakan sekali di akhir — tidak boleh dilihat sebelumnya!
train_test_split() | cross_val_score()
4
Latih Model
Mulai dari model sederhana (linear regression) sebagai baseline. Jangan langsung pakai yang paling kompleks.
model.fit(X_train, y_train)
5
Evaluasi & Tuning
Ukur performa di validation set. Tuning hyperparameter. Analisis kesalahan — lihat di mana model salah.
GridSearchCV() | cross_val_score()
6
Evaluasi Akhir & Deploy
Pakai test set sekali — jika performa memadai, deploy. Monitor performa di produksi secara berkala.
model.predict(X_test)
VISUALISASI PEMBAGIAN DATA (STRATEGI 64/16/20)
TRAIN — 64%
VAL — 16%
TEST — 20%
Train — fit parameter model
Validation — pilih hyperparameter
Test — evaluasi akhir, hanya sekali!

3. Regresi: Prediksi Nilai Numerik

Regresi memodelkan hubungan antara target Y (numerik) dan satu atau lebih prediktor X. Output model adalah angka — bukan kategori.

MODEL REGRESI LINEAR

ŷ = β₀ + β₁X₁ + β₂X₂ + ... + βₚXₚ

β₀ = intercept  |  β₁…βₚ = koefisien masing-masing prediktor

Model dilatih dengan meminimalkan RSS (Residual Sum of Squares) = Σ(yᵢ − ŷᵢ)²

Metrik Evaluasi Regresi

MetrikRumusInterpretasiKelebihan
MAEΣ|yᵢ−ŷᵢ|/nRata-rata kesalahan absolut — unit sama dengan YMudah dipahami, robust terhadap outlier
RMSE√(Σ(yᵢ−ŷᵢ)²/n)Seperti MAE tapi menghukum kesalahan besar lebih beratPaling umum dilaporkan
R²1 − RSS/TSS% variansi Y yang dijelaskan model. 1.0 = sempurnaNormalized, 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).

💡 ILUSTRASI — FILTER EMAIL SPAM

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!

CONFUSION MATRIX — KLASIFIKASI BINER (contoh: prediksi kelulusan)
Prediksi: POSITIF
Prediksi: NEGATIF
Aktual: POSITIF
TP
True Positive
85
FN
False Negative
(Type II Error)
12
Aktual: NEGATIF
FP
False Positive
(Type I Error)
8
TN
True Negative
95
ACCURACY (TP+TN)/total = 180/200 = 90%
Menyesatkan jika data tidak seimbang!
PRECISION TP/(TP+FP) = 85/93 = 91.4%
Penting saat FP mahal (spam filter)
RECALL (SENSITIVITY) TP/(TP+FN) = 85/97 = 87.6%
Penting saat FN mahal (diagnosa penyakit!)
F1-SCORE 2·(P·R)/(P+R) = 89.4%
Gunakan saat butuh keseimbangan P dan R

5. Algoritma Supervised Learning Populer

REGRESI / KLASIFIKASI
Logistic Regression
Meski namanya "regresi", dipakai untuk klasifikasi. Fungsi sigmoid mengubah output linear menjadi probabilitas 0–1, lalu ambil keputusan di threshold 0.5.
✓ Cepat, interpretable, output probabilitas
✗ Asumsi linearitas, tidak tangkap pola kompleks
📌 Baseline klasifikasi, prediksi churn, credit scoring
REGRESI / KLASIFIKASI
Decision Tree
Membuat pohon keputusan dengan pertanyaan ya/tidak berurutan. Setiap node memilih fitur yang memaksimalkan "kemurnian" kelas (Gini impurity / information gain).
✓ Sangat interpretable, tidak perlu scaling
✗ Mudah overfit, tidak stabil
📌 Saat interpretabilitas kritis, aturan bisnis
REGRESI / KLASIFIKASI
Random Forest
Ensemble dari ratusan decision tree, masing-masing dilatih pada subset data dan fitur berbeda. Hasil akhir: voting mayoritas atau rata-rata.
✓ Akurat, robust, built-in feature importance
✗ Kurang interpretable, lebih lambat
📌 Data tabular umum, kompetisi ML
REGRESI / KLASIFIKASI
K-Nearest Neighbors
Klasifikasikan titik baru berdasarkan voting k tetangga terdekat di ruang fitur. Tidak ada proses training eksplisit — lazy learner.
✓ Sederhana, non-parametrik
✗ Lambat saat prediksi, sensitif skala fitur
📌 Rekomendasi sederhana, anomaly detection
REGRESI / KLASIFIKASI
Gradient Boosting (XGBoost)
Bangun tree secara sekuensial — tiap tree baru fokus memperbaiki kesalahan tree sebelumnya. Sangat kuat untuk data tabular terstruktur.
✓ Salah satu terbaik untuk data tabular
✗ Banyak hyperparameter, butuh tuning hati-hati
📌 Kaggle competitions, fraud detection
KLASIFIKASI
Support Vector Machine
Cari hyperplane yang memaksimalkan margin antara dua kelas. Kernel trick memungkinkan SVM bekerja di ruang berdimensi sangat tinggi.
✓ Efektif di dimensi tinggi, robust outlier
✗ Lambat untuk data besar, butuh scaling
📌 Klasifikasi teks, bioinformatika

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.

5-FOLD CROSS-VALIDATION

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

UNDERFITTING
Train: 58% Test: 55%
Model terlalu sederhana — tidak menangkap pola. High bias.
JUST RIGHT ✓
Train: 92% Test: 89%
Menangkap pola utama, generalizes well. Low bias & low variance.
OVERFITTING
Train: 99% Test: 61%
Model hafal noise training — gagal di data baru. High variance.
HIGH BIAS, LOW VAR
Underfitting
Konsisten meleset. Model terlalu sederhana.
LOW BIAS, HIGH VAR
Overfitting
Rata-rata benar tapi tidak konsisten.
HIGH BIAS, HIGH VAR
Terburuk
Meleset dan tidak konsisten.
LOW BIAS, LOW VAR
Ideal ✓
Konsisten tepat sasaran. Tujuan kita.

8. Praktik Python

PYTHON · REGRESI DAN KLASIFIKASI DENGAN SKLEARN
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']))
📤 OUTPUT
=== 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

🧩PERTANYAAN 1 — JENIS MASALAH
Bank ingin membangun model untuk memutuskan apakah permohonan kredit disetujui atau ditolak berdasarkan data nasabah. Ini termasuk jenis masalah ML apa?
✓ Benar! B. Output yang diinginkan adalah keputusan diskrit: disetujui atau ditolak — ini klasifikasi biner. Data histori nasabah (disetujui/ditolak + fiturnya) menjadi data training berlabel → supervised learning. Jika bank ingin prediksi berapa batas kredit (angka), baru itu regresi.
🧩PERTANYAAN 2 — OVERFITTING
Decision Tree menghasilkan train accuracy = 99% dan test accuracy = 68%. Apa masalahnya dan solusi tepat?
✓ Benar! B. Gap besar antara train (99%) dan test (68%) = tanda klasik overfitting. Decision Tree tanpa batasan tumbuh sangat dalam sampai hafal setiap titik data training termasuk noise-nya. Solusi: batasi max_depth, gunakan Random Forest (ensemble mengurangi variance), tambah data training, atau pruning.
🧩PERTANYAAN 3 — METRIK
Model deteksi kanker mendapat akurasi 95%. Namun dari 100 pasien kanker aktual, hanya 40 berhasil terdeteksi. Metrik mana yang paling penting di sini?
✓ Benar! C. Recall = TP/(TP+FN) = 40/100 = 40% — berbahaya! Model melewatkan 60% pasien kanker. Akurasi tinggi 95% bisa karena data tidak seimbang — model prediksi "sehat" untuk semua dan tetap dapat akurasi tinggi. Dalam diagnosa medis, False Negative (pasien kanker tidak terdeteksi) jauh lebih berbahaya — Recall menjadi metrik paling penting.
📋 Ringkasan Sesi 13