Pendahuluan
Latar Belakang
Perbankan Indonesia memiliki fungsi utama sebagai penghimpun dan penyalur dana masyarakat serta bertujuan untuk menunjang pelaksanaan pembangunan nasional dalam rangka meningkatkan pemerataan pembangunan dan hasil-hasilnya, pertumbuhan ekonomi dan stabilitas nasional, kearah peningkatan taraf hidup rakyat banyak. Lembaga perbankan memiliki fungsi sebagai lembaga perantara. Lembaga perantara yang dimaksud adalah lembaga yang menghimpun dana dari masyarakat dalam bentuk simpanan dengan memberikan deposit kepada masyarakat. Misalnya seperti tabungan haji, deposito, tabungan sekolah dan tabungan lainnya.Lembaga perbankan selain menjadi lembaga perantara juga memiliki manfaat sebagai lembaga yang menyalurkan dana kepada masyarakat dalam bentuk produk pinjaman. Pinjaman ini juga ditetapkan oleh suku bunga kredit yang berguna untuk meningkatkan pertumbuhan ekonomi negara. Dalam proses penyaluran dana tersebut diperlukan skema pinjaman yang terstruktur pelayanannya. Setiap Bank memiliki skema pelayanan pinjaman yang berbeda-beda dan setiap bank berusaha untuk memberikan pelayanan yang terbaik bagi nasabahnya. Oleh karena itu, pihak bank perlu memperhatikan rating nasabah terkait skema pinjamannya sebagai bahan evaluasi bagi bank agar memiliki pelayanan yang terbaik.
Tujuan
Tujuan Penelitian ini adalah memprediksi rating skema pemberian pinjaman dan mengetahui faktor-faktor yang memengaruhi rating skema pinjaman.
Metodologi
Artificial Neural Network
Neural Network merupakan model yang terinspirasi dari jaringan syaraf biologis manusia. Metode ini menggunakan elemen perhitungan non-linier dasar yang disebut neuron yang diorganisasikan sebagai jaringan yang saling berhubungan, sehingga mirip dengan jaringan saraf manusia. Jaringan saraf tiruan dibentuk untuk memecahkan suatu masalah tertentu seperti pengenalan pola atau klasifikasi karena proses pembelajaran. NN terdiri atas lapis masukan (input layer) dan lapis keluaran (output layer). Setiap lapis terdiri atas satu atau beberapa unit neuron yang mempunyai sebuah fungsi aktivasi yang menentukan keluaran dari unit tersebut.Kita bisa menambahkan lapis tersembunyi (hidden layer) untuk menambah kemampuan dari NN tersebut.
Untuk megukur performa model neural network digunakan dua Indikator statistik yaitu Root Mean Square Error (RMSE) dan Mean Absolute Error (MAE), nilai RMSE terendah menunjukkan hasil akurasi yang terbaik, formula RMSE dan MAE dipresentasikan sebagai berikut:
Data
Data yang digunakan adalah data suatu perusahaan perbankkan yang meneliti 75 jenis skema pinjaman yang telah diberi rating oleh para customernya. Peubah yang terdapat pada data yaitu 6 peubah yaitu sebagai berikut:
| Peubah | Keterangan | Tipe Peubah |
|---|---|---|
| besar.pinjaman | Besar pinjaman dalam juta rupiah | Numerik |
| lama.pembayaran | Lama pembayaran dalam tahun | Numerik |
| bunga | Tambahan bunga yang ditetapkan (dalam %) | Numerik |
| pembayaran.per.bulan | Pembayaran per bulan dalam 10000 | Numerik |
| banyak.cash.back | Banyak cash back yang diterapkan pada skema tersebut | Numerik |
| rating | Rating skema pinjaman | Numerik |
Package
library(tensorflow)
library(keras)
library(reticulate)
library(caret)
library(tidyverse)
library(knitr)
library(ggplot2)
library(tidyr)
library(e1071)
library(ROCR)
library(rpart)
library(UBL)
library(neuralnet)
library(NeuralNetTools)
library(reticulate)
library(readr)
data <- read.csv("C:/SMT 6/TEKNIK PEMBELAJARAN MESIN/TPM 5/data ann.csv", stringsAsFactors = T, )
head(data)
str(data)
## 'data.frame': 75 obs. of 6 variables:
## $ besar.pinjaman : int 70 120 70 50 110 110 130 90 90 120 ...
## $ lama.pembayaran : int 4 3 4 4 2 2 3 2 3 1 ...
## $ bunga : int 1 5 1 0 2 0 2 1 0 2 ...
## $ pembayaran.per.bulan: int 130 15 260 140 180 125 210 200 210 220 ...
## $ banyak.cash.back : num 10 2 9 14 1.5 1 2 4 5 0 ...
## $ rating : num 68.4 34 59.4 93.7 29.5 ...
summary(data)
## besar.pinjaman lama.pembayaran bunga pembayaran.per.bulan
## Min. : 50.0 Min. :1.000 Min. :0.000 Min. : 0.0
## 1st Qu.:100.0 1st Qu.:2.000 1st Qu.:0.000 1st Qu.:132.5
## Median :110.0 Median :3.000 Median :1.000 Median :180.0
## Mean :106.9 Mean :2.547 Mean :1.013 Mean :160.2
## 3rd Qu.:110.0 3rd Qu.:3.000 3rd Qu.:1.500 3rd Qu.:215.0
## Max. :160.0 Max. :6.000 Max. :5.000 Max. :320.0
## banyak.cash.back rating
## Min. : 0.000 Min. :18.04
## 1st Qu.: 0.500 1st Qu.:32.69
## Median : 2.000 Median :40.40
## Mean : 2.183 Mean :42.48
## 3rd Qu.: 3.000 3rd Qu.:50.80
## Max. :14.000 Max. :93.70
Penyiapan dan Eksplorasi Data
Pengecekan Missing Value
#library(DataExplorer)
#plot_intro(data = data)
Tidak terdapat missing value pada data sehingga tidak perlu penanganan data hilang. Seluruh kolom atau peubah bertipe kontinu serta baris atau amatannya semua lengkap.
Hubungan Peubah Bebas dengan Peubah Penjelas
library(GGally)
library(ggplot2)
ggpairs(data, columns = 1:6)
Sebaran Setiap Peubah
par(mfrow = c(2, 3))
boxplot(data$besar.pinjaman, horizontal = T,
main = "Sebaran Pinjaman", col="darkred")
boxplot(data$lama.pembayaran, horizontal = T,
main = "Sebaran Lama Pembayaran", col="red")
boxplot(data$bunga, horizontal = T,
main="sebaran Bunga Pinjaman", col = "pink")
boxplot(data$pembayaran.per.bulan, horizontal = T,
main="sebaran Pembayaran per Bulan", col="skyblue")
boxplot(data$banyak.cash.back, horizontal = T,
main="sebaran Banyaknya Cash Back", col="blue")
boxplot(data$rating, horizontal = T,
main="sebaran Rating", col="darkblue")
Pemodelan Neural Network (Regresi Neural Network)
Scaling Data
Sebelum dilakukan pemodelan, dilakukan scaling data menggunakan metode scaling normalize (minmax scaling) dimana setiap peubah hasil scaling akan memiliki nilai pada interval 0-1.Scaling dilakukan secara manual dengan formula:
\(x_1scaled = \frac{x_1- min(x)}{max(x)-min(x)}\)
set.seed(12345)
# Scale the Data
scale01 <- function(x){
(x - min(x)) / (max(x) - min(x))
}
data <- data %>%
mutate_all(scale01)
head(data)
Splitting Data
Pembagian data latih dan data uji dapat menggunakan fungsi
createDataPartition. Dataset akan dibagi menjadi 70% data
latih dan 30% data uji.
set.seed(12345)
in.train <- createDataPartition(data$rating, p = 0.7, list = FALSE) #partisi data
data_train <- data[in.train,] #data training utk modelling
data_test<- data[-in.train,] #data testing utk evaluasi model
round(prop.table(table(data$rating)), digits = 4)
##
## 0 0.023535203462142 0.0505992164289577 0.0575408856494142
## 0.0133 0.0133 0.0133 0.0133
## 0.0620336657231687 0.0761437360264347 0.114874798348409 0.128339750089546
## 0.0133 0.0133 0.0133 0.0133
## 0.131940815093578 0.139434927631696 0.14141252377463 0.151551383195866
## 0.0133 0.0133 0.0133 0.0133
## 0.157032915082765 0.162175069484295 0.163992254982322 0.172204746048353
## 0.0133 0.0133 0.0133 0.0133
## 0.1742908245653 0.177012386696683 0.187210483203729 0.199984547077035
## 0.0133 0.0133 0.0133 0.0133
## 0.21068455959718 0.212747495736337 0.227453399663538 0.234462817501099
## 0.0133 0.0133 0.0133 0.0133
## 0.239662319005558 0.239812499952916 0.243565411203906 0.244254937755396
## 0.0133 0.0133 0.0133 0.0133
## 0.251059920241929 0.252359131480703 0.261660107302655 0.274865563072621
## 0.0133 0.0133 0.0133 0.0133
## 0.278386852295763 0.280170308868536 0.280409305794617 0.286280187371581
## 0.0133 0.0133 0.0133 0.0133
## 0.291600753513706 0.295489664232118 0.296131518278361 0.297603682775704
## 0.0133 0.0133 0.0133 0.0133
## 0.299350410240609 0.302320551379112 0.30362166581743 0.309298579640859
## 0.0133 0.0133 0.0133 0.0133
## 0.310072032005578 0.316619474587138 0.347439716187483 0.360619610930239
## 0.0133 0.0133 0.0133 0.0133
## 0.367011744499003 0.367693830068943 0.378207950216952 0.381337656133898
## 0.0133 0.0133 0.0133 0.0133
## 0.410739564707337 0.415915487684112 0.41955761686164 0.43247761913332
## 0.0133 0.0133 0.0133 0.0133
## 0.433315463082614 0.443410363881047 0.449816533546449 0.463752540391412
## 0.0133 0.0133 0.0133 0.0133
## 0.466164436096976 0.46692034994923 0.486479822430425 0.492853227987009
## 0.0133 0.0133 0.0133 0.0133
## 0.532661805234198 0.546127629275126 0.546940612680376 0.549813016592292
## 0.0133 0.0133 0.0133 0.0133
## 0.564526797650939 0.594258118345468 0.663384440452924 0.665592786323915
## 0.0133 0.0133 0.0133 0.0133
## 0.723730430763709 0.745817616572723 1
## 0.0133 0.0133 0.0133
Model 1
Pada model 1 jumlah hidden layer sebanyak 2 yang terdiri dari 20 neuron di setiap layer.
set.seed(12345)
Model_nn1 <- neuralnet(rating ~ ., data =
data_train, hidden=c(20,20), linear.output = TRUE)
plot(Model_nn1, rep = "best")
Prediksi Data Testing
output <- compute(Model_nn1, data_test[,1:5])
head(output$net.result)
## [,1]
## 12 -0.03241580
## 14 0.08991829
## 17 0.18349397
## 18 0.08991829
## 21 0.25898713
## 30 0.14989986
Evaluasi Model
NN1_Test_RMSE <- sqrt(sum(((output$net.result - data_test[,6])^2)/2))
NN1_Test_RMSE
## [1] 0.2285989
Nilai RMSE Predict
keras_train <- Model_nn1 %>% predict(data_train[, 1:5])
keras_test <- Model_nn1 %>% predict(data_test[, 1:5])
RMSETrain1<-postResample(keras_train[,1], data_train$rating);RMSETrain1
## RMSE Rsquared MAE
## 0.05251953 0.91985202 0.04235764
RMSETest1<-postResample(keras_test[,1], data_test$rating);RMSETest1
## RMSE Rsquared MAE
## 0.07228933 0.83768459 0.05736639
Model 2
Pada model 2 jumlah hidden layer sebanyak 3 yang terdiri dari 20 neuron di setiap layer
set.seed(12345)
Model_nn2 <- neuralnet(rating ~ ., data =
data_train, hidden=c(20,20,20), linear.output = TRUE)
plot(Model_nn2, rep = "best")
Prediksi Data Testing
output <- compute(Model_nn2, data_test[,1:5])
head(output$net.result)
## [,1]
## 12 0.006248793
## 14 0.106289177
## 17 0.128323285
## 18 0.106289177
## 21 0.281987003
## 30 0.180100952
Evaluasi Model
NN2_Test_RMSE <- sqrt(sum(((output$net.result - data_test[,6])^2)/2))
NN2_Test_RMSE
## [1] 0.2559534
keras_train <- Model_nn2 %>% predict(data_train[, 1:5])
keras_test <- Model_nn2 %>% predict(data_test[, 1:5])
RMSETrain2<-postResample(keras_train[,1], data_train$rating); RMSETrain2
## RMSE Rsquared MAE
## 0.04572686 0.93922469 0.03536413
RMSETest2<-postResample(keras_test[,1], data_test$rating); RMSETest2
## RMSE Rsquared MAE
## 0.08093958 0.79272326 0.06402680
Model 3
Pada model 3 jumlah hidden layer sebanyak 4 yang terdiri dari 20 neuron, 15 neuron, 10 neuron, dan 5 neuron.
set.seed(12345)
Model_nn3 <- neuralnet(rating ~ ., data =
data_train, hidden=c(20,15,10,5), linear.output = TRUE)
plot(Model_nn3, rep = "best")
Prediksi Data Testing
output <- compute(Model_nn3, data_test)
head(output$net.result)
## [,1]
## 12 -0.009957506
## 14 0.098254231
## 17 0.166240959
## 18 0.098254231
## 21 0.277321481
## 30 0.137879731
Evaluasi Model
NN3_Test_RMSE <- sqrt(sum(((output$net.result - data_test[,6])^2)/2))
NN3_Test_RMSE
## [1] 0.1984715
Nilai RMSE Predict
keras_train <- Model_nn3 %>% predict(data_train[, 1:5])
keras_test <- Model_nn3 %>% predict(data_test[, 1:5])
RMSETrain3<-postResample(keras_train[,1], data_train$rating); RMSETrain3
## RMSE Rsquared MAE
## 0.05383996 0.91574225 0.04306536
RMSETest3<-postResample(keras_test[,1], data_test$rating); RMSETest3
## RMSE Rsquared MAE
## 0.06276221 0.87502140 0.05053429
Perbandingan Model
hasil_eval_Train <- rbind(
c(RMSETrain1),
c(RMSETrain2),
c(RMSETrain3))
row.names(hasil_eval_Train) <-
c("Model NN 1","Model NN 2","Model NN 3")
hasil_eval_Test <- rbind(
c(RMSETest1),
c(RMSETest2),
c(RMSETest3))
row.names(hasil_eval_Test) <-
c("Model NN 1","Model NN 2","Model NN 3")
hasil_eval_Train
## RMSE Rsquared MAE
## Model NN 1 0.05251953 0.9198520 0.04235764
## Model NN 2 0.04572686 0.9392247 0.03536413
## Model NN 3 0.05383996 0.9157423 0.04306536
hasil_eval_Test
## RMSE Rsquared MAE
## Model NN 1 0.07228933 0.8376846 0.05736639
## Model NN 2 0.08093958 0.7927233 0.06402680
## Model NN 3 0.06276221 0.8750214 0.05053429
Berdasarkan hasil evaluasi model data training diperoleh bahwa model NN 2 merupakan model yang terbaik karena memiliki nilai RMSE dan MAE terkecil serta memiliki R-Squared yang terbesar. Sehingga dari model NN 2 ini akan dianalisis lagi peubah mana yang sangat penting terhadap model. Dari perbandingan evaluasi model data training dan data testing terlihat bahwa data training memiliki RMSE dan MAE lebih kecil serta R-Squared yang lebih besar, sehingga model memiliki keakuratan yang baik dalam memprediksi.
Peubah Penting
olden(Model_nn2)
Berdasarkan barplot diatas, peubah bunga memiliki hubungan yang positif terkuat dengan rating skema pinjaman, sedangkan hubungan yang positif terlemah yaitu pembayaran per bulan. Dengan demikian, peubah penting jika diurutkan yaitu bunga, besa pinjaman, lama pembayaran, banyak cash back, dan pembayaran per bulan.
Kesimpulan
Dengan melakukan tiga pemodelan neural network, diperoleh bahwa model terbaik yaitu model NN 2 dengan 3 hidden layer dengan 20 neuorn di setiap layernya. RMSE untuk model NN 2 yaitu 0.049 dan R-Square 92,37%. Peubah yang paling berpengaruh terhadap model yaitu bunga.