Perkembangan teknologi informasi telah menghasilkan data dalam jumlah besar yang dapat dimanfaatkan untuk memperoleh informasi dan mendukung proses pengambilan keputusan. Namun, data yang berukuran besar memerlukan metode analisis yang tepat agar dapat diolah menjadi informasi yang mudah dipahami dan bermanfaat. Salah satu metode yang dapat digunakan untuk mengolah data dan menemukan pola hubungan antarvariabel adalah data mining. Dalam penerapannya, data mining memiliki berbagai metode, salah satunya adalah decision tree atau pohon keputusan yang digunakan untuk melakukan klasifikasi dan prediksi berdasarkan pola yang terdapat dalam data (Han dan Kamber, 2001).
Decision tree merupakan metode klasifikasi dan prediksi yang mengubah kumpulan data menjadi struktur pohon yang merepresentasikan aturan-aturan keputusan. Menurut Linoff (2004), pohon keputusan dapat membagi kumpulan data yang besar menjadi himpunan data yang lebih kecil melalui serangkaian aturan keputusan. Struktur tersebut menyerupai flowchart, dengan simpul internal yang menunjukkan pengujian atribut, cabang yang merepresentasikan hasil pengujian, dan simpul daun yang menunjukkan kelas atau distribusi kelas (Han & Kamber, 2001).
Proses klasifikasi menggunakan decision tree dilakukan dengan menelusuri alur keputusan dari simpul akar (root node) hingga simpul daun (leaf node) untuk memperoleh hasil prediksi berdasarkan karakteristik data. Setiap percabangan dibentuk berdasarkan kondisi tertentu pada atribut sehingga menghasilkan aturan yang dapat digunakan untuk menentukan kelas suatu pengamatan. Selain itu, decision tree memiliki keunggulan berupa struktur yang relatif mudah dipahami dan diinterpretasikan serta dapat dikonversi menjadi aturan klasifikasi yang sistematis (Zalilia, 2007). Karakteristik tersebut menjadikan decision tree sebagai salah satu metode yang dapat diterapkan dalam analisis data untuk mendukung pengambilan keputusan. Oleh karena itu pada praktikum kali ini dibahas mengenai “Decision Tree”.
Berdasarkan latar belakang, rumusan masalah pada penelitian ini, yaitu:
Bagaimana konsep dasar Decision Tree untuk klasifikasi menggunakan metode CART (Classification and Regression Tree)?
Bagaimana cara membangun model Classification Tree menggunakan algoritma CART?
Berdasarkan rumusan masalah di atas, tujuan pada penelitian ini, yaitu:
Menjelaskan konsep dasar Decision Tree untuk klasifikasi menggunakan metode CART (Classification and Regression Tree).
Membangun model Classification Tree menggunakan algoritma CART.
Adapun manfaat pada penelitian ini, yaitu:
Dapat memberikan informasi serta pengetahuan tentang decision tree menggunakan program RStudio.
Mengembangkan dan menerapkan wawasan ilmu yang telah diperoleh khususnya tentang decision tree di RStudio.
Batasan masalah pada penelitian ini, yaitu menggunakan dataset Hitters dari package ISLR untuk memprediksi Salary menggunakan Decision Tree (Regression Tree). Lakukan pengecekan dan penanganan missing value menggunakan na.omit(), kemudian bagi data menjadi training dan testing. Selanjutnya, bangun dan visualisasikan tree, analisis variabel importance, lakukan prediksi dan evaluasi menggunakan MSE, tentukan CP terbaik, lakukan pruning, dan evaluasi kembali model menggunakan MSE.
Adapun sistematika penulisan dari praktikum ini adalah:
BAB I PENDAHULUAN
Bab I terdiri dari latar belakang, rumusan masalah, batasan masalah, tujuan penelitian, manfaat penelitian, dan sistematika penulisan.
BAB II TINJAUAN PUSTAKA
Bab ini berisi tentang kajian pustaka yang terdiri dari jurnal-jurnal, buku-buku, dan informasi pendukung tentang Machine Learning pada program R.
BAB III METODE PENELITIAN
Bab ini terdiri dari analisis jenis dan sumber data, variabel penelitian, algoritma penelitian, dan diagram alur.
BAB IV HASIL DAN PEMBAHASAN
Bab ini merupakan tahapan pencapaian hasil yang diperoleh dari analisis data yang dilakukan serta penjelasan dari hasil tersebut di bagian pembahasan.
BAB V KESIMPULAN DAN SARAN
Bab ini merupakan bagian penutup dalam laporan ini berupa penarikan kesimpulan mengenai hasil analisis dari penelitian serta penyampaian saran oleh penulis.
DAFTAR PUSTAKA
LAMPIRAN
Pohon keputusan (decision tree) merupakan metode klasifikasi dan prediksi yang sangat kuat dan sangat populer. Metode pohon keputusan mengubah fakta yang sangat besar menjadi pohon keputusan yang mempresenstasikan aturan. Sebuah pohon keputusan adalah sebuah struktur yang dapat digunakan untuk membagi kumpulan data yang besar menjadi himpunan-himpunan record yang lebih kecil dengan menerapkan serangkaian aturan-aturan keputusan (Linoff, 2004).
Pembagian data tersebut berupa struktur flowchart yang menyerupai tree (pohon), dimana setiap simpul internal menandakan suatu tes pada atribut, setiap cabang merepresentasikan hasil tes, dan simpul daun merepresentasikan kelas atau distribusi kelas (Han dan Kamber, 2001). Alur pada decision tree ditelusuri dari simpul akar ke simpul daun yang memegang prediksi kelas. Decision tree mudah untuk dikonversi ke aturan klasifikasi (classification). Sebuah decision tree terdiri atas (Zalilia, 2007):
Root node, yaitu node yang tidak memiliki edge yang mengarah pada dirinya.
Internal node, yaitu node yang memiliki sebuah edge yang mengarah pada dirinya dan dua atau lebih edge yang mengarah keluar.
Leaf node, yaitu node yang memiliki satu edge yang menuju ke dirinya dan tidak memiliki edge menuju keluar.
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). Berikut penjelasan dari masing-masing tree (Fransiska, 2026):
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. Information Gain digunakan untuk mengukur seberapa besar tingkat ketidakpastian (Entropy) berkurang setelah dilakukan suatu split. Semakin besar nilai Information Gain, semakin baik pemisahan yang dilakukan karena kelompok data yang terbentuk menjadi semakin homogen. Gini Index digunakan untuk mengukur tingkat ketidakmurnian kelas (Gini impurity) dalam suatu simpul. Semakin kecil nilai Gini Index, semakin homogen data dalam simpul tersebut.
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 respon dengan rata-rata respon dalam suatu simpul. 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.
Jenis data pada penelitian ini adalah data kuantitatif. Data kuantitatif adalah jenis data yang berbentuk angka atau bilangan dan dapat diukur atau dihitung secara langsung. Laporan ini memiliki satu batasan masalah yang menggunakan sumber data sekunder. Data sekunder adalah data yang diperoleh secara tidak langsung melalui media perantara. Data didapatkan dari program R secara langsung.
Variabel penelitian adalah karakter atau segala sesuatu yang menjadi perhatian dalam suatu penelitian. Pada batasan masalah terdapat 20 variabel. Variabel tersebut terdiri dari variabel numerik dan kategorik.
Tuliskan terlebih dahulu library yang akan digunakan pada laporan ini. Selanjutnya input data yang akan digunakan, yaitu data curah hujan.
##
## 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
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.1 ✔ readr 2.2.0
## ✔ ggplot2 4.0.3 ✔ stringr 1.6.0
## ✔ lubridate 1.9.5 ✔ tibble 3.3.1
## ✔ purrr 1.2.2 ✔ tidyr 1.3.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## Loading required package: lattice
##
## Attaching package: 'caret'
##
## The following object is masked from 'package:purrr':
##
## lift
## [1] "Auto" "Caravan" "Carseats" "College" "Credit" "Default"
## [7] "Hitters" "Khan" "NCI60" "OJ" "Portfolio" "Smarket"
## [13] "Wage" "Weekly"
## '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 ...
## 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
## 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 berasal dari package ISLR dan berisi data pemain bisbol. Berdasarkan output fungsi str(Hitters), dataset awal terdiri atas 322 observasi dan 20 variabel. Variabel yang tersedia mencakup statistik permainan, seperti AtBat, Hits, HmRun, Runs, RBI, Walks, CAtBat, CHits, CRuns, dan CRBI, serta variabel kategorik League, Division, dan NewLeague. Variabel Salary digunakan sebagai variabel respon yang akan diprediksi karena memiliki tipe data numerik, sehingga sesuai untuk pemodelan regresi. Output head(Hitters) memperlihatkan enam observasi pertama, termasuk adanya nilai NA pada variabel Salary untuk observasi pertama. Sementara itu, output summary(Hitters) menunjukkan bahwa nilai Salary yang tersedia memiliki nilai minimum 67,5, median 425, rata-rata 535,9, dan maksimum 2.460, dengan 59 nilai hilang. Informasi ini menjadi dasar untuk melakukan penanganan missing value sebelum data digunakan dalam pembentukan model.
## 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
# Menghapus baris yang mengandung missing value
Hitters.clean <- na.omit(Hitters)
# Memeriksa kembali missing value
colSums(is.na(Hitters.clean))## 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 0 0
## [1] 0
## [1] 263 20
Pengecekan nilai hilang dilakukan menggunakan fungsi colSums(is.na(Hitters)) dan sum(is.na(Hitters)). Terdapat 59 nilai hilang pada variabel Salary, sedangkan 19 variabel lainnya tidak memiliki nilai hilang. Selanjutnya, fungsi na.omit() digunakan untuk menghapus observasi yang mengandung nilai hilang agar data yang digunakan dalam pemodelan memiliki nilai lengkap. Setelah penanganan dilakukan, output sum(is.na(Hitters.clean)) menunjukkan nilai 0, yang berarti tidak terdapat lagi missing value pada dataset. Ukuran data juga berubah dari 322 observasi menjadi 263 observasi dengan 20 variabel, sehingga sebanyak 59 observasi dihapus. Data hasil pembersihan ini kemudian digunakan pada tahap pembagian data training dan testing.
set.seed(234)
# Pembagian data: 70% training dan 30% testing
index <- createDataPartition(
Hitters.clean$Salary,
p = 0.70,
list = FALSE)
Hitters.train <- Hitters.clean[index, ]
Hitters.test <- Hitters.clean[-index, ]
# Memeriksa jumlah observasi
nrow(Hitters.train)## [1] 185
## [1] 78
Pembagian data dilakukan dengan proporsi 70% untuk data training dan 30% untuk data testing. Berdasarkan output, data training terdiri atas 185 observasi, sedangkan data testing terdiri atas 78 observasi. Data training digunakan untuk membangun model Regression Tree, sedangkan data testing digunakan untuk mengevaluasi kemampuan model dalam memprediksi data yang tidak digunakan selama proses pelatihan. Dengan demikian, evaluasi model dilakukan menggunakan data terpisah dari data pembentukan model.
set.seed(234)
fit.tree <- rpart(
Salary ~ .,
data = Hitters.train,
method = "anova",
control = rpart.control(cp = 0.008))
# Menampilkan ringkasan model
print(fit.tree)## n= 185
##
## node), split, n, deviance, yval
## * denotes terminal node
##
## 1) root 185 37300170.0 529.3190
## 2) CRBI< 300.5 107 7781241.0 296.1480
## 4) CAtBat< 1447 71 4787307.0 205.7113
## 8) RBI>=16 64 451745.4 169.8464 *
## 9) RBI< 16 7 3500575.0 533.6190 *
## 5) CAtBat>=1447 36 1267980.0 474.5093
## 10) Walks< 60.5 27 759116.7 418.9753 *
## 11) Walks>=60.5 9 175788.9 641.1111 *
## 3) CRBI>=300.5 78 15721120.0 849.1817
## 6) Hits< 122.5 32 1830184.0 593.1771
## 12) HmRun< 7.5 16 724360.0 484.0104 *
## 13) HmRun>=7.5 16 724468.4 702.3438 *
## 7) Hits>=122.5 46 10334770.0 1027.2720
## 14) CHmRun< 256.5 39 5352320.0 917.2857
## 28) Years>=9.5 23 1423979.0 753.5352
## 56) CRuns< 751.5 13 361905.4 629.9725 *
## 57) CRuns>=751.5 10 605568.1 914.1667 *
## 29) Years< 9.5 16 2425068.0 1152.6770 *
## 15) CHmRun>=256.5 7 1882174.0 1640.0520 *
# Visualisasi pohon
rpart.plot(
fit.tree,
type = 2,
extra = 101,
fallen.leaves = TRUE,
main = "Regression Tree untuk Prediksi Salary")Model Regression Tree dibangun menggunakan fungsi rpart(). Argumen method = “anova” menunjukkan bahwa model dibangun untuk memprediksi variabel numerik, sedangkan cp = 0.008 digunakan sebagai parameter kompleksitas awal pohon. Berdasarkan output, model dibentuk menggunakan 185 observasi dengan nilai prediksi pada simpul akar (root node) sebesar 529,319. Hasil pembentukan pohon menunjukkan bahwa variabel CRBI menjadi pemisah pertama, dengan batas nilai 300,5. Pada kelompok dengan CRBI kurang dari 300,5, pohon membentuk percabangan berikutnya berdasarkan CAtBat, kemudian menggunakan RBI atau Walks untuk menentukan prediksi pada simpul terminal. Sementara itu, pada kelompok dengan CRBI minimal 300,5, pohon menggunakan Hits, HmRun, CHmRun, Years, dan CRuns untuk membentuk percabangan lanjutan. Nilai pada setiap simpul terminal merupakan prediksi Salary untuk observasi yang memenuhi aturan percabangan tersebut.
importance <- fit.tree$variable.importance
importance <- sort(importance, decreasing = TRUE)
print(importance)## CRBI CRuns CHits CAtBat Years CWalks Hits
## 17828583.0 15964135.0 15572714.5 15491705.9 12482323.9 11203994.1 3951028.6
## CHmRun AtBat Runs RBI Walks HmRun PutOuts
## 3588693.2 3581420.4 3215550.3 3073679.2 2436801.2 1492658.2 553921.5
# Visualisasi variable importance
barplot(
importance,
las = 2,
col = "skyblue",
main = "Variable Importance",
ylab = "Tingkat Kepentingan Variabel",
cex.names = 0.8)Analisis variabel importance dilakukan untuk mengetahui tingkat kepentingan setiap variabel prediktor dalam pembentukan pohon regresi. Berdasarkan output, variabel CRBI memiliki nilai kepentingan tertinggi, diikuti oleh CRuns, CHits, dan CAtBat. Hasil tersebut menunjukkan bahwa CRBI, yaitu jumlah runs batted in kumulatif sepanjang karier, merupakan variabel dengan kontribusi relatif terbesar dalam pembentukan model awal. Sebaliknya, PutOuts memiliki nilai kepentingan paling rendah. Grafik batang variabel importance digunakan untuk mempermudah perbandingan tingkat kepentingan antarprediktor. Nilai kepentingan menunjukkan kontribusi relatif terhadap pembentukan pohon.
pred.tree <- predict(fit.tree,
newdata = Hitters.test)
# Menghitung Mean Squared Error (MSE)
mse.tree <- mean((Hitters.test$Salary - pred.tree)^2)
cat("MSE model sebelum pruning =", mse.tree, "\n")## MSE model sebelum pruning = 79151.77
Setelah model awal terbentuk, prediksi dilakukan terhadap data testing. Hasil prediksi tersebut dibandingkan dengan nilai Salary aktual pada data testing menggunakan Mean Squared Error (MSE). MSE dihitung dengan mengambil rata-rata kuadrat selisih antara nilai aktual dan nilai prediksi, sehingga nilai yang lebih kecil menunjukkan kesalahan prediksi kuadrat rata-rata yang lebih rendah. Berdasarkan output, model Regression Tree sebelum pruning menghasilkan nilai MSE sebesar 79.151,77. Nilai ini menjadi tolok ukur awal untuk menilai kinerja model sebelum dilakukan penyederhanaan pohon. Selanjutnya, nilai MSE tersebut dibandingkan dengan MSE model setelah pruning untuk mengetahui perubahan kesalahan prediksi pada data testing.
##
## Regression tree:
## rpart(formula = Salary ~ ., data = Hitters.train, method = "anova",
## control = rpart.control(cp = 0.008))
##
## Variables actually used in tree construction:
## [1] CAtBat CHmRun CRBI CRuns Hits HmRun RBI Walks Years
##
## Root node error: 37300166/185 = 201623
##
## n= 185
##
## CP nsplit rel error xerror xstd
## 1 0.3699126 0 1.00000 1.01440 0.16933
## 2 0.0953392 1 0.63009 0.66573 0.13523
## 3 0.0831170 2 0.53475 0.73618 0.13772
## 4 0.0462720 3 0.45163 0.69985 0.12396
## 5 0.0403020 4 0.40536 0.69910 0.13299
## 6 0.0223856 5 0.36506 0.64196 0.13100
## 7 0.0122387 6 0.34267 0.66030 0.13128
## 8 0.0102240 7 0.33043 0.65698 0.12895
## 9 0.0089296 8 0.32021 0.65061 0.12904
## 10 0.0080000 9 0.31128 0.64249 0.12920
# Memilih CP dengan xerror terkecil
bestcp <- fit.tree$cptable[
which.min(fit.tree$cptable[, "xerror"]),"CP"]
cat("CP terbaik =", bestcp, "\n")## CP terbaik = 0.02238561
Penentuan CP dilakukan untuk menampilkan tabel kompleksitas pohon. Tabel memuat nilai CP, jumlah percabangan (nsplit), relative error, cross-validation error (xerror), dan standar error dari hasil validasi silang (xstd). Nilai CP mengatur kompleksitas pohon, pemangkasan dengan CP yang lebih besar pada umumnya menghasilkan pohon yang lebih sederhana. Berdasarkan output, nilai xerror terkecil adalah 0,64196, yang terdapat pada baris dengan nilai CP sebesar 0,0223856 dan jumlah percabangan sebanyak lima. Oleh karena itu, berdasarkan kriteria nilai xerror terkecil, CP terbaik yang diperoleh adalah 0,02238561. Nilai ini kemudian digunakan untuk melakukan pruning pada model pohon regresi.
## 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 *
# Visualisasi pohon setelah pruning
rpart.plot(
pruned.tree,
type = 2,
extra = 101,
fallen.leaves = TRUE,
main = "Regression Tree Setelah Pruning")# Variable importance setelah pruning
importance.pruned <- pruned.tree$variable.importance
importance.pruned <- sort(
importance.pruned,
decreasing = TRUE)
print(importance.pruned)## 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
Tahap ini bertujuan menyederhanakan struktur pohon dengan menghilangkan percabangan yang tidak dipertahankan berdasarkan parameter kompleksitas terpilih. Model setelah pruning tetap menggunakan 185 observasi pada data training, tetapi memiliki struktur yang lebih sederhana dibandingkan model awal. Pada model awal, pohon memiliki sembilan percabangan, sedangkan setelah pruning jumlah percabangan berkurang menjadi lima. Analisis variabel importance setelah pruning menunjukkan bahwa CRBI tetap menjadi variabel dengan nilai kepentingan tertinggi. Variabel berikutnya adalah CRuns, CHits, dan CAtBat.
pred.pruned <- predict(
pruned.tree,
newdata = Hitters.test)
# Menghitung MSE setelah pruning
mse.pruned <- mean(
(Hitters.test$Salary - pred.pruned)^2)
cat("MSE model setelah pruning =", mse.pruned, "\n")## MSE model setelah pruning = 75515.11
Setelah proses pruning, prediksi kembali dilakukan terhadap data testing. Nilai prediksi kemudian dibandingkan dengan nilai Salary aktual untuk memperoleh MSE setelah pruning. Evaluasi menggunakan data testing yang sama seperti pada model awal memungkinkan perbandingan kesalahan prediksi kedua model secara langsung. Berdasarkan output, model setelah pruning menghasilkan nilai MSE sebesar 75.515,11.
hasil.evaluasi <- data.frame(
Model = c(
"Regression Tree Sebelum Pruning",
"Regression Tree Setelah Pruning"),
MSE = c(mse.tree,
mse.pruned))
print(hasil.evaluasi)## Model MSE
## 1 Regression Tree Sebelum Pruning 79151.77
## 2 Regression Tree Setelah Pruning 75515.11
Hasil perbandingan menunjukkan bahwa MSE menurun dibandingkan dengan MSE sebelum pruning. Penurunan ini menunjukkan bahwa model setelah pruning memiliki kesalahan prediksi kuadrat rata-rata yang lebih rendah pada data testing. Oleh karena itu, berdasarkan kriteria MSE pada data testing, model setelah pruning memberikan hasil prediksi yang lebih baik pada percobaan ini.
Decision Tree merupakan metode pembelajaran mesin yang merepresentasikan proses pengambilan keputusan dalam bentuk struktur pohon. Pada klasifikasi, algoritma CART membagi data menjadi beberapa kelompok berdasarkan variabel prediktor sehingga diperoleh kelompok yang semakin homogen terhadap kelas target. Pemilihan pemisah dilakukan dengan meminimalkan ketidakmurnian kelas, yang umumnya diukur menggunakan indeks Gini. Struktur pohon terdiri atas simpul akar (root node), simpul internal (internal node), cabang (branch), dan simpul terminal (terminal node) yang menunjukkan hasil klasifikasi.
Pembangunan model Classification Tree diawali dengan menyiapkan data, menentukan variabel target dan prediktor, serta membagi data menjadi data latih dan data uji. Selanjutnya, algoritma CART membentuk pohon secara rekursif dengan memilih pemisahan terbaik berdasarkan penurunan ketidakmurnian kelas pada setiap simpul. Model yang terbentuk kemudian dievaluasi menggunakan data uji dengan metrik evaluasi klasifikasi, seperti confusion matrix, akurasi, presisi, recall, dan F1-score. Untuk mengurangi kompleksitas pohon dan mencegah overfitting, dilakukan pemangkasan (pruning) jika diperlukan, kemudian kinerja model sebelum dan sesudah pemangkasan dibandingkan untuk menentukan model yang lebih baik.
Model Regression Tree menunjukkan bahwa CRBI merupakan variabel yang paling penting dalam memprediksi nilai Salary, diikuti oleh CRuns dan CHits. Setelah dilakukan pruning, nilai MSE menurun dari 79.151,77 menjadi 75.515,11, atau berkurang sekitar 4,59%. Hal ini menunjukkan bahwa pemangkasan pohon menghasilkan kesalahan prediksi yang lebih rendah pada data uji. Dengan demikian, model setelah pruning memberikan kinerja prediksi yang lebih baik dibandingkan model sebelum pruning pada pengujian ini.
Ketika menjalankan suatu fungsi pada program R diharapkan untuk teliti saat mengoperasikannya. Penulisan syntax sangat perlu diperhatikan karena apabila terdapat kesalahan penulisan akan membuat program error. Selain itu, perlu untuk memperhatikan tatacara penulisan yang sesuai dengan KBBI, sehingga dapat menghasilkan laporan yang baik.
Fransiska, H. (2026). Modul Praktikum Machine Learning. Bengkulu: Laboratorium Statistika FMIPA Universitas Bengkulu.
Han, J., & Kamber, M. (2001). Data mining: Concepts and techniques. San Francisco: Morgan Kaufmann Publishers.
Linoff, M. J. (2004). Data Mining Technuques For Marketing Sales. Canada: Wiley Publishing.
Zalilia, L. (2007). Penerapan Data Mining untuk IDS. Bandung: Institut Teknologi Bandung.