TUGAS INDIVIDU TPM KULIAH

Pandu Henanda Saputra (G1401201043)

2023-02-27

Pendahuluan

Neural Networks merupakan sebuah metode soft computing atau Data Mining yang banyak digunakan untuk melakukan pengklasifikasian dan prediksi. Artificial Neural Networks (ANN) pertama kali dikembangkan oleh McCulloch dan Pitts pada tahun 1943, dan sekarang ini telah banyak dikembangkan menjadi bentuk ANN yang bermacam-macam ( Yanto M., et al., 2015 ).

Eksplorasi Data

Import Data

Data yang digunakan merupakan data skema pinjaman suatu perusahaan perbankan dengan beberapa peubah penjelas dalam format (.csv). Proses import data ke software R dapat dilakukan dengan menggunakan fungsi (read.csv) sebagai berikut:

data_tpm <- read.csv("C:/Users/HP/Downloads/TPM/data ann.csv")
head(data_tpm)
##   besar_pinjaman lama_pembayaran bunga pembayaran_perbulan banyak_cashback
## 1             70               4     1                 130            10.0
## 2            120               3     5                  15             2.0
## 3             70               4     1                 260             9.0
## 4             50               4     0                 140            14.0
## 5            110               2     2                 180             1.5
## 6            110               2     0                 125             1.0
##     rating
## 1 68.40297
## 2 33.98368
## 3 59.42551
## 4 93.70491
## 5 29.50954
## 6 33.17409
str(data_tpm)
## '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_perbulan: int  130 15 260 140 180 125 210 200 210 220 ...
##  $ banyak_cashback    : num  10 2 9 14 1.5 1 2 4 5 0 ...
##  $ rating             : num  68.4 34 59.4 93.7 29.5 ...

Diketahui bahwa terdapat lima peubah penjelas, yaitu besar pinjaman, lama pembayaran, tambahan bunga, pembayaran per-bulan, dan banyaknya cash back yang diterapkan, serta satu peubah respond, yaitu rating. Seluruh peubah diketahui berjenis numerik, baik itu berkategori integer (bilangan bulat) maupun float (bilangan desimal).

summary(data_tpm)
##  besar_pinjaman  lama_pembayaran     bunga       pembayaran_perbulan
##  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_cashback      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

Dari hasil summary data yang dilakukan, dapat kita ketahui bahwa data yang kita gunakan memiliki satuan sebagai berikut :

  1. Besar pinjaman (dalam juta rupiah)
  2. Lama pembayaran (dalam tahun)
  3. Tambahan bunga (dalam persen)
  4. Pembayaran per-bulan (dalam ratus ribu rupiah)
  5. Banyaknya cash back (dalam persen)
  6. Rating (dalam indeks 1-100)

Identifikasi Missing Value

colSums(is.na(data_tpm))
##      besar_pinjaman     lama_pembayaran               bunga pembayaran_perbulan 
##                   0                   0                   0                   0 
##     banyak_cashback              rating 
##                   0                   0

Tidak terdapat missing value (data hilang) pada data yang kita gunakan. Maka analisis data dapat kita lakukan.

Identifikasi Sebaran Peubah

library(Hmisc)
## Loading required package: lattice
## Loading required package: survival
## Loading required package: Formula
## Loading required package: ggplot2
## 
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:base':
## 
##     format.pval, units
hist.data.frame(data_tpm)

Dapat kita ketahui bahwa sebaran semua peubah yang digunakan beragam. Selain itu, satuan dari semua peubah memiliki skala yang sangat berbeda sehingga memungkinkan terjadinya bias dalam memprediksi nilai respond yang akan dilakukan. Oleh karena itu, perlu dilakukan normalisasi skala peubah pada data guna menstandardisasi satuan pada semua peubah.

Pra-Processing Data

Normalisasi Data

Proses normalisasi data yang dilakukan pada software R dapat dilakukan dengan menggunakan fungsi (scale). Normalisasi peubah dilakukan pada seluruh peubah kecuali peubah respond yaitu peubah (rating).

norm_data_tpm <- as.data.frame(scale(data_tpm[,-6]))
norm_data_tpm$rating <- data_tpm$rating
head(norm_data_tpm)
##   besar_pinjaman lama_pembayaran       bunga pembayaran_perbulan
## 1     -1.8723125       1.3135571 -0.01324532          -0.3581621
## 2      0.6624066       0.4097334  3.96035175          -1.7220242
## 3     -1.8723125       1.3135571 -0.01324532           1.1835951
## 4     -2.8862001       1.3135571 -1.00664459          -0.2395653
## 5      0.1554628      -0.4940903  0.98015394           0.2348215
## 6      0.1554628      -0.4940903 -1.00664459          -0.4174604
##   banyak_cashback   rating
## 1      3.24677497 68.40297
## 2     -0.07586699 33.98368
## 3      2.83144472 59.42551
## 4      4.90809594 93.70491
## 5     -0.28353211 29.50954
## 6     -0.49119724 33.17409

Identifikasi Sebaran Peubah Setelah Normalisasi

hist.data.frame(norm_data_tpm)

Setelah proses normalisasi data, dapat kita lihat semua peubah lebih menyebar Normal jika dibandingkan sebelum di normalisasi. Selain itu, semua peubah penjelas sudah memiliki skala satuan yang sama.

Analisis Neural Network (ANN)

Partisi Data Latih dan Uji

library(keras)
library(caret)
## 
## Attaching package: 'caret'
## The following object is masked from 'package:survival':
## 
##     cluster
library(tensorflow)
## 
## Attaching package: 'tensorflow'
## The following object is masked from 'package:caret':
## 
##     train
set.seed(567)
train_index <- createDataPartition(norm_data_tpm$rating, p = 0.7, list = F)
data_train <- data_tpm[train_index,]
data_test <- data_tpm[-train_index,]

Scaling Nilai Minimum dan Maksimum

preprocess_param <- preProcess(data_train[,-6], method = c("range"))
data_trainX2 <- as.matrix(predict(preprocess_param, data_train[,-6]))
data_testX2 <- as.matrix(predict(preprocess_param, data_test[,-6]))

data_trainY2 <- data_train[,6]
data_testY2 <- data_test[,6]

Model Neural Network dengan 2 Hidden Layer

NN_model2 <- keras_model_sequential() %>%
  layer_dense(units = 256, activation = "relu", input_shape = ncol(data_trainX2)) %>%
  layer_dropout(0.3) %>%
  layer_dense(units = 256, activation = "relu") %>%
  layer_dropout(0.3) %>%
  layer_dense(units = 1, activation = "linear")
NN_model2 %>% compile(
  loss = "mean_squared_error",
  optimizer = "adam",
  metrics = list("mean_squared_error", "mean_absolute_error")
)

Proses compile perlu kita lakukan untuk menentukan parameter-parameter evaluasi dalam model Neural Network. Terdapat beberapa opsi parameter yang dapat dipilih dalam library (keras).

print(NN_model2)
## Model: "sequential"
## ________________________________________________________________________________
##  Layer (type)                       Output Shape                    Param #     
## ================================================================================
##  dense_2 (Dense)                    (None, 256)                     1536        
##  dropout_1 (Dropout)                (None, 256)                     0           
##  dense_1 (Dense)                    (None, 256)                     65792       
##  dropout (Dropout)                  (None, 256)                     0           
##  dense (Dense)                      (None, 1)                       257         
## ================================================================================
## Total params: 67,585
## Trainable params: 67,585
## Non-trainable params: 0
## ________________________________________________________________________________
plot_NN <- NN_model2 %>% fit(
  data_trainX2, data_trainY2,
  epochs = 500, batch_size = 64, validation_split = 0.2
)

plot(plot_NN)

Prediksi Model

prediksi_model <- predict(NN_model2, data_testX2)
head(prediksi_model)
##          [,1]
## [1,] 40.38409
## [2,] 92.17080
## [3,] 30.86653
## [4,] 33.10130
## [5,] 55.71132
## [6,] 52.56963

Evaluasi Model

eval_model <- NN_model2 %>% evaluate(data_testX2, data_testY2)
print(eval_model)
##                loss  mean_squared_error mean_absolute_error 
##           18.861685           18.861685            3.408228
hasil_data_train <- postResample(prediksi_model[,1], data_train$rating)
## Warning in pred - obs: longer object length is not a multiple of shorter object
## length

## Warning in pred - obs: longer object length is not a multiple of shorter object
## length
hasil_data_train
##     RMSE Rsquared      MAE 
## 19.25900       NA 16.05263
hasil_data_test <- postResample(prediksi_model[,1], data_test$rating)
hasil_data_test
##      RMSE  Rsquared       MAE 
## 4.3430028 0.9172816 3.4082273

Berdasarkan hasil diatas, dapat kita ketahui bahwa model Neural Network yang diujikan pada data test berhasil memiliki nilai koefisien determinasi (R-squared) sebesar ± 90%.

Kesimpulan

Artificial Neural Networks (ANN) digunakan untuk memprediksi rating skema pinjaman nasabah bank berdasarkan peubah-peubah penjelas yang ada pada suatu perusahaan perbankan. Model Neural Network yang digunakan terdiri atas dua hidden layer, masing-masing terdiri atas 256 neuron, dan satu output layer dengan fungsi aktivasi linear. Model Neural Network ini menghasilkan nilai koefisien determinasi (R-squared) sebesar ± 90,49%. Sehingga dapat dikategorikan sebagai model yang kuat dalam memprediksi peubah respond yang ada.

Daftar Pustaka

Musli Yanto, Sarjo Defit dan Gunadi Widi Nurcahyo (2015), Analisis Jaringan Syaraf Tiruan untuk memprediksi jumlah reservasi kamar hotel dengan mentode Backpropagation, Jurnal KomTekInfo Fakultas Ilmu Komputer, Hal. 34-39