Decision Tree Regression

Memecah Masalah Besar Menjadi Potongan Kecil

1. Apa itu Decision Tree Regression?

Bayangkan Anda ingin menebak gaji seseorang. Alih-alih membuat satu rumus rumit (seperti Regresi Linear), Anda mengajukan serangkaian pertanyaan "Ya/Tidak" untuk mempersempit kemungkinan.

  • Apakah pengalaman kerja > 5 tahun?
  • (Jika Ya) Apakah level manager?
  • (Jika Tidak) Apakah lulusan S2?

Decision Tree membagi data menjadi kelompok-kelompok kecil (kotak-kotak) berdasarkan fitur yang paling membedakan. Prediksi akhirnya adalah Rata-rata (Mean) dari setiap kelompok tersebut.

Kunci: Decision Tree tidak menghasilkan garis lurus atau kurva mulus, melainkan garis "Tangga" (Step Function).

2. Struktur Pohon

  • Pengalaman < 5 Th?
    Total Data: 100
    • Ya (Junior)
      Gaji = 5 Juta
      Rata-rata Grup A
    • Tidak (Senior)
      Punya Sertifikat?
      • Ya
        Gaji = 15 Juta
      • Tidak
        Gaji = 10 Juta

Struktur hierarki keputusan yang dinamis.

3. Algoritma: Bagaimana Pohon Tumbuh?

Tree mencari "pertanyaan terbaik" (Split Point) yang paling banyak mengurangi keacakan (variance/error) data.

Metode yang umum dipakai adalah Minimalkan MSE (Mean Squared Error).

$$ MSE_{split} = \frac{n_{kiri}}{n_{total}} MSE_{kiri} + \frac{n_{kanan}}{n_{total}} MSE_{kanan} $$

Tujuan: Cari titik potong $S$ dimana $MSE_{split}$ paling kecil.

4. Simulasi Perhitungan Manual

Kasus Sederhana:

Kita punya data kecil berikut:

X (Input) Y (Target)
1 1.0
2 2.0
4 7.0
5 8.0

Kita harus mencari titik potong terbaik. Kandidat titik potong adalah nilai tengah antar data: 1.5, 3.0, 4.5.

Kandidat 1: Potong di X < 1.5
Grup Kiri (X < 1.5)
  • Data: {1}
  • Mean: 1.0
  • MSE: 0 (Cuma 1 data)
Grup Kanan (X >= 1.5)
  • Data: {2, 7, 8}
  • Mean: $(2+7+8)/3 = 5.67$
  • MSE: $\frac{(2-5.67)^2 + (7-5.67)^2 + (8-5.67)^2}{3} \approx 7.5$

Total Weighted MSE ≈ 5.6

Kandidat 2: Potong di X < 3.0 (Tengah)
Grup Kiri (X < 3.0)
  • Data: {1, 2}
  • Mean: 1.5
  • MSE: $\frac{(1-1.5)^2 + (2-1.5)^2}{2} = 0.25$
Grup Kanan (X >= 3.0)
  • Data: {7, 8}
  • Mean: 7.5
  • MSE: $\frac{(7-7.5)^2 + (8-7.5)^2}{2} = 0.25$

Total Weighted MSE = $(2/4)*0.25 + (2/4)*0.25 = 0.25$ (JUARA! 🏆)

Kandidat 3: Potong di X < 4.5

Akan mirip dengan kandidat 1 (MSE Besar).

Keputusan: Split pertama adalah X < 3.0.
- Jika $X < 3$, prediksi adalah 1.5.
- Jika $X \geq 3$, prediksi adalah 7.5.

5. Implementasi Python (Scikit-Learn)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.tree import DecisionTreeRegressor

# 1. Data (Sama seperti hitungan manual)
X = np.array([[1], [2], [4], [5]])
y = np.array([1.0, 2.0, 7.0, 8.0])

# 2. Buat Model
# max_depth=1 artinya hanya boleh split 1 kali (seperti hitungan manual kita)
tree_reg = DecisionTreeRegressor(max_depth=1)

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

# 4. Prediksi
# X=1.5 (Harusnya masuk grup kiri -> 1.5)
# X=3.5 (Harusnya masuk grup kanan -> 7.5)
print(f"Prediksi X=1.5: {tree_reg.predict([[1.5]])}")
print(f"Prediksi X=3.5: {tree_reg.predict([[3.5]])}")

# 5. Visualisasi Struktur Pohon (Opsional)
from sklearn.tree import export_text
print(export_text(tree_reg, feature_names=['X']))
Kelemahan Decision Tree: Mudah Overfitting (terlalu menghafal data). Solusinya: Batasi kedalaman pohon (`max_depth`) atau gunakan Random Forest (kumpulan banyak pohon).