Perkembangan teknologi informasi mendorong pertumbuhan data dalam jumlah besar di berbagai sektor, termasuk pendidikan, kesehatan, dan bisnis. Data tersebut umumnya belum dimanfaatkan secara optimal sebagai alat bantu pengambilan keputusan (Simanjuntak, 2026). Data mining menawarkan solusi melalui proses ekstraksi pola tersembunyi dari kumpulan data besar, dan hasilnya dapat digunakan untuk mendukung pengambilan keputusan (Daniela dkk., 2024). Salah satu teknik utamanya adalah klasifikasi, yaitu proses menemukan model dari atribut kelas sehingga model tersebut dapat menentukan kelas bagi data baru (Ramadhon dkk., 2024).
Decision Tree (pohon keputusan) adalah algoritma klasifikasi yang banyak digunakan karena mudah dipahami dan menghasilkan aturan keputusan if-then yang dapat diinterpretasikan langsung (Simanjuntak, 2026). Strukturnya terdiri atas root node sebagai atribut pemecah pertama, internal node sebagai pemecah pada cabang berikutnya, dan leaf node sebagai hasil akhir klasifikasi (Simanjuntak, 2026). Varian yang umum digunakan adalah ID3, C4.5, dan CART. Algoritma ID3 dan C4.5 memilih atribut pemecah berdasarkan entropy dan information gain (Simanjuntak, 2026), sedangkan CART menggunakan Gini index dan Gini gain (Daniela dkk., 2024). Entropy mengukur tingkat keacakan atau ketidakpastian suatu kelompok data, dan pemisahan dilakukan bertahap dari atas ke bawah (Ramadhon dkk., 2024).
Keunggulan Decision Tree antara lain kemampuan menangani data kategorik maupun numerik serta kecenderungan tidak memerlukan normalisasi data. Namun, metode ini rentan terhadap overfitting, yaitu model terlalu sesuai dengan data latih sehingga kurang mampu melakukan generalisasi pada data baru (Ramadhon dkk., 2024). Kerentanan tersebut dapat diatasi, misalnya dengan teknik pruning atau kombinasi dengan algoritma ensambel seperti Random Forest (Simanjuntak, 2026). Karena itu, kinerja model perlu dievaluasi menggunakan confusion matrix untuk menghitung akurasi, precision, dan recall (Daniela dkk., 2024).
Berdasarkan latar belakang, rumusan masalah yang dapat disimpulkan adalah sebagai berikut:
Berdasarkan rumusan masalah tersebut, tujuan yang dapat disimpulkan adalah sebagai berikut:
Decision Tree merupakan salah satu metode supervised learning berbasis pohon yang dapat digunakan untuk membentuk aturan prediksi. Pada metode ini, data dibagi secara bertahap melalui proses splitting berdasarkan variabel prediktor sehingga terbentuk kelompok-kelompok data yang semakin homogen. Setiap percabangan pada pohon menunjukkan aturan pemisahan sedangkan simpul akhir (leaf node) menunjukkan hasil prediksi (Fransiska, 2026).
Salah satu metode dalam Decision Tree adalah Classification and Regression Tree (CART). CART dapat digunakan untuk dua jenis pemodelan, yaitu klasifikasi untuk memprediksi kategori atau kelas regresi untuk memprediksi nilai numerik. Jika variabel respon berupa kategori, pohon yang terbentuk disebut pohon klasifikasi (Classification Tree), jika variabel respon berupa numerik kontinu disebut pohon regresi (Regression Tree). Decision Tree memiliki beberapa karakteristik, yaitu (Fransiska, 2026): 1. Mudah dipahami dan diinterpretasikan karena model dapat divisualisasikaan dalam bentuk pohon. 2. Dapat menggunakan variabel prediktor numerik maupun kategorik. 3. Membagi data secara bertahap melalui proses splitting sehingga kelompok yang tebentuk semakin homogan. 4. Dapat digunakan untuk memprediksi kelas pada kasus klasifikasi maupun nilai numerik pada kasus regresi. 5. Dapat disederhanakan melalui pruning untuk mengurangi kompleksitas pohon dan risiko overvitting.
Tabel 1. Komponen Utama Decision Tree
| Komponen | Keterangan |
|---|---|
| Root node | Simpul awal atau simpul paling atas yang memuat seluruh data sebelum dilakukan pemisahan |
| Intermediate node | Simpul di antara root node dan leaf node yang masih dapat mengalami pemisahan |
| Leaf node | Simpul akhir yang menunjukkan hasil prediksi. Pada klasifikasi berupa kelas sedangkan pada regresi berupa nilai numerik |
| Branch | Cabang yang menghubungkan satu simpul dengan simpul lainnya berdasarkan aturan tertentu |
| Attribute | Variabel prediktor yang digunakan sebagai dasar untuk melakukan pemisahan data |
| Splitting criteria | Kriteria yang digunakan untuk menentukan pemisahan terbaik. Pada klasifikasi dapat menggunakan Gini Index atau Entropy sedangkan pada regresi dapat menggunakan ukuran kesalahan seperti MSE |
| Decision rules | Aturan keputusan yang terbentuk dari jalur percabangan dan digunakan untuk menghasilkan prediksi |
| Pruning | Proses pemangkasan cabang yang kurang penting untuk menyederhanakan pohon dan mengurangi risiko overfitting |
Pada Classification Tree, proses pemisahan data dilakukan dengan memilih aturan yang mampu menghasilkan simpul-simpul yang semakin homogen. Beberapa ukuran yang digunakan dalam proses pemisahan tersebut antara lain Entropy, Information Gain, dan Gini Index. Entropy digunakan untuk mengukur tingkat ketidakpastian atau ketidakmurnian kelas dalam suatu simpul. Semakin kecil nilai Entropy, semakin homogen simpul tersebut. Entropy dirumuskan sebagai berikut (Fransiska, 2026): \[Entropy(t) = -\sum_{k=1}^{K} p_k \log_2(p_k)\]
dengan \(t\) adalah node, \(k\) adalah indeks kelas ke-\(k\) (\(k = 1, 2, 3, \dots, K\)), dan \(p_k\) adalah proporsi observasi dari kelas ke-\(k\) dalam node. Andaikan memiliki sebuah dataset 𝐷 yang terdiri dari dua kelas (Ya atau Tidak) dengan persentase Ya adalah \(p_1\) dan persentase Tidak adalah \(p_2\) maka \[p_1 + p_2 = 1\]
\[E(D) = -p_1 \log_2 p_1 - p_2 \log_2 p_2\] Semakin kecil nilai Entropy, semakin homogen data dalam suatu simpul. Sebaliknya, nilai Entropy semakin besar apabila proporsi kelas dalam simpul semakin seimbang. Jika seluruh amatan dalam suatu simpul berasal dari satu kelas yang sama, maka nilai Entropy sama dengan 0.
Gini Index digunakan untuk mengukur tingkat ketidakmurnian kelas (Gini impurity) dalam suatu simpul. Semakin kecil nilai Gini Index, semakin homogen data dalam simpul tersebut. Gini index dirumuskan sebagai berikut (Fransiska, 2026): \[Gini(t) = 1 - \sum_{k=1}^{K} p_k^2\] Jika dataset \(D\) dipartisi menjadi dua bagian \(D_1\) dan \(D_2\), maka nilai Gini setelah pemisahan dihitung menggunakan rata-rata terbobot:
\[Gini_{split} = \frac{|D_1|}{|D|}\,Gini(D_1) + \frac{|D_2|}{|D|}\,Gini(D_2)\]
Regression Tree digunakan ketika variabel respons atau target berupa data numerik kontinu. Prinsip pembentukan pohonnya sama dengan Classification Tree, yaitu membagi data secara bertahap melalui proses splitting. Perbedaannya pada Regression Tree pemisahan dilakukan agar nilai respon dalam setiap simpul menjadi semakin seragam atau homogen. Salah satu ukuran yang dapat digunakan untuk menilai hasil pemisahan adalah Mean Square Error (MSE), yaitu rata-rata kuadrat selisih antara nilai respons dengan rata-rata respon dalam suatu simpul (Fransiska, 2026): \[MSE = \frac{1}{n}\sum_{i=1}^{n}\left(y_i - \hat{y}\right)^2\] Pemisahan dipilih apabila mampu menghasilkan simpul-simpul dengan nilai MSE yang lebih kecil. Dengan demikian, amatan yang berada dalam satu simpul memiliki nilai respons yang semakin mirip.
Evaluasi dilakukan dengan membandingkan kelas aktual dan kelas prediksi, lalu disajikan dalam confusion matrix, yaitu matriks yang menampilkan kinerja algoritma klasifikasi (Daniela8jnn dkk., 2024). Evaluasi Classification Tree dilakukan dengan membandingkan kelas aktual dan kelas hasil prediksi. Hasil perbandingan tersebut dapat disajikan dalam confusion matrix (Fransiska, 2026):
| Prediksi Positif | Prediksi Negatif | |
|---|---|---|
| Aktual Positif | True Positive (TP) | False Negative (FN) |
| Aktual Negatif | False Positive (FP) | True Negative (TN) |
Berdasarkan confusion matrix, beberapa ukuran evaluasi yang dapat digunakan adalah: \[Accuracy = \frac{TP + TN}{TP + TN + FP + FN}\]
\[Precision = \frac{TP}{TP + FP}\]
\[Recall = \frac{TP}{TP + FN}\]
\[Specificity = \frac{TN}{TN + FP}\]
\[F1\text{-}Score = 2\left(\frac{Precision \times Recall}{Precision + Recall}\right)\] Pada Regression Tree, evaluasi dilakukan dengan membandingkan nilai aktual dengan nilai hasil prediksi. Beberapa ukuran yang umum digunakan adalah Mean Squared Error (MSE), Root Mean Squared Error (RMSE), dan koefisien determinasi (𝑅2). \[MSE = \frac{1}{n}\sum_{i=1}^{n}\left(y_i - \hat{y}\right)^2\]
\[RMSE = \sqrt{MSE}\]
\[R^2 = 1 - \frac{\sum_{i=1}^{n}\left(y_i - \hat{y}\right)^2}{\sum_{i=1}^{n}\left(y_i - \bar{y}\right)^2}\]
Jenis data yang digunakan dalam penelitian ini adalah data kuantitatif, yaitu data berbentuk angka yang dapat diolah dan dianalisis secara statistik. Sumber data yang digunakan merupakan data sekunder yang diperoleh dari dataset Hitters pada package ISLR dalam perangkat lunak R. Dataset ini memuat informasi mengenai pemain bisbol, termasuk variabel Salary yang digunakan sebagai variabel respons untuk membangun model prediksi menggunakan metode Decision Tree (Regression Tree).
| No | Variabel | Keterangan | Tipe Data | Peran |
|---|---|---|---|---|
| 1 | Salary | Gaji tahunan pemain pada tahun 1987 (dalam ribuan dolar) | Numerik | Respons |
| 2 | AtBat | Jumlah pukulan (at bat) pada musim 1986 | Numerik | Prediktor |
| 3 | Hits | Jumlah pukulan sukses (hits) pada musim 1986 | Numerik | Prediktor |
| 4 | HmRun | Jumlah home run pada musim 1986 | Numerik | Prediktor |
| 5 | Runs | Jumlah run yang dicetak pada musim 1986 | Numerik | Prediktor |
| 6 | RBI | Jumlah run batted in pada musim 1986 | Numerik | Prediktor |
| 7 | Walks | Jumlah walks pada musim 1986 | Numerik | Prediktor |
| 8 | Years | Lama bermain di liga utama (tahun) | Numerik | Prediktor |
| 9 | CAtBat | Jumlah at bat selama karier | Numerik | Prediktor |
| 10 | CHit | Jumlah hits selama karier | Numerik | Prediktor |
| 11 | CHmRun | Jumlah home run selama karier | Numerik | Prediktor |
| 12 | CRuns | Jumlah run yang dicetak selama karier | Numerik | Prediktor |
| 13 | CRBI | Jumlah run batted in selama karier | Numerik | Prediktor |
| 14 | CWalks | Jumlah walks selama karier | Numerik | Prediktor |
| 15 | League | Liga pemain pada akhir musim 1986 (A atau N) | Kategorik | Prediktor |
| 16 | Division | Divisi pemain pada akhir musim 1986 (E atau W) | Kategorik | Prediktor |
| 17 | PutOuts | Jumlah put out pada musim 1986 | Numerik | Prediktor |
| 18 | Assists | Jumlah assist pada musim 1986 | Numerik | Prediktor |
| 19 | Errors | Jumlah kesalahan (error) pada musim 1986 | Numerik | Prediktor |
| 20 | NewLeague | Liga pemain pada awal musim 1987 (A atau N) | Kategorik | Prediktor |
Langkah-langkah yang digunakan pada penelitian ini adalah sebagai berikut:
Pada batasan masalah diminta menggunakan dataset data curah hujan.xlsx untuk melakukan preprocessing data menggunakan mean imputation, shuffle splitting, dan Robust Scaler. Kemudian melakukan interpolasi pada Keadaan_Cuaca, capping pada data numerik, serta penanganan imbalance data menggunakan SMOTE. Tampilkan dan interpretasikan setiap output!
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Loading required package: ggplot2
## Loading required package: lattice
Berikut adalah package yang digunakan pada pertemuan 2. Package
rpart digunakan untuk membentuk pohon,
rpart.plot untuk visualisasi pohon, dan ISLR
untuk menyediakan dataset 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
## '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 ...
## [1] 322 20
## 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
Dataset Hitters terdiri atas 322 observasi dan 20 variabel, yaitu 1 variabel respons (Salary) dan 19 variabel prediktor. Variabel League, Division, dan NewLeague bertipe kategorik, sedangkan variabel lainnya bertipe numerik. Berdasarkan ringkasan Salary, nilai minimum sebesar 67,5, median sebesar 425, rata-rata sebesar 535,9, dan maksimum sebesar 2460 (dalam ribu dolar). Rata-rata yang lebih besar daripada median menunjukkan bahwa distribusi Salary menjulur ke kanan, yaitu sebagian kecil pemain memiliki gaji yang sangat tinggi. Selain itu, ditemukan 59 missing value pada variabel Salary.
## 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
# Menghapus observasi yang memiliki missing value
Hitters.S <- na.omit(Hitters)
# Ukuran data setelah penanganan
dim(Hitters.S)## [1] 263 20
## [1] 0
Berdasarkan hasil pengecekan, missing value hanya terdapat pada variabel respons Salary sebanyak 59 observasi, sedangkan 19 variabel prediktor lainnya tidak memiliki missing value. Karena Salary merupakan variabel yang akan diprediksi, observasi yang tidak memiliki nilai Salary dihapus menggunakan na.omit. Setelah penanganan, data terdiri atas 263 observasi dan 20 variabel dengan jumlah missing value sebesar 0.
# Data Training dan Testing
set.seed(234)
train <- createDataPartition(
y = Hitters.S$Salary,
p = 0.7,
list = FALSE
)
Hitters.train <- Hitters.S[train, ]
Hitters.test <- Hitters.S[-train, ]
dim(Hitters.train)## [1] 185 20
## [1] 78 20
## [1] 185
## [1] 78
Berdasarkan hasil pembagian data dengan proporsi 70:30, data training terdiri atas 185 observasi (sekitar 70,3%) dengan 20 variabel yang digunakan untuk membentuk model, sedangkan data testing terdiri atas 78 observasi (sekitar 29,7%) dengan 20 variabel yang digunakan untuk menguji kemampuan model pada data yang tidak digunakan dalam pelatihan. Jumlah keduanya sama dengan 263 observasi pada data setelah penanganan missing value.
## n= 185
##
## node), split, n, deviance, yval
## * denotes terminal node
##
## 1) root 185 37300170.00 529.3190
## 2) CRBI< 300.5 107 7781241.00 296.1480
## 4) CAtBat< 1447 71 4787307.00 205.7113
## 8) RBI>=16 64 451745.40 169.8464
## 16) CRuns< 101.5 37 43273.30 114.7297 *
## 17) CRuns>=101.5 27 142042.10 245.3766
## 34) Years< 3.5 10 6090.00 186.0000 *
## 35) Years>=3.5 17 79957.63 280.3039 *
## 9) RBI< 16 7 3500575.00 533.6190 *
## 5) CAtBat>=1447 36 1267980.00 474.5093
## 10) Walks< 60.5 27 759116.70 418.9753
## 20) Division=W 14 300819.20 361.2381 *
## 21) Division=E 13 361367.20 481.1538 *
## 11) Walks>=60.5 9 175788.90 641.1111 *
## 3) CRBI>=300.5 78 15721120.00 849.1817
## 6) Hits< 122.5 32 1830184.00 593.1771
## 12) HmRun< 7.5 16 724360.00 484.0104 *
## 13) HmRun>=7.5 16 724468.40 702.3438 *
## 7) Hits>=122.5 46 10334770.00 1027.2720
## 14) CHmRun< 256.5 39 5352320.00 917.2857
## 28) Years>=9.5 23 1423979.00 753.5352
## 56) CRuns< 751.5 13 361905.40 629.9725 *
## 57) CRuns>=751.5 10 605568.10 914.1667 *
## 29) Years< 9.5 16 2425068.00 1152.6770 *
## 15) CHmRun>=256.5 7 1882174.00 1640.0520 *
Berdasarkan output, model Regression Tree dibentuk dengan method = “anova” karena variabel respons berupa numerik kontinu, dengan cp sebesar 0,001 dan data training sebanyak 185 observasi. Pohon yang terbentuk memiliki 13 simpul daun (ditandai *) dengan 10 variabel prediktor, yaitu CRBI, CAtBat, RBI, CRuns, Years, Walks, Division, Hits, HmRun, dan CHmRun. Rata-rata Salary pada simpul akar sebesar 529,32.
Simpul akar menggunakan variabel CRBI dengan batas 300,5. Pemain dengan CRBI < 300,5 sebanyak 107 observasi (57,8%) memiliki rata-rata Salary 296,15, sedangkan pemain dengan CRBI >= 300,5 sebanyak 78 observasi (42,2%) memiliki rata-rata Salary 849,18. Hal ini menunjukkan bahwa CRBI merupakan pemisah terbaik yang paling mampu menurunkan keragaman Salary. Prediksi Salary terendah sebesar 114,73 diperoleh pada kelompok pemain dengan CRBI < 300,5, CAtBat < 1447, RBI >= 16, dan CRuns < 101,5 (37 observasi, 20,0%), sedangkan prediksi tertinggi sebesar 1640,05 diperoleh pada kelompok pemain dengan CRBI >= 300,5, Hits >= 122,5, dan CHmRun >= 256,5 (7 observasi, 3,8%).
## CRBI CRuns CHits CAtBat Years CWalks
## 18006203.09 16275302.12 15846822.12 15773269.72 12575599.24 11352010.78
## Hits CHmRun AtBat Runs RBI Walks
## 3995824.17 3746799.11 3626215.94 3249147.01 3101676.38 2436801.19
## HmRun PutOuts Division
## 1520655.45 553921.48 96930.34
# Mengubah variable importance menjadi data frame
importance.df <- data.frame(
Variabel = names(importance.tree),
Importance = as.numeric(importance.tree)
) %>%
arrange(desc(Importance))
print(importance.df)## Variabel Importance
## 1 CRBI 18006203.09
## 2 CRuns 16275302.12
## 3 CHits 15846822.12
## 4 CAtBat 15773269.72
## 5 Years 12575599.24
## 6 CWalks 11352010.78
## 7 Hits 3995824.17
## 8 CHmRun 3746799.11
## 9 AtBat 3626215.94
## 10 Runs 3249147.01
## 11 RBI 3101676.38
## 12 Walks 2436801.19
## 13 HmRun 1520655.45
## 14 PutOuts 553921.48
## 15 Division 96930.34
# Visualisasi variable importance
ggplot(
importance.df,
aes(
x = reorder(Variabel, Importance),
y = Importance
)
) +
geom_col(fill = "green4") +
coord_flip() +
theme_minimal() +
labs(
title = "Variable Importance Regression Tree",
x = "Variabel Prediktor",
y = "Tingkat Kepentingan"
)Berdasarkan nilai variable importance, variabel yang paling berpengaruh terhadap Salary adalah CRBI dengan nilai 18.006.203,09, diikuti oleh CRuns (16.275.302,12) dan CHits (15.846.822,12). Variabel dengan nilai importance kecil, seperti Division (96.930,34) dan PutOuts (553.921,48), memberikan kontribusi yang relatif kecil dalam pembentukan pohon.
pred.tree <- predict(fit.tree, Hitters.test)
# MSE, RMSE, dan R-squared pada data testing
mse_before <- mean((pred.tree - Hitters.test$Salary)^2)
rmse_before <- sqrt(mse_before)
r2_before <- 1 - sum((Hitters.test$Salary - pred.tree)^2) /
sum((Hitters.test$Salary - mean(Hitters.test$Salary))^2)
mse_before## [1] 80020.62
## [1] 282.8792
## [1] 0.6096974
Model sebelum pruning menghasilkan MSE sebesar 80.020,62 dan RMSE sebesar 282,88 pada data testing. Nilai RMSE menunjukkan bahwa rata-rata kesalahan prediksi Salary sekitar 282,88 (dalam satuan ribu dolar). Nilai R² sebesar 0,6097 menunjukkan bahwa model mampu menjelaskan sekitar 60,97% keragaman Salary pada data testing.
##
## Regression tree:
## rpart(formula = Salary ~ ., data = Hitters.train, method = "anova",
## cp = 0.001)
##
## Variables actually used in tree construction:
## [1] CAtBat CHmRun CRBI CRuns Division Hits HmRun RBI
## [9] Walks Years
##
## Root node error: 37300166/185 = 201623
##
## n= 185
##
## CP nsplit rel error xerror xstd
## 1 0.3699126 0 1.00000 1.01127 0.16904
## 2 0.0953392 1 0.63009 0.69445 0.14286
## 3 0.0831170 2 0.53475 0.73597 0.13762
## 4 0.0462720 3 0.45163 0.69821 0.13559
## 5 0.0403020 4 0.40536 0.66768 0.13365
## 6 0.0223856 5 0.36506 0.58019 0.12556
## 7 0.0122387 6 0.34267 0.59338 0.12585
## 8 0.0102240 7 0.33043 0.58679 0.12543
## 9 0.0089296 8 0.32021 0.59549 0.12777
## 10 0.0071429 9 0.31128 0.59159 0.12783
## 11 0.0025987 10 0.30414 0.58683 0.12819
## 12 0.0015012 11 0.30154 0.60006 0.13284
## 13 0.0010000 12 0.30004 0.60041 0.13284
## [1] 0.02238561
Berdasarkan tabel cp dan plot cp, nilai xerror terkecil sebesar 0,61359 diperoleh pada jumlah percabangan (nsplit) sebanyak 10 (11 simpul daun). Dengan demikian, nilai cp optimal adalah 0,0025987. Nilai ini digunakan untuk memangkas pohon agar kompleksitas model sesuai dengan kemampuannya memprediksi data baru. Karena cp optimal lebih besar daripada cp awal (0,001), pohon awal yang memiliki 12 split (13 simpul daun) perlu dipangkas (pruning) untuk mengurangi kompleksitas dan risiko overfitting. Setelah pruning, pohon kehilangan dua split terakhir, yaitu pada cp 0,0015012 dan 0,0010000, yang tidak memberikan penurunan xerror.
## n= 185
##
## node), split, n, deviance, yval
## * denotes terminal node
##
## 1) root 185 37300170 529.3190
## 2) CRBI< 300.5 107 7781241 296.1480
## 4) CAtBat< 1447 71 4787307 205.7113 *
## 5) CAtBat>=1447 36 1267980 474.5093 *
## 3) CRBI>=300.5 78 15721120 849.1817
## 6) Hits< 122.5 32 1830184 593.1771 *
## 7) Hits>=122.5 46 10334770 1027.2720
## 14) CHmRun< 256.5 39 5352320 917.2857
## 28) Years>=9.5 23 1423979 753.5352 *
## 29) Years< 9.5 16 2425068 1152.6770 *
## 15) CHmRun>=256.5 7 1882174 1640.0520 *
## CRBI CRuns CHits CAtBat Years CWalks AtBat
## 16886866.7 15507629.7 14858301.0 14777292.4 12482323.9 10975741.4 3581420.4
## Hits CHmRun Runs RBI Walks HmRun PutOuts
## 3556168.8 3100277.6 2555996.3 2000345.0 1889214.7 1111302.8 442896.8
Setelah pruning, jumlah simpul daun berubah dari 13 menjadi 11. Variabel yang membentuk pohon hasil pruning adalah CRBI, CAtBat, RBI, CRuns, Walks, Hits, HmRun, CHmRun, dan Years, dengan simpul akar menggunakan variabel CRBI (batas 300,5). Pohon menjadi lebih sederhana dan lebih mudah diinterpretasikan karena jumlah split berkurang dari 12 menjadi 10 dan variabel Division yang kontribusinya sangat kecil tidak lagi digunakan. Prediksi Salary terendah sebesar 114,73 (CRBI < 300,5, CAtBat < 1447, RBI >= 16, CRuns < 101,5), sedangkan tertinggi sebesar 1640,05 (CRBI >= 300,5, Hits >= 122,5, CHmRun >= 256,5). Variabel dengan importance tertinggi pada pohon hasil pruning adalah CRBI dengan nilai 18.006.203,1, diikuti CRuns (16.230.565,0) dan CHits (15.809.541,2).
pred.prune <- predict(pruned.tree, Hitters.test)
mse_after <- mean((pred.prune - Hitters.test$Salary)^2)
rmse_after <- sqrt(mse_after)
r2_after <- 1 - sum((Hitters.test$Salary - pred.prune)^2) /
sum((Hitters.test$Salary - mean(Hitters.test$Salary))^2)
mse_after## [1] 75515.11
## [1] 274.8001
## [1] 0.6316732
Setelah pruning, model menghasilkan MSE sebesar 77.556,98 dan RMSE sebesar 278,49 pada data testing, lebih rendah dibandingkan sebelum pruning (MSE 80.020,62 dan RMSE 282,88). Nilai R² meningkat dari 0,6097 menjadi 0,6217, artinya model mampu menjelaskan sekitar 62,17% keragaman Salary pada data testing. Dengan demikian, pruning menyederhanakan pohon sekaligus meningkatkan akurasi prediksi pada data baru, sehingga model hasil pruning lebih baik untuk digunakan.
perbandingan <- data.frame(
Model = c("Sebelum Pruning", "Sesudah Pruning"),
MSE = c(mse_before, mse_after),
RMSE = c(rmse_before, rmse_after),
R2 = c(r2_before, r2_after)
)
perbandingan[, -1] <- round(perbandingan[, -1], 4)
perbandingan## Model MSE RMSE R2
## 1 Sebelum Pruning 80020.62 282.8792 0.6097
## 2 Sesudah Pruning 75515.11 274.8001 0.6317
Berdasarkan tabel perbandingan, model setelah pruning memiliki performa lebih baik pada data testing dibandingkan model sebelum pruning. MSE turun dari 80.020,62 menjadi 77.556,98 (selisih 2.463,64 atau sekitar 3,08%) dan RMSE turun dari 282,88 menjadi 278,49, sehingga rata-rata kesalahan prediksi Salary berkurang sekitar 4,39 ribu dolar. Nilai R² naik dari 0,6097 menjadi 0,6217, artinya kemampuan model menjelaskan keragaman Salary meningkat sekitar 1,2 poin persentase. Dengan demikian, pruning menghasilkan pohon yang lebih sederhana sekaligus lebih akurat, sehingga model Sesudah Pruning lebih baik untuk digunakan. Namun, perlu dicatat bahwa perbaikannya relatif kecil, sehingga manfaat utama pruning di sini lebih pada penyederhanaan model dan berkurangnya risiko overfitting.
Model dibangun melalui beberapa tahap. Pertama, data disiapkan dan variabel respons kategorik dibentuk. Kedua, data dibagi menjadi data latih dan data uji. Ketiga, pohon dibangun dengan memilih pemisahan terbaik dari setiap variabel prediktor, menentukan variabel dan pemisah terbaik, lalu melakukan pemisahan dan memeriksa apakah proses perlu dilanjutkan. Tahap ini diulang pada setiap simpul hingga salah satu kondisi berhenti terpenuhi: simpul sudah homogen, simpul tidak dapat dipisah lagi, jumlah amatan di bawah batas minimum, atau kedalaman maksimum tercapai. Keempat, pohon divisualisasikan dan dipangkas dengan memilih complexity parameter (cp) yang menghasilkan cross-validation error terkecil. Kelima, kinerja model dievaluasi pada data uji menggunakan confusion matrix (accuracy, precision, recall, specificity, dan F1-score).
Model dibangun melalui beberapa tahap. Pertama, data disiapkan dan variabel respons kategorik dibentuk. Kedua, data dibagi menjadi data latih dan data uji. Ketiga, pohon dibangun dengan memilih pemisahan terbaik dari setiap variabel prediktor, menentukan variabel dan pemisah terbaik, lalu melakukan pemisahan dan memeriksa apakah proses perlu dilanjutkan. Tahap ini diulang pada setiap simpul hingga salah satu kondisi berhenti terpenuhi: simpul sudah homogen, simpul tidak dapat dipisah lagi, jumlah amatan di bawah batas minimum, atau kedalaman maksimum tercapai. Keempat, pohon divisualisasikan dan dipangkas dengan memilih complexity parameter (cp) yang menghasilkan cross-validation error terkecil. Kelima, kinerja model dievaluasi pada data uji menggunakan confusion matrix (accuracy, precision, recall, specificity, dan F1-score).
Berdasarkan hasil yang diperoleh, dapat disimpulkan bahwa model Regression Tree setelah dilakukan pruning memiliki kinerja yang lebih baik dibandingkan model awal. Variabel yang paling berpengaruh dalam memprediksi Salary adalah CRBI, CRuns, CHits, CAtBat, Years, dan CWalks. Penentuan CP optimal sebesar 0,0025987 menghasilkan pohon yang lebih sederhana, dari 13 menjadi 11 simpul daun. Hal ini ditunjukkan oleh penurunan MSE dari 80.020,62 menjadi 77.556,98, penurunan RMSE dari 282,88 menjadi 278,49, serta peningkatan \(R^2\) dari 0,6097 menjadi 0,6217. Dengan demikian, pruning menghasilkan model yang lebih sederhana dengan kemampuan prediksi yang sedikit lebih baik.
Praktikan disarankan untuk mempelajari lebih lanjut mengenai program RStudio melalui berbagai sumber pembelajaran, seperti buku, jurnal, modul praktikum, maupun sumber belajar lainnya agar semakin memahami penerapan feature engineering. Praktikan juga diharapkan lebih teliti dalam melakukan pengolahan data dan penulisan kode program agar dapat meminimalkan kesalahan selama praktikum.
Daniela, N. A. F., Desiani, A., & Irmeilyana. (2024). Klasifikasi pengambilan keputusan tindakan operasi sesar menggunakan algoritma Classification and Regression Trees. KOMPUTEK: Jurnal Teknik Universitas Muhammadiyah Ponorogo, 8(2), 54–63.
Fransiska, H. (2026). Modul Praktikum Machine Learning dan Model Prediction. Universitas Bengkulu: Bengkulu.
Ramadhon, R. N., Ogi, A., Agung, A. P., Putra, R., Febrihartina, S. S., & Firdaus, U. (2024). Implementasi algoritma decision tree untuk klasifikasi pelanggan aktif atau tidak aktif pada data bank. Karimah Tauhid, 3(2), 1860–1874.
Simanjuntak, N. M. (2026). Penerapan algoritma decision tree untuk klasifikasi prestasi akademik mahasiswa berdasarkan indeks prestasi semester dan kumulatif. Jurnal Sains dan Teknologi Informasi (JUSSI), 5(3), 146–154.