Pendahuluan

Analisa data yang datasetnya kami peroleh dari kaggle ini kami pergunakan sebagai latihan yang ditugaskan oleh Algoritma Data Science dengan sebutan Learning by Building atau LBB untuk materi Supervised Learning, machine learning, Classification 2. Mudah-mudahan dengan tugas latihan yang kami kerjakan dapat melatih dan memahami materi lebih baik lagi. Sekaligus memberi pengetahuan baru dari sudut padang yang baru.

Deskripsi

Konteks

Meskipun dataset ini pada awalnya berkontribusi pada repositori UCI Machine Learning hampir 30 tahun yang lalu, perburuan jamur (atau dikenal sebagai “shrooming”) sedang menikmati popularitas baru. Pelajari fitur mana yang mengeja kematian tertentu dan yang paling cocok dalam dataset karakteristik jamur ini. Dan seberapa yakin model Anda?

Konten

Dataset ini mencakup uraian sampel hipotesis yang sesuai dengan 23 spesies jamur yang dipanggang di Agaricus dan Lepiota Family Mushroom yang diambil dari The Audubon Society Field Guide hingga North American Mushroom (1981). Setiap spesies diidentifikasi sebagai yang dapat dimakan, pasti beracun, atau tidak dapat dimakan dan tidak direkomendasikan. Kelas yang terakhir ini dikombinasikan dengan yang beracun. Panduan ini dengan jelas menyatakan bahwa tidak ada aturan sederhana untuk menentukan kelayakan suatu jamur; bahwa jamur tertentu layak dikonsumsi atau pasti beracun.

  • Jenis model pembelajaran mesin apa yang paling berhasil dalam dataset ini?
  • Fitur apa yang paling menunjukkan jamur dapat dikonsumsi?

Tujuan

Tujuan dari analisis data tentang spesifikasi jamur adalah mengetahui akurasi dari konklusi spesifikasi suatu jamur. Apakah suatu jamur dengan kriteria tertentu dapat dikategorikan sebagai jamur yang dapat dimakan/dikonsumsi ataukah sebaliknya tidak dapat dimakan/beracun. Oleh karena itu target dari analisa ini adalah kelasnya sebagai eatable atau poisonous, dengan feature variabel yang kami pilih yaitu mengenai ciri bentuk topi (cap.shape), ciri permukaan topi(cap.surface), ciri warna topi (cap.color). Dengan menetapkan ciri tertentu dalam levels variabel tersebut, yaitu ciri-ciri jamur yang biasa kita temui dipasaran, berbentuk cembung, permukaan berserat, dan berwarna putih.

Import Data

## 'data.frame':    8124 obs. of  23 variables:
##  $ class                   : Factor w/ 2 levels "e","p": 2 1 1 2 1 1 1 1 2 1 ...
##  $ cap.shape               : Factor w/ 6 levels "b","c","f","k",..: 6 6 1 6 6 6 1 1 6 1 ...
##  $ cap.surface             : Factor w/ 4 levels "f","g","s","y": 3 3 3 4 3 4 3 4 4 3 ...
##  $ cap.color               : Factor w/ 10 levels "b","c","e","g",..: 5 10 9 9 4 10 9 9 9 10 ...
##  $ bruises                 : Factor w/ 2 levels "f","t": 2 2 2 2 1 2 2 2 2 2 ...
##  $ odor                    : Factor w/ 9 levels "a","c","f","l",..: 7 1 4 7 6 1 1 4 7 1 ...
##  $ gill.attachment         : Factor w/ 2 levels "a","f": 2 2 2 2 2 2 2 2 2 2 ...
##  $ gill.spacing            : Factor w/ 2 levels "c","w": 1 1 1 1 2 1 1 1 1 1 ...
##  $ gill.size               : Factor w/ 2 levels "b","n": 2 1 1 2 1 1 1 1 2 1 ...
##  $ gill.color              : Factor w/ 12 levels "b","e","g","h",..: 5 5 6 6 5 6 3 6 8 3 ...
##  $ stalk.shape             : Factor w/ 2 levels "e","t": 1 1 1 1 2 1 1 1 1 1 ...
##  $ stalk.root              : Factor w/ 5 levels "?","b","c","e",..: 4 3 3 4 4 3 3 3 4 3 ...
##  $ stalk.surface.above.ring: Factor w/ 4 levels "f","k","s","y": 3 3 3 3 3 3 3 3 3 3 ...
##  $ stalk.surface.below.ring: Factor w/ 4 levels "f","k","s","y": 3 3 3 3 3 3 3 3 3 3 ...
##  $ stalk.color.above.ring  : Factor w/ 9 levels "b","c","e","g",..: 8 8 8 8 8 8 8 8 8 8 ...
##  $ stalk.color.below.ring  : Factor w/ 9 levels "b","c","e","g",..: 8 8 8 8 8 8 8 8 8 8 ...
##  $ veil.type               : Factor w/ 1 level "p": 1 1 1 1 1 1 1 1 1 1 ...
##  $ veil.color              : Factor w/ 4 levels "n","o","w","y": 3 3 3 3 3 3 3 3 3 3 ...
##  $ ring.number             : Factor w/ 3 levels "n","o","t": 2 2 2 2 2 2 2 2 2 2 ...
##  $ ring.type               : Factor w/ 5 levels "e","f","l","n",..: 5 5 5 5 1 5 5 5 5 5 ...
##  $ spore.print.color       : Factor w/ 9 levels "b","h","k","n",..: 3 4 4 3 4 3 3 4 3 3 ...
##  $ population              : Factor w/ 6 levels "a","c","n","s",..: 4 3 3 4 1 3 3 4 5 4 ...
##  $ habitat                 : Factor w/ 7 levels "d","g","l","m",..: 6 2 4 6 2 2 4 4 2 4 ...

Informasi Atribut:

  • class : kelas: dapat dimakan = e, beracun = p

  • cap.shape : bentuk topi: bel = b, kerucut = c, cembung = x, datar = f, knobbed = k, cekung = s

  • cap.surface : tutup-permukaan : berserat = f, alur = g, bersisik = y, halus = s

  • cap.color : warna topi : coklat = n, buff = b, kayu manis = c, abu-abu = g, hijau = r, pink = p, ungu = u, merah = e, putih = w, kuning = y

  • bruises : memar = t, no = f

  • odor : bau : almond = a, adas = l, creosote = c, amis = y, busuk = f, apak = m, tidak ada = n, pedas = p, pedas = s

  • gill.attachment : lampiran-insang : terlampir = a, turun = d, bebas = f, berlekuk = n

  • gill.spacing : jarak insang : dekat = c, ramai = w, jauh = d

  • gill.size : ukuran insang : luas = b, sempit = n

  • gill.color : warna insang : hitam = k, coklat = n, buff = b, coklat = h, abu-abu = g, hijau = r, oranye = o, merah muda = p, ungu = u, merah = e, putih = w, kuning = y

  • stalk.shape :tangkai-bentuk: memperbesar = e, meruncing = t

  • stalk.root :root-root: bulbous = b, club = c, cup = u, sama = e, rhizomorphs = z, rooted = r, missing =?

  • stalk.surface.above.ring:tangkai-permukaan-atas-cincin: berserat = f, bersisik = y, halus = k, halus = s

  • stalk.surface.below.ring:tangkai-permukaan-di bawah-cincin: berserat = f, bersisik = y, halus = k, halus = s

  • stalk.color.above.ring :tangkai-warna-atas-cincin: coklat = n, buff = b, kayu manis = c, abu-abu = g, oranye = o, merah muda = p, merah = e, putih = w, kuning = y

  • stalk.color.below.ring :tangkai-warna-di bawah-cincin: coklat = n, buff = b, kayu manis = c, abu-abu = g, oranye = o, pink = p, merah = e, putih = w, kuning = y

  • veil.type :tipe kerudung: sebagian = p, universal = u

  • veil.color :kerudung-warna: coklat = n, oranye = o, putih = w, kuning = y

  • ring.number :dering-angka: tidak ada = n, satu = o, dua = t

  • ring.type :tipe cincin: jaring laba-laba = c, evanescent = e, flaring = f, besar = l, tidak ada = n, liontin = p, selubung = s, zona = z

  • spore.print.color :spora-cetak-warna: hitam = k, coklat = n, buff = b, coklat = h, hijau = r, oranye = o, ungu = u, putih = w, kuning = y

  • population :populasi: berlimpah = a, berkerumun = c, banyak = n, tersebar = s, beberapa = v, soliter = y

  • habitat :habitat: rumput = g, daun = l, padang rumput = m, jalur = p, perkotaan = u, limbah = w, kayu = d

##   class cap.shape cap.surface cap.color bruises odor gill.attachment
## 1     p         x           s         n       t    p               f
## 2     e         x           s         y       t    a               f
## 3     e         b           s         w       t    l               f
## 4     p         x           y         w       t    p               f
## 5     e         x           s         g       f    n               f
## 6     e         x           y         y       t    a               f
##   gill.spacing gill.size gill.color stalk.shape stalk.root
## 1            c         n          k           e          e
## 2            c         b          k           e          c
## 3            c         b          n           e          c
## 4            c         n          n           e          e
## 5            w         b          k           t          e
## 6            c         b          n           e          c
##   stalk.surface.above.ring stalk.surface.below.ring stalk.color.above.ring
## 1                        s                        s                      w
## 2                        s                        s                      w
## 3                        s                        s                      w
## 4                        s                        s                      w
## 5                        s                        s                      w
## 6                        s                        s                      w
##   stalk.color.below.ring veil.type veil.color ring.number ring.type
## 1                      w         p          w           o         p
## 2                      w         p          w           o         p
## 3                      w         p          w           o         p
## 4                      w         p          w           o         p
## 5                      w         p          w           o         e
## 6                      w         p          w           o         p
##   spore.print.color population habitat
## 1                 k          s       u
## 2                 n          n       g
## 3                 n          n       m
## 4                 k          s       u
## 5                 n          a       g
## 6                 k          n       g
##                    class                cap.shape              cap.surface 
##                        0                        0                        0 
##                cap.color                  bruises                     odor 
##                        0                        0                        0 
##          gill.attachment             gill.spacing                gill.size 
##                        0                        0                        0 
##               gill.color              stalk.shape               stalk.root 
##                        0                        0                        0 
## stalk.surface.above.ring stalk.surface.below.ring   stalk.color.above.ring 
##                        0                        0                        0 
##   stalk.color.below.ring                veil.type               veil.color 
##                        0                        0                        0 
##              ring.number                ring.type        spore.print.color 
##                        0                        0                        0 
##               population                  habitat 
##                        0                        0

Exploratory Data Analysis

Kita cari satu per satu peluang yang dibutuhkan

  • Peluang sebagai jamur yang dapat dimakan = e ( eatable )
  • Peluang sebagai jamur beracun = p ( poisonous )

Kita cek kelas targetnya :

## 
##    e    p 
## 4208 3916
## 
##         e         p 
## 0.5179714 0.4820286
  • cap.shape
  1. Tabel Frekuensi variabel cap.shape
##      cap.shape
## class    b    c    f    k    s    x
##     e  404    0 1596  228   32 1948
##     p   48    4 1556  600    0 1708
  • cap.shape = bentuk topi:
  • b = bel
  • c = kerucut
  • x = cembung
  • f = datar
  • k = knobbed
  • s = cekung

Secara manual peluangnya dapat dibandingkan untuk setiap bentuk topi jamur. Jamur dengan bentuk topi yang bagaimana yang menunjukkan apakah jamur tersebut dalam kelas beracun atau tidak (dapat dimakan).

Kami memilih variabel prediktor cap.shape atau bentuk topi karena merupakan karakteristik pokok yang secara visual langsung dapat digambarkan atau diidentifikasikan bentuknya. Bentuk visual ini kami prioritaskan yang berbentuk cembung sebagai attribut variabel bentuk topi. Hal ini dikarenakan bentuk topi yang cembung merupakan bentuk umum jamur yang biasa ditemukan disekitar atau dipasaran.

  1. Tabel Frekuensi variabel cap.surface
##      cap.surface
## class    f    g    s    y
##     e 1560    0 1144 1504
##     p  760    4 1412 1740
  • cap.surface = tutup-permukaan :
  • f = berserat
  • g = alur
  • y = bersisik
  • s = halus

Secara manual peluangnya dapat dibandingkan untuk setiap permukaan topi jamur. Jamur dengan permukaan topi yang bagaimana yang menunjukkan apakah jamur tersebut dalam kelas beracun atau tidak (dapat dimakan).

Selain ciri-ciri fisik topi jamur yang langsung dapat digambarkan, ciri tutup permukaan atau permukaan topi juga menjadi variabel prediktor utama. Apakah porsi atau prosentase yang dihasilkan memiliki kecenderungan terhadap kelasnya sebagai jamur yang beracun ataukah tidak. Kami memprioritaskan atribut f = bersesrat untuk mengklasifikasikan secara sederhana. Bahwa Sebagai tanaman sayur yang aman untuk dikonsumsi tentunya yang mempunyai kandungan serat yang memadai.

  1. Tabel Frekuensi variabel cap.color
##      cap.color
## class    b    c    e    g    n    p    r    u    w    y
##     e   48   32  624 1032 1264   56   16   16  720  400
##     p  120   12  876  808 1020   88    0    0  320  672
  • cap.color : warna topi :
  • n = coklat
  • b = buff
  • c = kayu manis
  • g = abu-abu
  • r = hijau
  • p = pink
  • u = ungu
  • e = merah
  • w = putih
  • y = kuning

Secara manual peluangnya dapat dibandingkan untuk setiap warna topi jamur. Jamur dengan warna topi yang apa yang menunjukkan apakah jamur tersebut dalam kelas beracun atau tidak (dapat dimakan).

Jamur dengan ciri-ciri warna putih adalah ciri dominan yang sering kita temui. Jamur berwarna putih bukan hanya dapat kita temui di pasar penjual jamur (yang berarti jamur tersebut dapat dimakan sebagi sayur), tapi juga sering kita temui di lingkungan sekitar, seperti di pekarangan, semak belukar, dan dipinggir jalan. Oleh karena itu untuk meyakinkan kita bahwa jamur dengan ciri warna putih memiliki kecenderungan yang meyakinkan daripada jamur dengan warna lainnya.

  • Aggregasi/group by data variabel class, cap.shape, dan cap.color.
##       class cap.shape cap.surface cap.color
## 113 eatable   cembung    berserat     putih
## 191 eatable   cembung    berserat     putih
## 204 eatable   cembung    berserat     putih
## 236 eatable   cembung    berserat     putih
## 301 eatable   cembung    berserat     putih
## 310 eatable   cembung    berserat     putih
##       class   cap.shape cap.surface   cap.color 
##           0           0           0           0
  • Cek proporsi target :
## 
##   eatable poisonous 
## 0.7575758 0.2424242

Proporsi sebaran data pada kisaran : etable 75.7%, poisonous 24.3%.

  1. Cek range nilai antar prediktor (untuk k-NN)
##        class       cap.shape     cap.surface  cap.color  
##  eatable  :100   cembung:132   berserat:132   putih:132  
##  poisonous: 32

Naive Bayes

  • Naive Bayes with package e1071
## 
## Naive Bayes Classifier for Discrete Predictors
## 
## Call:
## naiveBayes.default(x = mush %>% select(-class), y = mush$class)
## 
## A-priori probabilities:
## mush$class
##   eatable poisonous 
## 0.7575758 0.2424242 
## 
## Conditional probabilities:
##            cap.shape
## mush$class  cembung
##   eatable         1
##   poisonous       1
## 
##            cap.surface
## mush$class  berserat
##   eatable          1
##   poisonous        1
## 
##            cap.color
## mush$class  putih
##   eatable       1
##   poisonous     1

Model Naive Bayes menyimpan informasi tentang nilai peluang dependen antara target dengan setiap feature dalam variabel. Kita bisa periksa nilainya dengan perhitungan manual.

##        eatable poisonous
## [1,] 0.7575758 0.2424242
## [2,] 0.7575758 0.2424242

Prediksi bentuk topi jamur dengan bentuk cembung = x , dan warna topi jamur dengan warna putih = w.

  • type = raw memberikan nilai peluang untuk setiap kelasnya.
  • type = class memberikan nilai kelas yang diprediksi.

IMPORTANT POINTS

  • Naive: hubungan antar prediktor bersifat independen (tidak ada hubungan satu sama lain/hubungan naif)
  • Naive: antara feature punya bobot yang sama Penerapan Naive Bayes dengan variabel numerik

External resource: https://www.geeksforgeeks.org/naive-bayes-classifiers/

  • Split data menjadi data training dan data testing.

80% menjadi data training, sisanya 20% adalah data test.

## .
##   eatable poisonous 
## 0.7575758 0.2424242
## .
##   eatable poisonous 
## 0.7238095 0.2761905
## .
##   eatable poisonous 
## 0.8888889 0.1111111
  • Membuat model Naive Bayes
  • Evaluasi

  • Evaluasi model dengan confusion matrix

Bisa compare nilai confusion matrix dari beberapa model

## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  eatable poisonous
##   eatable        24         3
##   poisonous       0         0
##                                           
##                Accuracy : 0.8889          
##                  95% CI : (0.7084, 0.9765)
##     No Information Rate : 0.8889          
##     P-Value [Acc > NIR] : 0.6475          
##                                           
##                   Kappa : 0               
##                                           
##  Mcnemar's Test P-Value : 0.2482          
##                                           
##             Sensitivity : 1.0000          
##             Specificity : 0.0000          
##          Pos Pred Value : 0.8889          
##          Neg Pred Value :    NaN          
##              Prevalence : 0.8889          
##          Detection Rate : 0.8889          
##    Detection Prevalence : 1.0000          
##       Balanced Accuracy : 0.5000          
##                                           
##        'Positive' Class : eatable         
## 

SUMMARY Naive Bayes :

  • Naive Bayes memprediksi dengan menghitung probabilitas antara feature dengan target
  • Sifat Naive: Antar prediktor dianggap independen, bobot antar feature dianggap sama
  • Jika prediktornya adalah numerik, peluang dihitung dengan distribusi normal
  • Laplace smoothing digunakan ketika ada prediktor yang frekuensinya 0
  • Naive Bayes biasa dipakai untuk text mining, misalnya mendeteksi SPAM
  • Naive Bayes bisa menerima prediktor berupa numerik atau kategorik, tidak seperti K-nn yang hanya bisa menerima prediktor numerik

Decision Tree

Decision Tree adalah model yang dapat divisualisasikan menyerupai Flow Chart, sehingga bisa dibaca dan dipahami mengenai bagaimana model tersebut memprediksi hasilnya.Decision Tree terdiri dari 3 jenis bagian/node, yaitu;

  • Root Node: Cabang pertama, berupa variabel yang paling utama digunakan untuk menentukan nilai target.
  • Interior Node: Cabang kedua dan seterusnya, berupa variabel lain yang digunakan apabila cabang pertama tidak cukup untuk menentukan target.
  • Leaf/Terminal Node: Nilai target atau kelas yang diprediksi.

Decision Tree selalu diakhiri dengan Terminal Node yang berisi nilai target hasil prediksi model.

Perolehan Informasi

Mengenal Entropy

Entropy adalah ukuran ketidakteraturan (measure of disorder) yang bisa digunakan untuk mewakili seberapa beragam kelas yang ada dalam suatu variabel.

Entropy=Σci=1−pi log2 pi

pi: proporsi kelas ke-i (jumlah observasi kelas i dibagi total seluruh observasi) Nilai entropy apabila dalam satu variabel terdapat 2 kelas atau nilai:

Entropy=− p1 log2 p1−p2 log2 p2

Interpretasi Entropy:

  • Entropy = 1, tidak ada kelas yang dominan (jumlah kedua kelas seimbang).
  • Entropy = 0, salah satu kelas sangat dominan.

Ketika kita memiliki masalah berupa klasifikasi (target berupa factor atau kategori), model Decision Tree akan memiliki 1 tujuan: meminimalkan entropy. Semakin kecil entropy, semakin homogen atau seragam anggota dari kelompok data tersebut. Dengan membagi 1 data utuh menjadi beberapa cabang/subset data, kita berharap setiap cabang dapat memiliki anggota yang homogen atau salah satu kelas mendominasi.

Kemudian, bagaimana kita menentukan variabel yang akan digunakan untuk memisahkan 1 data menjadi 2 cabang. Berkaitan dengan Entropy di atas akan kita hitung tingkat penurunan nilai Entropy atau tingkat perolehan informasi (Information Gain)-nya ketidakberaturannya berapa.

Information Gain

Information Gain atau Perolehan Informasi digunakan untuk mengukur perubahan Entropy dan tingkat keragaman kelas setelah dilakukan percabangan. Ketika kita memisahkan 1 data menjadi 2 cabang (2 kelas) menggunakan variabel tertentu, information gain dipakai untuk menentukan variabel mana yang dapat memberikan penurunan Entropy yang paling besar. Perolehan informasi antara 2 cabang/kelas yang dipisahkan berdasarkan kriteria tertentu (subset data) menghasilkan nilai yang semakin homogen atau bahkan salah satu kelas mendominasi.

Information Gain=Entropy(awal)−(P1 Entropy1+P2 Entropy2)

Kita dapat mencari variabel terbaik (yang bisa digunakan untuk memisahkan dua kelas supaya entropy-nya semakin kecil), dengan cara mencari nilai perolehan informasi/Information Gain pada setiap variabel. Kemudian, kita dapat memilih variabel yang memberikan Information Gain terbesar.

  • Root Node adalah cabang pertama pada Decision Tree yang dapat digunakan sebagai variabel target.
  • Interior Node: Cabang kedua dan seterusnya, dapat digunakan apabila cabang pertama/Root Node tidak cukup untuk digunakan sebagai target.
  • Leaf/Terminal Node: Cabang akhir atau terminal dari nilai target atau kelas yang diprediksi.

Kriteria Pemisahan

Semakin tinggi information gain, maka penurunan entropy-nya semakin tinggi juga yang berarti variabel tersebut dapat membagi data dari yang beragam (heterogen) menjadi homogen. Semakin tinggi nilai information gain, semakin teratur data kelasnya, yang berarti semakin kecil Entropy-nya.

Variabel yang memberikan perolehan informasi yang lebih besar, berarti variabel tersebut dapat digunakan untuk memisahkan data.

  • Decision Tree with partykit package

Pada subset data mush untuk mengetahui kelas suatu jamur sebagai jamur beracun atau tidak, Kita bisa menggunakan function ctree() dari package partykit untuk membuat Decision Tree. Pemodelan diawal kita gunakan porsi data 80:20, sehingga menghasilkan kelas yang imbalance.

## .
##   eatable poisonous 
## 0.5179714 0.4820286
## .
##   eatable poisonous 
## 0.5179817 0.4820183
## .
##   eatable poisonous 
## 0.5178792 0.4821208

Datanya kurang se-imbang.

Ada beberapa solusi untuk class-imbalance:

  • Upsampling

Upsampling berarti menambah jumlah sampel untuk kelas minoritas (kelas yang jumlahnya lebih sedikit) sampai proporsi antar kedua kelasnya sama. Jumlah sampel ditambah dengan menduplikasi data yang ada.

  • Downsampling

Downsampling adalah kebalikan dari Upsampling. Downsampling dilakukan dengan mengurangi jumlah kelas mayoritas sampai proporsi antar kelasnya sama.

  • Membuat Data Sintetik dengan algoritma SMOTE

Membuat data sintetik atau data buatan. Topik ini di luar pembahasan kita. Saya berikan external source apabila Bapak ingin mempelajarinya. Penjelasan SMOTE: http://rikunert.com/SMOTE_explained

Kita bisa cek jumlah datanya dulu sebelum menentukan mau melakukan upsampling atau downsampling.

## [1] 8124   23

Sementara, kita gunakan Upsample terlebih dahulu. Karena sifatnya sampling, agar hasilnya sama, kita gunakan set.seed(100).

Untuk cek data yang duplicate

Kita cek kembali proporsi kelasnya.

## 
##   eatable poisonous 
##       0.5       0.5

Modeling

Gunakan function ctree() untuk membuat Decision Tree.

Kita bisa visualisasikan model Decision Tree

Evaluasi Model

Prediksi nilai kelasnya dengan menggunakan function predict().

  • Untuk menghasilkan nilai kelas, gunakan parameter type = “response”
  • Untuk menghasilkan peluang kelas, gunakan parameter type = “prob”
  • Untuk mengetahui observasi masuk ke node/cabang mana, gunakan parameter type = “node”
##      11      13      24      42      53      92 
## eatable eatable eatable eatable eatable eatable 
## Levels: eatable poisonous
## [1] 8124   23

Buat Confusion Matrix.

## Confusion Matrix and Statistics
## 
##            Reference
## Prediction  eatable poisonous
##   eatable       420         2
##   poisonous       0       389
##                                              
##                Accuracy : 0.9975             
##                  95% CI : (0.9911, 0.9997)   
##     No Information Rate : 0.5179             
##     P-Value [Acc > NIR] : <0.0000000000000002
##                                              
##                   Kappa : 0.9951             
##                                              
##  Mcnemar's Test P-Value : 0.4795             
##                                              
##             Sensitivity : 1.0000             
##             Specificity : 0.9949             
##          Pos Pred Value : 0.9953             
##          Neg Pred Value : 1.0000             
##              Prevalence : 0.5179             
##          Detection Rate : 0.5179             
##    Detection Prevalence : 0.5203             
##       Balanced Accuracy : 0.9974             
##                                              
##        'Positive' Class : eatable            
## 

Buat ROC Curve.

#Tree Pruning

Decision Tree mampu membagi-bagi data menjadi beberapa cabang hingga mendapatkan 1 node yang hanya berisi 1 observasi. Hal ini kurang bagus, karena artinya model Decision Tree kita overfit terhadap data training dan kemungkinan besar akan gagal mengenali unseen data dengan tepat. Untuk mengatasi hal tersebut, ada metode bernama Pruning.

Pruning artinya kita mencegah Decision Tree untuk membuat cabang berdasarkan kriteria tertentu. Tujuan dari Pruning adalah mencegah model menjadi terlalu kompleks dan overfit, sehingga model tidak hanya sulit dipahami apabila terlalu kompleks, tetapi juga kurang mampu menghadapi unseen data. Berdasarkan pendekatannya, Pruning terbagi menjadi 2 cara:

  • Pre-Pruning

Pre-pruning artinya kita sudah menentukan dan mengatur dari awal parameter untuk mencegah Decision Tree memiliki terlalu banyak cabang. Kita melakukan pruning sebelum kita mendapatkan model yang lengkap atau kompleks. Metode ini kurang disarankan karena kita belum memiliki informasi sebaiknya Pruning dilakukan kapan atau nilai parameternya berapa yang harus kita atur.

  • Post-Pruning

Post-Pruning artinya kita melakukan Pruning setelah kita mendapatkan model yang lengkap atau kompleks. Setelah kita menghasilkan model lengkapnya, baru kita memutuskan berapa nilai paremeter Pruning-nya atau seberapa jauh kita akan memangkas cabang pada Decision Tree.

Parameter Pruning pada ctree()

Berikut beberapa parameter yang bisa diatur untuk menentukan seberapa kompleks pohon yang dihasilkan.

mincriterion : nilai batas dari test statistik agar terjadi split (1 - p-value) agar terjadi split minprob : minimal proporsi dari kedua kelas agar terjadi split mtry : jumlah variabel yang dipakai untuk membangun model, dipilih secara acak oleh model minsplit : minimal total bobot (sum of weight) pada sebuah cabang agar terjadi split minbucket : minimal total bobot (sum of weight) pada terminal node (cabang terakhir) agar terjadi split Misalkan kita buat model kita menjadi sangat kompleks (bercabang banyak) dan overfit dengan mengatur mincriterion menjadi 0.

mtry = 2, hanya memilih 2 variabel ketika akan men-split data di setiap node/cabang

Jika kita mengubah nilai mincriterion = 0.999, sehingga asalkan hasil tes statistik sudah melebihi 1-0.999 = 0.001, maka baru ketika hasil tes statistik adalah 0.999, akan terjadi split (keputusan untuk split semakin ketat). Pohon yang dihasilkan akan lebih sederhana, karena default dari mincretrion adalah 0.95. mincriterion = 0.999 lebih ketat dibandingkan mincriterion = 0.95. Semakin ketat, maka model semakin sederhana.

Kegunaan Pruning: memangkas cabang/node supaya tidak overfit

Konklusi

Dari referensi ConfisionMatrix dengan metode Naive Bayes menunjukan porsi prediksi :

  • Accuracy : 0.8889
  • ‘Positive’ Class : eatable

*Bahwa identifikasi Jamur dengan kriteria ; berbentuk cembung, permukaan berserat, dan berwarna putih dapat diklasifikasikan sebagai **jamur yang dapat dikonsumsi/dimakan*. Jamur dengan ciri seperti itu biasanya dinamakan “Jamur Susu”.

Sedangkan untuk model Decision Tree menunjukan confusion matix dengan Positive Class dari karakteristik jamur tersebut adalah eatable yang artinya dapat dikonsumsi. Dengan akurasi mendekati 100% jamur tersebut tidak bersifat patologis/beracun.