Tulisan ini adalah langkah langkah dalam melakukan prediksi banjir di Jakarta Timur, prediksi ini akan di jadikan karya ilmiah yang merupakan syarat kelulusan mahasiswa di Universitas Terbuka. Anggaplah kita merupakan data analyst, sebagai data analist prosedur dalam melakukan prediksi adalah :

  1. Pengumpulan data

  2. Data cleaning

  3. Explorasi data

  4. Modeling

  5. Kesimpulan

PREDIKSI BANJIR DENGAN MENGGUNAKAN ANN

PACKAGE

Dalam pengerjaan ini package yang di gunakan adalah :

library(neuralnet)
library(knitr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following object is masked from 'package:neuralnet':
## 
##     compute
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
library(neuralnet)
library(iml)
library(rpart)
library(readr)
library(magrittr)
library(tibble)
library(skimr)
library(rpart.plot)
library(randomForest)
## randomForest 4.7-1.1
## Type rfNews() to see new features/changes/bug fixes.
## 
## Attaching package: 'randomForest'
## The following object is masked from 'package:ggplot2':
## 
##     margin
## The following object is masked from 'package:dplyr':
## 
##     combine
library(caret)
## Loading required package: lattice
library(e1071)
library(DALEX)
## Welcome to DALEX (version: 2.4.3).
## Find examples and detailed introduction at: http://ema.drwhy.ai/
## Additional features will be available after installation of: ggpubr.
## Use 'install_dependencies()' to get all suggested dependencies
## 
## Attaching package: 'DALEX'
## The following object is masked from 'package:dplyr':
## 
##     explain

PERSIAPAN DATA

Data yang digunakn dalam Karya Ilmiah ini bersumber dari riwayat banjir di Jakarta timur dapat di aksess dengan cara klik di sini , dan data tinggi muka air (TMA) dan Curah hujan di ambil dari DSDA DKI jakarta dapat di akses dengan cara klik di sini.

Karil <- read.csv("D:/KULIAH/KARIL NOV/Data_set_jakarta_timur.csv", header = T, sep = ",")
head(Karil, 5)
##   Kejadian      KELURAHAN LUAS.WILAYAH KETINGGIAN.WILAYAH RAIN_D.1 RAINFALL_D.1
## 1   BANJIR KAMPUNG_MELAYU         0.48                 10       NO            0
## 2   BANJIR    BIDARA_CINA         1.26                 19       NO            0
## 3   BANJIR    BALEKAMBANG         1.67                 34       NO            0
## 4   BANJIR         CAWANG         1.79                 21       NO            0
## 5   BANJIR KAMPUNG_TENGAH         2.03                 28       NO            0
##   RAIN_LAST3D RAINFALL_LAST3D RAIN_LAST7D RAINFALL_LAST7D TYPE.HUJAN.D1
## 1          NO               0          NO               0         TIDAK
## 2          NO               0          NO               0         TIDAK
## 3          NO               0          NO               0         TIDAK
## 4          NO               0          NO               0         TIDAK
## 5          NO               0          NO              83         TIDAK
##   CIPINANG.HULU SUNTER.HULU PULO.GADUNG
## 1           160         250         450
## 2           160         250         450
## 3           160         250         450
## 4           160         250         450
## 5            90         140         330

DATA CLEANING

Data cleaning ini di lkukan membersihkan data dari Missing value, data Duplicate, data beroutlier, Unbalancing data dan beberapa pembersihan data lainnya agar data siap di lakukan eksplorasi dan model.

Missing Value

anyNA(Karil)
## [1] FALSE

Teriihat bahwa data aman dari gangguan missing value.

Data Duplicate

untuk data Duplicate sendiri tidak akan kita lakukan penghapusan data, sebap data tersebut sudah di filter berdasarkan data dari BNPB sendiri.

Data Outlier

Outlier pun tidak akan di eksekusi, sebap banjir terjadi di karenakan data yang outlier. contoh dalam hal ini adalah ketinggian muka air. jika terjadi banjir maka kemungkinan besar terjadi kemunculan data yang tidak wajar.

Edit Data Type

str(Karil)
## 'data.frame':    1015 obs. of  14 variables:
##  $ Kejadian          : chr  "BANJIR" "BANJIR" "BANJIR" "BANJIR" ...
##  $ KELURAHAN         : chr  "KAMPUNG_MELAYU" "BIDARA_CINA" "BALEKAMBANG" "CAWANG" ...
##  $ LUAS.WILAYAH      : num  0.48 1.26 1.67 1.79 2.03 1.98 1.67 1.8 1.79 2.09 ...
##  $ KETINGGIAN.WILAYAH: int  10 19 34 21 28 39 34 26 21 34 ...
##  $ RAIN_D.1          : chr  "NO" "NO" "NO" "NO" ...
##  $ RAINFALL_D.1      : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ RAIN_LAST3D       : chr  "NO" "NO" "NO" "NO" ...
##  $ RAINFALL_LAST3D   : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ RAIN_LAST7D       : chr  "NO" "NO" "NO" "NO" ...
##  $ RAINFALL_LAST7D   : num  0 0 0 0 83 83 83 83 83 83 ...
##  $ TYPE.HUJAN.D1     : chr  "TIDAK" "TIDAK" "TIDAK" "TIDAK" ...
##  $ CIPINANG.HULU     : int  160 160 160 160 90 90 90 90 90 90 ...
##  $ SUNTER.HULU       : int  250 250 250 250 140 140 140 140 140 140 ...
##  $ PULO.GADUNG       : int  450 450 450 450 330 330 330 330 330 330 ...

data di atas masih banyak yang bertype chr / karakter, sementara itu dalam melakukan modeling data harus bertype Numerik atau Integer dan Factor. sehingga harus di rubah terlebih dahulu.

Karil$KELURAHAN <- as.factor(Karil$KELURAHAN)
Karil$Kejadian <- ifelse(Karil$Kejadian == "BANJIR", 1, 0)
Karil$RAIN_D.1 <- ifelse(Karil$RAIN_D.1 == "YES", 1, 0)
Karil$RAIN_LAST3D <- ifelse(Karil$RAIN_LAST3D == "YES", 1, 0)
Karil$RAIN_LAST7D <- ifelse(Karil$RAIN_LAST7D == "YES", 1, 0)
Karil$TYPE.HUJAN.D1 <- as.factor(Karil$TYPE.HUJAN.D1)
glimpse(Karil)
## Rows: 1,015
## Columns: 14
## $ Kejadian           <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ KELURAHAN          <fct> KAMPUNG_MELAYU, BIDARA_CINA, BALEKAMBANG, CAWANG, K…
## $ LUAS.WILAYAH       <dbl> 0.48, 1.26, 1.67, 1.79, 2.03, 1.98, 1.67, 1.80, 1.7…
## $ KETINGGIAN.WILAYAH <int> 10, 19, 34, 21, 28, 39, 34, 26, 21, 34, 26, 26, 21,…
## $ RAIN_D.1           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, …
## $ RAINFALL_D.1       <dbl> 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0…
## $ RAIN_LAST3D        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ RAINFALL_LAST3D    <dbl> 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0…
## $ RAIN_LAST7D        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
## $ RAINFALL_LAST7D    <dbl> 0, 0, 0, 0, 83, 83, 83, 83, 83, 83, 0, 2, 2, 2, 2, …
## $ TYPE.HUJAN.D1      <fct> TIDAK, TIDAK, TIDAK, TIDAK, TIDAK, TIDAK, TIDAK, TI…
## $ CIPINANG.HULU      <int> 160, 160, 160, 160, 90, 90, 90, 90, 90, 90, 80, 75,…
## $ SUNTER.HULU        <int> 250, 250, 250, 250, 140, 140, 140, 140, 140, 140, 9…
## $ PULO.GADUNG        <int> 450, 450, 450, 450, 330, 330, 330, 330, 330, 330, 3…

dari hsil Glimpse di atas data sudah memiliki type yang benar.

Unbalencing Data

Ada baiknya perlu mengetahui berapa banyak kejadian terjadi banjir (1) dan tidak (0), karena variabel ini merupakan variabel yang akan kita gunakan dalam pemodelan sebagai variabel target.

table(Karil$Kejadian)
## 
##   0   1 
## 790 225
prop.table(table(Karil$Kejadian))
## 
##         0         1 
## 0.7783251 0.2216749

Terlihat data banjir dan tidak banjir tidak seimbang, yaitu 78% data tidak banjir dan sisanya banjir. Kumpulan datanya sangat tidak seimbang. Hal ini menimbulkan masalah yang sulit dalam melatih pohon keputusan (tepatnya dalam model berbasis pembelajaran mesin).

tree <- rpart(Kejadian ~ ., data = Karil, method = "class")
tree
## n= 1015 
## 
## node), split, n, loss, yval, (yprob)
##       * denotes terminal node
## 
##  1) root 1015 225 0 (0.77832512 0.22167488)  
##    2) RAIN_LAST3D< 0.5 891 101 0 (0.88664422 0.11335578)  
##      4) CIPINANG.HULU< 115 812  51 0 (0.93719212 0.06280788)  
##        8) SUNTER.HULU< 132.5 805  44 0 (0.94534161 0.05465839) *
##        9) SUNTER.HULU>=132.5 7   0 1 (0.00000000 1.00000000) *
##      5) CIPINANG.HULU>=115 79  29 1 (0.36708861 0.63291139)  
##       10) RAINFALL_LAST7D< 53 33   4 0 (0.87878788 0.12121212) *
##       11) RAINFALL_LAST7D>=53 46   0 1 (0.00000000 1.00000000) *
##    3) RAIN_LAST3D>=0.5 124   0 1 (0.00000000 1.00000000) *

Dengan menggunakan pohon keputusan data di atas. Pohon tersebut hanya memprediksi Kejadian = “Tidak banjir” untuk setiap observasi dalam kumpulan data.

Kami menggunakan teknik downsampling acak untuk mengurangi dampak buruk dari kumpulan data yang tidak seimbang.

set.seed(123)
data_banjir <- Karil %>% filter(Kejadian == 1)
data_tidak_banjir <- Karil %>% filter(Kejadian == 0) %>% sample_n(nrow(data_banjir))
balanced_data <- bind_rows(data_banjir, data_tidak_banjir)
prop.table(table(balanced_data$Kejadian))
## 
##   0   1 
## 0.5 0.5

Matrix dai atas terlihat data sudah seimbang. untuk mengekspor data tersebut bisa di lakukan dengan menggunakan sintax berikut.

Cleaning Tambahan

Pada Cleaning tambahan ini adalah untuk menghilangkan kolom Kelurahan, karena pada variable tersebut sudah diwakili dengan luas dan ketinggian daerah tersebut.

Final_data_set <- select(balanced_data, - KELURAHAN)
str(Final_data_set)
## 'data.frame':    450 obs. of  13 variables:
##  $ Kejadian          : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ LUAS.WILAYAH      : num  0.48 1.26 1.67 1.79 2.03 1.98 1.67 1.8 1.79 2.09 ...
##  $ KETINGGIAN.WILAYAH: int  10 19 34 21 28 39 34 26 21 34 ...
##  $ RAIN_D.1          : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ RAINFALL_D.1      : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ RAIN_LAST3D       : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ RAINFALL_LAST3D   : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ RAIN_LAST7D       : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ RAINFALL_LAST7D   : num  0 0 0 0 83 83 83 83 83 83 ...
##  $ TYPE.HUJAN.D1     : Factor w/ 4 levels "LEBAT","RINGAN",..: 4 4 4 4 4 4 4 4 4 4 ...
##  $ CIPINANG.HULU     : int  160 160 160 160 90 90 90 90 90 90 ...
##  $ SUNTER.HULU       : int  250 250 250 250 140 140 140 140 140 140 ...
##  $ PULO.GADUNG       : int  450 450 450 450 330 330 330 330 330 330 ...

Dalam modeling selanjutnya data yang di gunakan adalah data dengan nama Final_data_set bukan lagi balanced_data dan Karil. Di karenakan data telah di lakukan cleaning sehingga pemodelan bisa maksimal.

Selanjutnya data akan di simpan.

write.csv(Final_data_set, file = "dataformodel.csv", row.names = FALSE)

DATA EXPLORATION

Sebagai data analys eksplorasi data sangat wajib hukumnya untuk di lakukan. dengan melakukan eksplorasi kita bisa menjelaskan dan lebih paham tentang data. Explorasi sendiri bukan hanya tentang berapa rata-rata nilainya plotnya seperti apa. Namun tentang mengenal lebih dekat dengan data.

NOTE bagian ini di skipp karena tidak bisa di upload dalam R Markdown

MODELING

Pada model yang di gunakan adalah model ANN, Artificial Neural Network (ANN) adalah merupakan sebuah model yang terinspirasi oleh sistem saraf otak manusia dalam melakukan klasifikasi data. Salah satu implementasi ANN yang banyak digunakan adalah untuk memprediksi. Project ini melakukan prediksi kelurahan di daerah jakarta timur apakah masuk dalam kategori banjir atau tidak dengan menggunakan beberapa input data.

Data Dummy

Data_dummy <- Data_dummy <- model.matrix(~. -1 , data = Final_data_set)
head(Data_dummy, 2)
##   Kejadian LUAS.WILAYAH KETINGGIAN.WILAYAH RAIN_D.1 RAINFALL_D.1 RAIN_LAST3D
## 1        1         0.48                 10        0            0           0
## 2        1         1.26                 19        0            0           0
##   RAINFALL_LAST3D RAIN_LAST7D RAINFALL_LAST7D TYPE.HUJAN.D1LEBAT
## 1               0           0               0                  0
## 2               0           0               0                  0
##   TYPE.HUJAN.D1RINGAN TYPE.HUJAN.D1SEDANG TYPE.HUJAN.D1TIDAK CIPINANG.HULU
## 1                   0                   0                  1           160
## 2                   0                   0                  1           160
##   SUNTER.HULU PULO.GADUNG
## 1         250         450
## 2         250         450

Data Scale

Scaling data adalah proses mengubah rentang nilai dari variabel-variabel dalam suatu dataset sehingga variabel-variabel tersebut memiliki skala yang seragam. Tujuan dari scaling data melibatkan beberapa pertimbangan yang dapat meningkatkan kinerja atau interpretasi model statistik.

Data_scale <- as.data.frame(scale(Data_dummy, center = T, scale = T))

Partisi Data

Partisi data sering digunakan untuk membagi dataset menjadi dua bagian utama: satu bagian untuk melatih model (training set) dan yang lainnya untuk menguji model (testing set). Tujuan utamanya adalah mengukur kinerja model pada data yang tidak pernah dilihat selama pelatihan untuk menghindari overfitting (penyesuaian berlebihan).

set.seed(123)
train.index <- createDataPartition(Data_scale$Kejadian, p = 0.7, list = F)
data_train <- Data_scale [train.index, ]
data_test <- Data_scale [-train.index, ]
head(data_train, 5)
##    Kejadian LUAS.WILAYAH KETINGGIAN.WILAYAH   RAIN_D.1 RAINFALL_D.1 RAIN_LAST3D
## 2 0.9988883   -0.6540692        -0.09412324 -0.9554373   -0.5715915  -0.6160542
## 4 0.9988883   -0.3929321         0.08421553 -0.9554373   -0.5715915  -0.6160542
## 7 0.9988883   -0.4520575         1.24341754 -0.9554373   -0.5715915  -0.6160542
## 8 0.9988883   -0.3880049         0.53006246 -0.9554373   -0.5715915  -0.6160542
## 9 0.9988883   -0.3929321         0.08421553 -0.9554373   -0.5715915  -0.6160542
##   RAINFALL_LAST3D RAIN_LAST7D RAINFALL_LAST7D TYPE.HUJAN.D1LEBAT
## 2      -0.8235459  -0.2717007      -1.1244533         -0.2763782
## 4      -0.8235459  -0.2717007      -1.1244533         -0.2763782
## 7      -0.8235459  -0.2717007       0.2187282         -0.2763782
## 8      -0.8235459  -0.2717007       0.2187282         -0.2763782
## 9      -0.8235459  -0.2717007       0.2187282         -0.2763782
##   TYPE.HUJAN.D1RINGAN TYPE.HUJAN.D1SEDANG TYPE.HUJAN.D1TIDAK CIPINANG.HULU
## 2          -0.6160542          -0.3610581          0.9260638      1.826171
## 4          -0.6160542          -0.3610581          0.9260638      1.826171
## 7          -0.6160542          -0.3610581          0.9260638     -0.671089
## 8          -0.6160542          -0.3610581          0.9260638     -0.671089
## 9          -0.6160542          -0.3610581          0.9260638     -0.671089
##   SUNTER.HULU PULO.GADUNG
## 2   2.0293696   0.1815880
## 4   2.0293696   0.1815880
## 7   0.3156966  -0.6559378
## 8   0.3156966  -0.6559378
## 9   0.3156966  -0.6559378

ANN Model

Selain terdapat di dalam paket keras dan tensorflow, komunitas R juga mengembangkan model jaringan syaraf tiruan (ANN) pada paket neuralnet. Jika ingin membaca lebih dalam terkait neuralnet bisa di lihat di sini atau dengan Running sintax berikut ?neuralnet pada console R.

str(data_train)
## 'data.frame':    316 obs. of  16 variables:
##  $ Kejadian           : num  0.999 0.999 0.999 0.999 0.999 ...
##  $ LUAS.WILAYAH       : num  -0.654 -0.393 -0.452 -0.388 -0.393 ...
##  $ KETINGGIAN.WILAYAH : num  -0.0941 0.0842 1.2434 0.5301 0.0842 ...
##  $ RAIN_D.1           : num  -0.955 -0.955 -0.955 -0.955 -0.955 ...
##  $ RAINFALL_D.1       : num  -0.572 -0.572 -0.572 -0.572 -0.572 ...
##  $ RAIN_LAST3D        : num  -0.616 -0.616 -0.616 -0.616 -0.616 ...
##  $ RAINFALL_LAST3D    : num  -0.824 -0.824 -0.824 -0.824 -0.824 ...
##  $ RAIN_LAST7D        : num  -0.272 -0.272 -0.272 -0.272 -0.272 ...
##  $ RAINFALL_LAST7D    : num  -1.124 -1.124 0.219 0.219 0.219 ...
##  $ TYPE.HUJAN.D1LEBAT : num  -0.276 -0.276 -0.276 -0.276 -0.276 ...
##  $ TYPE.HUJAN.D1RINGAN: num  -0.616 -0.616 -0.616 -0.616 -0.616 ...
##  $ TYPE.HUJAN.D1SEDANG: num  -0.361 -0.361 -0.361 -0.361 -0.361 ...
##  $ TYPE.HUJAN.D1TIDAK : num  0.926 0.926 0.926 0.926 0.926 ...
##  $ CIPINANG.HULU      : num  1.826 1.826 -0.671 -0.671 -0.671 ...
##  $ SUNTER.HULU        : num  2.029 2.029 0.316 0.316 0.316 ...
##  $ PULO.GADUNG        : num  0.182 0.182 -0.656 -0.656 -0.656 ...
set.seed(2)
tesss <- neuralnet(Kejadian ~ LUAS.WILAYAH + KETINGGIAN.WILAYAH + RAIN_D.1 + RAINFALL_D.1 + RAIN_LAST3D + RAINFALL_LAST3D + RAIN_LAST7D + RAINFALL_LAST7D + CIPINANG.HULU + SUNTER.HULU + PULO.GADUNG, 
                   data_train, 
                   hidden = 2,  
                   linear.output = T)
plot(tesss)

Detail Model

CONFUSION MATRIKS DENGAN DATA SET

temp_train <- subset(data_train, select = c("Kejadian", "LUAS.WILAYAH", "KETINGGIAN.WILAYAH","RAIN_D.1", "RAINFALL_D.1", "RAIN_LAST3D", "RAINFALL_LAST3D", "RAIN_LAST7D", "RAINFALL_LAST7D", "CIPINANG.HULU", "SUNTER.HULU", "PULO.GADUNG"))
Nnresult_train <- neuralnet::compute(tesss, temp_train)
result_train <- data.frame(actual = data_train$Kejadian, prediction = Nnresult_train$net.result)
rounded_result_train <- sapply(result_train, FUN = round, digits = 0)
rounded_result_sdf_train <- data.frame(rounded_result_train)
cm_train <- table(rounded_result_sdf_train$actual, rounded_result_sdf_train$prediction)
cm_train
##     
##       -1   1
##   -1 151   7
##   1   20 138

Akurasi Model

akurasi_train <- (sum(diag(cm_train)))/sum(cm_train)
akurasi_train
## [1] 0.914557

Memprediksi dengan data Test

nnprediction <- neuralnet::compute(tesss, data_test)
results <- data.frame("Aktual" = data_test, "Prediksi" = nnprediction) 

CONFUSION MATRIKS DENGAN DATA SET

temp_test <- subset(data_test, select = c("Kejadian", "LUAS.WILAYAH", "KETINGGIAN.WILAYAH","RAIN_D.1", "RAINFALL_D.1", "RAIN_LAST3D", "RAINFALL_LAST3D", "RAIN_LAST7D", "RAINFALL_LAST7D", "CIPINANG.HULU", "SUNTER.HULU", "PULO.GADUNG"))
nnresults <- neuralnet::compute(tesss, temp_test)
results_test <- data.frame(actual = data_test$Kejadian, prediction = nnresults$net.result)
rounded_result <- sapply(results_test, FUN = round, digits = 0)
rounded_sdf_result0 <- data.frame(rounded_result)
cm <- table(rounded_sdf_result0$actual, rounded_sdf_result0$prediction)
cm
##     
##      -1  1
##   -1 60  7
##   1   5 62

Akurasi data set

akurasi_test <- (sum(diag(cm)))/sum(cm)
akurasi_test
## [1] 0.9104478

MSE MOdel

pred_nn <- nnprediction$net.result * (max(Final_data_set$Kejadian)-min(Final_data_set$Kejadian)) + min(Final_data_set$Kejadian)
test.r <- (data_test$Kejadian) * (max(Final_data_set$Kejadian) - min(Final_data_set$Kejadian)) + min(Final_data_set$Kejadian)
MSE_NN <- sum((test.r - pred_nn)^2) / nrow(data_test)
cat("Nilai MSE adalah", MSE_NN)
## Nilai MSE adalah 0.2765508

ROOT MEAN SQUARE

RMSE_NN <- (sum(data_test$Kejadian - pred_nn)^2) / nrow(data_test)^0.5
RMSE_NN
## [1] 17.83911

Visualisasi Nilai Prediksi dan nilai Aktual

plot(results_test, col = c("blue", "red"))
legend("topleft", legend = c("Nilai_aktual", "Nilai_pred_ANN"),fill = c("blue", "red"), bty = "n", cex = 0.8, title = "Keterangan")

Pengujian dengan data real

library(openxlsx)
Prediksi_data_real <- read.xlsx("D:/KULIAH/KARIL NOV/data_you_wanna_predict.xlsx", sheet = 1)
head(Prediksi_data_real)
##   LUAS.WILAYAH KETINGGIAN.WILAYAH RAIN_D.1 RAINFALL_D.1 RAIN_LAST3D
## 1         0.57                 14        0            0           0
## 2         4.99                 12        0            0           0
##   RAINFALL_LAST3D RAIN_LAST7D RAINFALL_LAST7D CIPINANG.HULU SUNTER.HULU
## 1               0           0              22            90         100
## 2              25           0              37            90         105
##   PULO.GADUNG
## 1         330
## 2         330
prediksi <- predict(tesss, newdata = Prediksi_data_real)
prediksi
##        [,1]
## 1 0.9974147
## 2 0.9974147

Dari hasil uji coba data di atas, menunjukan bahwa jika dengan data yang di berikan adalah seperti data tersebut maka hasil prediksinya akan terjadibanjir.

CONCLUSION

Kesimpulan, pada hasil tahap ini adalah Kesimpulan dari hasil modeling di atas.

Feature Importance

x <- data_test[which(names(data_test)!= "Kejadian")]
predictor1 <- Predictor$new(tesss, data = x, y = data_test$Kejadian)
imp <- FeatureImp$new(predictor1, loss = "mae")
plot(imp, cex = 0.8)

imp$results
##                feature importance.05 importance importance.95 permutation.error
## 1          SUNTER.HULU     1.8170894  2.0643536      2.094721         0.6038744
## 2          RAIN_LAST3D     2.0071061  2.0543180      2.139041         0.6009387
## 3      RAINFALL_LAST7D     1.7710557  2.0095582      2.130629         0.5878454
## 4      RAINFALL_LAST3D     1.5655454  1.6417797      1.679162         0.4802611
## 5             RAIN_D.1     1.2916718  1.4059669      1.456868         0.4112800
## 6         RAINFALL_D.1     1.2290414  1.3825069      1.414122         0.4044174
## 7          RAIN_LAST7D     1.0690306  1.1268315      1.142415         0.3296261
## 8          PULO.GADUNG     1.1024900  1.1227837      1.181805         0.3284420
## 9   KETINGGIAN.WILAYAH     1.0170425  1.0379161      1.044608         0.3036161
## 10       CIPINANG.HULU     0.9987217  1.0288771      1.075749         0.3009720
## 11  TYPE.HUJAN.D1LEBAT     1.0000000  1.0000000      1.000000         0.2925247
## 12 TYPE.HUJAN.D1RINGAN     1.0000000  1.0000000      1.000000         0.2925247
## 13 TYPE.HUJAN.D1SEDANG     1.0000000  1.0000000      1.000000         0.2925247
## 14  TYPE.HUJAN.D1TIDAK     1.0000000  1.0000000      1.000000         0.2925247
## 15        LUAS.WILAYAH     0.9866562  0.9955863      1.021898         0.2912336
shapley1 <- Shapley$new(predictor1, x.interest = x[1, ])
shapley1$plot()

shapley1$results
##                feature         phi     phi.var
## 1         LUAS.WILAYAH  0.06701016 0.014533401
## 2   KETINGGIAN.WILAYAH -0.01790492 0.003079771
## 3             RAIN_D.1 -0.07864674 0.174611014
## 4         RAINFALL_D.1 -0.04020926 0.048626837
## 5          RAIN_LAST3D -0.14988297 0.184654323
## 6      RAINFALL_LAST3D  0.26895663 0.410485524
## 7          RAIN_LAST7D  0.00000000 0.000000000
## 8      RAINFALL_LAST7D -0.11043543 0.287908572
## 9   TYPE.HUJAN.D1LEBAT  0.00000000 0.000000000
## 10 TYPE.HUJAN.D1RINGAN  0.00000000 0.000000000
## 11 TYPE.HUJAN.D1SEDANG  0.00000000 0.000000000
## 12  TYPE.HUJAN.D1TIDAK  0.00000000 0.000000000
## 13       CIPINANG.HULU -0.28355430 0.089844855
## 14         SUNTER.HULU  1.19918493 0.686226515
## 15         PULO.GADUNG  0.07122705 0.033963527
##                             feature.value
## 1          LUAS.WILAYAH=-1.03838431391629
## 2   KETINGGIAN.WILAYAH=-0.896647706219635
## 3             RAIN_D.1=-0.955437344934016
## 4         RAINFALL_D.1=-0.571591463895623
## 5          RAIN_LAST3D=-0.616054247383422
## 6      RAINFALL_LAST3D=-0.823545912124891
## 7           RAIN_LAST7D=-0.27170069482481
## 8        RAINFALL_LAST7D=-1.1244532724671
## 9   TYPE.HUJAN.D1LEBAT=-0.276378185912093
## 10 TYPE.HUJAN.D1RINGAN=-0.616054247383422
## 11   TYPE.HUJAN.D1SEDANG=-0.3610580642221
## 12   TYPE.HUJAN.D1TIDAK=0.926063779147348
## 13         CIPINANG.HULU=1.82617078152527
## 14           SUNTER.HULU=2.02936955252353
## 15          PULO.GADUNG=0.181587993790987