library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
df <- read.csv("Level Risiko Investasi.csv")
glimpse(df)
## Rows: 100
## Columns: 16
## $ Country <chr> "AD", "AE", "AE-AZ", "AE-RK", "AM", "AO", "AR", "AT", "AU",…
## $ X1 <dbl> 17.5000, 18.2000, 18.7000, NA, 14.0000, NA, 23.2527, 18.574…
## $ X2 <dbl> 38674.616, 40105.120, 76037.997, 27882.829, 4251.398, 2033.…
## $ X3 <dbl> 172.75400, 103.52280, 31.03626, 24.78532, 89.61882, 57.0556…
## $ X4 <dbl> 0.68000, 1.76600, 2.63056, 1.29416, 1.44000, 22.35646, 36.7…
## $ X5 <dbl> 1.2206, 0.8698, 1.4893, 1.7530, 0.2562, 3.3422, 0.9657, 0.7…
## $ X6 <dbl> 1.78560, 2.65884, 1.85034, 2.23192, 4.74800, -0.87800, -0.2…
## $ X7 <dbl> -2.0843, -0.7254, -1.9008, -1.1355, 2.3318, -5.2032, -3.729…
## $ X8 <dbl> 55.00000, 102.52738, 102.52738, 102.52738, 166.80851, 34.81…
## $ X9 <dbl> -26.52000, -13.59890, -56.24160, 24.78532, 47.27262, 15.449…
## $ X10 <dbl> 2.857862, 352.910575, 199.928422, 10.108892, 12.645460, 62.…
## $ X11 <dbl> 8.0000, 8.1550, 8.1550, NA, 6.6000, 10.3000, 10.6000, 2.019…
## $ X12 <dbl> 23.08410, 24.85976, 20.39940, 21.69104, 19.40300, 31.12380,…
## $ X13 <dbl> 26.94344, 32.47740, 31.03926, 17.30888, 15.11172, 20.57210,…
## $ X14 <dbl> 3.0000, 2.4500, NA, NA, 18.5000, 10.5000, 11.0500, 6.0000, …
## $ Risk.Level <chr> "low", "low", "low", "low", "high", "high", "high", "low", …
#eksplorasi data
skimr::skim(df)
| Name | df |
| Number of rows | 100 |
| Number of columns | 16 |
| _______________________ | |
| Column type frequency: | |
| character | 2 |
| numeric | 14 |
| ________________________ | |
| Group variables | None |
Variable type: character
| skim_variable | n_missing | complete_rate | min | max | empty | n_unique | whitespace |
|---|---|---|---|---|---|---|---|
| Country | 1 | 0.99 | 2 | 5 | 0 | 98 | 0 |
| Risk.Level | 0 | 1.00 | 3 | 4 | 0 | 2 | 0 |
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 | ▆▇▂▂▁ |
#menghilangkan var country
#variabel ini dihilangkan karena tidak akan digunakan dalam analisis
df <- df[, -which(names(df) == "Country")]
head(df)
## X1 X2 X3 X4 X5 X6 X7 X8 X9
## 1 17.5 38674.616 172.75400 0.68000 1.2206 1.78560 -2.0843 55.00000 -26.52000
## 2 18.2 40105.120 103.52280 1.76600 0.8698 2.65884 -0.7254 102.52738 -13.59890
## 3 18.7 76037.997 31.03626 2.63056 1.4893 1.85034 -1.9008 102.52738 -56.24160
## 4 NA 27882.829 24.78532 1.29416 1.7530 2.23192 -1.1355 102.52738 24.78532
## 5 14.0 4251.398 89.61882 1.44000 0.2562 4.74800 2.3318 166.80851 47.27262
## 6 NA 2033.900 57.05566 22.35646 3.3422 -0.87800 -5.2032 34.81845 15.44938
## X10 X11 X12 X13 X14 Risk.Level
## 1 2.857862 8.000 23.08410 26.94344 3.00 low
## 2 352.910575 8.155 24.85976 32.47740 2.45 low
## 3 199.928422 8.155 20.39940 31.03926 NA low
## 4 10.108892 NA 21.69104 17.30888 NA low
## 5 12.645460 6.600 19.40300 15.11172 18.50 high
## 6 62.485865 10.300 31.12380 20.57210 10.50 high
library(ggplot2)
library(cowplot)
x1_y <- ggplot(data = df, mapping = aes(x = X1, y = Risk.Level)) +
geom_boxplot()
x2_y <- ggplot(data = df, mapping = aes(x = X2, y = Risk.Level)) +
geom_boxplot()
x3_y <- ggplot(data = df, mapping = aes(x = X3, y = Risk.Level)) +
geom_boxplot()
x4_y <- ggplot(data = df, mapping = aes(x = X4, y = Risk.Level)) +
geom_boxplot()
x5_y <- ggplot(data = df, mapping = aes(x = X5, y = Risk.Level)) +
geom_boxplot()
x6_y <- ggplot(data = df, mapping = aes(x = X6, y = Risk.Level)) +
geom_boxplot()
x7_y <- ggplot(data = df, mapping = aes(x = X7, y = Risk.Level)) +
geom_boxplot()
x8_y <- ggplot(data = df, mapping = aes(x = X8, y = Risk.Level)) +
geom_boxplot()
x9_y <- ggplot(data = df, mapping = aes(x = X9, y = Risk.Level)) +
geom_boxplot()
x10_y <- ggplot(data = df, mapping = aes(x = X10, y = Risk.Level)) +
geom_boxplot()
x11_y <- ggplot(data = df, mapping = aes(x = X11, y = Risk.Level)) +
geom_boxplot()
x12_y <- ggplot(data = df, mapping = aes(x = X12, y = Risk.Level)) +
geom_boxplot()
x13_y <- ggplot(data = df, mapping = aes(x = X13, y = Risk.Level)) +
geom_boxplot()
x14_y <- ggplot(data = df, mapping = aes(x = X14, y = Risk.Level)) +
geom_boxplot()
# Memanggil semua plot dengan plot_grid
plot_grid(x1_y, x2_y, x3_y, x4_y, x5_y, x6_y, x7_y,
x8_y, x9_y, x10_y, x11_y, x12_y, x13_y, x14_y,
ncol = 2)
## Warning: Removed 12 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 7 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 17 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
## Warning: Removed 11 rows containing non-finite outside the scale range
## (`stat_boxplot()`).
Distribusi nilai: Box plot menunjukkan distribusi nilai untuk setiap
variabel independen berdasarkan tingkat risiko (low atau high). Garis di
tengah kotak menunjukkan median, sementara batas atas dan bawah kotak
menunjukkan kuartil pertama dan ketiga.
Perbedaan antar tingkat risiko: Jika ada perbedaan yang jelas antara box plot untuk tingkat risiko rendah dan tinggi, ini menunjukkan bahwa variabel tersebut mungkin memiliki pengaruh yang signifikan terhadap tingkat risiko.
Outlier: Titik-titik di luar whisker (garis vertikal yang memanjang dari kotak) menunjukkan outlier atau nilai ekstrem.
Variabilitas: Ukuran kotak dan panjang whisker menunjukkan variabilitas data.
Interpretasi spesifik untuk setiap variabel:
X1 (Capital adequacy ratio): Jika box plot untuk tingkat risiko rendah lebih tinggi, ini menunjukkan bahwa rasio kecukupan modal yang lebih tinggi cenderung terkait dengan risiko yang lebih rendah.
X2 (GDP per capita): Jika box plot untuk tingkat risiko rendah lebih tinggi, ini menunjukkan bahwa negara dengan GDP per kapita lebih tinggi cenderung memiliki risiko investasi yang lebih rendah.
X3 (Gross External Debt): Jika box plot untuk tingkat risiko tinggi lebih tinggi, ini menunjukkan bahwa utang eksternal yang lebih tinggi cenderung terkait dengan risiko yang lebih tinggi.
X4 (Growth of consumer price): Perbedaan yang signifikan antara dua tingkat risiko dapat menunjukkan pengaruh inflasi terhadap risiko investasi.
X5 (Growth of population): Perbedaan dalam pertumbuhan populasi antara tingkat risiko dapat menunjukkan bagaimana demografi mempengaruhi risiko investasi.
X6 dan X7 (Growth of Real GDP dan GDP per capita): Perbedaan yang signifikan dapat menunjukkan pentingnya pertumbuhan ekonomi dalam menentukan risiko investasi.
X8 (Loan-deposit ratio): Perbedaan yang jelas dapat menunjukkan bagaimana kesehatan sektor perbankan mempengaruhi risiko investasi.
X9 (Net External Debt): Seperti X3, perbedaan yang signifikan dapat menunjukkan pentingnya posisi utang eksternal.
X10 (Nominal GDP): Ukuran ekonomi yang lebih besar (box plot lebih tinggi untuk risiko rendah) mungkin terkait dengan risiko yang lebih rendah.
X11 (Non-performing loans): Tingkat pinjaman bermasalah yang lebih tinggi (box plot lebih tinggi untuk risiko tinggi) mungkin terkait dengan risiko yang lebih tinggi.
X12 dan X13 (Investment and Saving to GDP): Perbedaan dalam rasio ini dapat menunjukkan bagaimana pola investasi dan tabungan mempengaruhi risiko.
X14 (Unemployment rate): Tingkat pengangguran yang lebih tinggi (box plot lebih tinggi untuk risiko tinggi) mungkin terkait dengan risiko yang lebih tinggi.
#manajemen data
#untuk mengatasi missing data dapat dilakukan pendugaan dengan mengganti data hilang tersebut dengan nilai median pada variabel tersebut.
df$X1 = ifelse(is.na(df$X1),ave(df$X1, FUN = function(x) median(df$X1, na.rm = TRUE)), df$X1)
df$X8 = ifelse(is.na(df$X8),ave(df$X8, FUN = function(x) median(df$X8, na.rm = TRUE)), df$X8)
df$X11 = ifelse(is.na(df$X11),ave(df$X11, FUN = function(x) median(df$X11, na.rm = TRUE)), df$X11)
df$X14 = ifelse(is.na(df$X14),ave(df$X14, FUN = function(x) median(df$X14, na.rm = TRUE)), df$X14)
df$X1
## [1] 17.5000 18.2000 18.7000 18.5770 14.0000 18.5770 23.2527 18.5740 15.7000
## [10] 33.5000 25.3012 4.2000 19.3188 22.7406 20.0000 10.5000 12.2800 19.1400
## [19] 18.5770 16.0956 22.3000 19.3000 18.5770 14.2800 9.1000 14.7045 17.2000
## [28] 13.2840 19.4200 16.0000 21.3796 18.5800 22.6000 18.6500 13.4000 25.3120
## [37] 20.1000 16.9822 18.5770 20.1000 19.6501 18.5770 21.6000 17.6000 15.0000
## [46] 16.6643 16.1000 20.7000 25.5000 18.2802 23.9000 25.4692 18.5770 13.6000
## [55] 18.5770 24.8200 16.0000 14.3000 17.9300 17.3000 18.4444 14.8000 18.5770
## [64] 26.9700 16.5000 22.9520 11.0000 21.8073 23.9000 24.9680 15.2000 16.6966
## [73] 18.5770 14.5000 23.9600 47.5000 17.7000 18.3000 26.0000 15.2000 15.4000
## [82] 21.7500 18.9026 23.1000 18.5770 19.1000 16.2500 15.5888 14.9396 17.2000
## [91] 20.1490 16.7000 19.1000 18.8000 23.2000 21.8000 12.7000 23.3000 18.5770
## [100] 19.0200
df$X8
## [1] 55.00000 102.52738 102.52738 102.52738 166.80851 34.81845 90.19331
## [8] 116.41876 191.74943 80.54508 110.63987 78.40700 90.42874 72.99709
## [15] 90.19331 81.54536 101.29834 76.95112 149.03716 106.86400 84.09314
## [22] 82.50000 83.29876 116.51738 87.68676 94.22575 117.32727 125.26214
## [29] 67.45486 68.15254 76.50765 138.35724 359.13886 80.10580 99.71869
## [36] 104.68417 53.29829 117.48908 90.19331 175.16013 139.57196 72.26748
## [43] 91.33396 145.18138 50.13182 89.84441 72.98978 68.82672 82.18115
## [50] 79.03623 96.57359 84.42461 85.93030 73.69553 90.19331 160.95762
## [57] 111.19617 88.86704 93.88143 70.95343 87.40996 123.99717 90.19331
## [64] 83.52300 89.13270 59.50145 90.19331 68.23179 42.65388 77.92536
## [71] 102.28671 94.67722 77.34337 81.91411 67.94252 78.58290 99.03247
## [78] 113.38897 49.29687 91.29415 64.18761 84.09234 161.74143 207.31980
## [85] 138.38958 148.12624 121.21618 116.71299 74.25542 61.34609 93.36164
## [92] 113.24087 104.13747 163.71672 74.41554 90.19331 122.72076 111.94390
## [99] 90.19331 45.41537
df$X11
## [1] 8.0000 8.1550 8.1550 3.9000 6.6000 10.3000 10.6000 2.0190 0.9600
## [10] 5.0000 3.9000 7.7000 3.9000 5.7984 3.9000 17.0000 3.9000 3.9000
## [19] 4.8292 0.5333 24.4000 0.7500 8.8000 1.7229 20.0000 1.8396 3.1800
## [28] 2.7000 9.5200 3.9000 2.6562 3.9000 1.8000 1.8500 3.9000 0.3791
## [37] 3.9000 2.8512 11.1000 1.4000 2.8415 11.2000 1.2157 2.3000 15.0000
## [46] 26.9780 1.8301 0.9024 7.1776 0.9250 3.0600 3.5406 1.4760 9.5000
## [55] 3.9000 2.9022 3.9000 2.8000 5.4000 1.0734 14.1390 1.0000 3.9000
## [64] 7.9000 5.3000 4.1991 3.2000 0.9915 1.0280 3.5221 8.3515 3.2613
## [73] 11.6788 0.3357 3.6629 8.3000 2.4292 1.6600 11.8000 6.4000 6.0000
## [82] 4.1000 3.9000 3.9000 3.9000 4.2000 2.1500 4.1276 1.6736 9.1000
## [91] 3.7123 6.2000 4.9000 2.0000 4.0580 5.0000 3.9000 4.5000 3.9000
## [100] 3.8700
df$X14
## [1] 3.0000 2.4500 6.8000 6.8000 18.5000 10.5000 11.0500 6.0000 5.4478
## [10] 8.0000 7.0000 5.0000 6.0000 5.3000 4.0000 2.3000 8.5000 13.9500
## [19] 4.5000 7.4503 6.8000 3.1728 12.0000 10.0000 6.8000 4.9000 13.0000
## [28] 15.0000 15.8000 7.8000 3.4000 4.8177 5.4000 5.7000 7.2000 6.4000
## [37] 7.0000 16.1639 18.0000 7.8000 9.3242 19.0000 5.5665 20.0000 6.8000
## [46] 18.3000 4.0000 6.5000 7.5000 4.4000 6.5000 6.5000 4.5000 7.5000
## [55] 13.5000 7.8000 10.8839 8.5000 22.0000 2.7383 11.4537 4.0000 6.8000
## [64] 5.1000 5.0000 24.6500 6.8000 9.0000 6.8000 8.1000 11.5000 16.3000
## [73] 7.3000 2.4000 4.3000 6.5000 4.0000 4.0000 6.8000 23.0000 22.0000
## [82] 4.5000 4.6000 4.2000 4.8000 6.8000 12.0000 9.7000 8.5000 6.5000
## [91] 6.2000 7.1000 5.5000 0.1200 5.0000 9.7000 5.4000 6.8000 6.8000
## [100] 4.5000
# cek missing data
sum(is.na(df))
## [1] 0
freqrisk <- as.data.frame(table(df$Risk.Level))
freqrisk
## Var1 Freq
## 1 high 54
## 2 low 46
#visualisasi data
#br chat
freqrisk$persen <- freqrisk$Freq/sum(freqrisk$Freq)
ggplot(data = freqrisk, mapping = aes(x = Var1, y = Freq)) +
geom_col(aes(fill =Var1), alpha = 0.7) +
labs(title = "Level Risiko Investasi",
x = "Risk Level",
y = "Frekuensi") +
geom_text(aes(label = paste0(round(persen*100, 2), "%")), vjust = -0.25) +
theme(legend.position = "none")
Berdasarkan bar chart diatas terlihat bahwa 54% negara berada pada level
risiko investasi yang tinggi (high-risk investment) dan 46% negara
berada pada level risiko investasi yang rendah (low-risk investment).
Artinya, negara yang memiliki level risiko investasi yang tinggi sedikit
lebih banyak dibandingkan negara yang memiliki level risiko investasi
yang rendah
#ubah kolom 'Risk.Level' menjadi faktor
df$Risk.Level <- as.factor(df$Risk.Level)
df$Risk.Level <- factor(df$Risk.Level, levels = c("high", "low"), ordered = FALSE)
df$Risk.Level
## [1] low low low low high high high low low high high high low low high
## [16] high high high high low high low high low high low high high high high
## [31] low low low high high low high low high low low high low high high
## [46] high high low high low low low low high high low high high high low
## [61] high low low low high high high low low low high high high low low
## [76] high high low high high high high low low low high high low low high
## [91] low low high low high high low high low high
## Levels: high low
#Random Forest
#Prepocessing
#import data ke mlr3
library(mlr3)
task_risk = TaskClassif$new(id="country",backend = df,target = "Risk.Level",positive ="low")
task_risk
## <TaskClassif:country> (100 x 15)
## * Target: Risk.Level
## * Properties: twoclass
## * Features (14):
## - dbl (14): X1, X10, X11, X12, X13, X14, X2, X3, X4, X5, X6, X7, X8,
## X9
#Spliting Data
#Data dibagi menjadi 2 bagian yaitu 80% sebagai data training dan 20% sebagai data testing
set.seed(234)
resample_holdout =rsmp("holdout", ratio = 0.8)
resample_holdout$instantiate(task=task_risk)
resample_holdout
## <ResamplingHoldout>: Holdout
## * Iterations: 1
## * Instantiated: TRUE
## * Parameters: ratio=0.8
Dataset telah dibagi menjadi dua bagian:80% digunakan sebagai training set untuk melatih model.20% digunakan sebagai testing set untuk menguji model setelah pelatihan. Hanya satu iterasi dari pembagian data yang dilakukan (tanpa pengulangan), sehingga dataset hanya dipisahkan satu kali. Resampling berhasil diinisialisasi (Instantiated: TRUE), yang berarti proses ini telah dilakukan dengan benar dan siap digunakan untuk melatih dan mengevaluasi model.
#model
library(ranger)
library(mlr3)
library(mlr3learners)
model_rf <- lrn("classif.ranger", predict_type="prob",importance="impurity")
model_rf
## <LearnerClassifRanger:classif.ranger>: Random Forest
## * Model: -
## * Parameters: importance=impurity, num.threads=1
## * Packages: mlr3, mlr3learners, ranger
## * Predict Types: response, [prob]
## * Feature Types: logical, integer, numeric, character, factor, ordered
## * Properties: hotstart_backward, importance, multiclass, oob_error,
## twoclass, weights
#interpretasi model
model_rf$train(task=task_risk)
importance<- data.frame(Predictors = names(model_rf$model$variable.importance),
impurity = model_rf$model$variable.importance
)
rownames(importance) <- NULL
importance %>% arrange(desc(impurity))
## Predictors impurity
## 1 X2 11.9123627
## 2 X9 5.3800137
## 3 X11 5.2250550
## 4 X10 4.5483290
## 5 X4 2.6826454
## 6 X14 2.5604889
## 7 X13 2.4320643
## 8 X3 2.0127682
## 9 X12 1.3496433
## 10 X8 1.2618846
## 11 X5 1.1837529
## 12 X1 1.1466515
## 13 X6 0.8667637
## 14 X7 0.8274137
model_rf
## <LearnerClassifRanger:classif.ranger>: Random Forest
## * Model: ranger
## * Parameters: importance=impurity, num.threads=1
## * Packages: mlr3, mlr3learners, ranger
## * Predict Types: response, [prob]
## * Feature Types: logical, integer, numeric, character, factor, ordered
## * Properties: hotstart_backward, importance, multiclass, oob_error,
## twoclass, weights
Variabel dengan kemampuan prediksi terbaik: X5 (Population growth) X12 (Total investment) X3 (Gross national income per capita) Variabel-variabel ini memiliki impurity terendah, menunjukkan bahwa mereka paling efektif dalam membedakan level risiko investasi.
Variabel dengan kemampuan prediksi terburuk: X2 (GDP per capita) X9 (Current account balance) X11 (Unemployment rate) X10 (GDP) Variabel-variabel ini memiliki impurity tertinggi, menunjukkan bahwa mereka kurang efektif dalam membedakan level risiko investasi.
Variabel dengan kemampuan prediksi menengah: X4 (Inflation rate) X14 (Interest rate) X13 (Gross national savings)
ggplot(importance,
aes(x=impurity,
y=reorder(Predictors,impurity))
) +
geom_col(fill = "steelblue")+
geom_text(aes(label=round(impurity,2)),hjust=1.2)
Plot akan menampilkan prediktor (variabel) pada sumbu y dan nilai
impurity pada sumbu x.
Prediktor akan diurutkan berdasarkan nilai impurity mereka, dengan prediktor yang memiliki impurity tertinggi di bagian atas plot. Di ujung setiap batang, akan ada label yang menunjukkan nilai impurity yang dibulatkan ke dua desimal.
X2 (GDP per capita): Batang terpanjang, dengan nilai 11.92 X9 (Current account balance): Batang kedua terpanjang, dengan nilai 5.23 X11 (Unemployment rate): Nilai 4.76 X10 (GDP): Nilai 4.65 X4 (Inflation rate): Nilai 2.88 X14 (Interest rate): Nilai 2.70 X13 (Gross national savings): Nilai 2.33 X3 (Gross national income per capita): Nilai 2.26 X12 (Total investment): Nilai 1.35 X5 (Population growth): Batang terpendek, dengan nilai 1.24
Plot ini akan memperkuat kesimpulan sebelumnya bahwa X2 (GDP per capita) adalah prediktor dengan impurity tertinggi, sementara X5 (Population growth) adalah prediktor dengan impurity terendah, menunjukkan bahwa pertumbuhan populasi mungkin merupakan indikator yang lebih baik untuk risiko investasi dibandingkan dengan GDP per kapita dalam konteks ini.
#training
set.seed(234)
train_test_rf = resample(task = task_risk,
learner = model_rf,
resampling = resample_holdout,
store_models = TRUE
)
## INFO [22:27:25.196] [mlr3] Applying learner 'classif.ranger' on task 'country' (iter 1/1)
Waktu: [20:35:49.316] Ini menunjukkan waktu ketika proses ini dimulai, yaitu pukul 20:35:49 dan 316 milidetik.
[mlr3] Ini mengindikasikan bahwa proses ini dijalankan menggunakan framework mlr3, yang merupakan framework pembelajaran mesin di R.
Applying learner ‘classif.ranger’ ‘classif.ranger’ adalah nama learner yang digunakan. Ini mengacu pada algoritma Random Forest yang diimplementasikan dalam paket ‘ranger’ di R. ‘classif’ menunjukkan bahwa ini adalah tugas klasifikasi (bukan regresi).
on task ‘country’ Ini menunjukkan nama tugas yang sedang diproses, dalam hal ini disebut ‘country’. Tugas ini kemungkinan berkaitan dengan klasifikasi negara berdasarkan tingkat risiko investasi.
#testing
data_testing = as.data.table(train_test_rf$prediction())
data_testing
## row_ids truth response prob.low prob.high
## <int> <fctr> <fctr> <num> <num>
## 1: 9 low low 0.90590317 0.09409683
## 2: 10 high low 0.55254365 0.44745635
## 3: 12 high high 0.28936905 0.71063095
## 4: 22 low low 0.95048651 0.04951349
## 5: 23 high high 0.08841111 0.91158889
## 6: 27 high high 0.23626587 0.76373413
## 7: 32 low low 0.97720714 0.02279286
## 8: 33 low low 0.94433651 0.05566349
## 9: 36 low low 0.80659444 0.19340556
## 10: 37 high high 0.20504206 0.79495794
## 11: 44 high high 0.18224603 0.81775397
## 12: 47 high high 0.27397063 0.72602937
## 13: 59 high high 0.06550238 0.93449762
## 14: 62 low low 0.86840476 0.13159524
## 15: 64 low high 0.49597540 0.50402460
## 16: 71 high high 0.10524603 0.89475397
## 17: 73 high high 0.07424444 0.92575556
## 18: 81 high high 0.16464048 0.83535952
## 19: 94 low low 0.74354524 0.25645476
## 20: 95 high low 0.65104444 0.34895556
## row_ids truth response prob.low prob.high
Row ID 9: Truth: low, Response: low Model memprediksi dengan benar (90.59% yakin) Interpretasi: Model sangat yakin dan akurat untuk kasus ini
Row ID 10: Truth: high, Response: low Model salah memprediksi (55.25% yakin prediksi salah) Interpretasi: Kesalahan klasifikasi, tapi model tidak terlalu yakin
Row ID 12: Truth: high, Response: high Model memprediksi dengan benar (71.06% yakin) Interpretasi: Prediksi benar dengan keyakinan moderat
Row ID 22: Truth: low, Response: low Model memprediksi dengan benar (95.05% yakin) Interpretasi: Model sangat yakin dan akurat
Row ID 23: Truth: high, Response: high Model memprediksi dengan benar (91.16% yakin) Interpretasi: Prediksi benar dengan keyakinan tinggi
Row ID 27: Truth: high, Response: high Model memprediksi dengan benar (76.37% yakin) Interpretasi: Prediksi benar dengan keyakinan moderat ke tinggi
Row ID 32: Truth: low, Response: low Model memprediksi dengan benar (97.72% yakin) Interpretasi: Model sangat yakin dan akurat
Row ID 33: Truth: low, Response: low Model memprediksi dengan benar (94.43% yakin) Interpretasi: Model sangat yakin dan akurat
Row ID 36: Truth: low, Response: low Model memprediksi dengan benar (80.66% yakin) Interpretasi: Prediksi benar dengan keyakinan tinggi
Row ID 37: Truth: high, Response: high Model memprediksi dengan benar (79.50% yakin) Interpretasi: Prediksi benar dengan keyakinan tinggi
Akurasi: Model benar dalam 9 dari 10 kasus yang ditampilkan, menunjukkan kinerja yang baik. Kepercayaan: Model umumnya memiliki tingkat kepercayaan yang tinggi dalam prediksinya. Kesalahan: Satu kesalahan klasifikasi (Row ID 10) dengan tingkat kepercayaan yang rendah, menunjukkan bahwa model “ragu-ragu” dalam kasus ini. Distribusi kelas: Sampel ini menunjukkan keseimbangan yang baik antara kelas ‘high’ dan ‘low’. Potensi perbaikan: Fokus pada kasus seperti Row ID 10 mungkin dapat membantu meningkatkan kinerja model.
#Evaluasi Model
#Confusion matrix
train_test_rf$prediction()$confusion
## truth
## response low high
## low 7 2
## high 1 10
Dari confusion matrix di atas terlihat bahwa diperoleh:
True Positive (TP) = 7 Artinya ada 7 negara yang memiliki kategori risiko investasi rendah (low) dan diprediksi dengan benar sebagai risiko rendah.
True Negative (TN) = 10 Artinya ada 10 negara yang memiliki kategori risiko investasi tinggi (high) dan diprediksi dengan benar sebagai risiko tinggi.
False Positive (FP) = 2 Artinya ada 2 negara yang memiliki kategori risiko investasi rendah (low), tetapi salah diprediksi sebagai risiko tinggi (high).
False Negative (FN) = 1 Artinya ada 1 negara yang memiliki kategori risiko investasi tinggi (high), tetapi salah diprediksi sebagai risiko rendah (low).
#akurasi
akurasi_rf <- train_test_rf$aggregate(list(msr("classif.acc"),
msr("classif.specificity"),
msr("classif.sensitivity")
))
akurasi_rf
## classif.acc classif.specificity classif.sensitivity
## 0.8500000 0.8333333 0.8750000
Terlihat dari output diatas, diperoleh nilai akurasi sekitar 85%
#ROC
library(mlr3viz)
autoplot(train_test_rf$prediction(), type = "roc")
Kurva ROC menunjukkan trade-off antara True Positive Rate (TPR) dan
False Positive Rate (FPR) pada berbagai ambang batas klasifikasi.
Semakin besar luas area di bawah kurva ROC maka kemampuan prediksi yang
dihasilkan semakin baik.
#nilai AUC atau Area Under Curve didapat dengan menghitung luas area dibawah kurva AUC sebagai berikut
train_test_rf$aggregate((msr("classif.auc")))
## classif.auc
## 0.9791667
Model dengan nilai AUC 0.9791667 menunjukkan performa yang sangat baik.
risklevel_baru <- data.frame(
X1 = 20,
X2 = 9203,
X3 = 90,
X4 = 22,
X5 = 1,
X6 = 3,
X7 = 0,
X8 = 90,
X9 = 15,
X10 = 450,
X11 = 8,
X12 = 23,
X13 = 26,
X14 = 5)
prediksi <- predict(model_rf, newdata = risklevel_baru)
prediksi
## [1] high
## Levels: low high
Hasil prediksi menunjukan bahwa negara tersebut masuk dalam kelompok tingkat investasi risiko yang tinggi