Belajar R – Decision Tree

By | January 14, 2021
Print Friendly, PDF & Email
3,622 Views

Sinopsis

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

 

  1. Root Nodemewakili seluruh populasi atau sampel
  2. 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

  1. 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
  2. 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

  1. Classification Error Rate
  2. Gini Index
  3. 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

    \[model = milik \sim umur+status\]

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

 

 

 

Leave a Reply