Data yang digunakan merupakan scorring kredit yang bernilai 0 hingga 4. Terdiri dari beberapa kolom yaitu plafon, rate, segmen, gender, dan risiko.
## PLAFON RATE SEGMEN GENDER
## Length:2388 Length:2388 Length:2388 Length:2388
## Class :character Class :character Class :character Class :character
## Mode :character Mode :character Mode :character Mode :character
##
##
##
## RISIKO
## Min. :0.00000
## 1st Qu.:0.00000
## Median :0.00000
## Mean :0.08962
## 3rd Qu.:0.00000
## Max. :4.00000
Berikut ditampilakan beberapa baris awal data frame yang digunakan
## PLAFON RATE SEGMEN GENDER RISIKO
## 1 160.000.000 11 RITEL L 0
## 2 96.000.000 5,5 RITEL P 0
## 3 120.000.000 19 RITEL L 0
## 4 230.000.000 15 RITEL L 0
## 5 80.000.000 15,25 RITEL L 0
## 6 150.000.000 15,25 RITEL P 0
Pada summary R membaca kolom PLAFON dan RATE sebagai character padahal kedua kolom tersebut merupakan numerik sehingga perlu dilakukan perubahan jenis data sehingga R dapat mengolahnya seperti numerik
## PLAFON RATE SEGMEN GENDER
## Min. :1.400e+06 Min. : 2.63 Length:2388 Length:2388
## 1st Qu.:1.000e+08 1st Qu.: 8.50 Class :character Class :character
## Median :2.000e+08 Median :10.00 Mode :character Mode :character
## Mean :3.305e+08 Mean :10.07
## 3rd Qu.:3.305e+08 3rd Qu.:11.50
## Max. :7.499e+09 Max. :19.00
## RISIKO
## Min. :0.00000
## 1st Qu.:0.00000
## Median :0.00000
## Mean :0.08962
## 3rd Qu.:0.00000
## Max. :4.00000
Nilai unik pada kolom GENDER berupa
##
## L P
## 1899 489
Dengan L mewakili laki-laki dan p mewakili perempuan, frekuensi masing-masing adalah:
L: 1899
P: 489
##
## RITEL
## 2388
Pada kolom segmen diketahui hanya memiliki 1 jenis value yang unik, sehingga kolom tersebut dapat dihapus.
## PLAFON RATE GENDER RISIKO
## Min. :1.400e+06 Min. : 2.63 Length:2388 Min. :0.00000
## 1st Qu.:1.000e+08 1st Qu.: 8.50 Class :character 1st Qu.:0.00000
## Median :2.000e+08 Median :10.00 Mode :character Median :0.00000
## Mean :3.305e+08 Mean :10.07 Mean :0.08962
## 3rd Qu.:3.305e+08 3rd Qu.:11.50 3rd Qu.:0.00000
## Max. :7.499e+09 Max. :19.00 Max. :4.00000
Pengecekan missing value perlu dilakukan sehingga data benar terisi sepenuhnya
## PLAFON RATE GENDER RISIKO
## 0 0 0 0
Data tidak memiliki missing value sehingga dapat dilakukan pengecekan untuk outlier
Terlihat pada boxplot bahwa data numerik memiliki banyak outlier. Namun karena data memiliki satuan dan distribusi yang berbeda khususnya PLAFON (nominal pinjaman nasabah) yang merupakan gambaran asli dari populasinya sehingga outlier tidak perlu ditangani
train_size <- floor(0.8 * nrow(df)) #ukuran data training 80%
train_indices <- sample(seq_len(nrow(df)), size = train_size) #mengambil data training secara random
df_train <- df[train_indices, ] #membentuk data frame training
df_test <- df[-train_indices, ] #membentuk data frame testing
dimensi_training <- dim(df_train)
dimensi_testing <- dim(df_test)
Dimensi data training yang digunakan adalah 1910 x 4.
Dimensi data testing yang digunakan adalah 478 x 4.
Install package jika belum diinstal dan apabila sudah load librarynya
if (!require(randomForest)) {
install.packages("randomForest")
library(randomForest)
}
Pastikan kolom yang menjadi labelling atau klasifikasi merupakan faktor:
df_train$RISIKO <- as.factor(df_train$RISIKO)
df_test$RISIKO <- as.factor(df_test$RISIKO)
Apakah kolom risiko train merupakan faktor? TRUE
Apakah kolom risiko testing merupakan faktor? TRUE
Membentuk model Random Forest menggunakan data training
rf_model <- randomForest(RISIKO ~ ., data = df_train)
Setelah model dilatih menggunakan data training, model diuji untuk memprediksi data testing
rf_predictions <- predict(rf_model, newdata = df_test)
Evaluasi model menggunakan confusion matrix kemudian hitung akurasinya
confusion_matrix <- table(df_test$RISIKO, rf_predictions)
confusion_matrix
## rf_predictions
## 0 1 2 3 4
## 0 458 0 0 0 0
## 1 16 0 0 0 0
## 2 1 0 0 0 0
## 4 3 0 0 0 0
accuracy <- sum(diag(confusion_matrix)) / sum(confusion_matrix)
print(paste("Accuracy:", round(accuracy, 4)))
## [1] "Accuracy: 0.9582"
Jadi jika digunakan random forest dalam pengklasifikasian scorring kredit 0-4 maka didapatkan akurasi sebesar 0.9582 yang merupakan akurasi tinggi sehingga model dapat digunakan
Feature importance dihitung menggunakan Mean Decrease Gini. Semakin besar nilainya semakin penting featurenya.
importance <- importance(rf_model)
importance_df <- as.data.frame(importance)
importance_df$Feature <- rownames(importance_df)
importance_df <- importance_df[order(-importance_df$MeanDecreaseGini), ] #mengurutkan dari yang nilainya terbesar
importance_df
## MeanDecreaseGini Feature
## PLAFON 19.926042 PLAFON
## RATE 11.875700 RATE
## GENDER 2.337683 GENDER
imp_sorted <- importance_df[order(importance_df[,"MeanDecreaseGini"], decreasing = TRUE), ]
Urutan kepentingan feature berdasarkan mean decrease gininya
PLAFON (19.93)
RATE (11.88)
GENDER (2.34)