Random Forest Regression

"Satu Pohon Lemah, Hutan Itu Kuat"

1. Apa itu Random Forest?

Decision Tree punya satu kelemahan fatal: Tidak Stabil (Unstable). Jika data berubah sedikit, bentuk pohon bisa berubah total.

Random Forest adalah solusi "Keroyokan" (Ensemble). Alih-alih mempercayai satu pohon pakar, kita membuat 100 pohon bodoh yang dilatih dengan data acak, lalu mengambil rata-rata pendapat mereka.

Wisdom of the Crowd: Rata-rata dari banyak prediksi yang kurang akurat seringkali lebih akurat daripada satu prediksi pakar.

2. Visualisasi: The Forest

Bayangkan kita ingin memprediksi harga rumah. Kita punya 3 Pohon dalam hutan kita.

Pohon 1 (Data Acak A)
  • Luas > 100?
    • Rp 2M
    • Rp 1M
Prediksi: 2M
Pohon 2 (Data Acak B)
  • Lokasi Kota?
    • Rp 2.5M
    • Rp 800jt
Prediksi: 2.5M
Pohon 3 (Data Acak C)
  • Kamar > 3?
    • Rp 1.8M
    • Rp 1.2M
Prediksi: 1.8M
Final Prediction (Aggregating)

$\frac{2.0 + 2.5 + 1.8}{3} = \mathbf{2.1 \text{ Milyar}}$

3. Algoritma: Bagging (Bootstrap Aggregating)

Bagaimana cara membuat pohon-pohon ini berbeda? (Kalau datanya sama, pohonnya pasti sama dong?)

Kuncinya ada di Keacakan (Randomness):

  1. Bootstrap Sampling (Acak Baris)
    Setiap pohon dilatih dengan sampel data yang diambil secara acak dengan pengembalian (replacement). Ada data yang dobel, ada yang hilang.
  2. Feature Randomness (Acak Kolom)
    Saat membelah node, pohon tidak boleh melihat semua fitur. Ia hanya boleh memilih dari sebagian fitur acak. Ini memaksa pohon untuk menjadi "kreatif".

4. Simulasi Perhitungan Manual

Kasus: Prediksi Cuaca Besok (Suhu)

Kita punya 5 Pohon Keputusan (T1 sampai T5). Masukan data hari ini: Mendung, Angin Kencang.

Pohon Prediksi Suhu ($^\circ$C) Alasan (Logika Pohon)
Tree 1 28 Mendung biasanya sejuk.
Tree 2 30 Angin kencang bawa hawa panas. (Overfit?)
Tree 3 27 Bulan ini musim hujan.
Tree 4 29 Kemarin 30, mungkin turun dikit.
Tree 5 15 ERROR/Ngaco (Outlier).
Agregasi (Rata-rata)

$$ \bar{Y} = \frac{28 + 30 + 27 + 29 + 15}{5} = \frac{129}{5} = 25.8^\circ C $$

Perhatikan: Prediksi "Ngaco" (15) dari Tree 5 tertutupi oleh 4 pohon lainnya yang normal. Inilah kenapa Random Forest tahan banting (Robust) terhadap noise/outlier.

5. Implementasi Python (Scikit-Learn)

import numpy as np
from sklearn.ensemble import RandomForestRegressor

# 1. Data (X=Kamar, Lokasi | Y=Harga)
X = np.array([[1, 1], [2, 2], [3, 2], [5, 1]]) 
y = np.array([100, 200, 300, 500])

# 2. Buat Model
# n_estimators=100 : Kita tanam 100 pohon
# random_state=42  : Agar hasil bisa diulang (tetap)
rf_model = RandomForestRegressor(n_estimators=100, random_state=42)

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

# 4. Prediksi
# Rumah: 4 Kamar, Lokasi 1
prediksi = rf_model.predict([[4, 1]])
print(f"Prediksi Harga: {prediksi[0]:.2f}")

# 5. Intip satu pohon (Opsional)
one_tree = rf_model.estimators_[0]
print(f"Pohon pertama memprediksi: {one_tree.predict([[4, 1]])[0]}")