Kriteria Pemilihan Model

Secara umum, model dikatakan baik jika memenuhi dua hal yaitu

Karenanya orang menggabungkan keduanya dalam bentuk kriteria

error + kompleksitas model

dan kriteria ini ingin diminimumkan.

Pada pohon klasifikasi, ukuran kompleksitas dari model yang dapat digunakan antara lain adalah banyaknya split yang dilakukan atau banyaknya node yang dihasilkan. Semakin banyak split yang terjadi, maka semakin banyak node yang diperoleh, dan semakin kompleks pohon klasifikasi yang dihasilkan.

Sementara itu, untuk error yang dapat digunakan sebagai ukuran adalah banyaknya amatan yang salah klasifikasi.

Opsi CP pada rpart()

Opsi complexity parameter (cp) pada fungsi rpart() merupakan pengali atau pembobot tingkat kompleksitas pada kriteria yang ingin diminimumkan. Dengan kata lain, kriteria yang ingin diminimumkan adalah

error + cp * banyaknya split * error rootnode

Jika digunakan cp = 0, maka kita tidak “peduli” dengan kompleksitas. Tidak masalah modelnya kompleks, yang penting error-nya kecil.

Semakin besar nilai cp, maka kita semakin concern dengan kompleksitas, atau semakin tidak suka dengan model pohon yang kompleks. Kalau kita masukkan cp yang semakin besar, maka kita berharap pohonnya kecil saja. Semakin sederhana. Tapi tentu saja errornya jadi sedikit lebih besar.

Jadi mengatur cp adalah menyeimbangkan antara keinginan mendapatkan model pohon dengan error yang kecil dan pohon yang sederhana.

Perhatikan dua model berikut ini, masing-masing diperoleh menggunakan rpart() dengan cp=0 dan cp=0.02.

#model pohon dengan cp=0
data <- read.csv('D:/lowbwt.csv', header = TRUE)
library(rpart)
pohon <- rpart(low ~ lwt + smoke + ht + ui, data=data,
               method='class',
               control=rpart.control(minsplit = 10, cp=0))
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 3.5.3
rpart.plot(pohon, extra=4)

#model pohon dengan cp=0.02
data <- read.csv('D:/lowbwt.csv', header = TRUE)
library(rpart)
pohon <- rpart(low ~ lwt + smoke + ht + ui, data=data,
               method='class',
               control=rpart.control(minsplit = 10, cp=0.02))
library(rpart.plot)
rpart.plot(pohon, extra=4)

Tampak bahwa dengan cp=0.02, pohonnya lebih sederhana dibandingkan dengan cp=0.

Istilah yang sering digunakan adalah pohon dengan cp=0.02 adalah pohon yang mengalami proses pruning (pemangkasan) dari pohon asli dengan cp=0. Pohon dipangkas (pruned) supaya lebih sederhana.

Pada fungsi rpart(), secara sederhana kita dapat katakan bahwa cp merupakan salah satu kriteria penghentian algoritma splitting. Jika dengan proses splitting tingkat kesalahan klasifikasi naik tidak melebihi cp, maka proses splitting tidak jadi dilakukan. Artinya, memperbesar pohon tidak memberikan penurunan error yang cukup tinggi.

Namun jika proses splitting menyebabkan errornya turun melebihi nilai cp, maka proses splitting dilakukan (dan pohon yang dihasilkan lebih besar).

Menentukan nilai cp optimal

Untuk stelan hyperparameter tertentu, cp optimal dapat ditentukan dengan melihat tingkat kesalahan relatif berdasarkan proses validasi silang yang dilakukan oleh rpart(). Nilai tingkat kesalahan relatif (xerror) dapat dilihat menggunakan fungsi printcp().

Berikut ini ilustrasi pencarian cp optimal untuk setting hyperparameter pohon dengan minsplit=3. Kita akan dapatkan bahwa cp optimal kita peroleh sbesar 0.0113 atau 0.0085, yaitu yang memberikan tingkat kesalahan relatif paling kecil. (Catatan: hasil running setiap orang bisa berbeda karena proses pengacakan saat validasi silang)

pohon <- rpart(low ~ lwt + smoke + ht + ui, data=data,
               method='class',
               control=rpart.control(minsplit = 3, cp=0))
printcp(pohon)
## 
## Classification tree:
## rpart(formula = low ~ lwt + smoke + ht + ui, data = data, method = "class", 
##     control = rpart.control(minsplit = 3, cp = 0))
## 
## Variables actually used in tree construction:
## [1] ht    lwt   smoke ui   
## 
## Root node error: 59/189 = 0.31217
## 
## n= 189 
## 
##          CP nsplit rel error  xerror    xstd
## 1 0.0508475      0   1.00000 1.00000 0.10797
## 2 0.0338983      1   0.94915 1.23729 0.11345
## 3 0.0254237      7   0.74576 1.25424 0.11373
## 4 0.0211864      9   0.69492 1.20339 0.11285
## 5 0.0169492     13   0.61017 1.20339 0.11285
## 6 0.0112994     21   0.47458 0.96610 0.10694
## 7 0.0084746     24   0.44068 0.98305 0.10746
## 8 0.0056497     32   0.35593 1.00000 0.10797
## 9 0.0000000     40   0.30508 1.03390 0.10894