Belajar Machine Learning - Supervised: Regression
Episode 5 of 25

Belajar Machine Learning - Supervised: Regression

Menguasai supervised learning jenis regression: linear dan polynomial regression, regularisasi dengan Ridge/Lasso/ElasticNet untuk melawan overfitting, serta evaluasi dengan MSE, MAE, dan R2 melalui studi kasus prediksi harga rumah menggunakan scikit-learn.

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

Pendahuluan

Setelah di episode 4 kita membersihkan dan menyiapkan data, pada episode ini kita masuk ke supervised learning pertama: regression. Jika target yang ingin diprediksi berupa angka kontinu — harga rumah, penjualan, suhu — maka regression adalah pilihan kalian.

Mengapa regression penting dipelajari pertama? Karena ia adalah model paling sederhana dan paling mudah dipahami secara matematis, dan konsep yang dipelajari di sini (loss function, overfitting, regularisasi) adalah fondasi untuk semua model yang lebih kompleks. Memahami regression berarti memahami cara kerja model ML secara umum.

Linear Regression

Linear regression memodelkan hubungan y = w·x + b: bobot w dan bias b dipilih agar garis paling cocok dengan data. Konsep dot product yang kita bahas di episode 3 muncul kembali di sini.

Linear regression
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
 
model = LinearRegression()
model.fit(X_train, y_train)
 
preds = model.predict(X_test)
print(f"MSE = {mean_squared_error(y_test, preds):.2f}")
print(f"koefisien = {model.coef_}")

Model "belajar" dengan mencari bobot yang meminimalkan error. Error inilah yang disebut loss function — untuk regression, yang paling umum adalah Mean Squared Error (MSE): rata-rata kuadrat selisih prediksi dan aktual.

100%

Karena selisih dikuadratkan, error besar dihukum jauh lebih berat daripada error kecil — itulah mengapa outlier bisa sangat merusak regresi linear.

Polynomial Regression

Tidak semua hubungan bersifat linear. Harga rumah bisa naik dengan laju menurun seiring luas tanah — kurva, bukan garis. Polynomial regression menambahkan pangkat dari fitur: y = w1·x + w2·x² + b.

Polynomial features
from sklearn.preprocessing import PolynomialFeatures
 
poly = PolynomialFeatures(degree=2, include_bias=False)
X_train_poly = poly.fit_transform(X_train)
 
model = LinearRegression()
model.fit(X_train_poly, y_train)

Dengan menaikkan derajat polynomial, model semakin fleksibel — dan semakin mudah overfit. Sebuah polynomial derajat tinggi bisa melewati semua titik data persis, tetapi tidak bisa menebak data baru dengan baik. Inilah trade-off yang menjadi tema episode 7 dan 10.

Regularisasi: Ridge, Lasso, ElasticNet

Regularisasi adalah cara membatasi fleksibilitas model: ia menambahkan penalti pada besarnya bobot, sehingga model lebih memilih bobot kecil dan hasil yang lebih sederhana.

ModelPenaltiEfek
RidgeKuadrat bobot (L2)Mengecilkan bobot, semua fitur tetap dipakai
LassoNilai absolut bobot (L1)Bisa menjadikan bobot tepat nol → seleksi fitur
ElasticNetGabungan L1 + L2Kompromi keduanya
Ridge, Lasso, ElasticNet
from sklearn.linear_model import Ridge, Lasso, ElasticNet
 
models = {
    "ridge": Ridge(alpha=1.0),
    "lasso": Lasso(alpha=0.01),
    "elasticnet": ElasticNet(alpha=0.01, l1_ratio=0.5),
}
 
for name, m in models.items():
    m.fit(X_train, y_train)
    print(f"{name}: R2 = {m.score(X_test, y_test):.4f}")

Parameter alpha mengontrol kekuatan penalti: terlalu besar → model terlalu sederhana (underfit); terlalu kecil → hampir seperti regresi biasa (bisa overfit). Menemukan alpha yang tepat adalah pekerjaan hyperparameter tuning — dibahas di episode 10.

Warning

Jangan lupa scale fitur dulu sebelum regularisasi. Ridge, Lasso, dan ElasticNet menghitung penalti pada besarnya koefisien — jika kolom pendapatan berskala jutaan dan umur puluhan, penalti didominasi kolom berskala besar dan hasilnya tidak masuk akal.

Evaluasi Regression

Tiga metrik yang wajib kalian kuasai:

Metrik evaluasi regression
from sklearn.metrics import mean_absolute_error, mean_squared_error, r2_score
 
preds = model.predict(X_test)
 
print(f"MAE = {mean_absolute_error(y_test, preds):.2f}")
print(f"MSE = {mean_squared_error(y_test, preds):.2f}")
print(f"RMSE = {mean_squared_error(y_test, preds, squared=False):.2f}")
print(f"R2  = {r2_score(y_test, preds):.3f}")
MetrikArtiUnit
MAERata-rata selisih absolutSama dengan target (mudah dibaca)
MSERata-rata selisih kuadratMenghukum error besar
RMSEAkar dari MSESama dengan target, menghukum error besar
Proporsi variansi yang dijelaskan model0-1, tanpa unit

R² = 0.85 berarti model menjelaskan 85% variansi target — sisanya 15% tidak tertangkap model. R² bisa negatif jika model lebih buruk daripada sekadar memakai rata-rata data.

Studi Kasus: Prediksi Harga Rumah

Mari rangkai semuanya dengan dataset boston versi modern (California housing) yang tersedia di scikit-learn:

Pipeline regresi lengkap
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Ridge
from sklearn.metrics import r2_score
 
data = fetch_california_housing()
X, y = data.data, data.target
 
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)
 
pipeline = Pipeline([
    ("scale", StandardScaler()),
    ("model", Ridge(alpha=1.0)),
])
 
pipeline.fit(X_train, y_train)
preds = pipeline.predict(X_test)
print(f"R2 test = {r2_score(y_test, preds):.4f}")

Output R² di rentang 0.6-0.7 untuk dataset ini sudah tergolong wajar. Perhatikan pola yang sudah menjadi kebiasaan kita: scaling → model, dibungkus Pipeline, dievaluasi dengan metrik yang jelas.

Common Pitfalls

  • Me-refit scaler pada test set: bobot scaling harus dari train set (ingat episode 4).
  • Tidak menscale sebelum regularisasi: penalti jadi tidak adil antar fitur.
  • Memakai R² sebagai satu-satunya ukuran: pada data dengan outlier, MAE/RMSE memberi gambaran yang berbeda.
  • Overfit polynomial: derajat tinggi di train set, hancur di test set — selalu evaluasi di data yang belum terlihat.

Penutup

Pada episode 5 ini, kalian telah menguasai supervised learning pertama.

Inti yang harus dibawa pulang:

  • Regression memprediksi target kontinu; linear adalah fondasinya.
  • Polynomial menambah fleksibilitas tapi rawan overfit.
  • Regularisasi (Ridge/Lasso/ElasticNet) membatasi bobot agar model sederhana.
  • Evaluasi dengan MAE, RMSE, R² — masing-masing memberi sudut pandang berbeda.
  • Selalu scale fitur sebelum model berbasis gradien atau regularisasi.

Di episode 6 selanjutnya kita akan membahas classification — logistic regression, kNN, dan evaluasi dengan accuracy, precision/recall, F1, confusion matrix, dan ROC-AUC, plus penanganan data tidak seimbang (class_weight, SMOTE) melalui studi kasus prediksi churn. Sampai jumpa di episode 6!