Dalam berinvestasi, ada hal penting yang perlu diperhatikan, yaitu risiko. Risiko dapat menyebabkan berkurangnya nilai modal investasi. “Risiko” mengacu pada potensi yang dimiliki produk investasi, sedangkan “berisiko” mengacu pada pihak yang berinvestasi. Terdapat data dari 101 negara dengan informasi ekonomi selama lima tahun terakhir (seperti rasio kecukupan modal, PDB per kapita, utang luar negeri, pertumbuhan harga konsumen, dll.). Berdasarkan data ini, kami akan membangun model pembelajaran mesin untuk mengelompokkan negara berdasarkan tingkat risiko investasi yang tinggi atau rendah.
Berikut merupakan beberapa packages yang digunakan dalam analisis, sebagai berikut.
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(tibble)
library(tidyr)
library(readr)
library(purrr)
library(dplyr)
library(stringr)
library(forcats)
library(rmarkdown)
library(skimr)
library(mlr3verse)
## Loading required package: mlr3
##
## Attaching package: 'mlr3'
##
## The following object is masked from 'package:skimr':
##
## partition
library(ranger)
library(MLeval)
library(ModelMetrics)
##
## Attaching package: 'ModelMetrics'
##
## The following object is masked from 'package:mlr3verse':
##
## tnr
##
## The following object is masked from 'package:base':
##
## kappa
library(MLmetrics)
##
## Attaching package: 'MLmetrics'
##
## The following object is masked from 'package:base':
##
## Recall
library(randomForest)
## randomForest 4.7-1.2
## Type rfNews() to see new features/changes/bug fixes.
##
## Attaching package: 'randomForest'
##
## The following object is masked from 'package:ranger':
##
## importance
##
## The following object is masked from 'package:dplyr':
##
## combine
##
## The following object is masked from 'package:ggplot2':
##
## margin
library(caret)
## Loading required package: lattice
##
## Attaching package: 'caret'
##
## The following objects are masked from 'package:MLmetrics':
##
## MAE, RMSE
##
## The following objects are masked from 'package:ModelMetrics':
##
## confusionMatrix, precision, recall, sensitivity, specificity
##
## The following object is masked from 'package:purrr':
##
## lift
Berikut merupakan perintah untuk membaca data dari file excel ke dalam R.
data1 <- readxl::read_xlsx("C:/Users/LENOVO/OneDrive - sma negeri banyumas/Documents/STATERKOM LOVE/Semester 3/Statistika Ekonomi dan Industri/RStudio Run/data tingkat resiko.xlsx")
data1
## # A tibble: 100 × 16
## Country X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 AD 17.5 38675. 173. 0.68 1.22 1.79 -2.08 55 -26.5 2.86
## 2 AE 18.2 40105. 104. 1.77 0.870 2.66 -0.725 103. -13.6 353.
## 3 AE-AZ 18.7 76038. 31.0 2.63 1.49 1.85 -1.90 103. -56.2 200.
## 4 AE-RK NA 27883. 24.8 1.29 1.75 2.23 -1.14 103. 24.8 10.1
## 5 AM 14 4251. 89.6 1.44 0.256 4.75 2.33 167. 47.3 12.6
## 6 AO NA 2034. 57.1 22.4 3.34 -0.878 -5.20 34.8 15.4 62.5
## 7 AR 23.3 9203. 43.3 36.7 0.966 -0.237 -3.73 NA -5.01 375.
## 8 AT 18.6 53174. 159. 1.52 0.726 1.88 -0.300 116. 15.4 430.
## 9 AU 15.7 63972. 122. 1.65 1.48 2.45 0.0306 192. 58.0 1359.
## 10 AW 33.5 24643. 92.8 1.22 0.797 2.06 -4.72 80.5 28.1 2.38
## # ℹ 90 more rows
## # ℹ 5 more variables: X11 <dbl>, X12 <dbl>, X13 <dbl>, X14 <dbl>,
## # `Risk Level` <chr>
Berikut adalah penjelasan setiap variabel dalam dataset diatas: X1: % Rata-rata rasio kecukupan modal 5 tahun terakhir. X2: Produk Domestik Bruto per kapita (USD). X3: % Rata-rata Utang Luar Negeri Bruto 5 tahun terakhir. X4: % Rata-rata pertumbuhan harga konsumen 5 tahun terakhir. X5: % Rata-rata pertumbuhan penduduk 5 tahun terakhir. X6: % Rata-rata PDB riil 5 tahun terakhir. X7: % Rata-rata pertumbuhan PDB riil per kapita 5 tahun terakhir. X8: Rata-rata rasio pinjaman-deposit 5 tahun terakhir. X9: % Rata-rata Utang Luar Negeri Bersih 5 tahun terakhir. X10: Nominal PDB (US miliar). X11: Rata-rata kredit bermasalah 5 tahun terakhir. X12: % Rata-rata investasi domestik bruto terhadap PDB 5 tahun terakhir. X13: % Rata-rata tabungan domestik bruto terhadap PDB 5 tahun terakhir. X14: % Rata-rata tingkat pengangguran 5 tahun terakhir. Risk Level: Tingkat risiko investasi.
Untuk keperluan analisis, dilakukan beberapa hal sebagai berikut: Mengubah tipe data peubah response Risk Level menjadi bertipe factor, Optional: mengubah nama kolom Risk Level menjadi risk_level
# mengubah tipe data peubah
data1$`Risk Level` <- as.factor(data1$`Risk Level`)
colnames(data1)[16] <- "risk_level"
library(rmarkdown)
paged_table(data1)
library(skimr)
skim(data1)
| Name | data1 |
| Number of rows | 100 |
| Number of columns | 16 |
| _______________________ | |
| Column type frequency: | |
| character | 1 |
| factor | 1 |
| numeric | 14 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| Country | 0 | 1 | 2 | 5 | 0 | 99 | 0 |
Variable type: factor
| skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
|---|---|---|---|---|---|
| risk_level | 0 | 1 | FALSE | 2 | hig: 54, low: 46 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| X1 | 12 | 0.88 | 18.97 | 5.42 | 4.20 | 15.93 | 18.58 | 21.80 | 47.50 | ▁▇▃▁▁ |
| X2 | 0 | 1.00 | 22641.57 | 24846.18 | 434.46 | 4265.94 | 11659.10 | 34815.21 | 124340.38 | ▇▂▂▁▁ |
| X3 | 0 | 1.00 | 191.93 | 697.33 | 13.63 | 42.96 | 70.42 | 130.63 | 6908.35 | ▇▁▁▁▁ |
| X4 | 0 | 1.00 | 3.26 | 4.86 | -0.15 | 0.87 | 1.70 | 3.94 | 36.70 | ▇▁▁▁▁ |
| X5 | 0 | 1.00 | 1.20 | 1.06 | -0.89 | 0.44 | 1.14 | 1.95 | 4.40 | ▃▇▅▃▁ |
| X6 | 0 | 1.00 | 3.08 | 2.26 | -5.14 | 1.76 | 2.98 | 4.30 | 10.08 | ▁▂▇▃▁ |
| X7 | 0 | 1.00 | 0.11 | 2.58 | -9.85 | -1.19 | 0.07 | 1.94 | 6.07 | ▁▁▆▇▂ |
| X8 | 7 | 0.93 | 99.94 | 42.61 | 34.82 | 76.95 | 90.19 | 113.39 | 359.14 | ▇▅▁▁▁ |
| X9 | 0 | 1.00 | -13.58 | 217.07 | -1955.72 | -14.11 | 12.67 | 36.67 | 456.49 | ▁▁▁▂▇ |
| X10 | 0 | 1.00 | 582.32 | 1659.10 | 1.17 | 32.81 | 106.87 | 366.37 | 14866.70 | ▇▁▁▁▁ |
| X11 | 17 | 0.83 | 5.53 | 5.14 | 0.34 | 1.93 | 3.90 | 7.95 | 26.98 | ▇▃▁▁▁ |
| X12 | 0 | 1.00 | 24.96 | 6.73 | 12.67 | 20.79 | 23.40 | 28.38 | 46.83 | ▃▇▃▁▁ |
| X13 | 0 | 1.00 | 24.48 | 8.07 | 10.95 | 19.06 | 24.28 | 29.36 | 55.09 | ▅▇▅▁▁ |
| X14 | 11 | 0.89 | 8.44 | 5.29 | 0.12 | 4.82 | 6.80 | 10.50 | 24.65 | ▆▇▂▂▁ |
Data investment risk level (pada analisi ini disimpai dalam objek data1) terdiri atas 16 peubah dan 100 observasi. Dari 16 peubah tersebut, terdapat 1 peubah karakter (kolom Country), 14 peubah numerik (kolom X1 s.d X14) sebagai peubah prediktor, dan 1 peubah kategorik (kolom risk_level) dengan dua kelas sebagai peubah respon.
Penanganan dilakukan dengan mengisi data kosong dengan rataan nilai dari masing-masing kolom/peubah.
# peubah X1
data1$X1 <- ifelse(is.na(data1$X1),
ave(data1$X1, FUN = function(x) mean(x, na.rm = TRUE)),
data1$X1)
# peubah X8
data1$X8 <- ifelse(is.na(data1$X8),
ave(data1$X8, FUN = function(x) mean(x, na.rm = TRUE)),
data1$X8)
# peubah X11
data1$X11 <- ifelse(is.na(data1$X11),
ave(data1$X11, FUN = function(x) mean(x, na.rm = TRUE)),
data1$X11)
# peubah X14
data1$X14 <- ifelse(is.na(data1$X14),
ave(data1$X14, FUN = function(x) mean(x, na.rm = TRUE)),
data1$X14)
skim(data1)
| Name | data1 |
| Number of rows | 100 |
| Number of columns | 16 |
| _______________________ | |
| Column type frequency: | |
| character | 1 |
| factor | 1 |
| numeric | 14 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| Country | 0 | 1 | 2 | 5 | 0 | 99 | 0 |
Variable type: factor
| skim_variable | n_missing | complete_rate | ordered | n_unique | top_counts |
|---|---|---|---|---|---|
| risk_level | 0 | 1 | FALSE | 2 | hig: 54, low: 46 |
Variable type: numeric
| skim_variable | n_missing | complete_rate | mean | sd | p0 | p25 | p50 | p75 | p100 | hist |
|---|---|---|---|---|---|---|---|---|---|---|
| X1 | 0 | 1 | 18.97 | 5.08 | 4.20 | 16.10 | 18.97 | 21.43 | 47.50 | ▁▇▂▁▁ |
| X2 | 0 | 1 | 22641.57 | 24846.18 | 434.46 | 4265.94 | 11659.10 | 34815.21 | 124340.38 | ▇▂▂▁▁ |
| X3 | 0 | 1 | 191.93 | 697.33 | 13.63 | 42.96 | 70.42 | 130.63 | 6908.35 | ▇▁▁▁▁ |
| X4 | 0 | 1 | 3.26 | 4.86 | -0.15 | 0.87 | 1.70 | 3.94 | 36.70 | ▇▁▁▁▁ |
| X5 | 0 | 1 | 1.20 | 1.06 | -0.89 | 0.44 | 1.14 | 1.95 | 4.40 | ▃▇▅▃▁ |
| X6 | 0 | 1 | 3.08 | 2.26 | -5.14 | 1.76 | 2.98 | 4.30 | 10.08 | ▁▂▇▃▁ |
| X7 | 0 | 1 | 0.11 | 2.58 | -9.85 | -1.19 | 0.07 | 1.94 | 6.07 | ▁▁▆▇▂ |
| X8 | 0 | 1 | 99.94 | 41.08 | 34.82 | 77.78 | 92.35 | 112.27 | 359.14 | ▇▆▁▁▁ |
| X9 | 0 | 1 | -13.58 | 217.07 | -1955.72 | -14.11 | 12.67 | 36.67 | 456.49 | ▁▁▁▂▇ |
| X10 | 0 | 1 | 582.32 | 1659.10 | 1.17 | 32.81 | 106.87 | 366.37 | 14866.70 | ▇▁▁▁▁ |
| X11 | 0 | 1 | 5.53 | 4.68 | 0.34 | 2.40 | 4.95 | 6.45 | 26.98 | ▇▂▁▁▁ |
| X12 | 0 | 1 | 24.96 | 6.73 | 12.67 | 20.79 | 23.40 | 28.38 | 46.83 | ▃▇▃▁▁ |
| X13 | 0 | 1 | 24.48 | 8.07 | 10.95 | 19.06 | 24.28 | 29.36 | 55.09 | ▅▇▅▁▁ |
| X14 | 0 | 1 | 8.44 | 4.99 | 0.12 | 5.00 | 7.38 | 9.70 | 24.65 | ▅▇▂▁▁ |
# data setelah dilakukan penanganan missing value
paged_table(data1)
prop.table(table(data1$risk_level))
##
## high low
## 0.54 0.46
Berdasarkan statistik deskriptif di atas dapat diketahui bahwa peubah respon memiliki anggota kelas High risk level sebanyak 54% dan kelas Low risk level sebanyak 46% pengamatan.
Untuk melihat sebaran data setiap peubah, setiap peubah digambarkan dalam bentuk box-plot.
library(caret)
## Loading required package: lattice
## Attaching package: 'caret'
## The following object is masked from 'package:purrr':
## lift
featurePlot(x = data1[, 2:15],
y = data1$risk_level,
plot = "box",
do.out = FALSE,
layout = c(5,3),
strip = strip.custom(par.strip.text=list(cex=.7)),
scales = list(x = list(relation="free"),
y = list(relation="free")))
library(caret)
featurePlot(x = data1[, 2:15],
y = data1$risk_level,
plot = "density",
do.out = FALSE,
layout = c(5,3),
strip = strip.custom(par.strip.text=list(cex=.7)),
scales = list(x = list(relation="free"),
y = list(relation="free")))
Dari box-plot dan density plot di atas, terlihat bahwa banyak peubah predictor yang sebaran datanya tidak simetris dan terdapat cukup banyak outlier. Melakukan pembagian dataset menjadi data train dan data testing sebagai metode untuk melatih dan mengevaluasi performa model machine learning. Data training digunakan untuk membuat model, sedangkan data testing digunakan untuk evaluasi kebaikan model.
set.seed(100)
# Mengambil amatan yang digunakan sebagai data train
train_index <- createDataPartition(data1$risk_level, p = 0.8, list = FALSE)
train_index
## Resample1
## [1,] 1
## [2,] 3
## [3,] 4
## [4,] 5
## [5,] 6
## [6,] 8
## [7,] 10
## [8,] 12
## [9,] 13
## [10,] 14
## [11,] 15
## [12,] 16
## [13,] 17
## [14,] 18
## [15,] 19
## [16,] 20
## [17,] 21
## [18,] 22
## [19,] 23
## [20,] 24
## [21,] 25
## [22,] 26
## [23,] 28
## [24,] 29
## [25,] 30
## [26,] 32
## [27,] 33
## [28,] 34
## [29,] 35
## [30,] 36
## [31,] 37
## [32,] 38
## [33,] 39
## [34,] 40
## [35,] 41
## [36,] 42
## [37,] 43
## [38,] 44
## [39,] 45
## [40,] 46
## [41,] 48
## [42,] 49
## [43,] 50
## [44,] 52
## [45,] 53
## [46,] 54
## [47,] 56
## [48,] 57
## [49,] 59
## [50,] 60
## [51,] 61
## [52,] 63
## [53,] 65
## [54,] 66
## [55,] 68
## [56,] 69
## [57,] 70
## [58,] 71
## [59,] 72
## [60,] 73
## [61,] 74
## [62,] 76
## [63,] 77
## [64,] 78
## [65,] 79
## [66,] 80
## [67,] 81
## [68,] 82
## [69,] 83
## [70,] 84
## [71,] 85
## [72,] 86
## [73,] 87
## [74,] 88
## [75,] 91
## [76,] 92
## [77,] 93
## [78,] 94
## [79,] 95
## [80,] 96
## [81,] 97
# index amatan
# Data train
train_data <- data1[train_index,]
head(train_data)
## # A tibble: 6 × 16
## Country X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 AD 17.5 38675. 173. 0.68 1.22 1.79 -2.08 55 -26.5 2.86 8
## 2 AE-AZ 18.7 76038. 31.0 2.63 1.49 1.85 -1.90 103. -56.2 200. 8.15
## 3 AE-RK 19.0 27883. 24.8 1.29 1.75 2.23 -1.14 103. 24.8 10.1 5.53
## 4 AM 14 4251. 89.6 1.44 0.256 4.75 2.33 167. 47.3 12.6 6.6
## 5 AO 19.0 2034. 57.1 22.4 3.34 -0.878 -5.20 34.8 15.4 62.5 10.3
## 6 AT 18.6 53174. 159. 1.52 0.726 1.88 -0.300 116. 15.4 430. 2.02
## # ℹ 4 more variables: X12 <dbl>, X13 <dbl>, X14 <dbl>, risk_level <fct>
# Data testing
test_data <- data1[-train_index,]
head(test_data)
## # A tibble: 6 × 16
## Country X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 AE 18.2 40105. 104. 1.77 0.870 2.66 -0.725 103. -13.6 353.
## 2 AR 23.3 9203. 43.3 36.7 0.966 -0.237 -3.73 99.9 -5.01 375.
## 3 AU 15.7 63972. 122. 1.65 1.48 2.45 0.0306 192. 58.0 1359.
## 4 AZ 25.3 5083. 43.4 6.85 1.05 0.391 -1.74 111. -174. 42.6
## 5 CO 17.2 5860. 47.6 4.71 1.38 2.45 -0.888 117. 9.93 271.
## 6 CZ 21.4 27045. 79.2 1.58 0.207 3.72 1.32 76.5 -16.6 244.
## # ℹ 5 more variables: X11 <dbl>, X12 <dbl>, X13 <dbl>, X14 <dbl>,
## # risk_level <fct>
Dalam proses pemodelan, kolom Country tidak digunakan sehingga dihapus dari data training dan data testing.
train_data$Country <- NULL
test_data$Country <- NULL
Tahapan selanjutnya adalah standarisasi. Standarisasi dilakukan karena skala dari setiap peubah prediktor berbeda-beda, sedangkan untuk hasil pemodelan yang baik diperlukan skala yang sama. Metode standarisasi yang digunakan adalah transformasi ke normal baku (Z).
library(caret)
standardize <- preProcess(train_data, method = c("center" , "scale"))
train_data_s <- predict(standardize, newdata = train_data)
test_data_s <- predict(standardize, newdata = test_data)
Cross Validation dalam studi kasus ini digunakan untuk tuning parameter, yakni mencari parameter terbaik bagi model yang memberikan nilai kebaikan evaluasi optimal.
fit_Control <- trainControl(method = 'repeatedcv',
number = 5,
repeats = 5,
savePredictions = 'final',
classProbs = T,
summaryFunction = prSummary,
allowParallel = TRUE)
Metriks evaluasi yang ditampilkan meliputi precision, recall dan F1-score. Pada kasus ini metrik yang digunakan adalah F1-score di mana nilai terbaiknya adalah 1 dan nilai terburuknya adalah 0. F1-score yang baik mengindikasikan bahwa model klasifikasi yang dihasilan memiliki nilai precision dan recall yang baik.
Pada studi kasus ini metode yang digunakan untuk memodelkan adalah Random Forest. Random forest merupakan model yang dibentuk dari banyak model Decission Tree baik untuk regresi maupun klasifikasi. Metode ini merupakan metode pohon gabungan. Untuk mengidentifikasi peubah prediktor yang relevan terhadap peubah respons, random forest menghasilkan ukuran tingkat kepentingan (variable importance) peubah penjelas.
set.seed(100)
library(ModelMetrics)
library(MLmetrics)
library(ranger)
rf <- caret::train(risk_level ~., data = train_data_s,
method = 'ranger',
metric = "F",
tuneLength = 10,
trControl = fit_Control,
importance = 'impurity')
rf
## Random Forest
##
## 81 samples
## 14 predictors
## 2 classes: 'high', 'low'
##
## No pre-processing
## Resampling: Cross-Validated (5 fold, repeated 5 times)
## Summary of sample sizes: 64, 66, 64, 65, 65, 65, ...
## Resampling results across tuning parameters:
##
## mtry splitrule AUC Precision Recall F
## 2 gini 0.8474861 0.8773085 0.8783333 0.8722288
## 2 extratrees 0.8436132 0.8517071 0.8644444 0.8520097
## 3 gini 0.8501986 0.8737529 0.8650000 0.8653492
## 3 extratrees 0.8386598 0.8337179 0.8644444 0.8442540
## 4 gini 0.8464491 0.8956797 0.8555556 0.8701203
## 4 extratrees 0.8406351 0.8521974 0.8688889 0.8557736
## 6 gini 0.8297336 0.9080891 0.8472222 0.8704817
## 6 extratrees 0.8404928 0.8515336 0.8511111 0.8461461
## 7 gini 0.8417610 0.9054225 0.8472222 0.8696991
## 7 extratrees 0.8422077 0.8484545 0.8600000 0.8488444
## 8 gini 0.8395879 0.9075556 0.8427778 0.8670140
## 8 extratrees 0.8379057 0.8545336 0.8555556 0.8504982
## 10 gini 0.8185765 0.9337302 0.8333333 0.8734258
## 10 extratrees 0.8374028 0.8637273 0.8516667 0.8504309
## 11 gini 0.8241959 0.9246190 0.8377778 0.8720140
## 11 extratrees 0.8429742 0.8636638 0.8555556 0.8531382
## 12 gini 0.8273748 0.9290635 0.8422222 0.8778870
## 12 extratrees 0.8466019 0.8685336 0.8516667 0.8537624
## 14 gini 0.7945698 0.9207302 0.8244444 0.8625369
## 14 extratrees 0.8440136 0.8760606 0.8466667 0.8539982
##
## Tuning parameter 'min.node.size' was held constant at a value of 1
## F was used to select the optimal model using the largest value.
## The final values used for the model were mtry = 12, splitrule = gini
## and min.node.size = 1.
Dari hasil output di atas, hasil tunning parameter dengan k-fold cv berulang pada model random forest memberikan AUC (luas area di bawah kurva ROC), precision, recall dan F1-score yang tinggi (>80%), sehingga dapat dikatakan bahwa model random forest yang dibangun cukup baik. Model final diperoleh dengan parameter mtry = 12, splitrule = extratress dan min.node.size = 1. Berikut dapat diketahui ukuran tingkat kepentingan peubah prediktor yang relevan terhadap peubah respons.
plot(varImp(rf, scale = FALSE))
Dari output di atas dapat diketahui bahwa Gross Domestic Product per kapita (X2) merupakan variabel terpenting bagi model random forest.
testing_pred <- predict(rf, newdata = test_data_s)
caret::confusionMatrix(testing_pred, test_data_s$risk_level)
## Confusion Matrix and Statistics
##
## Reference
## Prediction high low
## high 9 2
## low 1 7
##
## Accuracy : 0.8421
## 95% CI : (0.6042, 0.9662)
## No Information Rate : 0.5263
## P-Value [Acc > NIR] : 0.004362
##
## Kappa : 0.6816
##
## Mcnemar's Test P-Value : 1.000000
##
## Sensitivity : 0.9000
## Specificity : 0.7778
## Pos Pred Value : 0.8182
## Neg Pred Value : 0.8750
## Prevalence : 0.5263
## Detection Rate : 0.4737
## Detection Prevalence : 0.5789
## Balanced Accuracy : 0.8389
##
## 'Positive' Class : high
##
Tingkat akurasi menggambarkan tingkat ketepatan model dalam mengklasifikasikan dengan benar. Dalam kasus ini berarti bahwa model dapat memprediksi benar negara tergolong high risk atau low risk sebesar 84,21%, Spesificity/precision/positive predictive value menggambarkan ketepatan antara data yang diminta terhadap hasil prediksi yang diberikan model. Pada kasus ini, berarti bahwa negara yang benar termasuk negara high risk dari keseluruhan negara yang diprediksi sebagai negara high risk sebesar 77,78%, Sensitivity/recall menggambarkan keberhasilan model dalam menemukan informasi. Pada kasus ini, berarti bahwa negara yang diprediksi sebagai negara high risk dibanding keseluruhan negara yang sebenarnya termasuk dalam high risk sebesar 90%.
#kesimpulan Berdasarkan proses di atas, model random forest final untuk memprediksi tingkat risiko investasi negara memberikan nilai akurasi 84,21%. Model tersebut mengelompokan kelas positif sebagai negara dengan high risk level atau negara yang memiliki risiko tinggi dalam hal investasi.
Berdasarkan nilai variable importance, peubah-peubah prediktor dapat diurutikan dari yang terpenting (bagi pembangunan model) sebagai berikut:
X2 : Gross per capita (USD). X9 : Net External Debt (% of GDP) average from last 5 years. X11 : Non-performing loans (% of gross loans) average from last 5 years. X10 : Nominal GDP (USD bn). X1 : Capital adequacy ratio (%) average from last 5 years. X12 : Percentage of gross domestic investment to GDP (%) average from last 5 years. X5 : Growth of population (%) average from last 5 years. X14 : Unemployment rate (% labour force) average from last 5 years. X13 : Percentage of gross domestic saving to GDP (%) average from last 5 years. X7 : Growth of Real GDP per cap. (%) average from last 5 years. X4 : Growth of consumer price (%) average from last 5 years. X8 : Loan-deposit ratio (%) average from last 5 years. X3 : Gross External Debt (% of GDP) average from last 5 years. X6 : Growth of Real GDP (%) average from last 5 years.