Tugas Individu 1 STA1382 Teknik Pembelajaran Mesin

Pendahuluan

Artificial Neural Network (ANN) atau Jaringan Saraf Tiruan adalah sebuah model komputasi yang terinspirasi dari cara kerja otak manusia dalam memproses informasi. ANN terdiri dari banyak unit pemrosesan (neuron) yang saling terhubung dan mampu belajar dari data masukan yang diberikan. Secara umum, model Neural Network terdiri atas input layer, hidden layer, dan output layer dengan fungsi aktiviasi di dalamnya. Keluaran yang dihasilkan oleh ANN untuk suatu pola masukan tertentu tergantung dari nilai (bobot) hubungan antar neuron dalam ANN tersebut.

Pra-Processing Data

Library

Beerikut beberapa library yang akan dipakai pada tugas ini:

library(tensorflow)
## Warning: package 'tensorflow' was built under R version 4.1.3
library(keras)
## Warning: package 'keras' was built under R version 4.1.3
library(caret)
## Warning: package 'caret' was built under R version 4.1.3
## Loading required package: ggplot2
## Warning: package 'ggplot2' was built under R version 4.1.3
## Loading required package: lattice
## 
## Attaching package: 'caret'
## The following object is masked from 'package:tensorflow':
## 
##     train
library(reticulate)
## Warning: package 'reticulate' was built under R version 4.1.3
library(kableExtra)
## Warning: package 'kableExtra' was built under R version 4.1.3

Input Data

Data yang digunakan merupakan data skema pinjaman suatu perusahaan perbakan dengan beberapa peubah penjelas

setwd("D:/Kuliah/Semester 6/TPM")
tpm.ind <- read.csv("data ann.csv")
head(tpm.ind)
##   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(tpm.ind)
## '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 ...

Berdasarkan tabel di atas menunjukkan bahwa data terdiri dari 75 observasi dengan 6 peubah yaitu besar pinjaman, lama pembayaran, bunga, pembayaran per bulan, banyak cashback dan rating.

Pengecekan Missing Value

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

Berdasarkan output di atas menunjukkan bahwa data tidak terdapat data hilang (missing value) untuk semua peubah sehingga tidak perlu dilakukan penanganan.

Eksplorasi Data

library(Hmisc)
## Warning: package 'Hmisc' was built under R version 4.1.3
## Loading required package: survival
## 
## Attaching package: 'survival'
## The following object is masked from 'package:caret':
## 
##     cluster
## Loading required package: Formula
## 
## Attaching package: 'Hmisc'
## The following objects are masked from 'package:base':
## 
##     format.pval, units
hist.data.frame(tpm.ind)

Berdasarkan eksplorasi di atas menunjukkan bahwa rerata variabeltidak mengikuti distribusi normal.

Analisis Neural Network

Partisi Data Latih dan Uji

Dataset akan dibagi menjadi 70% data latih dan 30% data uji. Selanjutnya akan dilakukan scaling. Metode scaling yang kita gunakan adalah normalize (minmax scaling) dimana setiap peubah hasil scaling akan memiliki nilai pada interval 0 hingga 1.

# Membagi data menjadi data latih dan data uji dengan createDataPartition
set.seed(456)
train.index <- createDataPartition(tpm.ind$rating, p = 0.7, list = FALSE)
train <- tpm.ind[train.index, ]
test <- tpm.ind[-train.index, ]
# Melakukan Feature Scaling min max (0, 1)
preprocessParams <- preProcess(train[, -6], method=c("range"))
train_X <- as.matrix(predict(preprocessParams, train[, -6]))
test_X <- as.matrix(predict(preprocessParams, test[, -6]))
train_y <- train[, 6]
test_y <- test[, 6]

Pemodelan 1 Neural Network dengan 2 Hidden Layer

Setelah peubah distandarisasi, selanjutnya pembangunan model Neural Network. Pada pemodelan ini akan dibangun model dengan 2 hidden layer dengan setiap lapisan memiliki masing-masing 256 neuron. Fungsi Reactified Linier Unit (ReLU) digunakan pada hidden layer ini.

#Membuat model neural network dengan 2 hidden layer
model <- keras_model_sequential() %>%
 layer_dense(units = 256, activation = "relu", input_shape = ncol(train_X)) %>%
 layer_dropout(0.2) %>%
 layer_dense(units = 256, activation = "relu") %>%
 layer_dropout(0.2) %>%
 layer_dense(units = 1, activation = "linear")
# Mengkompilasi model
model %>% compile(
 loss = "mean_squared_error",
 optimizer = "adam",
 metrics = list("mean_squared_error", "mean_absolute_error", "mape")
)
# Melakukan tahapan pelatihan model
history <- model %>% fit(
 train_X, train_y,
 shuffle = T,
 epochs = 500,
 batch_size = 64,
 validation_split = 0.2
)
print(model)
## 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
## ________________________________________________________________________________

Pemodelan 2 Neural Network dengan 2 Hidden Layer

Pada pemodelan ini akan dibangun model dengan 2 hidden layer dengan setiap lapisan memiliki masing-masing 512 neuron. Fungsi Reactified Linier Unit (ReLU) digunakan pada hidden layer ini.

#Membuat model neural network dengan 2 hidden layer
model2 <- keras_model_sequential() %>%
 layer_dense(units = 512, activation = "relu", input_shape = ncol(train_X)) %>%
 layer_dropout(0.2) %>%
 layer_dense(units = 512, activation = "relu") %>%
 layer_dropout(0.2) %>%
 layer_dense(units = 1, activation = "linear")
# Mengkompilasi model
model2 %>% compile(
 loss = "mean_squared_error",
 optimizer = "adam",
 metrics = list("mean_squared_error", "mean_absolute_error", "mape")
)
# Melakukan tahapan pelatihan model
history2 <- model2 %>% fit(
 train_X, train_y,
 shuffle = T,
 epochs = 500,
 batch_size = 64,
 validation_split = 0.2
)
print(model2)
## Model: "sequential_1"
## ________________________________________________________________________________
##  Layer (type)                       Output Shape                    Param #     
## ================================================================================
##  dense_5 (Dense)                    (None, 512)                     3072        
##  dropout_3 (Dropout)                (None, 512)                     0           
##  dense_4 (Dense)                    (None, 512)                     262656      
##  dropout_2 (Dropout)                (None, 512)                     0           
##  dense_3 (Dense)                    (None, 1)                       513         
## ================================================================================
## Total params: 266,241
## Trainable params: 266,241
## Non-trainable params: 0
## ________________________________________________________________________________

Pemodelan 3 Neural Network dengan 3 Hidden Layer

Pada pemodelan ini akan dibangun model dengan 3 hidden layer dengan setiap lapisan memiliki masing-masing 512 neuron. Fungsi Reactified Linier Unit (ReLU) digunakan pada hidden layer ini.

#Membuat model neural network dengan 2 hidden layer
model3 <- keras_model_sequential() %>%
 layer_dense(units = 480, activation = "relu", input_shape = ncol(train_X)) %>%
 layer_dropout(0.2) %>%
 layer_dense(units = 256, activation = "relu") %>%
 layer_dropout(0.2) %>%
 layer_dense(units = 256, activation = "relu") %>%
 layer_dropout(0.2) %>%
 layer_dense(units = 1, activation = "linear")
# Mengkompilasi model
model3 %>% compile(
 loss = "mean_squared_error",
 optimizer = "adam",
 metrics = list("mean_squared_error", "mean_absolute_error", "mape")
)
# Melakukan tahapan pelatihan model
history3<- model3 %>% fit(
 train_X, train_y,
 shuffle = T,
 epochs = 100,
 batch_size = 64,
 validation_split = 0.2
)
print(model3)
## Model: "sequential_2"
## ________________________________________________________________________________
##  Layer (type)                       Output Shape                    Param #     
## ================================================================================
##  dense_9 (Dense)                    (None, 480)                     2880        
##  dropout_6 (Dropout)                (None, 480)                     0           
##  dense_8 (Dense)                    (None, 256)                     123136      
##  dropout_5 (Dropout)                (None, 256)                     0           
##  dense_7 (Dense)                    (None, 256)                     65792       
##  dropout_4 (Dropout)                (None, 256)                     0           
##  dense_6 (Dense)                    (None, 1)                       257         
## ================================================================================
## Total params: 192,065
## Trainable params: 192,065
## Non-trainable params: 0
## ________________________________________________________________________________

Plot

Menampilkan plot pembelajaran model

plot(history)

plot(history2)

plot(history3)

Prediksi Model

Setelah menentukan nilai parameter model Neural Network, prediksi berdasarkan nilai-nilai peubah penjelas dilakukan dengan menggunakan fungsi predict.

Model 1

prediksi <- predict(model, test_X)
head(prediksi)
##          [,1]
## [1,] 28.19377
## [2,] 31.48336
## [3,] 21.42753
## [4,] 25.80278
## [5,] 37.50218
## [6,] 40.85134

Model 2

prediksi2 <- predict(model2, test_X)
head(prediksi2)
##          [,1]
## [1,] 29.97589
## [2,] 31.44557
## [3,] 21.35119
## [4,] 26.27860
## [5,] 39.18937
## [6,] 42.27768

Model 3

prediksi3 <- predict(model3, test_X)
head(prediksi3)
##          [,1]
## [1,] 29.06664
## [2,] 36.71603
## [3,] 24.29812
## [4,] 25.19027
## [5,] 38.34908
## [6,] 35.85424

Evaluasi Model

Evaluasi model dilakukan pada uji berdasarkan model Neural Network yang telah diperoleh pada data latih. Evaluasi model ini menggunakan fungsi evaluate.

Model 1

scores <- model %>% evaluate(test_X, test_y)
print(scores)
##                loss  mean_squared_error mean_absolute_error                mape 
##           35.988503           35.988503            4.830355           11.835647
keras_train <- model %>% predict(train_X)
keras_test <- model %>% predict(test_X)
train.hasil <- postResample(keras_train[,1], train$rating)
test.hasil <- postResample(keras_test[,1], test$rating)
data.frame(cbind(train.hasil,test.hasil))
##          train.hasil test.hasil
## RMSE        5.340177  5.9990411
## Rsquared    0.859803  0.8484312
## MAE         4.472322  4.8303534

Berdasarkan keluaran di atas, dapat diketahui bahwa model Neural Network yang diujikan pada data uji berhasil memiliki nilai koefisien determinasi (R-squared) sebesar 85,42%.

Model 2

scores2 <- model2 %>% evaluate(test_X, test_y)
print(scores2)
##                loss  mean_squared_error mean_absolute_error                mape 
##           30.343679           30.343679            4.142885           10.597912
keras_train2 <- model2 %>% predict(train_X)
keras_test2 <- model2 %>% predict(test_X)
train.hasil2 <- postResample(keras_train2[,1], train$rating)
test.hasil2 <- postResample(keras_test2[,1], test$rating)
data.frame(cbind(train.hasil2,test.hasil2))
##          train.hasil2 test.hasil2
## RMSE        5.0001194   5.5085095
## Rsquared    0.8764092   0.8479256
## MAE         4.1623029   4.1428844

Berdasarkan keluaran di atas, dapat diketahui bahwa model Neural Network yang diujikan pada data uji berhasil memiliki nilai koefisien determinasi (R-squared) sebesar 85,06.

Model 3

scores3 <- model3 %>% evaluate(test_X, test_y)
print(scores3)
##                loss  mean_squared_error mean_absolute_error                mape 
##          175.337860          175.337860            8.682707           18.219975
keras_train3 <- model3 %>% predict(train_X)
keras_test3 <- model3 %>% predict(test_X)
train.hasil3 <- postResample(keras_train3[,1], train$rating)
test.hasil3 <- postResample(keras_test3[,1], test$rating)
data.frame(cbind(train.hasil3,test.hasil3))
##          train.hasil3 test.hasil3
## RMSE        9.0798536  13.2415205
## Rsquared    0.6081252   0.2674645
## MAE         7.0570441   8.6827068

Berdasarkan keluaran di atas, dapat diketahui bahwa model Neural Network yang diujikan pada data uji berhasil memiliki nilai koefisien determinasi (R-squared) sebesar 30,15%

Perbandingan RMSE

RMSE adalah metode untuk mengevaluasiteknik peramalan yang digunakan untuk mengukur tingkat akurasi hasil prakiraan suatu model.

rmse <- data.frame(train.hasil, test.hasil, train.hasil2, test.hasil2, train.hasil3, test.hasil3)
t(rmse)
##                   RMSE  Rsquared      MAE
## train.hasil   5.340177 0.8598030 4.472322
## test.hasil    5.999041 0.8484312 4.830353
## train.hasil2  5.000119 0.8764092 4.162303
## test.hasil2   5.508509 0.8479256 4.142884
## train.hasil3  9.079854 0.6081252 7.057044
## test.hasil3  13.241520 0.2674645 8.682707

Diperoleh model terbaik adalah model 2, yaitu model Neural Network dua hidden layer yang terdiri dari 256 neuron.

Kesimpulan

Algoritma Neural Network digunakan untuk memprediksi rating skema pinjaman nasabah berdasarkan peubah-peubah penjelas pada suatu perusahaan perbankan. Model Neural Network yang digunakan terdiri atas dua hidden layer dengan masing-masing terdiri atas 256 neuron. Model Neural Network menghasilkan nilai koefisien determinasi sebesar 85,42% sehingga dapat dikategorikan sebagai model yang kuat dalam memprediksi peubah respon.