Decision Tree Classifier

"Membuat Keputusan Berdasarkan Aturan Bertingkat"

1. Apa itu Decision Tree?

Jika Regresi memprediksi "Angka" (misal: Harga Rumah), maka Klasifikasi memprediksi "Kelas/Label" (misal: Beli / Tidak Beli).

Decision Tree memecah data menjadi kelompok-kelompok yang semakin Murni (Pure). Tujuannya: Membuat kotak di mana isinya 100% "Ya" atau 100% "Tidak".

2. Visualisasi: Gini Impurity

Studi Kasus: Apakah kita akan main Tenis? (Data: 10 Hari).
Gini Impurity 0.0 = Murni (Isinya cuma 1 kelas).
Gini Impurity 0.5 = Kotor (Isinya 50:50, tidak jelas).

  • Cuaca? Gini: 0.48 Total: 10 Data
    • Hujan? Gini: 0.5 3 Yes / 3 No
      • Angin Kencang?
        • NO 2 Data
        • YES 1 Data
    • Mendung
      Gini: 0.0 YES (Semua main)
    • Panas
      Gini: 0.0 NO (Semua malas)

3. Matematika: Mengukur "Kekotoran"

Bagaimana komputer tahu cara membelah (split) terbaik? Dia mencari split yang menghasilkan Information Gain terbesar (Penurunan Impurity terbesar).

Gini Impurity (Default Sklearn)
$$ Gini = 1 - \sum (p_i)^2 $$
Lebih cepat dihitung.
Entropy (Information Theory)
$$ Entropy = - \sum p_i \log_2(p_i) $$
Lebih sensitif terhadap ketidakseimbangan kelas.

4. Simulasi Perhitungan Gini

Kasus: Sebuah keranjang bola (3 Merah, 3 Biru)

Total Bola = 6.

Langkah 1: Hitung Gini Awal (Root)

Peluang Merah ($p_M$) = 3/6 = 0.5
Peluang Biru ($p_B$) = 3/6 = 0.5
$$ Gini_{awal} = 1 - (0.5^2 + 0.5^2) = 1 - (0.25 + 0.25) = \mathbf{0.5} $$ (Sangat kotor/maksimal ketidakpastian untuk 2 kelas).

Langkah 2: Coba Split "Apakah Bola > 5cm?"
  • Kiri (Kecil): 2 Merah, 0 Biru. (Murni Merah!)
    $Gini_{kiri} = 1 - (1^2 + 0^2) = \mathbf{0.0}$
  • Kanan (Besar): 1 Merah, 3 Biru.
    $p_M = 1/4 = 0.25, p_B = 3/4 = 0.75$
    $Gini_{kanan} = 1 - (0.25^2 + 0.75^2) = 1 - (0.0625 + 0.5625) = 1 - 0.625 = \mathbf{0.375}$
Langkah 3: Hitung Weighted Gini Split Ini

$$ Gini_{split} = \frac{2}{6}(0.0) + \frac{4}{6}(0.375) = 0 + 0.25 = \mathbf{0.25} $$

Hasil: Impurity turun drastis dari 0.5 menjadi 0.25. Ini adalah split yang bagus!

5. Implementasi Python (Scikit-Learn)

from sklearn.tree import DecisionTreeClassifier
from sklearn import tree
import matplotlib.pyplot as plt

# 1. Data [Tinggi, Berat] -> [Gender: 0=Pria, 1=Wanita]
X = [[180, 80], [175, 75], [160, 50], [155, 45]]
y = ['Pria', 'Pria', 'Wanita', 'Wanita']

# 2. Model
# criterion='gini' (default) atau 'entropy'
clf = DecisionTreeClassifier(criterion='gini', max_depth=3)

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

# 4. Prediksi (170cm, 60kg)
print("Prediksi:", clf.predict([[170, 60]]))

# 5. Visualisasi Teks
text_representation = tree.export_text(clf)
print(text_representation)
# Output:
# |--- feature_1 <= 62.50
# |   |--- class: Wanita
# |--- feature_1 >  62.50
# |   |--- class: Pria