Neural Network Tugas Individu

Indri ramdani

G1401201036

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.