Decision Tree dengan Metode Classification and Regression Tree (CART) Menggunakan Software R

Freditasari Purwa Hidayat
8 min readJan 14, 2021

--

Assalamualaikum Wr. Wb.

Hallo Teman-Teman Data Enthusiast!

Saat ini, tidak semua orang bisa mengambil keputusan dengan cepat bukan? jika iya, maka decision tree adalah metode yang tepat untuk dipilih

Jadi, bagaimana selama ini cara kalian mengambil keputusan ? Apakah kalian meminta pendapat teman, pasangan, atau keluarga terlebih dahulu? Apakah kalian hanya mengikuti hati nuranimu? Atau, apakah kamu justru menggunakan strategi hitung kancing?

Apa pun itu, sebenarnya tidak ada cara yang salah dalam pengambilan keputusan. Namun, cara-cara di atas tidak melalui proses perhitungan yang matang. Kamu tidak mempertimbangkan pro, kontra, dan risiko dari pilihan-pilihan yang ada.

Nah, untuk mengatasinya, sebenarnya ada satu metode pengambilan keputusan yang dianggap cukup ampuh. Metode itu disebut sebagai decision tree.

https://www.python-course.eu/Decision_Trees.php

Sebelumnya apa sih Decision Tree?? adakahdai kalian yang yang sudah tau? kalau belum yuk simak penjelasannya ..

Pohon keputusan dalam aturan keputusan (decision rule) merupakan metodologi data mining yang banyak diterapkan sebagai solusi untuk klasifikasi.

D ecision tree merupakan suatu metode klasifikasi yang menggunakan struktur pohon, dimana setiap node merepresentasikan atribut dan cabangnya merepresentasikan nilai dari atribut, sedangkan daunnya digunakan untuk merepresentasikan kelas. Node teratas dari decision tree ini disebut dengan root.

Mengutip dari Venngage, ada tiga elemen dalam satu decision tree, yaitu:

  • root node (akar): tujuan akhir atau keputusan besar yang ingin diambil
  • branches (ranting): berbagai pilihan tindakan
  • leaf node (daun): kemungkinan hasil atas setiap tindakan

Pada kesempatan kali ini akan dibahas pembuatan pohon keputusan (decision tree) dengan menggunakan metode Classification and Regression Tree (CART) pada software R. Package rpart telah menyediakan fungsi guna menjalankan CART serta package rpart. plot memberikan visualisasi untuk pohon keputusan yang terbentuk.

https://bookdown.org/tpinto_home/Beyond-Additivity/regression-and-classification-trees.html

CART (Classification and Regression Tree) merupakan metode eksplorasi yang digunakan untuk melihat hubungan antara variabel respon dengan variabel bebas yang meliputi variabel nominal, ordinal, maupun kontinu. Perkembangan ini ditandai dengan diterbitkannya buku Classification and Regression Tree pada tahun 1984 (Breiman et al. 1993). Metode ini meliputi metode pohon klasifikasi dan pohon regresi.

Sebelumnya, kita akan menginstal beberapa packages yang akan digunakan dan mengaktifkannya dengan sintaks berikut, jika belum meng-install silahkan install terlebih dahulu kemudian copy sintaks berikut kedalam R kemudian run.

#install packages
library(rpart) #model CART
library(rpart.plot) #visualisasi decision tree
library(MASS) #untuk data birthwt
library(ggplot2) #untuk data msleep
data() #cek data yang telah tersedia di R

Pada studi kasus ini digunakan dua data yang berbeda untuk pohon klasifikasi (classification tree) dan pohon regresi (regression tree). Seperti yang telah diketahui bahwa jika variabel dependen (Y) adalah bertipe kualitatif maka akan terbentuk pohon klasifikasi, sedangkan variabel dependen (Y) bertipe kuantitatif maka akan terbentuk pohon regresi.

Classification Tree

Pada klasifikasi decision tree, kita akan menggunakan data birthwt yang tersedia pada packages MASS. Maka langkah pertama yang diambil adalah install packages MASS dan tampilkan data yang ada dalam packages tersebut.

library(MASS)
data()
Dataset dari Packages MASS

Gambar diatas merupakan beberapa dataset yang ada dalam packages MASS, kemudian scroll kebawah hingga menemukan data “birthwt” yang akan kita gunakan kali ini.

help(birthwt)
Deskripsi dari Data birthwt

Berdasarkan gambar diatas, beberapa informasi yang kita dapatkan adalah data “birthwt” memiliki 189 baris dan 10 kolom yang memuat beberapa variabel, yaitu :

  1. low adalah indikator berat lahir kurang dari 2,5 kg.
  2. age adalah usia ibu dalam beberapa tahun.
  3. lwt adalah berat badan ibu dalam pound pada periode menstruasi terakhir.
  4. race adalah ras ibu (1 = putih, 2 = hitam, 3 = lainnya).
  5. smoke adalah status merokok selama kehamilan.
  6. plt adalah jumlah persalinan prematur sebelumnya.
  7. ht adalah riwayat hipertensi.
  8. ui adalah adanya iritabilitas uterus.
  9. ftv adalah jumlah kunjungan dokter selama trimester pertama.
  10. bwt adalah berat lahir dalam gram.

Kemudian, kita akan meng-input data birthwt dengan sintaks seperti berikut

#INPUT DATA
data <- birthwt
head(data)
Data Teratas dari birthwt

Lalu, kita dapat melihat histogram variabel bwt (berat lahir dalam gram) dari data “birthwt” dengan sintkas seperti berikut

hist(birthwt$bwt)
Histogram Variabel bwt

Karena pada data di atas, variabel kategorik belum teridentifikasi sebagai faktor maka perlu dilakukan langkah berikut

# menjadikan tipe variabel kategorik menjadi faktor
cols = c("low", "race", "smoke", "ht", "ui")
birthwt[cols] = lapply(birthwt[cols], as.factor)

Variabel dependen/respon pada data adalah variabel bwt. Sehingga ingin diketahui variabel age, lwt, race, smoke, pt1, ht, ui, ftv berpengaruh terhadap bwt. Sedangkan variabel low merupakan variabel kategorik yang berasal dari bwt dengan kode 1 untuk sampel yang memiliki bwt ≤ 2,5.

Karena Y = bwt, kemudian variabel bwt dikonversi menjadi variabel low (kategorik) yaitu jika bwt <= 2.5 maka berkode 1

summary(birthwt)
str(birthwt)
Summary Data birthwt

Dari output di atas terlihat bahwa terdapat 189 observasi dengan 10 variabel. Tipe dari masing-masing variabel serta statistik deskriptif untuk tiap variabel juga dapat diketahui.

Sebelum dilakukan pemodelan, data dibagi menjadi dua yaitu data testing dan data training. 75% data akan menjadi data training sedangkan sisanya akan menjadi data testing. Pemilihan tersebut dilakukan secara random.

# membagi data menjadi data testing dan data training
set.seed(1) #agar proses random tersimpan
train = sample(1:nrow(birthwt), 0.75 * nrow(birthwt))
train
Data Training dari brirthwt

Kemudian, setelah diperoleh data training. Kemudian dilakukan pembentukan model. Model ini dibentuk dengan variabel Y adalah low dan variabel X adalah selain bwt. Perlu diingat bahwabwt merupakan variabel Y asal muasal dari low.

# membuat model
birthwtTree <- rpart(low ~ . - bwt, data = birthwt[train, ], method = 'class')
birthwtTree
Model Decision Tree birthwt

Method yang dipilih adalah ‘class’ pada variabel Y karena bertipe faktor. Apabila Y bertipe numerik maka dipilih ‘anova’.

Kemudian, membuat plot decision tree menggunakan sintaks seperti berikut, copy sintaks dan run pada R.

# membuat plot
plot(birthwtTree)
text(birthwtTree, pretty = 0)
Pohon klasifikasi Pada Decision Tree

Terbentuklah pohon klasifikasi seperti gambar di atas. Terdapat 4 variabel yang membentuk pohon klasifikasi yaitu pt1, lwt, age, dan ht. Angka 0 dan 1 pada ujung bawah (terminal node) menunjukkan nilai prediksi dari model. Kemudian kita juga akan melakukan visualisasi menggunakan rpart.plot dengan sintkas berikut.

# visualisasi dengan rpart.plot
rpart.plot(birthwtTree,type=4,digits=5,fallen.leaves=FALSE,shadow.col="gray",box.palette="BuGn")
Visualisasi Menggunakan rpart.plot

Visualisasi di atas tampak lebih menarik daripada sebelumnya. Ini dikarenakan menggunakan fungsi rpart.plot yang menyediakan berbagai fitur untuk visualisasi. Fitur seperti type, digits, fallen.leaves, shadow.col, dan box.palette dapat diganti sesuai dengan keinginan. Di dalam kotak pada setiap simpul (node) terdapat tiga angka. Angka paling atas menunjukkan prediksi klasifikasi (0 atau 1). Angka di tengah menunjukkan probabilities untuk kelas 1 (low=1). Nilai tersebut diperoleh dari jumlah kelas 1 dibagi jumlah total pada node (simpul) tersebut. Angka paling bawah menunjukkan persentase jumlah data pada node tersebut dibandingkan dengan total data keseluruhan. Jelas terlihat bahwa pada akar pohon 100% dan semakin ke bawah akan semakin besar. Jika persentase pada setiap terminal node dijumlahkan maka akan berjumlah 100%.

Selanjutnya, melihat hasil dari analisis dari “birthwtTreee” menggunakan fungsi summary.

# melihat hasil analisis
summary(birthwtTree)
birthwtTree
Analisis dari Data birthwtTree

Didapatkan output dari summary(birthwtTree) bisa dicoba sendiri. Untuk output birthwtTree di atas menunjukkan detail pemisahan data atau split.

# melihat kebaikan model
birthwtPred = predict(birthwtTree, birthwt[-train, ], type = 'class')
table(birthwtPred, birthwt[-train, ]$low)
Akurasi Model

Sehingga, nilai akurasi dari pohon regresi dapat diketahui dari nilai di atas. Yaitu jumlah nilai diagonal yaitu 31 dan 5 akan dibagi dengan total (31+10+2+5) sehingga diperoleh (31+5)/ (31+10+2+5)=0,75. Berarti bahwa model dapat mengklasifikasi secara tepat dengan akurasi 75%.

Regression Tree

Selanjutnya, kita akan membahas tentang regression tree, seperti yang telah dijelaskan sebelumnya, pembentukan pohon regresi ini hampir sama seperti pohon klasifikasi. Berbeda pada tipe variabel Y saja. Pada contoh kasus ini digunakan data “msleep” yang didapatkan dari package ggplot2. Maka langkah pertama yang diambil adalah install packages ggplot2 jika belum punya dan tampilkan data yang ada dalam packages tersebut.

# Regression Tree
library(ggplot2)
data()
help(msleep)
Deskripsi Data msleep
#input data
data <- msleep
head(data)
str(msleep)
Data Teratas dari msleep

Karena pada output str(msleep) terlihat ada 83 observasi dengan 11 variabel. Pada beberapa variabel terdapat missing yang ditunjukkan dengan huruf NA. Namun pada pembentukan model pohon regresi ini hanya digunakan beberapa variabel saja.

#ambil 4 variabel saja
df=msleep[,c(3,6,10,11)]
names(df)=c("vore","sleep_total","brainwt","bodywt")
str(df)

Pada variabel vore, sleep_total, brainwt, dan bodywt yang akan digunakan. Kemudian variabel independennya adalah sleep_total.

# membuat model
m1 = rpart(sleep_total~.,data=df,method="anova")
m1

Selanjutnya, setelah dilakukan beberapa perhitungan, kemudian kita akan membuat pohon regresi menggunakan sintaks berikut ini.

# membuat gambar pohon regresi
rpart.plot(m1,type=4,digits=5,fallen.leaves=FALSE,shadow.col="gray",box.palette="BuGn")
Output Regression Tree

Setelah membuat pohon regresi, selanjutnya kita akan melakukan prediksi berdasarkan model seperti berikut.

# prediksi berdasarkan model
p1 = predict(m1,df)
p1
Prediksi Berdasarkan Model

Untuk menguji data tersebut, maka dilakukan uji googness of fit (uji kelayakan model) dilakukan untuk mengukur ketepatan fungsi regresi sampel dalam menaksir nilai aktual secara statistik. Model goodness of fit dapat diukur dari nilai statistik F yang menunjukkan apakah semua variabel independen yang dimasukkan dalam model mempunyai pengaruh secara bersama-sama terhadap variabel dependen, dengan cara melihat nilai MAE (Mean Absolute Error) untuk menguji rata-rata absolute dari kesalahan meramal, tanpa menghiraukan tanda positif atau negatif

# goodness of fit
MAE = function(actual,predicted){mean(abs(actual-predicted))}
MAE(df$sleep_total,p1)
Uji Goodness Of Fit

Perbedaan pohon regresi dengan pohon klasifikasi juga terletak pada perhitungan akurasi. Pada studi kasus ini digunakan MAE untuk menghitung tingkat kesalahan dari model. Diperoleh bahwa model tersebut memiliki MAE sebesar 2,452865 yang berarti bahwa tingkat kesalahan model dalam mengestimasi sleep_total adalah sebesar 2,452865.

Demikian penjelasan dari Decision Tree dengan Metode Classification and Regression Tree (CART) Menggunakan Software R

Semoga bermanfaat, Selamat mencoba teman-teman^-^

Referensi

https://www.r-bloggers.com/using-decision-trees-to-predict-infant-birth-weights/
https://datascienceplus.com/using-decision-trees-to-predict-infant-birth-weights/
https://www.youtube.com/watch?v=MoBw5PiW56k&t=978s

--

--