#Daftar library
library(readxl) #Membaca file dari excel
library(rmarkdown) #Membuat laporan dinamis yang dapat ditampilkan dengan baik di format HTML
library(mice) #Menangani data yang memiliki nilai yang hilang (missing data)
## 
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
## 
##     filter
## The following objects are masked from 'package:base':
## 
##     cbind, rbind
library(randomForest) #Menjalankan model random forest
## randomForest 4.7-1.2
## Type rfNews() to see new features/changes/bug fixes.
file_path <- "D:/R SEI/Level Risiko Investasi.xlsx"
data_testing<- read_excel(file_path, sheet = "Testing")
paged_table(as.data.frame(data_testing))

Melakukan pegimporan data dari excel yang disimpan dalam folder D, file R SEI, dengan nama Risiko Investasi dan menyimpannya dalam variabel file_path.

Membaca file excel yang sudah tersimpan di variabel file_path hanya pada bagian sheet Testing dan menyimpannya dalam variabel data_testing.

Mengonversi objek pada variabel data_testing menjadi data frame, kemudian menampilkan data frame yang terdiri dari kolom Country dan X1 hingga X14.

#Memeriksa jumlah NA dalam data_testing
colSums(is.na(data_testing))
## Country      X1      X2      X3      X4      X5      X6      X7      X8      X9 
##       0       1       0       0       0       0       0       0       2       0 
##     X10     X11     X12     X13     X14 
##       0       4       0       0       1

Berdasarkan hasil di atas pada kolom X1 ada 1 nilai yang kosong, kolom X8 ada 2 nilai yang kosong, kolom X11 ada 4 nilai yang kosong, dan X14 terdapat 1 nilai yang kosong. Selanjutnya nilai-nilai yang kosong tersebut harus diisi agar pemrediksian risk level dapat dilakukan.

# Pisahkan kolom "Country" dari data_testing
data_testingclean <- data_testing[ , !(names(data_testing) %in% c("Country"))]
paged_table(as.data.frame(data_testingclean))

Pemisahan kolom Country dilakukan karena kolom tersebut tidak terlibat dalam proses imputasi (pengisian nilai yang hilang) dan pemrediksian risk level.

Dapat dilihat pada variabel data_testingclean untuk kolom Country sudah tidak ada.

# Lakukan imputasi hanya pada fitur yang tersisa (X1-X14)
imputed_datatesting <- mice(data_testingclean, method = "pmm", m = 5)
## 
##  iter imp variable
##   1   1  X1  X8  X11  X14
##   1   2  X1  X8  X11  X14
##   1   3  X1  X8  X11  X14
##   1   4  X1  X8  X11  X14
##   1   5  X1  X8  X11  X14
##   2   1  X1  X8  X11  X14
##   2   2  X1  X8  X11  X14
##   2   3  X1  X8  X11  X14
##   2   4  X1  X8  X11  X14
##   2   5  X1  X8  X11  X14
##   3   1  X1  X8  X11  X14
##   3   2  X1  X8  X11  X14
##   3   3  X1  X8  X11  X14
##   3   4  X1  X8  X11  X14
##   3   5  X1  X8  X11  X14
##   4   1  X1  X8  X11  X14
##   4   2  X1  X8  X11  X14
##   4   3  X1  X8  X11  X14
##   4   4  X1  X8  X11  X14
##   4   5  X1  X8  X11  X14
##   5   1  X1  X8  X11  X14
##   5   2  X1  X8  X11  X14
##   5   3  X1  X8  X11  X14
##   5   4  X1  X8  X11  X14
##   5   5  X1  X8  X11  X14
## Warning: Number of logged events: 30
completed_datatesting <- complete(imputed_datatesting)
paged_table(as.data.frame(completed_datatesting))

Imputasi (pengisian data yang hilang) pada data_clean menggunakan metode pmm (predictive mean matching). Ini adalah metode di mana nilai yang hilang digantikan oleh nilai terdekat yang diprediksi berdasarkan variabel lainnya. PMM biasanya digunakan karena menghindari prediksi yang ekstrem dan menjaga distribusi asli dari data. m = 5: Parameter ini menentukan bahwa akan dilakukan 5 kali imputasi berganda, yaitu 5 dataset yang berbeda akan dibuat, masing-masing dengan nilai hilang yang diisi berdasarkan prediksi yang berbeda-beda.

completed_datatesting adalah variabel yang akan menyimpan dataset yang sudah diisi lengkap dengan nilai pengganti untuk nilai yang hilang, sehingga dataset tidak lagi memiliki missing values.

Kolom iter menunjukkan pengulangan dari proses imputasi. mice melakukan beberapa pengulangan pada setiap dataset untuk memperbaiki prediksi nilai-nilai yang hilang. Dalam output ini, ada 5 ulangan (iter = 1, 2, 3, 4, 5).

Kolom imp terdapat nilai dari 1 sampai 5 yang menunjukkan dataset pertama hingga kelima yang sedang diimputasi pada setiap ulangan.

Kolom variabel menunjukkan variabel yang sedang diimputasi dalam setiap ulangan. Pada setiap ulangan, variabel-variabel yang berisi missing values diisi berdasarkan metode yang telah dipilih (dalam hal ini Predictive Mean Matching, “pmm”). Variabel X1, X8, X11, dan X14 adalah variabel yang memiliki missing values, dan mereka diimputasi pada setiap ulangan untuk setiap dataset.

Berdasarkan hasil di atas(completed_datatesting), apabila dilakukan pengecekan pada semua kolom sudah terisi nilainya.

# Memeriksa jumlah NA setelah imputasi
colSums(is.na(completed_datatesting))
##  X1  X2  X3  X4  X5  X6  X7  X8  X9 X10 X11 X12 X13 X14 
##   0   0   0   0   0   0   0   0   0   0   0   0   0   0

Pengecekan kembali untuk memastikan bahwa semua kolom nilainya sudah terisi.

Dapat dilihat dari hasil di atas bahwa semua kolom sudah 0, yang artinya tidak ada nilai yang kosong.

#Membaca/memuat kembali model_datatraining
model <- readRDS("model_datatraining.rds")
model
## 
## Call:
##  randomForest(x = X_train, y = y_train) 
##                Type of random forest: classification
##                      Number of trees: 500
## No. of variables tried at each split: 3
## 
##         OOB estimate of  error rate: 18.52%
## Confusion matrix:
##      high low class.error
## high   38   6   0.1363636
## low     9  28   0.2432432

Berdasarkan hasil di atas:

Ditunjukkan bahwa model sudah dilatih untuk memprediksi Risk Level

Model random forest ini digunakan untuk classification.

Model random forest membangun 500 pohon keputusan dalam proses pelatihannya.

Pada setiap pemisahan (split) dalam setiap pohon, model secara acak memilih 3 variabel dari sekian banyak fitur yang tersedia untuk menentukan pemisahan terbaik. Ini adalah mekanisme penting dalam random forest yang membantu mengurangi overfitting dan memberikan hasil yang lebih akurat.

OOB error rate 15% berarti model memiliki kesalahan prediksi sebesar 15% ketika diuji dengan data out-of-bag. Dengan kata lain, model ini diperkirakan salah memprediksi 15% dari data.

high:

37 data poin dengan kelas sebenarnya high diprediksi dengan benar sebagai high.

6 data poin dengan kelas sebenarnya high diprediksi salah sebagai low.

low:

31 data poin dengan kelas sebenarnya low diprediksi dengan benar sebagai low.

6 data poin dengan kelas sebenarnya low diprediksi salah sebagai high.

class.error:

class.error untuk kelas high (0.1395349): Ini berarti tingkat kesalahan prediksi untuk kelas high adalah sekitar 13.95%. Dari semua data dengan kelas high, sekitar 13.95% salah diprediksi.

class.error untuk kelas low (0.1621622): Tingkat kesalahan prediksi untuk kelas low adalah sekitar 16.22%. Dari semua data dengan kelas low, sekitar 16.22% salah diprediksi.

# Prediksi dengan model
hasil_prediksi <- predict(model, newdata = completed_datatesting)
paged_table(as.data.frame(hasil_prediksi))

Hasil di atas adalah prediksi Risk Level dari data testing.