Sessi 12: Konsep Pemodelan Lanjut (Decision Tree)
Fokus: Memahami arsitektur Decision Tree yang berbasis aturan, cara kerja split (pembelahan) menggunakan konsep matematis Impurity, dan interpretasi Feature Importance. Model ini sangat intuitif untuk dipahami.
A. Arsitektur Decision Tree
Decision Tree adalah algoritma pembelajaran yang menggunakan struktur tree (mirip diagram alir) di mana setiap node internal merepresentasikan pengujian pada suatu atribut (fitur), setiap cabang merepresentasikan hasil pengujian, dan setiap node daun (leaf node) merepresentasikan keputusan (hasil klasifikasi atau nilai regresi).
1. Komponen Struktur Tree
- Root Node (Akar): Node paling atas yang merepresentasikan keseluruhan dataset. Pemisahan pertama dimulai di sini.
- Internal Node: Node yang memiliki cabang dan merepresentasikan suatu kondisi atau pengujian fitur.
- Leaf Node (Daun): Node akhir yang tidak bercabang, yang memberikan kelas atau nilai akhir prediksi.
Decision Tree adalah model non-parametrik, artinya tidak ada asumsi bentuk matematis (linear) eksplisit seperti pada Regresi Linear atau Logistik. Model ini belajar dari aturan if-else yang kompleks.
B. Konsep Matematis: Pemilihan Split (Impurity)
Kunci dari Decision Tree adalah menentukan fitur mana dan nilai ambang mana yang harus digunakan untuk membelah (*split*) data pada setiap node agar menghasilkan node anak yang semurni mungkin (memiliki satu kelas dominan). Kualitas pemisahan ini diukur dengan konsep Impurity (Ketidakmurnian).
1. Gini Impurity (Klasifikasi)
Gini Impurity mengukur seberapa sering elemen yang dipilih secara acak dari dataset akan salah diklasifikasikan. Tujuannya adalah meminimalkan nilai Gini.
- Pk: Proporsi observasi yang termasuk dalam kelas k pada node tersebut.
Nilai Gini 0 berarti node tersebut murni (pure), semua sampel di node tersebut berasal dari kelas yang sama.
2. Entropy dan Information Gain (Alternatif Klasifikasi)
*Entropy* mengukur tingkat ketidakpastian atau keacakan data. Decision Tree akan memilih *split* yang memberikan *Information Gain* terbesar.
Information Gain adalah penurunan *Entropy* setelah *split*. Decision Tree selalu memilih *split* yang menghasilkan penurunan *Entropy* terbesar (Information Gain tertinggi).
C. Studi Kasus Implementasi: Decision Tree untuk Klasifikasi IRIS
Kita akan menggunakan dataset **Iris** dari UCI, yang merupakan kasus klasifikasi multi-kelas (3 kelas spesies bunga) klasik untuk melihat bagaimana Decision Tree membuat keputusan.
Langkah 1: Persiapan Data dan Pelatihan Model
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, plot_tree
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as np
# Muat dataset Iris bawaan Scikit-learn (mirip dengan UCI)
iris = load_iris()
X = pd.DataFrame(iris.data, columns=iris.feature_names)
y = iris.target # Target (0, 1, 2)
# Split Data (80/20)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.2, random_state=42
)
# 1. Inisialisasi dan Latih Model (menggunakan Gini)
model_tree = DecisionTreeClassifier(criterion='gini', max_depth=3, random_state=42)
model_tree.fit(X_train, y_train)
print("Model Decision Tree telah dilatih dengan kedalaman maksimum 3.")
Langkah 2: Visualisasi Decision Tree
Kelebihan utama Decision Tree adalah kemampuannya diinterpretasikan (Explainable AI / XAI). Kita dapat memvisualisasikan seluruh struktur *tree*.
# Visualisasi Tree (Hanya dapat ditampilkan di lingkungan Colab/Jupyter Notebook)
plt.figure(figsize=(15, 10))
plot_tree(model_tree,
filled=True,
rounded=True,
class_names=iris.target_names,
feature_names=iris.feature_names,
fontsize=10)
plt.title("Visualisasi Decision Tree (Iris Dataset)")
plt.show()
# Interpretasi Node:
# 'X[i] <= value' adalah kondisi split.
# 'gini' adalah nilai ketidakmurnian.
# 'samples' adalah jumlah data di node tersebut.
# 'value' adalah distribusi sampel per kelas.
# 'class' adalah kelas prediksi di node tersebut.
Langkah 3: Feature Importance (Pentingnya Fitur)
Decision Tree secara otomatis mengukur seberapa penting setiap fitur dalam proses klasifikasi. Fitur yang digunakan pada *split* awal (dekat *root*) umumnya memiliki *importance* tertinggi.
# Dapatkan tingkat kepentingan fitur
importance = model_tree.feature_importances_
feature_names = X.columns
print("\n--- Tingkat Kepentingan Fitur (Feature Importance) ---")
for name, score in zip(feature_names, importance):
print(f"{name}: {score:.4f}")
# Visualisasi Tingkat Kepentingan
plt.figure(figsize=(8, 5))
plt.bar(feature_names, importance)
plt.title("Feature Importance: Decision Tree Iris")
plt.ylabel("Kepentingan")
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()
D. Kelebihan dan Kekurangan Decision Tree
Kelebihan:
- Mudah Diinterpretasikan: Struktur *tree* mudah dipahami oleh non-teknis (XAI).
- Tidak Memerlukan Scaling: Decision Tree tidak sensitif terhadap *scaling* fitur (Normalisasi/Standardisasi), berbeda dengan Regresi Logistik atau model berbasis jarak.
- Dapat Menangani Data Kategorikal: Mampu bekerja langsung dengan variabel kategorikal (meskipun sering di-*encode* terlebih dahulu di Scikit-learn).
Kekurangan:
- Rentang Terhadap Overfitting: Model yang terlalu dalam (Max Depth tinggi) dapat sangat mudah *overfit* pada data pelatihan.
- Kestabilan Rendah: Perubahan kecil pada data dapat menghasilkan Decision Tree yang sama sekali berbeda (*high variance*).
Untuk mengatasi *overfitting* dan ketidakstabilan, sering digunakan teknik gabungan (*Ensemble Methods*) seperti **Random Forest** atau **Gradient Boosting**, yang merupakan pengembangan dari Decision Tree.