Klasifikasi Tingkat Risiko Negara dengan Decision Tree

Introduction

Background

Country Risk

Risiko negara (country risk) mengacu pada ketidakpastian yang terkait dengan investasi di negara tertentu, dan sejauh mana ketidakpastian itu dapat menyebabkan kerugian bagi investor. Ketidakpastian ini dapat berasal dari sejumlah faktor termasuk pengaruh politik, ekonomi, nilai tukar, atau teknologi. Risiko negara juga menunjukkan risiko bahwa pemerintah asing akan gagal membayar obligasi atau komitmen keuangan lainnya yang meningkatkan risiko transfer.

Oleh karena itu, perlu dilakukan klasifikasi untuk mengetahui apakah suatu negara memiliki tingkat risiko yang tinggi atau rendah berdasarkan faktor-faktor yang dapat mempengaruhinya sehingga dapat dijadikan sebagai sebuah pertimbangan bagi suatu negara yang akan melakukan investasi.

Objective

  1. Membangun model decision tree yang dapat mengklasifikasikan negara dengan risiko investasi rendah (low) dan tinggi (high) dengan baik.

  2. Mengidentifikasi karakteristik dari negara dengan risiko investasi rendah (low) dan tinggi (high).

Data

Data Pre-Processing

Import Data

Pada kasus ini diberikan data mengenai informasi risiko investasi pada 118 negara beserta faktor-faktor yang dapat mempengaruhinya.

invest_risk<-read_excel("D:/MATERI KULIAH S2 IPB/SAINS DATA/tugas STA581.xlsx")
invest_risk$`Risk Level`<- as.factor(invest_risk$`Risk Level`)
head(invest_risk)
## # A tibble: 6 x 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       18.2 40105. 104.   1.77 0.870  2.66  -0.725 103.  -13.6 353.    8.15
## 3 AE-AZ    18.7 76038.  31.0  2.63 1.49   1.85  -1.90  103.  -56.2 200.    8.15
## 4 AE-RK    NA   27883.  24.8  1.29 1.75   2.23  -1.14  103.   24.8  10.1  NA   
## 5 AM       14    4251.  89.6  1.44 0.256  4.75   2.33  167.   47.3  12.6   6.6 
## 6 AO       NA    2034.  57.1 22.4  3.34  -0.878 -5.20   34.8  15.4  62.5  10.3 
## # ... with 4 more variables: X12 <dbl>, X13 <dbl>, X14 <dbl>, Risk Level <fct>

Data terdiri dari 15 variabel. Adapun variabel respon yang digunakan yaitu “Risk level” yang terdiri dari dua kelas (“1” = low dan “0” = high). Berikut adalah deskripsi untung masing-masing variabel penjelas yang terdapat dalam dataset:

X1 : capital adequacy ratio (%) average from last 5 years

X2 : GDP per capita (USD)

X3 : Gross External Debt (% of GDP) average from last 5 years

X4 : Growth of consumer price (%) average from last 5 years

X5 : Growth of population (%) average from last 5 years

X6 : Growth of Real GDP (%) average from last 5 years

X7 : Growth of Real GDP per cap. (%) average from last 5 years

X8 : Loan-deposit ratio (%) average from last 5 years

X9 : Net External Debt (% of GDP) average from last 5 years

X10 : Nominal GDP (USD bn)

X11 : Non-performing loans (% of gross loans) average from last 5 years

X12 : Percentage of gross domestic investment to GDP (%) average from last 5 years

X13 : Percentage of gross domestic saving to GDP (%) average from last 5 years

X14 : Unemployment rate (% labour force) average from last 5 years

Proporsi Risk Level

# Melihat proporsi masing-masing kelas variabel Response
attach(invest_risk)
prop.table(table(`Risk Level`))
## Risk Level
##         0         1 
## 0.5470085 0.4529915
barplot(table(`Risk Level`), col = "coral")
text(0.7,y=30,"54.70%")
text(1.9,y=30,"45.30%")

Berdasarkan plot diatas terlihat bahwa terdapat 54.7% negara memiliki tingkat risiko yang tinggi (“0”). Sementara itu, 45.3% lainnya memiliki tingkat risiko yang rendah (“1”). Perbandingan masing-masing kelas pada variabel respon (Risk Level) terlihat seimbang. Hal tersebut menunjukkan bahwa tidak terjadi kasus imbalance data.

Checking Missing Data

# summary of the data
invest_risk<-invest_risk[-1]
summary(invest_risk)
##        X1              X2                 X3                X4         
##  Min.   : 4.20   Min.   :   434.5   Min.   :  13.63   Min.   :-0.1510  
##  1st Qu.:15.93   1st Qu.:  4223.5   1st Qu.:  43.11   1st Qu.: 0.8435  
##  Median :18.35   Median : 11363.6   Median :  70.35   Median : 1.6986  
##  Mean   :18.73   Mean   : 22596.3   Mean   : 177.50   Mean   : 3.4418  
##  3rd Qu.:21.64   3rd Qu.: 34641.3   3rd Qu.: 117.76   3rd Qu.: 4.2064  
##  Max.   :47.50   Max.   :124340.4   Max.   :6908.35   Max.   :36.7035  
##  NA's   :13                                                            
##        X5                X6               X7                X8        
##  Min.   :-0.8862   Min.   :-5.135   Min.   :-9.8453   Min.   : 34.82  
##  1st Qu.: 0.3751   1st Qu.: 1.754   1st Qu.:-1.1137   1st Qu.: 75.98  
##  Median : 1.0511   Median : 2.844   Median : 0.2912   Median : 90.02  
##  Mean   : 1.1471   Mean   : 3.064   Mean   : 0.2206   Mean   : 99.47  
##  3rd Qu.: 1.8006   3rd Qu.: 4.258   3rd Qu.: 1.9242   3rd Qu.:113.28  
##  Max.   : 4.4021   Max.   :10.076   Max.   : 6.0712   Max.   :359.14  
##                                                       NA's   :9       
##        X9                X10                 X11               X12       
##  Min.   :-1955.72   Min.   :    1.171   Min.   : 0.3357   Min.   :12.67  
##  1st Qu.:  -16.23   1st Qu.:   34.539   1st Qu.: 1.8372   1st Qu.:20.16  
##  Median :   12.94   Median :  107.796   Median : 3.6018   Median :23.08  
##  Mean   :  -14.34   Mean   :  710.336   Mean   : 6.3096   Mean   :24.52  
##  3rd Qu.:   33.35   3rd Qu.:  375.191   3rd Qu.: 7.9250   3rd Qu.:27.97  
##  Max.   :  456.49   Max.   :20935.000   Max.   :63.5000   Max.   :46.83  
##                                         NA's   :21                       
##       X13              X14         Risk Level
##  Min.   : 8.882   Min.   : 0.120   0:64      
##  1st Qu.:18.419   1st Qu.: 4.818   1:53      
##  Median :24.226   Median : 7.000             
##  Mean   :24.362   Mean   : 8.521             
##  3rd Qu.:29.249   3rd Qu.:10.300             
##  Max.   :55.089   Max.   :33.700             
##                   NA's   :12
# missing data plot
PlotMiss(invest_risk, main = "Plot of Missing Data")

Berdasarkan hasil di atas, variabel yang memiliki missing value adalah variabel X1 (11.11% atau 13 NA), X8 (7.69% atau 9 NA), X11(17.95% atau 21 NA), dan X14 (10.26% atau 12 NA).

Missing Data Handling

Multiple Imputation by Chained Equations (MICE) merupakan salah satu metode untuk mengatasi missing data (data yang hilang). MICE memberikan banyak nilai sebagai ganti satu nilai yang hilang dengan membuat serangkaian model regresi (atau model lain yang sesuai), tergantung pada parameter ‘metode’ nya. Pada proses MICE, setiap variabel yang memuat data hilang diperlakukan sebagai variabel respon, dan variabel lain dalam data diperlakukan sebagai variabel penjelas.

Berikut merupakan flowchart dari MICE:

MICE Flowchart

MICE Flowchart

Berikut merupakan hasil imputasi menggunakan MICE :

# imputation with MICE 
impute <- mice(invest_risk[,1:14], m=5, seed = 123)
## 
##  iter imp variable
##   1   1  X1  X8  X11  X14
##   1   2  X1  X8  X11  X14
##   1   3  X1  X8  X11  X14
##   1   4  X1  X8  X11  X14
##   1   5  X1  X8  X11  X14
##   2   1  X1  X8  X11  X14
##   2   2  X1  X8  X11  X14
##   2   3  X1  X8  X11  X14
##   2   4  X1  X8  X11  X14
##   2   5  X1  X8  X11  X14
##   3   1  X1  X8  X11  X14
##   3   2  X1  X8  X11  X14
##   3   3  X1  X8  X11  X14
##   3   4  X1  X8  X11  X14
##   3   5  X1  X8  X11  X14
##   4   1  X1  X8  X11  X14
##   4   2  X1  X8  X11  X14
##   4   3  X1  X8  X11  X14
##   4   4  X1  X8  X11  X14
##   4   5  X1  X8  X11  X14
##   5   1  X1  X8  X11  X14
##   5   2  X1  X8  X11  X14
##   5   3  X1  X8  X11  X14
##   5   4  X1  X8  X11  X14
##   5   5  X1  X8  X11  X14
print(impute)
## Class: mids
## Number of multiple imputations:  5 
## Imputation methods:
##    X1    X2    X3    X4    X5    X6    X7    X8    X9   X10   X11   X12   X13 
## "pmm"    ""    ""    ""    ""    ""    "" "pmm"    ""    "" "pmm"    ""    "" 
##   X14 
## "pmm" 
## PredictorMatrix:
##    X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14
## X1  0  1  1  1  1  1  1  1  1   1   1   1   1   1
## X2  1  0  1  1  1  1  1  1  1   1   1   1   1   1
## X3  1  1  0  1  1  1  1  1  1   1   1   1   1   1
## X4  1  1  1  0  1  1  1  1  1   1   1   1   1   1
## X5  1  1  1  1  0  1  1  1  1   1   1   1   1   1
## X6  1  1  1  1  1  0  1  1  1   1   1   1   1   1
impute$imp$X1
##          1       2       3       4       5
## 4   20.700 15.5888 21.6000 23.1000 14.5000
## 6   14.500 47.5000 18.6500 16.5000 24.8200
## 19  18.800 22.0000 12.7000 15.0000 18.3000
## 23  14.000 16.6643 16.9822 19.1000 23.9000
## 39  15.400 14.1400 12.7000 19.1400 14.1400
## 42  14.000  4.2000 16.6000 14.1400 18.4444
## 53  19.100 12.9000 18.7000 17.3000 16.2500
## 55  18.300 19.3188 23.9600 21.8000 13.6000
## 63  22.952 19.1400 26.0000 16.8056 14.5000
## 73  16.700 21.8000 12.0977 18.2857 14.2800
## 85  18.800 14.2800 23.9600 18.2000 16.2500
## 99  15.200 14.1400 16.7000 22.6000 16.0956
## 106 17.500 16.9822 17.7000 23.2000 15.5888
impute$imp$X8
##             1         2        3         4         5
## 7   149.03716  72.25639 78.58290  34.81845  78.58290
## 15   67.94252  88.60514 81.91411  90.19331 101.29834
## 39  116.51738  74.25542 96.57359  49.05568 117.48908
## 55  134.47988  90.19331 88.88685  72.30708  69.45587
## 63  149.03716  88.60514 83.52300 123.99717  53.29829
## 67   83.52300  84.09234 68.82672  73.69553  93.88143
## 99   79.03623  55.00000 53.29829 111.78982  67.45486
## 113  68.23179 207.31980 94.67722 185.64097 175.16013
## 115 110.63987  72.25639 34.81845  53.29829  86.56201
impute$imp$X11
##           1       2       3       4       5
## 4    9.1000 11.2000 17.0000  3.1800  2.6562
## 11   2.7000  3.6629 63.5000 24.4000  5.4000
## 13   4.8292  4.8292  1.4000  3.0600  3.1800
## 15   0.5000  9.5000  1.6900  6.0000  4.9000
## 17   4.1991  2.4292 26.9780  4.2000  2.0000
## 18  10.6000  6.0000 24.4000 24.4000  6.0000
## 30   1.0000  4.1991  1.0000  1.6600  8.3000
## 32   2.8512  2.1500  8.1550  0.5000  4.1000
## 35   8.3515  8.0000 11.6788 24.4000  3.0176
## 55   1.6900  4.5000 11.2000  4.8292  7.7000
## 57   0.9024 13.6000  8.0000  3.2000  2.3000
## 63  13.6000  1.2157 15.0000 11.2000 24.4000
## 83   1.0000  5.0000  2.1500  5.0000  2.6562
## 84   2.8512  8.3000  1.8396  5.0000 11.2000
## 85   4.1276  2.8415  1.6600  1.8500  3.0176
## 97  13.6000  1.6736  1.7229  5.4000  3.1800
## 99  20.0000 15.0000 11.1000  4.1991 11.2000
## 109 26.9780  5.0000 15.0000  6.0000 11.2000
## 110  5.4000  4.2000 17.0000 11.8000 10.3000
## 114 10.6000 10.3000  6.4000  4.1991  6.4000
## 117 10.6000 49.0000 49.0000 24.4000 10.6000
impute$imp$X14
##           1       2    3     4       5
## 3    3.0000  4.4000  5.0  6.50  4.0000
## 4    7.0000 11.4537  8.5  7.10  4.0000
## 21  23.0000  8.5000  4.0  4.50 24.6500
## 25   2.3000  7.3000 15.0 33.70  4.0000
## 45   9.5000  5.4000  8.5  4.00  9.3242
## 63   6.4000  7.8000 13.5  4.80 15.8000
## 67   5.5665  5.1000  5.4  2.30  6.0000
## 79  23.0000  9.7000  7.3  4.50 33.7000
## 86  13.2000 23.0000  4.5  4.50 33.7000
## 98  22.0000  8.5000  4.5 24.65 11.4537
## 99   4.8000 13.5000  4.0  7.10 13.2000
## 112  4.0000  4.8000  9.0 12.00  8.0000
#memasukkan data hasil imputasi
invest_risk1<- complete(impute, 5)

#cek pola data
xyplot(impute, X1 ~ X2 | .imp, pch = 20, cex=1.4)

xyplot(impute, X8 ~ X2 | .imp, pch = 20, cex=1.4)

xyplot(impute, X11 ~ X2 | .imp, pch = 20, cex=1.4)

xyplot(impute, X14 ~ X2 | .imp, pch = 20, cex=1.4)

Data hasil imputasi disimbolkan dalam titik-titik berwarna merah. Pola data di atas menunjukkan bahwa data hasil imputasi tidak berbeda jauh dengan nilai data yang lain, sehingga tidak mengubah pola data sebenarnya.

invest_risk2<-data.frame(invest_risk1, invest_risk$`Risk Level`)
colnames(invest_risk2)<-c("X1", "X2", "X3", "X4","X5", "X6", "X7", "X8","X9","X10","X11","X12", "X13", "X14", "Y")
PlotMiss(invest_risk2, main = "Plot Missing Data After Imputation")

Data Exploration and Vizualisation

attach(invest_risk2)
plot1<- ggplot(data=invest_risk2, aes(y= X1, group=Y, fill=Y)) +geom_boxplot()
plot2<- ggplot(data=invest_risk2, aes(y= X2, group=Y, fill=Y)) +geom_boxplot()
plot3<- ggplot(data=invest_risk2, aes(y= X3, group=Y, fill=Y)) +geom_boxplot()

plot4<- ggplot(data=invest_risk2, aes(y= X4, group=Y, fill=Y)) +geom_boxplot()
plot5<- ggplot(data=invest_risk2, aes(y= X5, group=Y, fill=Y)) +geom_boxplot()
plot6<- ggplot(data=invest_risk2, aes(y= X6, group=Y, fill=Y)) +geom_boxplot()

plot7<- ggplot(data=invest_risk2, aes(y= X7, group=Y, fill=Y)) +geom_boxplot()
plot8<- ggplot(data=invest_risk2, aes(y= X8, group=Y, fill=Y)) +geom_boxplot()
plot9<- ggplot(data=invest_risk2, aes(y= X9, group=Y, fill=Y)) +geom_boxplot()

plot10<- ggplot(data=invest_risk2, aes(y= X10, group=Y, fill=Y)) +geom_boxplot()
plot11<- ggplot(data=invest_risk2, aes(y= X11, group=Y, fill=Y)) +geom_boxplot()
plot12<- ggplot(data=invest_risk2, aes(y= X12, group=Y, fill=Y)) +geom_boxplot()

plot13<- ggplot(data=invest_risk2, aes(y= X13, group=Y, fill=Y)) +geom_boxplot()
plot14<- ggplot(data=invest_risk2, aes(y= X14, group=Y, fill=Y)) +geom_boxplot()
gridExtra::grid.arrange(plot1, plot2, plot3, nrow = 1, ncol=3)

Sebaran variabel X1 X2, X3 menunjukkan adanya perbedaan pada masing-masing kelas variabel respon (Risk level). Berdasarkan boxplot terlihat bahwa negara yang memiliki resiko rendah (low) adalah negara dengan nilai rata-rata capital adequacy ratio atau rasio kecukupan modal (%) dalam 5 tahun terakhir, PDB perkapita (USD), dan rata-rata Gross External Debt (% of GDP) atau utang luar negeri bruto (% PDB) dalam 5 tahun terakhir yang lebih tinggi.

gridExtra::grid.arrange(plot4, plot5, plot6, nrow = 1, ncol=3)

Sebaran variabel X4, X5 menunjukkan adanya perbedaan pada masing-masing kelas variabel respon (Risk level). Berdasarkan boxplot terlihat bahwa negara yang memiliki resiko rendah (low) adalah negara dengan nilai rata-rata growth of consumer price atau pertumbuhan harga konsumen (%) dan rata-rata growth of population atau pertumbuhan penduduk (%) dalam 5 tahun terakhir yang lebih rendah.

Sedangkan berdasarkan boxplot untuk X6 terlihat bahwa sebaran variabel pada masing-masing kelas cenderung sama. Hal tersebut menunjukkan bahwa variabel rata-rata growth of Real GDP atau pertumbuhan rata-rata PDB Riil (%) dalam 5 tahun terakhir kurang baik dalam menggambarkan kelas masing-masing variabel response (Risk Level).

gridExtra::grid.arrange(plot7,plot8,plot9, nrow = 1, ncol=3)

Berdasarkan boxplot untuk X7 terlihat bahwa sebaran variabel pada masing-masing kelas cenderung sama. Hal tersebut menunjukkan bahwa variabel rata-rata growth of Real GDP per cap atau pertumbuhan rata-rata PDB Riil per kapita (%) dalam 5 tahun terakhir kurang baik dalam menggambarkan kelas masing-masing variabel response (Risk Level).

Sebaran variabel X8 menunjukkan adanya perbedaan pada masing-masing kelas variabel respon (Risk level). Berdasarkan boxplot terlihat bahwa negara yang memiliki resiko rendah (low) adalah negara dengan nilai rata-rata Loan-deposit ratio atau Rasio pinjaman-deposit (%) dalam 5 tahun terakhir yang lebih tinggi.

Sebaran variabel X9 menunjukkan adanya perbedaan pada masing-masing kelas variabel respon (Risk level). Berdasarkan boxplot terlihat bahwa negara yang memiliki resiko rendah (low) adalah negara dengan nilai rata-rata Net External Debt (% of GDP) atau Utang Luar Negeri Bersih (% PDB) dalam 5 tahun terakhir yang lebih rendah.

gridExtra::grid.arrange(plot10, plot11, plot12, nrow = 1, ncol=3)

Sebaran variabel X10 menunjukkan adanya perbedaan pada masing-masing kelas variabel respon (Risk level). Berdasarkan boxplot terlihat bahwa negara yang memiliki resiko rendah (low) adalah negara dengan nilai PDB Nominal (USD bn) yang lebih tinggi.

Sebaran variabel X11 menunjukkan adanya perbedaan pada masing-masing kelas variabel respon (Risk level). Berdasarkan boxplot terlihat bahwa negara yang memiliki resiko rendah (low) adalah negara dengan nilai rata-rata Non-performing loans (% of gross loans) atau Kredit bermasalah (% dari pinjaman kotor) dalam 5 tahun terakhir yang lebih rendah.

Berdasarkan boxplot untuk X12 terlihat bahwa sebaran variabel pada masing-masing kelas cenderung sama. Hal tersebut menunjukkan bahwa variabel rata-rata percentage of gross domestic investment to GDP atau persentase investasi domestik bruto terhadap PDB dalam 5 tahun terakhir kurang baik dalam menggambarkan kelas masing-masing variabel response (Risk Level).

gridExtra::grid.arrange(plot13, plot14, nrow = 1, ncol=2)

Sebaran variabel X13 menunjukkan adanya perbedaan pada masing-masing kelas variabel respon (Risk level). Berdasarkan boxplot terlihat bahwa negara yang memiliki resiko rendah (low) adalah negara dengan nilai rata-rata percentage of gross domestic saving to GDP atau persentase tabungan domestik bruto terhadap PDB dalam 5 tahun terakhir yang lebih tinggi.

Sebaran variabel X14 menunjukkan adanya perbedaan pada masing-masing kelas variabel respon (Risk level). Berdasarkan boxplot terlihat bahwa negara yang memiliki resiko rendah (low) adalah negara dengan nilai rata-rata unemployment rate (% labour force) atau tingkat pengangguran (% angkatan kerja) dalam 5 tahun terakhir yang lebih rendah.

Model Building (Decision Tree)

Hyperparameter Tuning

Parameter

Berikut merupakan parameter yang akan dilakukan tuning pada decision tree:

  • minsplit : jumlah minimum pengamatan yang harus ada dalam sebuah node untuk melakukan split.

  • minbucket : jumlah minimum pengamatan di setiap terminal node.

  • maxdepth : kedalaman maksimum dari setiap simpul dari pohon terakhir, dengan simpul akar dihitung sebagai kedalaman 0.

  • cp : complexity parameter, peran utama parameter ini adalah untuk menghemat waktu komputasi dengan memangkas split yang tidak bermanfaat.

#partisi data
data.partition <- createDataPartition(Y, p = 0.8, list = F)
invest_risk3<- data.frame(invest_risk2)[data.partition,]
invest_risk3_tes<- data.frame(invest_risk2)[-data.partition,]

Task.invest <- makeClassifTask(data = invest_risk3, target = "Y")

#model tree
tree <- makeLearner("classif.rpart")

# Printing available rpart hyperparameters
getParamSet(tree)
##                    Type len  Def   Constr Req Tunable Trafo
## minsplit        integer   -   20 1 to Inf   -    TRUE     -
## minbucket       integer   -    - 1 to Inf   -    TRUE     -
## cp              numeric   - 0.01   0 to 1   -    TRUE     -
## maxcompete      integer   -    4 0 to Inf   -    TRUE     -
## maxsurrogate    integer   -    5 0 to Inf   -    TRUE     -
## usesurrogate   discrete   -    2    0,1,2   -    TRUE     -
## surrogatestyle discrete   -    0      0,1   -    TRUE     -
## maxdepth        integer   -   30  1 to 30   -    TRUE     -
## xval            integer   -   10 0 to Inf   -   FALSE     -
## parms           untyped   -    -        -   -    TRUE     -
# Defining the hyperparameter space for tuning
treeParamSpace <- makeParamSet(
  makeIntegerParam("minsplit", lower = 5, upper = 20),
  makeIntegerParam("minbucket", lower = 3, upper = 10),
  makeNumericParam("cp", lower = 0.01, upper = 0.1),
  makeIntegerParam("maxdepth", lower = 3, upper = 10))

# Defining the random search
set.seed(018)
randSearch <- makeTuneControlRandom(maxit = 200)
cvForTuning <- makeResampleDesc("CV", iters = 5)

# Performing hyperparameter tuning
parallelStartSocket(cpus = detectCores())

tunedTreePars <- tuneParams(tree, task = Task.invest,
                            resampling = cvForTuning,
                            par.set = treeParamSpace,
                            control = randSearch)

parallelStop()

tunedTreePars
## Tune result:
## Op. pars: minsplit=5; minbucket=3; cp=0.0241; maxdepth=7
## mmce.test.mean=0.1578947

Berdasarkan hasil hyperparameter tuning, diperoleh kombinasi hyperparameter terbaik dengan nilai mean misclassification error (mmce) sebesar 0.1578947.

Model

# Pemodelan dengan parameter terbaik
best.model <- rpart(Y ~ ., 
               data=invest_risk3,
               method='class',
               control=rpart.control(minsplit=5, 
                                     minbucket=3, 
                                     maxdepth=7, 
                                     cp=0.0241))

rpart.plot(best.model, roundint = FALSE,
box.palette = "BuBn",
type = 5)

Karakteristik negara dengan risiko tinggi (“0”)

  1. Suatu negara yang memiliki nilai GDP per capita kurang dari dari 15.000 USD dan rata-rata Net External Debt (% of GDP) dalam 5 tahun terakhir lebih besar sama dengan -8.9.

  2. Suatu negara yang memiliki nilai GDP per capita lebih besar dari 15.000 USD namun tidak lebih dari 25.000 USD dan rata-rata Net External Debt (% of GDP) dalam 5 tahun terakhir lebih besar sama dengan 28.

  3. Suatu negara yang memiliki nilai GDP per capita kurang dari 25.000 USD, rata-rata Net External Debt (% of GDP) dalam 5 tahun terakhir kurang dari -8.9, dan GDP Nominal kurang dari 63 USD bn.

Karakteristik negara dengan risiko rendah (“1”)

  1. Suatu negara GDP per kapita >=25.000 USD.

  2. Suatu negara yang memiliki nilai GDP lebih besar dari 15.000 USD namun tidak lebih dari 25.000 USD dan rata-rata Net External Debt (% of GDP) dalam 5 tahun terakhir lebih kurang dari 28 namun lebih besar dari -8.9.

  3. Suatu negara yang memiliki nilai GDP kurang dari 25.000 USD, rata-rata Net External Debt (% of GDP) dalam 5 tahun terakhir lebih kurang dari -8.9, dan GDP Nominal lebih besar sama dengan 63 USD bn.

Model Evaluation

prediksi.prob<- predict(best.model, invest_risk3_tes)
prediksi <- ifelse(prediksi.prob > 0.5, "1", "0")[,2]
confusionMatrix(as.factor(prediksi), as.factor(invest_risk3_tes$Y))
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  0  1
##          0 11  1
##          1  1  9
##                                           
##                Accuracy : 0.9091          
##                  95% CI : (0.7084, 0.9888)
##     No Information Rate : 0.5455          
##     P-Value [Acc > NIR] : 0.0002906       
##                                           
##                   Kappa : 0.8167          
##                                           
##  Mcnemar's Test P-Value : 1.0000000       
##                                           
##             Sensitivity : 0.9167          
##             Specificity : 0.9000          
##          Pos Pred Value : 0.9167          
##          Neg Pred Value : 0.9000          
##              Prevalence : 0.5455          
##          Detection Rate : 0.5000          
##    Detection Prevalence : 0.5455          
##       Balanced Accuracy : 0.9083          
##                                           
##        'Positive' Class : 0               
## 

Nilai akurasi data test yang dihasilkan cukup bagus, yaitu 0.9091. Adapun nilai sensitivity sebesar 0.9167 dan nilai specificity sebesar 0.90, dengan nilai balanced accuracy sebesar 0.9083. Hal tersebut mengindikasikan bahwa model baik dalam memodelkan data tingkat risiko negara.