Pohon Keputusan

Cara pohon keputusan membagi data, pengaruh kedalaman, dan interpretabilitasnya.

Daftar isi

Pohon keputusan (decision tree) adalah model machine learning terawasi yang membagi data melalui rangkaian pertanyaan sederhana, misalnya “apakah nilai fitur ini berada di bawah ambang tertentu”. Topik ini menjelaskan cara pohon memilih pembagiannya, cara membaca struktur pohon sebagai teks, serta pengaruh kedalaman terhadap kerumitan aturan yang dihasilkan. Praktiknya menggunakan dataset iris bawaan scikit-learn, dan pohon yang sudah dilatih ditampilkan melalui fungsi export_text sehingga setiap aturannya dapat ditelusuri baris demi baris.

Cara pohon memilih pembagian#

Pembagian pada pohon keputusan bekerja dengan menguji kandidat pembagian satu per satu, kemudian memilih pasangan fitur dan ambang yang memisahkan kelas paling murni. Setiap simpul internal mengajukan satu pertanyaan berbentuk fitur <= ambang. Data yang memenuhi mengalir ke cabang kiri, sedangkan sisanya ke cabang kanan. Proses ini berulang secara rekursif pada setiap cabang sampai kondisi berhenti tercapai, yaitu daun sudah murni atau batasan hyperparameter sudah tersentuh. Pembagian yang dianggap terbaik dinilai melalui ukuran ketidakmurnian (impurity) sebuah simpul.

Ukuran ketidakmurnian yang paling umum adalah indeks Gini. Indeks ini menyatakan peluang salah menebak kelas sebuah contoh apabila tebakannya mengikuti sebaran kelas pada simpul tersebut.

G=1−∑k=1Kpk2 G = 1 - \sum_{k=1}^{K} p_k^2

dengan pkp_k menyatakan proporsi kelas ke-kk, dan KK menyatakan banyaknya kelas. Simpul yang hanya berisi satu kelas memiliki G=0G = 0, sedangkan nilai terbesarnya tercapai ketika kelas terbagi rata. Pohon memilih pembagian yang paling banyak menurunkan rata-rata tertimbang indeks Gini kedua simpul anak, dan ukuran serupa yang tersedia selain Gini adalah entropi.

Tanpa batasan, algoritme terus membagi sampai setiap daun hanya berisi satu kelas. Batasan seperti max_depth, min_samples_leaf, dan min_samples_split menghentikan pertumbuhan lebih awal, dan nilainya disetel di luar proses pelatihan. Pembagian juga berhenti apabila tidak ada kandidat yang menurunkan ketidakmurnian sama sekali. Daun dengan kelas campuran tetap boleh ada pada kondisi itu, dan kelas terbanyak di daunnya menjadi prediksi. Kedalaman menjadi tuas paling langsung untuk mengatur kapan pohon berhenti, dan konsekuensinya dibahas pada bagian terakhir topik ini.

Pohon pertama pada dataset iris#

Skrip berikut melatih DecisionTreeClassifier dengan max_depth=2 pada data latih dataset iris, menampilkan strukturnya dengan export_text, lalu mengukur akurasinya pada data uji. Pemecahan data mengikuti kesepakatan jalur ini, yaitu test_size=0.2 dengan random_state=42 agar hasilnya dapat direproduksi. Di bagian akhir, skrip mengulang pelatihan tanpa batasan kedalaman sebagai pembanding. Ambang kandidatnya diambil dari nilai fitur yang terlihat pada data latih, sehingga pohon hanya memotong di titik yang benar-benar ada pada data.

python pohon-iris.py
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier, export_text

iris = load_iris()
X, y = iris.data, iris.target

# pemecahan konvensi jalur: 80 persen latih, 20 persen uji
X_latih, X_uji, y_latih, y_uji = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# pohon terbatas dua tingkat agar aturannya masih terbaca
pohon = DecisionTreeClassifier(max_depth=2, random_state=42).fit(X_latih, y_latih)
print(export_text(pohon, feature_names=iris.feature_names))
print(f"Akurasi data uji (max_depth=2) : {pohon.score(X_uji, y_uji):.4f}")

# pohon yang tumbuh bebas tanpa batasan kedalaman
pohon_bebas = DecisionTreeClassifier(random_state=42).fit(X_latih, y_latih)
print(f"Akurasi data uji (tanpa batas) : {pohon_bebas.score(X_uji, y_uji):.4f}")
print(f"Kedalaman pohon bebas          : {pohon_bebas.get_depth()}")
text Keluaran
|--- petal length (cm) <= 2.45
|   |--- class: 0
|--- petal length (cm) >  2.45
|   |--- petal length (cm) <= 4.75
|   |   |--- class: 1
|   |--- petal length (cm) >  4.75
|   |   |--- class: 2

Akurasi data uji (max_depth=2) : 0.9667
Akurasi data uji (tanpa batas) : 1.0000
Kedalaman pohon bebas          : 6

Setiap baris keluaran berupa satu aturan keputusan. Baris petal length (cm) <= 2.45 memisahkan kelas setosa secara sempurna hanya dengan satu pertanyaan, sedangkan sisa data dibagi sekali lagi pada ambang 4.75 untuk memisahkan versicolor dan virginia. Daun terbawah mencantumkan kelas prediksinya, sehingga pohon berkedalaman dua ini terbaca sebagai tiga aturan. Dua pertanyaan sederhana sudah cukup untuk mencapai akurasi 0.9667 pada data uji.

Patut dicatat bahwa keempat fitur dataset iris diperiksa oleh algoritme, tetapi hanya petal length yang terpilih. Panjang kelopak ternyata paling mampu memisahkan ketiga kelas, sehingga kandidat pembagian pada fitur lain tidak pernah terpilih. Perilaku ini sekaligus menjadi informasi tambahan, yaitu pohon secara implisit menunjukkan fitur mana yang paling menentukan.

Kemudahan pembacaan itulah kekuatan utama pohon keputusan. Alur dari akar ke daun dapat diterjemahkan menjadi kalimat biasa tanpa perhitungan, sehingga model ini sering dipilih ketika aturan keputusannya harus dijelaskan kepada pihak di luar tim data. Keunggulan kedua, pohon keputusan tidak memerlukan penskalaan fitur. Ambang dicari langsung pada nilai asli setiap fitur, sehingga pipeline yang menyertainya lebih sederhana daripada pipeline model yang sensitif terhadap satuan pengukuran.

Kedalaman dan harga yang dibayarkan#

Dua baris terakhir keluaran membandingkan pohon terbatas dengan pohon yang tumbuh bebas. Pohon dengan max_depth=2 mencapai akurasi 0.9667, sedangkan pohon tanpa batas mencapai 1.0000 pada kedalaman enam. Kenaikan yang kecil itu dibayar dengan struktur yang jauh lebih rumit, yaitu enam tingkat pertanyaan yang saling bersarang. Pada data uji yang hanya berisi tiga puluh contoh, satu prediksi salah bernilai 0.0333, sehingga selisih dua akurasi tersebut hanya setara satu prediksi.

Pohon bebas terus membagi sampai daunnya murni. Kecenderungan itu membuat pohon ikut menyimpan kekhususan data latih, termasuk derau (noise) yang ada di dalamnya. Akurasi data latih yang sempurna bukan jaminan kinerja yang sama pada data baru. Kecenderungan menghafal inilah yang disebut overfitting, dan kedalaman pohon berperan sebagai tuas utama untuk menahannya. Batasan kedalaman bukan satu-satunya jalan, karena min_samples_leaf yang ditetapkan cukup besar menghasilkan pohon berdaun lebar yang lebih tahan derau meskipun kedalamannya bebas. Struktur yang dalam juga mengorbankan kekuatan utama pohon, karena aturannya tidak lagi mudah diterjemahkan apabila tingkat pertanyaannya menumpuk.

Ringkasan#

  • Pohon keputusan memilih pembagian dengan menguji fitur dan ambang yang menurunkan ketidakmurnian paling banyak, diukur dengan indeks Gini atau entropi.
  • Pembagian berjalan rekursif sampai daun murni atau berhenti pada batasan seperti max_depth, min_samples_leaf, dan min_samples_split.
  • export_text menampilkan pohon sebagai teks, sehingga setiap aturannya dapat dibaca dan diterjemahkan menjadi kalimat biasa.
  • Pohon tidak memerlukan penskalaan fitur, sedangkan kedalaman yang dibatasi menjaga aturannya tetap ringkas dengan pengorbanan akurasi yang kecil.

Referensi#