Model linier bebas mengejar apapun yang bisa mengecilkan galat latih — termasuk menggelembungkan koefisien demi menyerap derau. Regularisasi menutup celah itu dengan menambahkan penalti pada besar koefisien ke dalam loss, sehingga model dipaksa memilih solusi yang sederhana dan lebih siap menghadapi data baru. Chapter ini membahas tiga varian paling penting — Ridge (penalti L2), Lasso (penalti L1), dan Elastic Net (campuran keduanya) — beserta makna hyperparameter alpha, alasan wajibnya standardisasi fitur, dan satu demonstrasi di mana Lasso berhasil meniadakan tepat seluruh fitur derau yang kita tanam sengaja.
Mengapa Model Perlu Dikandangkan #
Ingat kembali gejala overfitting pada Chapter Overfitting dan Underfitting: galat latih terus mengecil sementara galat data baru membesar. Pada regresi, salah satu pendorongnya adalah koefisien yang terlalu bebas: dengan banyak fitur, least squares bersedia memakai kombinasi koefisien ekstrem (positif raksasa di satu fitur, negatif raksasa di fitur yang berkorelasi — persis efek multikolinearitas pada Chapter Regresi Linier Berganda) asalkan galat latih turun sedikit. Regularisasi mengubah fungsi tujuan menjadi dua suku:
loss teratur = galat data + alpha * penalti(besar koefisien)Model kini harus berbagi anggaran: mengecilkan galat dan menjaga koefisien kecil. Penalti kecil sengaja membiarkan model melenceng sedikit dari solusi least squares murni, dengan imbalan koefisien yang stabil dan generalisasi yang lebih baik. alpha mengatur posisi timbangan itu — alpha = 0 mengembalikan kita ke regresi biasa; alpha besar memenjarakan seluruh koefisien mendekati nol.
Ridge: Penalti L2 yang Menyusut Perlahan #
Ridge menambahkan alpha × Σwⱼ² — kuadrat seluruh koefisien (norma L2). Efeknya menyusutkan semua koefisien secara halus menuju nol, tetapi hampir tidak pernah menjadikannya tepat nol: fitur yang lemah tetap menyisakan kontribusi kecil. Keunggulan praktisnya: solusi Ridge punya bentuk tertutup (XᵀX + αI)⁻¹Xᵀy yang selalu bisa dihitung stabil — matriks XᵀX yang nyaris singular karena multikolinearitas menjadi baik-baik saja begitu α ditambahkan ke diagonalnya. Inilah alasan Ridge menjadi obat pertama untuk data berfitur berkorelasi.
Lasso: Penalti L1 yang Memangkas Fitur #
Lasso (least absolute shrinkage and selection operator) menambahkan alpha × Σ|wⱼ| — nilai mutlak (norma L1). Perbedaan bentuk ini kecil di atas kertas, dampaknya besar di lapangan: penalti L1 memiliki titik sudut tajam di nol, sehingga proses optimasi sering menggeser koefisien lemah tepat ke nol, bukan sekadar mendekati. Hasilnya adalah sparsity: sebagian fitur otomatis dimatikan, dan Lasso sekaligus menjadi alat pemilihan fitur (feature selection) — sangat berguna saat kita punya puluhan fitur dan curiga hanya sebagian yang benar-benar relevan. Konsekuensinya, Lasso tidak punya rumus tertutup dan diselesaikan secara iteratif (coordinate descent).
Elastic Net: Kompromi Keduanya #
Elastic Net mencampur kedua penalti dengan tombol l1_ratio (0 sampai 1): nilai 1 menjadi Lasso murni, nilai 0 menjadi Ridge murni, dan nilai antara — misalnya 0,5 — membagi keduanya. Kombinasi ini menjawab kelemahan Lasso pada kelompok fitur berkorelasi kuat: Lasso cenderung memilih satu anggota kelompok dan mematikan kawanannya secara sembarangan, sedangkan Elastic Net cenderung membagi kredit secara lebih merata. Praktik umum: biarkan l1_ratio tetap (misalnya 0,5) dan cari alpha terbaik lewat validasi.
| Model | Penalti | Efek pada koefisien | Kapan dipakai |
|---|---|---|---|
| Ridge | L2 (kuadrat) | Semua menyusut, hampir tak ada yang nol | Multikolinearitas; ingin kestabilan |
| Lasso | L1 (mutlak) | Banyak koefisien tepat nol | Pemilihan fitur; fitur relevan sedikit |
| Elastic Net | campuran L1 + L2 | Sparsity yang lebih adil pada fitur berkorelasi | Banyak fitur saling berkorelasi |
Contoh Kode: Tiga Fitur Asli vs Tiga Fitur Derau #
File regularisasi.py membangun 80 rumah sintetis dengan tiga fitur informatif (luas, jarak_ke_pusat, skor_fasilitas — hubungan nyata dengan harga) dan tiga fitur derau yang sama sekali tidak berhubungan. Keempat model dilatih pada data ternormalisasi, lalu alpha digeser dari 0,01 ke 100 untuk mengamati besar total koefisien.
# Regularisasi Ridge, Lasso, dan Elastic Net: penalti pada besar koefisien
# membuat model lebih sederhana dan lebih siap menghadapi data baru.
import numpy as np
from sklearn.linear_model import ElasticNet, Lasso, LinearRegression, Ridge
from sklearn.preprocessing import StandardScaler
rng = np.random.default_rng(42)
n = 80
# Tiga fitur informatif dengan hubungan nyata terhadap harga rumah:
# harga = 2*luas - 6*jarak + 30*skor_fasilitas + derau kecil.
luas = rng.normal(loc=50.0, scale=15.0, size=n)
jarak_ke_pusat = rng.normal(loc=10.0, scale=3.0, size=n)
skor_fasilitas = rng.uniform(0.0, 2.0, size=n)
# Tiga fitur derau yang tidak berhubungan dengan harga sama sekali
# (misalnya nomor rumah, kode warna cat, hari pertama dilihat pembeli).
derau_1 = rng.normal(loc=0.0, scale=20.0, size=n)
derau_2 = rng.normal(loc=0.0, scale=1.0, size=n)
derau_3 = rng.uniform(-5.0, 5.0, size=n)
harga = 2.0 * luas - 6.0 * jarak_ke_pusat + 30.0 * skor_fasilitas \
+ rng.normal(loc=0.0, scale=3.0, size=n)
X = np.column_stack(
[luas, jarak_ke_pusat, skor_fasilitas, derau_1, derau_2, derau_3]
)
nama_fitur = ["luas", "jarak_ke_pusat", "skor_fasilitas",
"derau_1", "derau_2", "derau_3"]
# Penalti membandingkan besar koefisien ANTAR fitur, jadi fitur WAJIB
# distandarkan lebih dulu supaya penalti berlaku adil pada semua kolom.
X_skala = StandardScaler().fit_transform(X)
# Bagian 1: koefisien keempat model pada data ternormalisasi (alpha = 1.0).
kandidat = [
("LinearRegression", LinearRegression()),
("Ridge", Ridge(alpha=1.0)),
("Lasso", Lasso(alpha=1.0)),
("ElasticNet", ElasticNet(alpha=1.0, l1_ratio=0.5)),
]
hasil = {}
for nama, model in kandidat:
model.fit(X_skala, harga)
hasil[nama] = model.coef_
print("Koefisien tiap model (alpha = 1.0, fitur sudah distandarkan):")
print(f"{'fitur':<16}{'OLS':>9}{'Ridge':>9}{'Lasso':>9}{'ElNet':>9}")
for j, nama in enumerate(nama_fitur):
baris = f"{nama:<16}"
for k in ["LinearRegression", "Ridge", "Lasso", "ElasticNet"]:
baris += f"{hasil[k][j]:>9.2f}"
print(baris)
print()
# Bagian 2: efek membesarnya alpha terhadap besar total koefisien.
print("Efek hyperparameter alpha (jumlah nilai mutlak seluruh koefisien):")
print(f"{'alpha':>7}{'Ridge |w|':>12}{'Lasso |w|':>12}")
for alpha in [0.01, 1.0, 100.0]:
ridge = Ridge(alpha=alpha).fit(X_skala, harga)
lasso = Lasso(alpha=alpha).fit(X_skala, harga)
print(f"{alpha:>7.2f}{np.abs(ridge.coef_).sum():>12.2f}"
f"{np.abs(lasso.coef_).sum():>12.2f}")
print()
print("Ridge menyusut perlahan; Lasso lebih cepat meniadakan koefisien,")
print("dan alpha terlalu besar membuat Lasso kehilangan seluruh fiturnya.")Output yang Dihasilkan:
Koefisien tiap model (alpha = 1.0, fitur sudah distandarkan):
fitur OLS Ridge Lasso ElNet
luas 22.35 22.03 21.07 13.58
jarak_ke_pusat -16.79 -16.56 -15.67 -10.49
skor_fasilitas 18.06 17.83 17.16 11.59
derau_1 0.24 0.21 0.00 -0.00
derau_2 0.81 0.80 0.00 0.33
derau_3 -0.14 -0.13 0.00 0.00
Efek hyperparameter alpha (jumlah nilai mutlak seluruh koefisien):
alpha Ridge |w| Lasso |w|
0.01 58.39 58.32
1.00 57.56 53.90
100.00 24.87 0.00
Ridge menyusut perlahan; Lasso lebih cepat meniadakan koefisien,
dan alpha terlalu besar membuat Lasso kehilangan seluruh fiturnya.Bedah kode di atas baris demi baris:
- Baris 13–15 (fitur informatif): ketiga kolom ini benar-benar menentukan harga lewat rumus pada komentar; koefisien “kebenaran”-nya (2, −6, 30 pada skala asli) menjadi pembanding saat membaca hasil.
- Baris 19–21 (fitur derau): tiga kolom dari generator yang sama tetapi tidak pernah dipakai membangun harga — mensimulasikan fitur tidak relevan yang nyaris selalu ada di data nyata.
- Baris 34 (
StandardScaler): seluruh kolom distandarkan (rerata 0, simpangan 1) sebelum masuk model — persis peringatan di atas. Tanpa langkah ini,derau_1berskala raksasa akan didominasi penalti. - Baris 37–46 (melatih empat model): daftar
kandidatmemasangkan nama dan objek estimator; semua estimator punya kontrakfityang sama sehingga loop ini berlaku seragam — pola yang sering kita pakai saat membandingkan model. - Baris 48–54 (tabel koefisien): baris demi baris fitur, kolom demi kolom model. Perhatikan nanti: kolom Lasso pada tiga fitur derau berbunyi 0,00.
- Baris 60–64 (sweep alpha): tiga nilai
alphadilatih ulang, lalunp.abs(coef_).sum()— jumlah nilai mutlak seluruh koefisien — menjadi alat ukur “seberapa besar” model tersebut.
Membaca Hasil: Siapa yang Mematikan Derau #
Tabel koefisien memperlihatkan pembagian peran yang rapi. OLS memberi ketiga fitur derau koefisien kecil tapi hidup (0,24; 0,81; −0,14) — least squares tidak punya alasan menonaktifkannya, sekecil apapun kontribusinya tetap dianggap membantu menurunkan galat latih. Ridge menyusutkan nilai-nilai itu sedikit (0,21; 0,80; −0,13) namun membiarkannya hidup. Lasso menjatuhkan ketiganya tepat ke 0,00 — penalti L1 memutus bahwa kontribusi sekecil itu tidak sebanding dengan biayanya — sambil tetap menjaga koefisien fitur informatif di kisaran 15–21. Elastic Net berada di tengah: dua fitur derau dimatikan, satu (derau_2) dibiarkan kecil di 0,33 karena komponen L2-nya menarik koefisien mendekati nol tanpa selalu menyentuhnya.
Tabel alpha melengkapi cerita dari sisi dosis. Pada alpha = 0,01 kedua model nyaris identik dengan OLS (jumlah koefisien ≈ 58). Pada alpha = 1,0 Ridge baru menyusut sedikit (57,56) sementara Lasso sudah memangkas ke 53,90 — penalti L1 bekerja lebih dini. Pada alpha = 100, Ridge masih menyimpan koefisien total 24,87, tetapi Lasso menjadi 0,00: seluruh model kosong. Pelajarannya dua arah: alpha terlalu kecil sama dengan tanpa regularisasi; terlalu besar sama dengan membuang seluruh fitur. Nilai yang tepat berada di antara keduanya dan tidak bisa ditebak — ia adalah hyperparameter yang dicari lewat validasi silang, kerangka yang akan kita latih di section evaluasi model.
Regularisasi mengubah koefisien — dan di titik ini kita perlu berhenti sejenak: kalau koefisien bisa menyusut, bergeser, bahkan mati karena penalti dan skala fitur, bagaimana caranya membaca koefisien secara benar sebagai penjelasan? Chapter penutup section ini, Interpretasi Koefisien Regresi, mengajukan disiplin penuh untuk itu: syarat “fitur lain dipegang tetap”, bahaya membandingkan koefisien tanpa standardisasi, tafsiran model ber-target logaritmik, dan jebakan-jebakan penafsiran yang paling sering menjebak analis.
Referensi Resmi #
- Ridge and Lasso — scikit-learn User Guide — bagian Ridge regression and classification serta Lasso pada panduan model linier.
- sklearn.linear_model.Ridge — API Reference
— parameter
alphadan formulasi loss Ridge. - sklearn.linear_model.Lasso — API Reference — mekanisme penalti L1 pada Lasso.
- sklearn.linear_model.ElasticNet — API Reference
— kombinasi
alphadanl1_ratio.