Lasso Regression

"The Feature Selector": Memilih yang Penting, Membuang yang Tidak

1. Apa itu Lasso?

LASSO (Least Absolute Shrinkage and Selection Operator) adalah versi ketat dari Regresi Linear. Jika Regresi Linear biasa berusaha meminimalkan error seakurat mungkin (tanpa peduli koefisiennya menjadi raksasa), Lasso menambahkan Penalty (Hukuman) berdasarkan Nilai Mutlak (|m|) dari koefisien tersebut.

Superpower Utama: Lasso bisa memaksa koefisien fitur yang tidak penting menjadi benar-benar NOL (0). Ini berarti Lasso melakukan Feature Selection secara otomatis!

2. Visualisasi: Shrinkage (Penyusutan)

Bayangkan kita memprediksi Harga Rumah dengan 3 fitur. Lihat apa yang dilakukan Lasso saat kita menaikkan kekuatan penalti ($\alpha$).

Regresi Biasa (Alpha = 0)
Luas (Penting)
Kamar (Sedang)
Warna Cat (Sampah)

Fitur sampah masih punya koefisien kecil (bukan nol).

Lasso (Alpha = 1.0)
Luas
Kamar
Warna Cat

Fitur sampah dihapus (Koefisien = 0)!

3. Matematika: L1 Regularization

Tujuan Lasso adalah meminimalkan fungsi biaya (Cost Function) berikut:

$$ Cost = \underbrace{\sum(y_{pred} - y_{asli})^2}_{\text{MSE (Error Biasa)}} + \underbrace{\alpha \sum |m|}_{\text{Penalty L1}} $$
  • $\alpha$ (Alpha): Kekuatan hukuman.
    • $\alpha = 0$: Sama persis dengan Linear Regression biasa.
    • $\alpha$ Besar: Koefisien dipaksa mendekati nol (Underfitting/Simple Model).
  • $\sum |m|$: Jumlah nilai mutlak semua koefisien (kemiringan).

4. Simulasi Perhitungan Manual

Kasus Sederhana (1 Data Point):

Misal kita punya 1 data: X=1, Y=1. Kita mencari kemiringan (slope) $m$. Model kita: $y = m \cdot x$.

Rumus Cost Lasso ($\alpha = 0.5$):

Cost = (1 - m*1)² + 0.5 * |m|

Nilai m (Slope) MSE $(1-m)^2$ Penalty $0.5|m|$ Total Cost
$m = 1.0$ (Ideal Biasa) $(1-1)^2 = 0$ $0.5(1) = 0.5$ 0.50
$m = 0.8$ (Menyusut) $(1-0.8)^2 = 0.04$ $0.5(0.8) = 0.4$ 0.44 (WINNER! 🏆)
$m = 0.5$ (Terlalu Kecil) $(1-0.5)^2 = 0.25$ $0.5(0.5) = 0.25$ 0.50
$m = 1.2$ (Kebesaran) $(1-1.2)^2 = 0.04$ $0.5(1.2) = 0.6$ 0.64
Kesimpulan Ajaib: Meskipun secara logika $m=1$ memberikan error 0 (karena $1 \times 1 = 1$), Lasso lebih memilih $m=0.8$!
Kenapa? Karena Lasso rela "mengorbankan sedikit akurasi" (MSE naik dikit) demi "model yang lebih sederhana" (koefisien lebih kecil).

5. Implementasi Python (Scikit-Learn)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import Lasso, LinearRegression

# 1. Data Dummy (X = Fitur 1 (Penting), Fitur 2 (Sampah), Fitur 3 (Sampah))
# Kita buat y cuma tergantung pada Fitur 1
X = np.array([[1, 5, 2], [2, 1, 8], [3, 9, 1], [4, 2, 5]])
y = np.array([10, 20, 30, 40]) # Polanya jelas: y = 10 * Fitur 1

# 2. Buat Model
model_biasa = LinearRegression()
model_lasso = Lasso(alpha=2.0) # Alpha besar biar kelihatan efeknya

# 3. Training
model_biasa.fit(X, y)
model_lasso.fit(X, y)

# 4. Bandingkan Koefisien (Slope)
print("Koefisien Linear Biasa:", model_biasa.coef_)
# Output mungkin: [10.0, -0.0001, 0.002] (Fitur sampah masih ada nilainya dikit)

print("Koefisien Lasso:", model_lasso.coef_)
# Output Lasso: [9.8, 0.0, 0.0] 
# (Lihat! Fitur 2 dan 3 jadi NOL MUTLAK. Lasso membuang mereka!)

# 5. Prediksi
print("Prediksi:", model_lasso.predict([[5, 100, 100]])) 
# Fitur 2 & 3 (nilai 100 & 100) tidak akan ngaruh apa-apa karena dikali 0.