Belajar R – Decision Tree
Sinopsis
Contents
Decision Tree / Pohon Keputusan merupakan jenis algoritma pembelajaran terawasi/supervised yang dapat digunakan dalam masalah regresi dan klasifikasi yang bekerja dengan variabel baik kategorikal maupun numerik. Secara umum decision tree sebagai berikut
- Root Nodemewakili seluruh populasi atau sampel
- Splittingyaitu proses membagi sebuah node menjadi dua atau lebih sub-node yang menghasilkan Decision Node dan Terminal Node
Jenis Decision Tree
Dalam membuat decision tree secara umum dibagi menjadi 2 yaitu
- Regression satu metode yang menggunakan kaidah pohon keputusan (decision tree) yang dibentuk melalui suatu algoritma penyekatan secara rekursif. Algoritma ini digunakan untuk variabel dependen yang dimiliki bertipe kontinu atau numerik
- Classification biasanya digunakan ketika ditemui untuk sebuah keputusan ya dan tidak (binary clasification) sehingga variabel dependen yang dimiliki bertipe kategorikal
Gabungan antara clasification dan regreesion disebut dengan CART (Classification and Regression Tree), selain metode CART masih ada banyak algoritma decision tree yaitu ID3, C4.5, C5.0 dan CHAID
Splitting
Splitting yaitu kriteria yang dapat digunakan untuk menentukan titik pemecah yaitu
- Classification Error Rate
- Gini Index
- Cross-Entropy
Titik pemecah terbaik (optimal splitting point) adalah GINI index yang biasanya digunakan dalam CART. Namun disini tidak dibahas detail cara menghitung gini index, kalian bisa searching saja sendiri di google
Package yang digunakan
Untuk membuat decision tree ada banyak sekali package yang bisa kalian gunakan diantaranya rpart; party; tree; dan ISLR. Namun pada pembahasan ini hanya menggunakan package rpart saja. Seperti biasa untuk install dan loading package tersebut dengan perintah dibawah ini
install.packages('rpart') install.packages('rpart.plot')
Jangan lupa juga kita butuh package dplyr untuk mengolah data frame
library(dplyr) library(rpart) library(rpart.plot)
Dataset yang digunakan
Dataset yang digunakan berupa informasi mengenai kepemilikan sebuah rumah atau hanya ngekost/ngontrak berdasarkan informasi umur dan status nikah/belum menikah yang disimpan dengan nama rumah.csv
rumah <- read.csv('dataset/rumah.csv') print(rumah)
hasil
no umur status milik 1 1 25 sudah nikah rumah 2 2 26 belum nikah kost 3 3 28 belum nikah kost 4 4 19 sudah nikah kost 5 5 28 sudah nikah rumah 6 6 40 sudah nikah rumah 7 7 35 sudah nikah rumah 8 8 32 belum nikah rumah 9 9 33 sudah nikah kost 10 10 55 sudah nikah rumah
Variabel dependen yaitu milik sedangkan variabel independen yaitu umur dan status
Model Hubungan antara umur dan status terhadap kepemilikan rumah
Kita akan coba melihat antara kepemilikan rumah berdasarkan umur, dengan model sebagai berikut
Perintah yang digunakan dan sekaligus visualisasi yaitu
a <-rpart(milik~status+umur,data=rumah,minsplit=1) summary(a) print(a) rpart.plot(a,faclen=0,cex=0.8,extra=2)
hasil
Status umur menjadi root node yaitu jika umur diatas 34 akan mempunyai rumah, bisa kalian cek dengan operasi filter berikut
filter(rumah,umur>34)
hasil
no umur status milik 1 6 40 sudah nikah rumah 2 7 35 sudah nikah rumah 3 10 55 sudah nikah rumah
Kemudian jika umur dibawah 22 pasti hanya kost saja
filter(rumah,umur<22)
hasil
no umur status milik 1 4 19 sudah nikah kost
Dan begitu seterusnya, bisa kalian lihat rule nya dihasil print() nya
n= 10 node), split, n, loss, yval, (yprob) * denotes terminal node 1) root 10 4 rumah (0.4000000 0.6000000) 2) umur< 34 7 3 kost (0.5714286 0.4285714) 4) umur< 22 1 0 kost (1.0000000 0.0000000) * 5) umur>=22 6 3 kost (0.5000000 0.5000000) 10) umur>=25.5 5 2 kost (0.6000000 0.4000000) 20) umur< 27 1 0 kost (1.0000000 0.0000000) * 21) umur>=27 4 2 kost (0.5000000 0.5000000) 42) umur>=32.5 1 0 kost (1.0000000 0.0000000) * 43) umur< 32.5 3 1 rumah (0.3333333 0.6666667) 86) status=belum nikah 2 1 kost (0.5000000 0.5000000) 172) umur< 30 1 0 kost (1.0000000 0.0000000) * 173) umur>=30 1 0 rumah (0.0000000 1.0000000) * 87) status=sudah nikah 1 0 rumah (0.0000000 1.0000000) * 11) umur< 25.5 1 0 rumah (0.0000000 1.0000000) * 3) umur>=34 3 0 rumah (0.0000000 1.0000000) *
Prediksi Decision Tree
Untuk melakukan prediksi, buatkan input bertipe data frame seperti berikut
test = data.frame(rumah$status,rumah$umur) h<-predict(a,data=test,type=c('class')) #class, #vector print(data.frame(rumah$milik,h))
hasil
rumah.milik h 1 rumah rumah 2 kost kost 3 kost kost 4 kost kost 5 rumah rumah 6 rumah rumah 7 rumah rumah 8 rumah rumah 9 kost kost 10 rumah rumah