BAB I PENDAHULUAN

1.1 Latar Belakang Masalah

Perkembangan teknologi pengolahan data mendorong pemanfaatan machine learning untuk membantu proses klasifikasi dan pengambilan keputusan. Salah satu metode yang dapat digunakan adalah Decision Tree, yaitu metode pembelajaran terawasi (supervised learning) yang membentuk aturan prediksi melalui pemisahan data berdasarkan variabel prediktor. Metode ini memiliki keunggulan karena hasil pemodelannya dapat divisualisasikan dalam bentuk pohon sehingga lebih mudah dipahami dan diinterpretasikan. Dalam bidang kesehatan, Decision Tree dapat diterapkan untuk mengklasifikasikan kondisi kanker payudara ke dalam kategori jinak (benign) dan ganas (malignant) berdasarkan karakteristik sel. Mellina dkk. (2024) membahas penerapan algoritma Decision Tree untuk prediksi kanker payudara, sedangkan Munir dkk. (2024) membandingkan algoritma Naive Bayes dan Decision Tree dalam klasifikasi penyakit kanker payudara.

Pada praktikum ini, dataset BreastCancer dari package mlbench digunakan untuk membangun model Classification Tree. Tahapan analisis diawali dengan pemeriksaan dan penanganan missing value menggunakan package mice, kemudian data dibagi menjadi data training dan testing. Selanjutnya, model dibangun dan divisualisasikan, serta dilakukan analisis variable importance untuk mengetahui variabel yang berperan dalam klasifikasi. Kinerja model dievaluasi menggunakan confusion matrix, kemudian dilakukan penentuan Complexity Parameter (CP) terbaik dan pruning untuk menyederhanakan struktur pohon. Model setelah pruning dievaluasi kembali menggunakan confusion matrix, kurva Receiver Operating Characteristic (ROC), dan nilai Area Under the Curve (AUC) untuk mengetahui kemampuan model dalam membedakan kategori jinak dan ganas.

1.2 Rumusan Masalah

  1. Bagaimana menerapkan metode Decision Tree (Classification Tree) untuk mengklasifikasikan kondisi kanker payudara menggunakan dataset BreastCancer di RStudio?
  2. Bagaimana mengevaluasi dan meningkatkan kinerja model klasifikasi melalui penentuan nilai CP terbaik dan pruning menggunakan confusion matrix, kurva ROC, dan nilai AUC?

1.3 Tujuan

1.Menjelaskan konsep dasar Decision Tree untuk klasifikasi menggunakan metode CART (Classification and Regression Tree). 2.Membangun model Classification Tree menggunakan algoritma CART.

BAB II TINJAUAN PUSTAKA

2.1 Decision Tree

Decision Tree atau pohon keputusan merupakan metode machine learning yang termasuk dalam supervised learning dan digunakan untuk membentuk aturan prediksi berdasarkan pola dalam data. Model ini membagi data secara bertahap berdasarkan variabel prediktor hingga menghasilkan kelompok yang digunakan untuk menentukan hasil prediksi. Struktur Decision Tree terdiri atas root node sebagai simpul awal, branch sebagai cabang pemisahan, intermediate node sebagai simpul perantara, dan leaf node sebagai simpul akhir yang menghasilkan prediksi. Metode ini memiliki keunggulan berupa hasil pemodelan yang dapat divisualisasikan sehingga aturan keputusan relatif mudah dipahami dan diinterpretasikan (Berk, 2020).

Dalam klasifikasi kanker payudara, Decision Tree dapat digunakan untuk mengelompokkan kondisi kanker ke dalam kategori jinak (benign) dan ganas (malignant) berdasarkan karakteristik sel. Pembentukan pohon keputusan dilakukan dengan memilih variabel yang mampu memisahkan data ke dalam kelompok kelas secara efektif. Proses tersebut berlanjut hingga terbentuk aturan keputusan yang digunakan untuk mengklasifikasikan data baru. Kemampuan Decision Tree dalam membentuk aturan yang mudah diinterpretasikan menjadikannya salah satu metode yang dapat diterapkan pada permasalahan klasifikasi.

2.2 Classification and Regression Tree (CART)

Classification and Regression Tree (CART) merupakan metode pembentukan pohon keputusan yang digunakan untuk menyelesaikan permasalahan klasifikasi maupun regresi. Pada Classification Tree, variabel target berbentuk kategori, sedangkan pada Regression Tree, variabel target berupa nilai numerik. CART membentuk pohon melalui proses splitting atau pemisahan data berdasarkan variabel prediktor agar kelompok yang terbentuk semakin homogen. Dalam klasifikasi, salah satu ukuran yang dapat digunakan untuk menentukan kualitas pemisahan adalah Gini Index. Semakin kecil nilai ketidakmurnian suatu simpul, semakin besar dominasi kelas tertentu dalam simpul tersebut (Breiman dkk., 2017).

Pembentukan pohon CART dapat menghasilkan struktur yang kompleks apabila pemisahan dilakukan secara berulang hingga terlalu menyesuaikan diri dengan data pelatihan. Oleh karena itu, digunakan proses pruning atau pemangkasan untuk mengurangi cabang yang kurang diperlukan dan menyederhanakan model. Dalam implementasi menggunakan package rpart pada R, Complexity Parameter (CP) digunakan untuk mengendalikan kompleksitas pohon dan membantu menentukan model yang lebih sederhana. Pendekatan pengembangan pohon keputusan juga terus diteliti, termasuk penggunaan data berlabel sebagian dalam pembentukan pohon klasifikasi (Abedinia & Seydi, 2024). Pada praktikum ini, CART diterapkan untuk membangun Classification Tree menggunakan dataset BreastCancer, kemudian model dievaluasi sebelum dan sesudah pruning untuk melihat kemampuan klasifikasinya.

BAB III METODE PENELITIAN

3.1 Sumber Data

Data yang digunakan dalam penelitian ini merupakan data sekunder berupa data kondisi kanker payudara yang diperoleh dari dataset BreastCancer pada package mlbench dalam perangkat lunak R. Data tersebut memuat informasi karakteristik sel yang digunakan untuk mengklasifikasikan kondisi kanker payudara ke dalam dua kategori, yaitu jinak (benign) dan ganas (malignant). Data terdiri atas 699 observasi sebelum penanganan missing value. Data selanjutnya diolah menggunakan perangkat lunak RStudio dengan menerapkan metode Decision Tree (Classification Tree) untuk memperoleh hasil klasifikasi.

3.2 Variabel Penelitian

Variabel yang digunakan dalam penelitian ini terdiri atas variabel respon dan variabel prediktor yang menggambarkan karakteristik sel pada kanker payudara. Variabel respon yang digunakan adalah Class, sedangkan variabel prediktor terdiri atas sembilan karakteristik sel. Adapun definisi masing-masing variabel disajikan pada tabel berikut.

Variabel Nama Variabel Definisi
Y Class Kategori kondisi kanker payudara, yaitu jinak (benign) dan ganas (malignant).
X₁ Cl.thickness Ketebalan gumpalan sel.
X₂ Cell.size Keseragaman ukuran sel.
X₃ Cell.shape Keseragaman bentuk sel.
X₄ Marg.adhesion Tingkat perlekatan marginal sel.
X₅ Epith.c.size Ukuran sel epitel tunggal.
X₆ Bare.nuclei Kondisi inti sel yang tidak tertutup sitoplasma.
X₇ Bl.cromatin Karakteristik kromatin sel.
X₈ Normal.nucleoli Kondisi nukleolus sel.
X₉ Mitoses Tingkat aktivitas mitosis sel.

Variabel Id tidak digunakan dalam pemodelan karena hanya berfungsi sebagai identitas setiap observasi. Variabel Class digunakan sebagai target klasifikasi, sedangkan sembilan variabel lainnya digunakan sebagai prediktor dalam pembentukan model Decision Tree (Classification Tree).

3.3 Langkah-Langkah Analisis

Analisis data dilakukan menggunakan perangkat lunak RStudio dengan metode Decision Tree (Classification Tree). Adapun tahapan analisis yang dilakukan adalah sebagai berikut.

  1. Mengimpor dataset BreastCancer dari package mlbench, kemudian memeriksa struktur data, tipe variabel, dan jumlah observasi.
  2. Memeriksa keberadaan missing value pada setiap variabel menggunakan fungsi is.na() dan colSums().
  3. Melakukan penanganan missing value menggunakan metode imputasi dengan package mice, kemudian memeriksa kembali kelengkapan data.
  4. Membagi data menjadi data training sebesar 70% dan data testing sebesar 30% menggunakan fungsi createDataPartition() dari package caret.
  5. Membentuk model klasifikasi menggunakan fungsi rpart() dengan variabel Class sebagai variabel respon dan sembilan karakteristik sel sebagai variabel prediktor.
  6. Memvisualisasikan pohon klasifikasi menggunakan fungsi rpart.plot() untuk mengetahui struktur pohon dan aturan pemisahan yang terbentuk.
  7. Menganalisis variable importance untuk mengetahui variabel prediktor yang memberikan kontribusi relatif besar terhadap model klasifikasi.
  8. Melakukan prediksi pada data testing dan mengevaluasi model awal menggunakan confusion matrix untuk memperoleh nilai akurasi, sensitivitas, spesifisitas, dan Kappa.
  9. Menentukan nilai kompleksitas pohon (Complexity Parameter atau CP) terbaik berdasarkan hasil cross-validation dengan memperhatikan nilai xerror pada tabel kompleksitas.
  10. Melakukan pruning atau pemangkasan pohon menggunakan fungsi prune() berdasarkan nilai CP yang dipilih.
  11. Melakukan prediksi dan evaluasi ulang terhadap model setelah pruning menggunakan confusion matrix.
  12. Mengevaluasi kinerja model setelah pruning menggunakan kurva ROC (Receiver Operating Characteristic) dan nilai AUC (Area Under the Curve).
  13. Membandingkan hasil evaluasi model sebelum dan sesudah pruning, kemudian menyusun kesimpulan berdasarkan hasil klasifikasi.

BAB IV HASIL DAN PEMBAHASAN

4.1 Memuat Package dan Dataset

knitr::opts_chunk$set(echo = FALSE)
# Jika package belum tersedia, jalankan satu kali:
# install.packages(c("ISLR", "rpart", "rpart.plot", "dplyr", "ggplot2"))

library(ISLR)
library(rpart)
library(rpart.plot)
library(dplyr)
library(ggplot2)

# Memuat dataset Hitters
data(Hitters)

# Memeriksa struktur dan ringkasan data
str(Hitters)
## 'data.frame':    322 obs. of  20 variables:
##  $ AtBat    : int  293 315 479 496 321 594 185 298 323 401 ...
##  $ Hits     : int  66 81 130 141 87 169 37 73 81 92 ...
##  $ HmRun    : int  1 7 18 20 10 4 1 0 6 17 ...
##  $ Runs     : int  30 24 66 65 39 74 23 24 26 49 ...
##  $ RBI      : int  29 38 72 78 42 51 8 24 32 66 ...
##  $ Walks    : int  14 39 76 37 30 35 21 7 8 65 ...
##  $ Years    : int  1 14 3 11 2 11 2 3 2 13 ...
##  $ CAtBat   : int  293 3449 1624 5628 396 4408 214 509 341 5206 ...
##  $ CHits    : int  66 835 457 1575 101 1133 42 108 86 1332 ...
##  $ CHmRun   : int  1 69 63 225 12 19 1 0 6 253 ...
##  $ CRuns    : int  30 321 224 828 48 501 30 41 32 784 ...
##  $ CRBI     : int  29 414 266 838 46 336 9 37 34 890 ...
##  $ CWalks   : int  14 375 263 354 33 194 24 12 8 866 ...
##  $ League   : Factor w/ 2 levels "A","N": 1 2 1 2 2 1 2 1 2 1 ...
##  $ Division : Factor w/ 2 levels "E","W": 1 2 2 1 1 2 1 2 2 1 ...
##  $ PutOuts  : int  446 632 880 200 805 282 76 121 143 0 ...
##  $ Assists  : int  33 43 82 11 40 421 127 283 290 0 ...
##  $ Errors   : int  20 10 14 3 4 25 7 9 19 0 ...
##  $ Salary   : num  NA 475 480 500 91.5 750 70 100 75 1100 ...
##  $ NewLeague: Factor w/ 2 levels "A","N": 1 2 1 2 2 1 1 1 2 1 ...
summary(Hitters)
##      AtBat            Hits         HmRun            Runs       
##  Min.   : 16.0   Min.   :  1   Min.   : 0.00   Min.   :  0.00  
##  1st Qu.:255.2   1st Qu.: 64   1st Qu.: 4.00   1st Qu.: 30.25  
##  Median :379.5   Median : 96   Median : 8.00   Median : 48.00  
##  Mean   :380.9   Mean   :101   Mean   :10.77   Mean   : 50.91  
##  3rd Qu.:512.0   3rd Qu.:137   3rd Qu.:16.00   3rd Qu.: 69.00  
##  Max.   :687.0   Max.   :238   Max.   :40.00   Max.   :130.00  
##                                                                
##       RBI             Walks            Years            CAtBat       
##  Min.   :  0.00   Min.   :  0.00   Min.   : 1.000   Min.   :   19.0  
##  1st Qu.: 28.00   1st Qu.: 22.00   1st Qu.: 4.000   1st Qu.:  816.8  
##  Median : 44.00   Median : 35.00   Median : 6.000   Median : 1928.0  
##  Mean   : 48.03   Mean   : 38.74   Mean   : 7.444   Mean   : 2648.7  
##  3rd Qu.: 64.75   3rd Qu.: 53.00   3rd Qu.:11.000   3rd Qu.: 3924.2  
##  Max.   :121.00   Max.   :105.00   Max.   :24.000   Max.   :14053.0  
##                                                                      
##      CHits            CHmRun           CRuns             CRBI        
##  Min.   :   4.0   Min.   :  0.00   Min.   :   1.0   Min.   :   0.00  
##  1st Qu.: 209.0   1st Qu.: 14.00   1st Qu.: 100.2   1st Qu.:  88.75  
##  Median : 508.0   Median : 37.50   Median : 247.0   Median : 220.50  
##  Mean   : 717.6   Mean   : 69.49   Mean   : 358.8   Mean   : 330.12  
##  3rd Qu.:1059.2   3rd Qu.: 90.00   3rd Qu.: 526.2   3rd Qu.: 426.25  
##  Max.   :4256.0   Max.   :548.00   Max.   :2165.0   Max.   :1659.00  
##                                                                      
##      CWalks        League  Division    PutOuts          Assists     
##  Min.   :   0.00   A:175   E:157    Min.   :   0.0   Min.   :  0.0  
##  1st Qu.:  67.25   N:147   W:165    1st Qu.: 109.2   1st Qu.:  7.0  
##  Median : 170.50                    Median : 212.0   Median : 39.5  
##  Mean   : 260.24                    Mean   : 288.9   Mean   :106.9  
##  3rd Qu.: 339.25                    3rd Qu.: 325.0   3rd Qu.:166.0  
##  Max.   :1566.00                    Max.   :1378.0   Max.   :492.0  
##                                                                     
##      Errors          Salary       NewLeague
##  Min.   : 0.00   Min.   :  67.5   A:176    
##  1st Qu.: 3.00   1st Qu.: 190.0   N:146    
##  Median : 6.00   Median : 425.0            
##  Mean   : 8.04   Mean   : 535.9            
##  3rd Qu.:11.00   3rd Qu.: 750.0            
##  Max.   :32.00   Max.   :2460.0            
##                  NAs    :59
dim(Hitters)
## [1] 322  20
head(Hitters)
##                   AtBat Hits HmRun Runs RBI Walks Years CAtBat CHits CHmRun
## -Andy Allanson      293   66     1   30  29    14     1    293    66      1
## -Alan Ashby         315   81     7   24  38    39    14   3449   835     69
## -Alvin Davis        479  130    18   66  72    76     3   1624   457     63
## -Andre Dawson       496  141    20   65  78    37    11   5628  1575    225
## -Andres Galarraga   321   87    10   39  42    30     2    396   101     12
## -Alfredo Griffin    594  169     4   74  51    35    11   4408  1133     19
##                   CRuns CRBI CWalks League Division PutOuts Assists Errors
## -Andy Allanson       30   29     14      A        E     446      33     20
## -Alan Ashby         321  414    375      N        W     632      43     10
## -Alvin Davis        224  266    263      A        W     880      82     14
## -Andre Dawson       828  838    354      N        E     200      11      3
## -Andres Galarraga    48   46     33      N        E     805      40      4
## -Alfredo Griffin    501  336    194      A        W     282     421     25
##                   Salary NewLeague
## -Andy Allanson        NA         A
## -Alan Ashby        475.0         N
## -Alvin Davis       480.0         A
## -Andre Dawson      500.0         N
## -Andres Galarraga   91.5         N
## -Alfredo Griffin   750.0         A

Syntax pada bagian ini digunakan untuk memanggil package yang diperlukan dalam analisis, memuat dataset Hitters, dan memeriksa karakteristik awal data. Fungsi str() menampilkan struktur serta tipe setiap variabel, summary() menyajikan ringkasan statistik, dim() menunjukkan jumlah baris dan kolom, sedangkan head() menampilkan beberapa observasi pertama. Pemeriksaan ini membantu mengenali bentuk dataset dan memastikan variabel Salary tersedia sebagai target prediksi.

Dataset Hitters memuat variabel numerik dan kategorik. Variabel Salary menjadi target yang akan diprediksi. Pemeriksaan awal dilakukan untuk mengenali nama variabel, tipe data, serta kondisi data sebelum diproses.

4.2 Pemeriksaan dan Penanganan Missing Value

##     AtBat      Hits     HmRun      Runs       RBI     Walks     Years    CAtBat 
##         0         0         0         0         0         0         0         0 
##     CHits    CHmRun     CRuns      CRBI    CWalks    League  Division   PutOuts 
##         0         0         0         0         0         0         0         0 
##   Assists    Errors    Salary NewLeague 
##         0         0        59         0
## [1] 59
## [1] 322  20
## [1] 263  20
## [1] 0

Pemeriksaan missing value dilakukan menggunakan is.na() yang dikombinasikan dengan colSums() untuk menghitung jumlah nilai hilang pada setiap variabel. Fungsi sum() digunakan untuk menghitung jumlah missing value secara keseluruhan. Selanjutnya, na.omit() menghapus observasi yang memiliki setidaknya satu nilai hilang dan menyimpan hasilnya dalam objek Hitters_clean. Perbandingan dimensi data sebelum dan sesudah penghapusan menunjukkan jumlah observasi yang tersisa, sedangkan pemeriksaan terakhir memastikan tidak ada missing value pada data bersih.

Penanganan ini mengikuti batasan masalah yang menggunakan na.omit(). Konsekuensinya, jumlah observasi untuk pemodelan berkurang apabila terdapat baris yang memiliki nilai hilang.

4.3 Membagi Data Training dan Testing

## [1] 184  20
## [1] 79 20
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    68.0   178.8   425.0   556.0   750.0  2460.0
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    67.5   195.0   385.0   489.2   720.8  2127.3

Pembagian data diawali dengan set.seed(234) agar pengacakan dapat diulang dengan hasil yang sama. Fungsi nrow() menghitung jumlah observasi setelah missing value dihapus, sedangkan sample() memilih 70% indeks observasi secara acak sebagai data training tanpa pengembalian. Observasi yang tidak terpilih digunakan sebagai data testing. Data training dipakai untuk membangun model, sementara data testing digunakan untuk menilai kemampuan prediksi pada data yang tidak digunakan selama pelatihan. Fungsi dim() dan summary() membantu memeriksa ukuran data serta ringkasan Salary pada masing-masing bagian.

4.4 Membangun dan Memvisualisasikan Regression Tree

## n= 184 
## 
## node), split, n, deviance, yval
##       * denotes terminal node
## 
##   1) root 184 41961210.00  555.9910  
##     2) CHits< 439 82  1332171.00  210.5325  
##       4) CRBI< 115.5 55   182826.90  143.9939  
##         8) CRuns< 81 34    28217.26  107.6471 *
##         9) CRuns>=81 21    36969.14  202.8413 *
##       5) CRBI>=115.5 27   409807.40  346.0741  
##        10) CWalks< 118 13    99676.69  269.3462 *
##        11) CWalks>=118 14   162530.80  417.3214 *
##     3) CHits>=439 102 22975850.00  833.7125  
##       6) RBI< 80.5 77  8627815.00  693.9066  
##        12) AtBat< 394.5 32  2133386.00  511.7969  
##          24) CHmRun< 124.5 23   702139.20  439.8913  
##            48) Errors< 6 13   289156.40  377.0513 *
##            49) Errors>=6 10   294911.50  521.5834 *
##          25) CHmRun>=124.5 9  1008422.00  695.5556 *
##        13) AtBat>=394.5 45  4678518.00  823.4069  
##          26) Walks< 77.5 36  1783381.00  759.8836  
##            52) Assists>=396 10   363046.00  567.4143 *
##            53) Assists< 396 26   907412.10  833.9102  
##             106) CAtBat< 2734 8    35380.47  695.3125 *
##             107) CAtBat>=2734 18   650057.10  895.5092 *
##          27) Walks>=77.5 9  2168800.00 1077.5000 *
##       7) RBI>=80.5 25  8207560.00 1264.3150  
##        14) Walks< 52.5 10   923861.40  837.9167 *
##        15) Walks>=52.5 15  4253446.00 1548.5800 *
## 
## Regression tree:
## rpart(formula = Salary ~ ., data = Hitters_train, method = "anova", 
##     control = rpart.control(cp = 0.001, minsplit = 20))
## 
## Variables actually used in tree construction:
##  [1] Assists AtBat   CAtBat  CHits   CHmRun  CRBI    CRuns   CWalks  Errors 
## [10] RBI     Walks  
## 
## Root node error: 41961207/184 = 228050
## 
## n= 184 
## 
##           CP nsplit rel error  xerror    xstd
## 1  0.4207026      0   1.00000 1.00595 0.15887
## 2  0.1463369      1   0.57930 0.65808 0.11353
## 3  0.0722156      2   0.43296 0.61104 0.10369
## 4  0.0432759      3   0.36074 0.61884 0.12285
## 5  0.0176243      4   0.31747 0.55011 0.11292
## 6  0.0173097      5   0.29984 0.54534 0.11288
## 7  0.0122237      6   0.28253 0.55052 0.11501
## 8  0.0100766      7   0.27031 0.53931 0.11394
## 9  0.0052900      8   0.26023 0.52777 0.11152
## 10 0.0035175      9   0.25494 0.51243 0.10894
## 11 0.0028138     10   0.25143 0.51494 0.10922
## 12 0.0028036     11   0.24861 0.51494 0.10922
## 13 0.0010000     12   0.24581 0.51647 0.10929

Model dibangun menggunakan formula Salary ~ ., yang menetapkan Salary sebagai variabel respons dan seluruh variabel lain sebagai prediktor. Argumen method = "anova" menunjukkan bahwa model yang dibentuk merupakan pohon regresi untuk target numerik. Pengaturan cp = 0.001 memungkinkan pembentukan pohon awal yang cukup rinci untuk proses pemilihan CP, sedangkan minsplit = 20 menetapkan jumlah minimum observasi pada simpul agar pemisahan dapat dipertimbangkan. Fungsi print() dan printcp() menampilkan ringkasan model serta tabel kompleksitas. Selanjutnya, rpart.plot() memvisualisasikan aturan pemisahan, dengan variabel pada simpul sebagai dasar pemisahan dan simpul terminal sebagai nilai prediksi Salary.

Pohon yang terbentuk menunjukkan aturan pemisahan data berdasarkan variabel yang dipilih oleh algoritma. Variabel dan nilai batas pemisahan yang muncul pada hasil aktual harus dibaca langsung dari visualisasi, karena hasilnya ditentukan oleh data training dan pengacakan yang digunakan.

4.5 Analisis Variable Importance

##    Variabel Importance
## 1     CHits   18675326
## 2    CAtBat   18084942
## 3     CRuns   17519152
## 4      CRBI   17276732
## 5    CWalks   16038217
## 6     Years   12456880
## 7       RBI    7299030
## 8     Walks    4687275
## 9      Runs    3762997
## 10    HmRun    3752785
## 11  PutOuts    2931433
## 12    AtBat    2712577
## 13  Assists    1760445
## 14   CHmRun    1724412
## 15     Hits    1521265
## 16   Errors    1027147

Nilai variable importance diambil dari objek model melalui fit_tree$variable.importance, kemudian disusun menjadi tabel menggunakan data.frame(). Fungsi arrange(desc(Importance)) mengurutkan variabel berdasarkan nilai kepentingan dari yang tertinggi hingga terendah. Grafik batang dibuat menggunakan ggplot() dan geom_col(), sedangkan coord_flip() mengatur orientasi grafik agar nama variabel lebih mudah dibaca. Tabel dan grafik tersebut membantu mengidentifikasi prediktor yang paling berkontribusi terhadap pemisahan pada pohon yang terbentuk.

Variabel dengan nilai importance tertinggi merupakan variabel yang paling berkontribusi terhadap pemisahan pada pohon yang terbentuk. Nilai importance bukan bukti hubungan sebab-akibat dan tidak selalu berarti variabel tersebut paling penting untuk semua model atau semua sampel.

Jika tidak ada variabel yang tercantum pada tabel, periksa kembali apakah pohon berhasil dibentuk dan apakah model menghasilkan pemisahan.

4.6 Prediksi dan Evaluasi Model Awal

## MSE model awal = 121881.8
##   Salary_Aktual Salary_Prediksi      Error
## 1         480.0        695.3125 -215.31250
## 2         500.0        895.5092 -395.50922
## 3          91.5        107.6471  -16.14706
## 4         512.5        521.5834   -9.08340
## 5         700.0        521.5834  178.41660
## 6         240.0        521.5834 -281.58340

Interpretasi syntax:

Prediksi Salary untuk data testing dihasilkan menggunakan fungsi predict() berdasarkan model awal. Selanjutnya, MSE dihitung dengan mencari rata-rata kuadrat selisih antara nilai aktual dan nilai prediksi. Fungsi cat() menampilkan nilai MSE, sedangkan objek hasil_awal menyusun nilai aktual, prediksi, dan kesalahan prediksi dalam sebuah tabel. MSE yang lebih kecil menunjukkan kesalahan prediksi kuadrat yang lebih rendah pada data testing, dengan kesalahan besar memberikan kontribusi lebih besar karena selisihnya dikuadratkan.

MSE model awal menjadi ukuran dasar untuk membandingkan kinerja model setelah pruning. MSE yang lebih rendah menunjukkan kesalahan prediksi kuadrat yang lebih kecil pada data testing. Karena kesalahan dikuadratkan, kesalahan prediksi yang besar akan memberikan kontribusi yang lebih besar terhadap MSE.

4.7 Menentukan CP Terbaik

##             CP nsplit rel error    xerror      xstd
## 1  0.420702615      0 1.0000000 1.0059494 0.1588688
## 2  0.146336874      1 0.5792974 0.6580783 0.1135276
## 3  0.072215578      2 0.4329605 0.6110425 0.1036873
## 4  0.043275935      3 0.3607449 0.6188363 0.1228541
## 5  0.017624299      4 0.3174690 0.5501089 0.1129212
## 6  0.017309735      5 0.2998447 0.5453421 0.1128783
## 7  0.012223738      6 0.2825350 0.5505155 0.1150062
## 8  0.010076559      7 0.2703112 0.5393078 0.1139363
## 9  0.005289993      8 0.2602347 0.5277652 0.1115177
## 10 0.003517531      9 0.2549447 0.5124322 0.1089440
## 11 0.002813819     10 0.2514271 0.5149365 0.1092211
## 12 0.002803553     11 0.2486133 0.5149365 0.1092211
## 13 0.001000000     12 0.2458098 0.5164655 0.1092910
## CP terbaik berdasarkan xerror terkecil = 0.003517531
## xerror pada CP terbaik = 0.5124322

Tabel kompleksitas diperoleh dari fit_tree$cptable dan berisi informasi seperti CP, jumlah pemisahan, kesalahan relatif, serta perkiraan kesalahan cross-validation yang ditunjukkan oleh xerror. Fungsi which.min(tabel_cp$xerror) mencari baris dengan nilai xerror terkecil, kemudian CP pada baris tersebut dipilih sebagai CP terbaik sesuai kriteria analisis. Nilai cp_terbaik selanjutnya digunakan untuk melakukan pruning. Perlu diperhatikan bahwa xerror merupakan perkiraan kesalahan relatif dari cross-validation pada data training, bukan MSE pada data testing.

xerror merupakan perkiraan kesalahan relatif berdasarkan cross-validation internal pada data training, bukan MSE pada data testing. Karena itu, CP dipilih menggunakan xerror, sedangkan kinerja akhir tetap dibandingkan menggunakan MSE pada data testing.

4.8 Pruning dan Visualisasi Pohon Setelah Pruning

## n= 184 
## 
## node), split, n, deviance, yval
##       * denotes terminal node
## 
##   1) root 184 41961210.00  555.9910  
##     2) CHits< 439 82  1332171.00  210.5325  
##       4) CRBI< 115.5 55   182826.90  143.9939 *
##       5) CRBI>=115.5 27   409807.40  346.0741 *
##     3) CHits>=439 102 22975850.00  833.7125  
##       6) RBI< 80.5 77  8627815.00  693.9066  
##        12) AtBat< 394.5 32  2133386.00  511.7969  
##          24) CHmRun< 124.5 23   702139.20  439.8913 *
##          25) CHmRun>=124.5 9  1008422.00  695.5556 *
##        13) AtBat>=394.5 45  4678518.00  823.4069  
##          26) Walks< 77.5 36  1783381.00  759.8836  
##            52) Assists>=396 10   363046.00  567.4143 *
##            53) Assists< 396 26   907412.10  833.9102  
##             106) CAtBat< 2734 8    35380.47  695.3125 *
##             107) CAtBat>=2734 18   650057.10  895.5092 *
##          27) Walks>=77.5 9  2168800.00 1077.5000 *
##       7) RBI>=80.5 25  8207560.00 1264.3150  
##        14) Walks< 52.5 10   923861.40  837.9167 *
##        15) Walks>=52.5 15  4253446.00 1548.5800 *

Pemangkasan pohon dilakukan menggunakan prune() dengan memasukkan model awal dan nilai CP terbaik. Fungsi ini menyederhanakan struktur pohon berdasarkan tingkat kompleksitas yang dipilih. Fungsi print() menampilkan ringkasan model hasil pemangkasan, sedangkan rpart.plot() menggambarkan struktur pohon yang baru. Perbandingan jumlah cabang dan simpul terminal antara pohon awal dan pohon hasil pruning menunjukkan perubahan kompleksitas model. Pohon yang lebih sederhana berpotensi mengurangi overfitting, tetapi belum tentu menghasilkan MSE yang lebih rendah sehingga perlu dievaluasi kembali.

Pruning bertujuan menyederhanakan pohon dan berpotensi mengurangi overfitting. Namun, pohon yang lebih sederhana tidak otomatis menghasilkan MSE testing yang lebih rendah; hasilnya harus diperiksa melalui evaluasi ulang.

4.9 Prediksi dan Evaluasi Model Setelah Pruning

## MSE model awal    = 121881.8
## MSE setelah pruning = 118091
##                             Model      MSE
## 1            Regression Tree Awal 121881.8
## 2 Regression Tree Setelah Pruning 118091.0
## MSE menurun setelah pruning. Pada data testing ini, model hasil pruning memiliki kesalahan prediksi lebih rendah.

Fungsi predict() digunakan untuk menghasilkan prediksi Salary dari pohon yang telah dipangkas. MSE setelah pruning dihitung menggunakan data testing yang sama dengan model awal agar perbandingan dilakukan secara adil. Objek perbandingan_mse merangkum nilai MSE kedua model, sedangkan struktur if membandingkan hasilnya dan menampilkan keterangan apakah MSE menurun, meningkat, atau tetap sama setelah pruning. Jika MSE hasil pruning lebih kecil, model hasil pemangkasan memiliki kesalahan prediksi lebih rendah pada data testing tersebut; jika lebih besar, model awal lebih baik menurut kriteria MSE.

Jika mse_pruned lebih kecil daripada mse_awal, model hasil pruning lebih baik menurut kriteria MSE pada data testing. Jika lebih besar, model awal menghasilkan kesalahan prediksi yang lebih kecil. Perbandingan ini berlaku untuk pembagian data dan seed yang digunakan dalam analisis.

4.10 Ringkasan Hasil Analisis

## Jumlah observasi awal       : 322
## Jumlah observasi setelah na.omit : 263
## Jumlah data training        : 184
## Jumlah data testing         : 79
## CP terbaik                  : 0.003517531
## MSE model awal              : 121881.8
## MSE setelah pruning         : 118091
## Kesimpulan evaluasi: MSE lebih rendah setelah pruning.

Kode ringkasan menampilkan jumlah observasi sebelum dan sesudah penanganan missing value, ukuran data training dan testing, CP terbaik, serta MSE kedua model. Angka yang muncul setelah Knit dapat digunakan sebagai dasar penyusunan pembahasan dan kesimpulan akhir.

BAB V PENUTUP

5.1 Kesimpulan

Analisis ini membangun Regression Tree menggunakan dataset Hitters untuk memprediksi Salary. Observasi yang memiliki missing value dihapus menggunakan na.omit(), kemudian data dibagi menjadi data training dan testing. Model awal dibangun dan divisualisasikan, variabel penting dianalisis, dan kinerja prediksi diukur menggunakan MSE. CP terbaik dipilih berdasarkan nilai xerror terkecil pada tabel kompleksitas, kemudian digunakan untuk melakukan pruning. Kesimpulan mengenai apakah pruning meningkatkan kinerja model ditentukan berdasarkan perbandingan MSE pada data testing setelah dokumen dijalankan.

5.2 Saran

Analisis lanjutan dapat membandingkan beberapa seed pembagian data atau menggunakan cross-validation untuk menilai kestabilan model. Selain MSE, ukuran seperti RMSE dapat dipertimbangkan agar besar kesalahan prediksi dapat dibaca dalam satuan Salary. Hasil prediksi juga perlu diinterpretasikan dengan memperhatikan definisi dan satuan variabel pada dataset Hitters.

DAFTAR PUSTAKA

Mellina, A. D. F., Suhartono, & Yaqin, M. A. (2024). Algoritma Decision Tree untuk prediksi deteksi penyakit kanker payudara. JISKA (Jurnal Informatika Sunan Kalijaga), 9(1), 70–78. https://doi.org/10.14421/jiska.2024.9.1.70-78

Munir, A. S., Saputra, A. B., Aziz, A., & Barata, M. A. (2024). Perbandingan akurasi algoritma Naive Bayes dan algoritma Decision Tree dalam pengklasifikasian penyakit kanker payudara. Jurnal Ilmiah Informatika Global, 15(1), 23–29. https://doi.org/10.36982/jiig.v15i1.3578

Abedinia, A., & Seydi, V. (2024). Building semi-supervised decision trees with semi-cart algorithm. International Journal of Machine Learning and Cybernetics, 15, 4493–4510. https://doi.org/10.1007/s13042-024-02161-z

Berk, R. A. (2020). Statistical learning from a regression perspective (3rd ed.). Springer. https://doi.org/10.1007/978-3-030-40189-4

Breiman, L., Friedman, J. H., Olshen, R. A., & Stone, C. J. (2017). Classification and regression trees. CRC Press.