Tugas Kelompok Praktikum
Package
library(readr)
library(dplyr)##
## 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
library(tidyverse)## -- Attaching packages --------------------------------------- tidyverse 1.3.2 --
## v ggplot2 3.3.6 v purrr 0.3.4
## v tibble 3.1.8 v stringr 1.4.1
## v tidyr 1.2.1 v forcats 0.5.2
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
library(Metrics)
# For decision tree model
library(rpart)
library(caret)## Loading required package: lattice
##
## Attaching package: 'caret'
##
## The following objects are masked from 'package:Metrics':
##
## precision, recall
##
## The following object is masked from 'package:purrr':
##
## lift
# For data visualization
library(rpart.plot)
library(ROCR)
# Contains the data
library(ISLR)Data
Penjelasan Peubah :
Record_ID : Pengidentifikasi unik dari record dalam kumpulan data. Auction_ID : Pengidentifikasi unik lelang. Bidder_ID : Pengidentifikasi unik penawar. Bidder_Tendency : Seorang penawar yang berani berpartisipasi secara eksklusif dalam lelang beberapa penjual daripada lot yang terdiversifikasi. Ini adalah tindakan kolusi yang melibatkan penjual penipu dan kaki tangannya.
Bidding_Ratio : Seorang penawar yang lebih tinggi berpartisipasi lebih sering untuk menaikkan harga lelang dan menarik tawaran yang lebih tinggi dari peserta yang sah.
Successive_Outbidding : Seorang penawar penawar berturut-turut mengalahkan dirinya sendiri meskipun dia adalah pemenang saat ini untuk menaikkan harga secara bertahap dengan kenaikan kecil berturut-turut.
Last_Bidding : Penawar yang akan menjadi tidak aktif pada tahap terakhir lelang (lebih dari 90% durasi lelang) untuk menghindari memenangkan lelang.
Auction_Bids : Lelang dengan aktivitas SB cenderung memiliki jumlah tawaran yang jauh lebih tinggi daripada rata-rata tawaran dalam lelang bersamaan.
Starting_Price_Average: penawar pemula biasanya menawarkan harga awal yang kecil untuk menarik penawar yang sah ke dalam pelelangan.
Early_Bidding : Penawar yang lebih tinggi cenderung menawar cukup awal dalam lelang (kurang dari 25% dari durasi lelang) untuk menarik perhatian pengguna lelang.
Winning_Ratio : Penawar yang berani bersaing di banyak lelang tetapi hampir tidak memenangkan lelang apa pun.
Auction_Duration : Berapa lama lelang berlangsung. Class : 0 untuk penawaran perilaku normal; 1 untuk sebaliknya.
dataset <- read_csv("E:/KULIAH/SEMESTER 6/STA1382 Teknik Pembelajaran Mesin/TUGAS PRAK/03. Data Decission Tree I - Shill Bidding Dataset.csv")## Rows: 6321 Columns: 13
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (1): Bidder_ID
## dbl (12): Record_ID, Auction_ID, Bidder_Tendency, Bidding_Ratio, Successive_...
##
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Get the variable names
str(dataset)## spec_tbl_df [6,321 x 13] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ Record_ID : num [1:6321] 1 2 3 4 5 8 10 12 13 27 ...
## $ Auction_ID : num [1:6321] 732 732 732 732 900 900 900 900 2370 600 ...
## $ Bidder_ID : chr [1:6321] "_***i" "g***r" "t***p" "7***n" ...
## $ Bidder_Tendency : num [1:6321] 0.2 0.0244 0.1429 0.1 0.0513 ...
## $ Bidding_Ratio : num [1:6321] 0.4 0.2 0.2 0.2 0.222 ...
## $ Successive_Outbidding : num [1:6321] 0 0 0 0 0 0 0 1 1 0.5 ...
## $ Last_Bidding : num [1:6321] 2.78e-05 1.31e-02 3.04e-03 9.75e-02 1.32e-03 ...
## $ Auction_Bids : num [1:6321] 0 0 0 0 0 ...
## $ Starting_Price_Average: num [1:6321] 0.994 0.994 0.994 0.994 0 ...
## $ Early_Bidding : num [1:6321] 2.78e-05 1.31e-02 3.04e-03 9.75e-02 1.24e-03 ...
## $ Winning_Ratio : num [1:6321] 0.667 0.944 1 1 0.5 ...
## $ Auction_Duration : num [1:6321] 5 5 5 5 7 7 7 7 7 7 ...
## $ Class : num [1:6321] 0 0 0 0 0 0 0 1 1 1 ...
## - attr(*, "spec")=
## .. cols(
## .. Record_ID = col_double(),
## .. Auction_ID = col_double(),
## .. Bidder_ID = col_character(),
## .. Bidder_Tendency = col_double(),
## .. Bidding_Ratio = col_double(),
## .. Successive_Outbidding = col_double(),
## .. Last_Bidding = col_double(),
## .. Auction_Bids = col_double(),
## .. Starting_Price_Average = col_double(),
## .. Early_Bidding = col_double(),
## .. Winning_Ratio = col_double(),
## .. Auction_Duration = col_double(),
## .. Class = col_double()
## .. )
## - attr(*, "problems")=<externalptr>
Kita akan menggunakan pohon klasifikasi untuk menganalisis data Shill
Bidding. Kumpulan data merupakan simulasi dari penawaran lelang di 6321
auction yang berbeda. ada 6321 pengamatan dan 13 variabel dalam dataset.
Kita akan memprediksi Auction_Bids berdasarkan variabel
lainnya. Namun, karena Auction_Bids merupakan variabel
kontinu, maka kita perlu mengodekannya kembali sebagai variabel biner.
Variabel baru diberi nama High yang berisi nilai
Yes jika variabel Auction_Bids melebihi
0.1429 dan No kurang dari atau sama dengan
0.1429.
head(dataset)## # A tibble: 6 x 13
## Record_ID Auction_ID Bidder_ID Bidde~1 Biddi~2 Succe~3 Last_~4 Aucti~5 Start~6
## <dbl> <dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 732 _***i 0.2 0.4 0 2.78e-5 0 0.994
## 2 2 732 g***r 0.0244 0.2 0 1.31e-2 0 0.994
## 3 3 732 t***p 0.143 0.2 0 3.04e-3 0 0.994
## 4 4 732 7***n 0.1 0.2 0 9.75e-2 0 0.994
## 5 5 900 z***z 0.0513 0.222 0 1.32e-3 0 0
## 6 8 900 i***e 0.0385 0.111 0 1.68e-2 0 0
## # ... with 4 more variables: Early_Bidding <dbl>, Winning_Ratio <dbl>,
## # Auction_Duration <dbl>, Class <dbl>, and abbreviated variable names
## # 1: Bidder_Tendency, 2: Bidding_Ratio, 3: Successive_Outbidding,
## # 4: Last_Bidding, 5: Auction_Bids, 6: Starting_Price_Average
summary(dataset)## Record_ID Auction_ID Bidder_ID Bidder_Tendency
## Min. : 1 Min. : 5 Length:6321 Min. :0.00000
## 1st Qu.: 3778 1st Qu.: 589 Class :character 1st Qu.:0.02703
## Median : 7591 Median :1246 Mode :character Median :0.06250
## Mean : 7536 Mean :1241 Mean :0.14254
## 3rd Qu.:11277 3rd Qu.:1867 3rd Qu.:0.16667
## Max. :15144 Max. :2538 Max. :1.00000
## Bidding_Ratio Successive_Outbidding Last_Bidding Auction_Bids
## Min. :0.01176 Min. :0.0000 Min. :0.00000 Min. :0.0000
## 1st Qu.:0.04348 1st Qu.:0.0000 1st Qu.:0.04793 1st Qu.:0.0000
## Median :0.08333 Median :0.0000 Median :0.44094 Median :0.1429
## Mean :0.12767 Mean :0.1038 Mean :0.46312 Mean :0.2316
## 3rd Qu.:0.16667 3rd Qu.:0.0000 3rd Qu.:0.86036 3rd Qu.:0.4545
## Max. :1.00000 Max. :1.0000 Max. :0.99990 Max. :0.7882
## Starting_Price_Average Early_Bidding Winning_Ratio Auction_Duration
## Min. :0.0000 Min. :0.00000 Min. :0.0000 Min. : 1.000
## 1st Qu.:0.0000 1st Qu.:0.02662 1st Qu.:0.0000 1st Qu.: 3.000
## Median :0.0000 Median :0.36010 Median :0.0000 Median : 5.000
## Mean :0.4728 Mean :0.43068 Mean :0.3677 Mean : 4.615
## 3rd Qu.:0.9936 3rd Qu.:0.82676 3rd Qu.:0.8519 3rd Qu.: 7.000
## Max. :0.9999 Max. :0.99990 Max. :1.0000 Max. :10.000
## Class
## Min. :0.0000
## 1st Qu.:0.0000
## Median :0.0000
## Mean :0.1068
## 3rd Qu.:0.0000
## Max. :1.0000
# Creates a new binary variable, High.
High = ifelse(dataset$Auction_Bids <=0.1429, "No", "Yes")
# Add High to the data set.
dataset=data.frame(dataset,High)
# Remove the Bidder_Tendency dan variabel yang tidak dibutuhkan from the data.
dataset2 <- dataset[,-c(1:3, 8)]
# Code High as a factor variable
dataset2$High = as.factor(dataset2$High)
class(dataset2$High)## [1] "factor"
Pengklasifikasian yang baik adalah yang memiliki tingkat kesalahan pengujian yang paling kecil. Untuk mengevaluasi kinerja pohon klasifikasi, maka dataset dibagi menjadi data latih (dataset.train) sebesar 70% dan data uji (dataset.test) sebesar 30%.
head(dataset2)## Bidder_Tendency Bidding_Ratio Successive_Outbidding Last_Bidding
## 1 0.20000000 0.4000000 0 0.0000277778
## 2 0.02439024 0.2000000 0 0.0131226852
## 3 0.14285714 0.2000000 0 0.0030416667
## 4 0.10000000 0.2000000 0 0.0974768519
## 5 0.05128205 0.2222222 0 0.0013177910
## 6 0.03846154 0.1111111 0 0.0168435847
## Starting_Price_Average Early_Bidding Winning_Ratio Auction_Duration Class
## 1 0.9935928 0.0000277778 0.6666667 5 0
## 2 0.9935928 0.0131226852 0.9444444 5 0
## 3 0.9935928 0.0030416667 1.0000000 5 0
## 4 0.9935928 0.0974768519 1.0000000 5 0
## 5 0.0000000 0.0012417328 0.5000000 7 0
## 6 0.0000000 0.0168435847 0.8000000 7 0
## High
## 1 No
## 2 No
## 3 No
## 4 No
## 5 No
## 6 No
set.seed(234)
train <- createDataPartition(as.factor(dataset2$High), p=0.7, list=FALSE)
#train = sample(1:nrow(Carseats.H), 200)
dataset.train=dataset2[train,]
dataset.test=dataset2[-train,]
High.test=High[-train]Kita akan membuat pohon klasifikasi menggunakan data latih untuk
memprediksi variabel High menggunakan semua variabel
kecuali Auction_Bids.
fit.tree = rpart(High ~ ., data=dataset.train, method = "class" , cp=0.004)
fit.tree## n= 4426
##
## node), split, n, loss, yval, (yprob)
## * denotes terminal node
##
## 1) root 4426 2099 No (0.52575689 0.47424311)
## 2) Bidding_Ratio>=0.04733894 3225 898 No (0.72155039 0.27844961)
## 4) Starting_Price_Average< 0.2573036 2029 210 No (0.89650074 0.10349926)
## 8) Successive_Outbidding< 0.25 1760 146 No (0.91704545 0.08295455) *
## 9) Successive_Outbidding>=0.25 269 64 No (0.76208178 0.23791822)
## 18) Bidding_Ratio>=0.1639785 252 47 No (0.81349206 0.18650794) *
## 19) Bidding_Ratio< 0.1639785 17 0 Yes (0.00000000 1.00000000) *
## 5) Starting_Price_Average>=0.2573036 1196 508 Yes (0.42474916 0.57525084)
## 10) Bidder_Tendency< 0.05042373 345 113 No (0.67246377 0.32753623) *
## 11) Bidder_Tendency>=0.05042373 851 276 Yes (0.32432432 0.67567568)
## 22) Last_Bidding< 0.1307496 185 85 No (0.54054054 0.45945946)
## 44) Bidding_Ratio>=0.1861472 34 3 No (0.91176471 0.08823529) *
## 45) Bidding_Ratio< 0.1861472 151 69 Yes (0.45695364 0.54304636)
## 90) Bidder_Tendency< 0.3839286 124 58 No (0.53225806 0.46774194)
## 180) Successive_Outbidding< 0.25 112 47 No (0.58035714 0.41964286) *
## 181) Successive_Outbidding>=0.25 12 1 Yes (0.08333333 0.91666667) *
## 91) Bidder_Tendency>=0.3839286 27 3 Yes (0.11111111 0.88888889) *
## 23) Last_Bidding>=0.1307496 666 176 Yes (0.26426426 0.73573574)
## 46) Successive_Outbidding< 0.25 417 141 Yes (0.33812950 0.66187050)
## 92) Bidding_Ratio>=0.2264957 23 3 No (0.86956522 0.13043478) *
## 93) Bidding_Ratio< 0.2264957 394 121 Yes (0.30710660 0.69289340) *
## 47) Successive_Outbidding>=0.25 249 35 Yes (0.14056225 0.85943775) *
## 3) Bidding_Ratio< 0.04733894 1201 0 Yes (0.00000000 1.00000000) *
Method merupakan argumen yang dapat dimodifikasi atau
dipilih berdasarkan tipe data dari variable respon. Class
digunakan untuk tipe kategorik/faktor, anova digunakan
untuk tipe numerik, poisson untuk count, dan
exp untuk survival data.
CP merupakan nilai numerik yang diberikan untuk
menentukan seberapa dalam kita ingin menumbuhkan pohon. Semakin kecil
nilainya (mendekati 0), maka akan semakin besar pohonnya. Nilai
defaultnya adalah 0.01.
# Visualizing the unpruned tree
rpart.plot(fit.tree)Membuat pohon yang dipangkas dengan menggunakan data latih. Model
pohon yang dipangkas berisi 5 variabel yaitu Bidding_Ratio,
starting_Price_Average, Successive_Outbidding,
Bidder_Tendency, dan Last_Bidding dengan 11
pemisahan.
Dari model tersebut dapat kita lihat bahwa indikator
Auction_Bids yang paling penting tampaknya adalah
Bidding_Ratio karena cabang pertama membedakan lokasi Good
versus lokasi Bad, Medium. Indikator penting berikutnya adalah
starting_Price_Average.
Node 2 dan 3 dibentuk dengan memisahkan node 1, root node, pada
variabel prediktor Bidding_Ratio. Titik perpecahannya
adalah Bidding_Ratio>=0.047; yaitu, simpul 2 terdiri dari semua
amatan dengan nilai Bidding_Ratio>=0.047 dan simpul 3 terdiri dari
semua amatan dengan Bidding_Ratio<=0.047. Kelas yang diprediksi untuk
node 2 adalah No, di mana No menunjukkan Auction_Bids kurang dari sama
dengan 0.1429.
lanjutannnya ini kurang ngerti interpretasinya Terdapat
loss sebesar 67 yang artinya akan ada sebanyak 67 amatan yang akan salah
diklasifikasi jika kelas yang diprediksi untuk node tersebut diterapkan
ke semua amatan. Secara khusus, dari total 220 amatan, 67 (30.45%) akan
salah klasifikasi dan 153 (69.55%) akan diklasifikasikan dengan
benar.
Simpul 4 adalah amatan yang memiliki Price >= $106.5.
Kelas yang diprediksi untuk simpul 4 adalah No yang menunjukkan
penjualan kurang dari atau sama dengan $8. Terdapat loss sebesar 27 -
yaitu, 27 baris akan salah diklasifikasi jika kelas prediksi untuk node
tersebut diterapkan ke semua amatan. Dari total 144 amatan, 27 (18.75%)
akan salah klasifikasi dan 117 (81.25%) akan diklasifikasikan dengan
benar.
# Checking the order of variable importance
fit.tree$variable.importance## Bidding_Ratio Starting_Price_Average Bidder_Tendency
## 974.830898 335.210637 79.073539
## Last_Bidding Early_Bidding Successive_Outbidding
## 78.575167 70.705735 41.119714
## Class Winning_Ratio
## 22.707649 2.541705
fit.tree$variable.importance %>%
data.frame() %>%
rownames_to_column(var = "Feature") %>%
rename(Overall = '.') %>%
ggplot(aes(x = fct_reorder(Feature, Overall), y = Overall)) +
geom_pointrange(aes(ymin = 0, ymax = Overall), color = "cadetblue", size = .3) +
theme_minimal() +
coord_flip() +
labs(x = "", y = "", title = "Variable Importance with Simple Classication")Prediksi dengan Pohon Klasifikasi
Berikutnya kita akan menggunakan model pohon klasifikasi yang telah
didapat dari data latih kepada data uji. Kita akan menggunakan fungsi
predict() untuk memprediksi variabel High.
Meskipun model dapat menghasilkan prediksi yang baik pada data latih,
tetap akan ada kemungkinan model bisa menghasilkan prediksi atau kinerja
yang buruk pada data uji. Artinya, pohon yang dihasilkan mungkin terlalu
rumit.
Pohon yang lebih kecil dengan pemisahan yang lebih sedikit akan menghasilkan varians yang lebih rendah dan interpretasi yang lebih baik dengan bias yang kecil.
pred.tree = predict(fit.tree, dataset.test, type = "class")Evaluasi Performa Pohon Klasifikasi
table(pred.tree,High.test)## High.test
## pred.tree No Yes
## No 929 148
## Yes 67 751
matriks_kesalahan <- confusionMatrix(pred.tree, dataset.test$High)
matriks_kesalahan## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 929 148
## Yes 67 751
##
## Accuracy : 0.8865
## 95% CI : (0.8714, 0.9005)
## No Information Rate : 0.5256
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.7715
##
## Mcnemar's Test P-Value : 4.871e-08
##
## Sensitivity : 0.9327
## Specificity : 0.8354
## Pos Pred Value : 0.8626
## Neg Pred Value : 0.9181
## Prevalence : 0.5256
## Detection Rate : 0.4902
## Detection Prevalence : 0.5683
## Balanced Accuracy : 0.8841
##
## 'Positive' Class : No
##
Dapat dilihat bahwa tingkat kesalahan klasifikasi adalah 11.35%, dihitung dari (148+67)/1895. Ini berarti bahwa model menghasilkan prediksi yang benar sebesar 88.65% pengamatan dalam data uji, atau bisa juga dilihat dari nilai accuracy.
Berikutnya kita dapat melakukan proses Pruning (pemangkasan) untuk melihat apakah dapat memberikan hasil yang lebih baik. Kita akan melihat apakah pemangkasan akan menghasilkan persentase kesalahan klasifikasi yang lebih rendah dan prediksi yang benar dengan persentase yang lebih tinggi. Pemangkasan memilih nilai cp (parameter kompleksitas) yang terkait dengan pohon yang lebih pendek yang meminimalkan tingkat kesalahan validasi silang (xerror). Dari tabel di bawah ini, kita dapat memilih nilai cp yang menghasilkan kesalahan validasi silang (xerror) terendah. Nilai cp terendah adalah 0.004049547 dan memiliki pohon dengan 7 split.
#plotcp(fit.tree)
printcp(fit.tree)##
## Classification tree:
## rpart(formula = High ~ ., data = dataset.train, method = "class",
## cp = 0.004)
##
## Variables actually used in tree construction:
## [1] Bidder_Tendency Bidding_Ratio Last_Bidding
## [4] Starting_Price_Average Successive_Outbidding
##
## Root node error: 2099/4426 = 0.47424
##
## n= 4426
##
## CP nsplit rel error xerror xstd
## 1 0.5721772 0 1.00000 1.00000 0.015827
## 2 0.0857551 1 0.42782 0.42782 0.012746
## 3 0.0566937 2 0.34207 0.34207 0.011685
## 4 0.0071463 3 0.28537 0.29347 0.010971
## 5 0.0061934 4 0.27823 0.29395 0.010978
## 6 0.0042878 5 0.27203 0.28966 0.010911
## 7 0.0040495 7 0.26346 0.28299 0.010804
## 8 0.0040000 11 0.24726 0.28299 0.010804
# Explicitly request the lowest cp value
fit.tree$cptable[which.min(fit.tree$cptable[,"xerror"]),"CP"]## [1] 0.004049547
plotcp(fit.tree, upper = "splits")Berikutnya kita akan membuat pohon yang dipangkas dengan menggunakan data latih. Model pohon yang dipangkas berisi 5 variabel yaitu Bidding_Ratio, starting_Price_Average, Bidder_Tendency, Last_Bidding, dan Successive_Outbidding dengan 7 pemisahan.
bestcp <-fit.tree$cptable[which.min(fit.tree$cptable[,"xerror"]),"CP"]
pruned.tree <- prune(fit.tree, cp = bestcp)
rpart.plot(pruned.tree)Menggunakan Pohon yang dipangkas untuk memprediksi data uji dan mengevaluasi performa pohon.
# Alternate specification
pred.prune = predict(pruned.tree, dataset.test, type="class")
table(pred.prune, High.test)## High.test
## pred.prune No Yes
## No 922 154
## Yes 74 745
matriks_kesalahan <- confusionMatrix(pred.prune, dataset.test$High)
matriks_kesalahan## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 922 154
## Yes 74 745
##
## Accuracy : 0.8797
## 95% CI : (0.8642, 0.894)
## No Information Rate : 0.5256
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.7577
##
## Mcnemar's Test P-Value : 1.678e-07
##
## Sensitivity : 0.9257
## Specificity : 0.8287
## Pos Pred Value : 0.8569
## Neg Pred Value : 0.9096
## Prevalence : 0.5256
## Detection Rate : 0.4865
## Detection Prevalence : 0.5678
## Balanced Accuracy : 0.8772
##
## 'Positive' Class : No
##
Berdasarkan pohon yang telah dipangkas, sekarang hanya 87.97% dari pengamatan uji yang diklasifikasikan dengan benar, sehingga tingkat kesalahan klasifikasi adalah 12.13%. Sedangkan pohon yang belum dipangkas memiliki tingkat kesalahan klasifikasi sebesar 11.35%. Oleh karena itu, model yang dipangkas menghasilkan peningkatan bias yang diukur dengan tingkat kesalahan pengujian. Akibatnya, kita akan memilih pohon yang lebih besar dan tidak dipangkas karena tingkat kesalahan pengujian lebih rendah daripada tingkat kesalahan pengujian pohon yang dipangkas. Ingatlah bahwa pengklasifikasi yang baik adalah yang kesalahan pengujiannya paling kecil. Contoh ini menunjukkan bahwa pemangkasan tidak selalu efektif dalam mengurangi bias. Penting untuk dicatat bahwa kita dapat memilih pohon yang dipangkas jika interpretabilitas lebih penting daripada bias yang lebih rendah.
Berdasarkan hasil tersebut, pohon yang paling baik adalah pohon yang belum dipangkas karena memiliki tingkat kesalahan klasifikasi yang lebih kecil dibandingkan pohon yang telah dipangkas.
dataset_preds_cart <- bind_cols(
predict(pruned.tree, newdata = dataset.test, type = "prob"),
predicted = predict(pruned.tree, newdata = dataset.test, type = "class"),
actual = dataset.test$High
)
dataset_cm_cart <- confusionMatrix(dataset_preds_cart$predicted, reference = dataset_preds_cart$actual)
dataset_cm_cart## Confusion Matrix and Statistics
##
## Reference
## Prediction No Yes
## No 922 154
## Yes 74 745
##
## Accuracy : 0.8797
## 95% CI : (0.8642, 0.894)
## No Information Rate : 0.5256
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.7577
##
## Mcnemar's Test P-Value : 1.678e-07
##
## Sensitivity : 0.9257
## Specificity : 0.8287
## Pos Pred Value : 0.8569
## Neg Pred Value : 0.9096
## Prevalence : 0.5256
## Detection Rate : 0.4865
## Detection Prevalence : 0.5678
## Balanced Accuracy : 0.8772
##
## 'Positive' Class : No
##
#install.packages("yardstick")
library(yardstick)## For binary classification, the first factor level is assumed to be the event.
## Use the argument `event_level = "second"` to alter this as needed.
##
## Attaching package: 'yardstick'
## The following objects are masked from 'package:caret':
##
## precision, recall, sensitivity, specificity
## The following objects are masked from 'package:Metrics':
##
## accuracy, mae, mape, mase, precision, recall, rmse, smape
## The following object is masked from 'package:readr':
##
## spec
mdl_auc <- Metrics::auc(actual = dataset_preds_cart$actual == "No", dataset_preds_cart$No)
yardstick::roc_curve(dataset_preds_cart, actual, No) %>%
autoplot() +
labs(
title = "ROC Curve",
subtitle = paste0("AUC = ", round(mdl_auc, 4))
)