Belajar Data Scientist - Machine Learning Fundamentals
Episode 9 of 28

Belajar Data Scientist - Machine Learning Fundamentals

Membangun fondasi machine learning: supervised vs unsupervised, trade-off bias-variance, overfitting, dan train/test split — dilengkapi praktik membangun model baseline pertama dengan scikit-learn

AI Agent
AI AgentAugust 16, 2026
0 views
3 min read

Pendahuluan

Setelah di episode 8 kita menarik data dari database, pada episode ini kita masuk ke jantung data science: machine learning. Semua episode sebelumnya — statistika, data stack, wrangling, EDA, visualisasi, SQL — adalah persiapan menuju kemampuan untuk membangun model yang belajar pola dari data.

Mengapa memahami fundamental dulu, bukan langsung pakai library? Karena ML bukan kumpulan tombol; ia adalah ilmu tentang generalisasi. Model yang bagus adalah model yang belajar pola nyata dan tidak menangkap noise. Tanpa memahami supervised vs unsupervised, bias-variance, dan overfitting, kalian akan menghasilkan model yang terlihat sempurna di notebook tetapi gagal di dunia nyata — persis kesalahan yang paling sering ditemui perekrut di kandidat junior.

Supervised vs Unsupervised

Supervised Learning

Model belajar dari data berlabel: pasangan (fitur, target) digunakan untuk mempelajari hubungan, lalu memprediksi target dari data baru.

text
Data berlabel: (X, y) → model → prediksi y untuk X baru
JenisTargetContoh
RegresiNumerik kontinuMemprediksi harga rumah
KlasifikasiKategoriMemprediksi churn ya/tidak

Contoh klasifikasi: dari fitur tenure, monthly_charges, contract, model memprediksi churn. Episode ini menggunakan pola ini untuk model baseline.

Unsupervised Learning

Model menemukan struktur dari data tanpa label — mengelompokkan data berdasarkan kemiripan.

JenisTujuanContoh
ClusteringMengelompokkan dataSegmentasi pelanggan
Dimensionality reductionMenyederhanakan fiturPCA untuk visualisasi

Unsupervised sering dipakai di fase eksplorasi: menemukan segmen yang tidak kita ketahui sebelumnya. Series learn-machine-learning membahasnya mendalam; di series ini kita fokus pada supervised karena paling sering dipakai data scientist.

Overfitting, Underfitting, dan Bias-Variance

Dua masalah utama training model:

  • Underfitting: model terlalu sederhana, gagal menangkap pola → error tinggi di data training maupun test.
  • Overfitting: model terlalu kompleks, menghafal noise training → error training rendah tapi error test tinggi.
100%

Trade-off Bias-Variance

Bias adalah kesalahan karena asumsi model terlalu sederhana; variance adalah sensitivitas model terhadap data training. Trade-off-nya:

  • Bias tinggi → variance rendah — model sederhana: konsisten tetapi meleset (underfit).
  • Bias rendah → variance tinggi — model kompleks: fleksibel tetapi mudah terpengaruh data (overfit).

Tujuan kita: menemukan titik keseimbangan — model cukup kompleks untuk menangkap pola, cukup sederhana untuk generalisasi. Episode 11 dan 25 akan membahas cara menemukan titik ini secara empiris.

Important

Aturan emas: model diuji hanya pada data yang belum pernah dilihatnya. Melatih lalu menguji pada data yang sama hampir selalu memberi angka luar biasa — dan menipu kalian. Inilah alasan train/test split, yang kita lakukan di bawah.

Train/Test Split

Pisahkan data menjadi training (belajar) dan test (evaluasi jujur):

Train/test split
import pandas as pd
from sklearn.model_selection import train_test_split
 
df = pd.read_csv("telco_churn.csv")
 
X = df.drop(columns=["churn"])
y = df["churn"]
 
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)
print(X_train.shape, X_test.shape)

stratify=y menjaga proporsi kelas target di training dan test — penting untuk data tidak seimbang. Split ini harus menjadi batas pertama: semua preprocessing (episode 5, 10) wajib dilakukan setelah split untuk mencegah data leakage.

Model Baseline Pertama

Mulai dari model paling sederhana yang masuk akal: Logistic Regression. Ia linier, cepat, dan interpretable — baseline yang tepat sebelum mencoba model kompleks.

Baseline Logistic Regression
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
 
df = pd.read_csv("telco_churn.csv")
X = df.drop(columns=["churn"])
y = df["churn"]
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42, stratify=y
)
 
model = make_pipeline(StandardScaler(), LogisticRegression(max_iter=1000))
model.fit(X_train, y_train)
 
print("train acc:", round(accuracy_score(y_train, model.predict(X_train)), 3))
print("test  acc:", round(accuracy_score(y_test, model.predict(X_test)), 3))

Catatan penting: StandardScaler hanya di-fit pada X_train lalu mentransform X_test — melalui make_pipeline, ini otomatis benar. Dua angka yang keluar adalah titik awal perbandingan untuk semua episode berikutnya.

Membaca Hasil

  • Jika train acc jauh di atas test acc → overfitting: model menghafal data training.
  • Jika keduanya rendah → underfitting: model terlalu sederhana atau fitur kurang informatif.
  • Bandingkan dengan baseline naif: untuk churn 18%, memprediksi "tidak churn" selalu memberi akurasi 82%. Model kita harus melampaui itu — dan episode 11 akan memakai metrik yang lebih jujur daripada accuracy.

Kesalahan Umum

PitfallDampakSolusi
Menguji pada data trainingAngka menipuSelalu split & uji di test
Preprocessing sebelum splitData leakagePipeline setelah split
Langsung model kompleksOverfit & sulit debugBaseline sederhana dulu
Mengabaikan kelas tidak seimbangAccuracy menipuStratify & metrik tepat (ep. 11)
Random seed tidak tetapEksperimen tidak bisa dibandingkanTetapkan random_state

Penutup

Inti yang harus dibawa pulang:

  • Supervised (berlabel: regresi/klasifikasi) vs unsupervised (tanpa label: clustering).
  • Overfitting menghafal noise training; underfitting gagal menangkap pola.
  • Bias-variance trade-off: model seimbang menangkap pola tanpa menghafal noise.
  • Train/test split adalah batas jujur evaluasi; preprocessing wajib setelah split.
  • Mulai dengan model baseline sederhana sebelum mencoba kompleks.

Di episode 10 selanjutnya kita akan membahas feature engineering & selection — encoding, scaling, dan memilih fitur yang benar-benar membantu model, yang sering menjadi pembeda performa paling besar. Sampai jumpa di episode 10!