- Pohon keputusan untuk klasifikasi membagi ruang fitur dengan serangkaian pertanyaan if-then sehingga setiap daun berisi hampir satu kelas saja.
- Kualitas pemisahan dinilai memakai ukuran impuritas seperti indeks Gini atau entropi; pilih yang paling sesuai dengan biaya salah klasifikasi pada kasus Anda.
- Membatasi kedalaman, jumlah sampel minimum per node, atau melakukan pruning mencegah pohon menghafal derau sekaligus menjaga interpretabilitas.
- Menampilkan wilayah keputusan dan diagram pohon memudahkan komunikasi hasil kepada pemangku kepentingan.
1. Gambaran umum #
Pohon keputusan adalah model supervised yang memecah ruang input secara rekursif. Setiap node internal menanyakan sesuatu seperti “apakah (x_j \le s)?”. Untuk tugas klasifikasi kita menginginkan daun yang sangat murni, artinya labelnya hampir seragam. Hasil akhirnya adalah kumpulan aturan ringkas yang mudah diubah menjadi logika bisnis.
2. Ukuran impuritas #
Misalkan (t) sebuah node dan (p_k) proporsi kelas (k) di dalamnya. Dua ukuran impuritas yang umum ialah
$$ \mathrm{Gini}(t) = 1 - \sum_k p_k^2, $$
$$ H(t) = - \sum_k p_k \log p_k. $$
Jika node (t) dibagi menggunakan fitur (x_j) dengan ambang (s), kita hitung keuntungan
$$ \Delta I = I(t) - \frac{n_L}{n_t} I(t_L) - \frac{n_R}{n_t} I(t_R), $$
dengan (I(\cdot)) adalah Gini atau entropi, (t_L) dan (t_R) node anak, serta (n_t) jumlah sampel yang mencapai (t). Split terbaik adalah yang memaksimalkan (\Delta I).
3. Contoh Python #
Cuplikan berikut membuat data sintetis dua kelas lewat make_classification, melatih DecisionTreeClassifier, dan menggambar wilayah keputusannya. Mengganti criterion="gini" menjadi "entropy" mengubah ukuran impuritas yang dipakai.
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.tree import DecisionTreeClassifier, plot_tree
n_classes = 2
X, y = make_classification(
n_samples=100,
n_features=2,
n_redundant=0,
n_informative=2,
random_state=2,
n_classes=n_classes,
n_clusters_per_class=1,
)
clf = DecisionTreeClassifier(criterion="gini", random_state=0).fit(X, y)
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(
np.arange(x_min, x_max, 0.1),
np.arange(y_min, y_max, 0.1),
)
Z = clf.predict(np.c_[xx.ravel(), yy.ravel()]).reshape(xx.shape)
plt.figure(figsize=(8, 8))
plt.contourf(xx, yy, Z, cmap=plt.cm.Pastel1, alpha=0.6)
plt.xlabel("x1")
plt.ylabel("x2")
for i, color, label_name in zip(range(n_classes), ["r", "b"], ["A", "B"]):
idx = np.where(y == i)
plt.scatter(X[idx, 0], X[idx, 1], c=color, label=label_name, edgecolor="k")
plt.legend()
plt.title("Wilayah keputusan hasil pohon")
plt.show()

plot_tree menampilkan struktur lengkap pohon sehingga mudah dibaca di laporan atau presentasi.
plt.figure(figsize=(12, 12))
plot_tree(clf, filled=True, feature_names=["x1", "x2"], class_names=["A", "B"])
plt.show()

4. Referensi #
- Breiman, L., Friedman, J. H., Olshen, R. A., & Stone, C. J. (1984). Classification and Regression Trees. Wadsworth.
- scikit-learn developers. (2024). Decision Trees. https://scikit-learn.org/stable/modules/tree.html