Deskripsi Data

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:

  1. L: 1899

  2. 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

Missing Value

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

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

Splitting Data - Training Testing

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.

Klasifikasi Random Forest

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

Training Model

Membentuk model Random Forest menggunakan data training

rf_model <- randomForest(RISIKO ~ ., data = df_train)

Testing Model

Setelah model dilatih menggunakan data training, model diuji untuk memprediksi data testing

rf_predictions <- predict(rf_model, newdata = df_test)

Evaluasi Model

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

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

  1. PLAFON (19.93)

  2. RATE (11.88)

  3. GENDER (2.34)