Gradient Boosting

"Belajar dari Kesalahan Masa Lalu"

1. Apa itu Gradient Boosting?

Jika Random Forest adalah "Demokrasi" (banyak pohon voting bersamaan), Gradient Boosting adalah "Estafet" (Sequential).

Pohon pertama membuat prediksi kasar. Pohon kedua tidak memprediksi target asli, melainkan memprediksi Error (Residual) dari pohon pertama untuk memperbaikinya. Pohon ketiga memperbaiki error dari gabungan pohon 1 & 2, dan seterusnya.

Filosofi: Model yang kuat adalah gabungan dari banyak model lemah yang masing-masing fokus memperbaiki kesalahan pendahulunya. Ini adalah algoritma dibalik XGBoost, LightGBM, dan CatBoost (Juara Kaggle).

2. Visualisasi: Memperbaiki Residual

Target Asli (Harga): 100 Miliar.

Prediksi Awal (Rata2) 80 M
Sisa Error (Residual) 100 - 80 = 20
LR: 0.1 Pohon 1 Belajar Error "20" Prediksi: 20
+
Update Model 80 + (0.1 * 20) 82 M
Sisa Error Baru 100 - 82 = 18
LR: 0.1 Pohon 2 Belajar Error "18" Prediksi: 18
+
Update Model 82 + (0.1 * 18) 83.8 M
Sisa Error Baru 100 - 83.8 = 16.2

... dan seterusnya sampai 100-1000 pohon ...

3. Matematika: Additive Model

Model akhir $F(x)$ adalah penjumlahan dari semua pohon kecil:

$$ F_m(x) = F_{m-1}(x) + \nu \cdot h_m(x) $$
  • $F_{m-1}(x)$: Prediksi model sebelumnya.
  • $h_m(x)$: Pohon baru yang memprediksi Residual ($y - F_{m-1}$).
  • $\nu$ (Nu / Learning Rate): Langkah kecil (misal 0.1). Kita tidak langsung menambahkan 100% prediksi pohon baru agar model pelan-pelan belajar (tidak overshoot) dan lebih akurat.

4. Simulasi Perhitungan Manual

Kasus: Prediksi Umur (Target = 30 tahun)

Learning Rate ($\nu$) = 0.5 (Agar hitungan cepat selesai).

Iterasi Prediksi Saat Ini ($F$) Residual ($y - F$) Pohon Baru ($h$) Prediksi Residual Update $F + \nu \cdot h$
0 (Awal) 20 (Rata-rata populasi) $30 - 20 = \mathbf{10}$ - -
1 20 10 Pohon 1 menebak: 10 $20 + 0.5(10) = \mathbf{25}$
2 25 $30 - 25 = \mathbf{5}$ Pohon 2 menebak: 5 $25 + 0.5(5) = \mathbf{27.5}$
3 27.5 $30 - 27.5 = \mathbf{2.5}$ Pohon 3 menebak: 2.5 $27.5 + 0.5(2.5) = \mathbf{28.75}$
Lihat bagaimana prediksi pelan-pelan mendekati 30:
20 $\rightarrow$ 25 $\rightarrow$ 27.5 $\rightarrow$ 28.75 ...

5. Implementasi Python (Scikit-Learn)

import numpy as np
from sklearn.ensemble import GradientBoostingRegressor

# 1. Data
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([1.1, 1.9, 3.2, 4.1, 5.2]) # Pola Linear + Noise

# 2. Buat Model Boosting
# n_estimators=100 : 100 pohon estafet
# learning_rate=0.1 : Langkah kecil biar detail
# max_depth=1 : Pohonnya pendek-pendek (Decision Stump) biasanya cukup
gbr = GradientBoostingRegressor(n_estimators=100, learning_rate=0.1, max_depth=1, random_state=42)

# 3. Training
gbr.fit(X, y)

# 4. Prediksi
print("Prediksi untuk X=6:", gbr.predict([[6]]))

# 5. Tips Pro
# Untuk data tabular besar, Data Scientist biasanya pakai library khusus:
# - XGBoost (eXtreme Gradient Boosting)
# - LightGBM (Microsoft)
# - CatBoost (Yandex)
# Karena lebih cepat dan punya fitur canggih dibanding sklearn standar.