Beberapa library di R dipanggil untuk mendukung analisis data, seperti caret, readxl, dplyr, dan lainnya. Library-library ini membantu dalam proses imputasi data, visualisasi, dan pembuatan model.
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
library(readxl)
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
library(mice)
##
## Attaching package: 'mice'
## The following object is masked from 'package:stats':
##
## filter
## The following objects are masked from 'package:base':
##
## cbind, rbind
library(reshape2)
library(corrplot)
## corrplot 0.95 loaded
library(ggplot2)
library(VIM)
## Loading required package: colorspace
## Loading required package: grid
## VIM is ready to use.
## Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
##
## Attaching package: 'VIM'
## The following object is masked from 'package:datasets':
##
## sleep
library(e1071)
Data dimuat menggunakan fungsi read_excel() dari file eksternal dengan dua sheet, yaitu “Training” dan “Testing”. Data ini kemudian ditampilkan menggunakan print() dan diperiksa struktur serta ringkasannya dengan str() dan summary().
train_data <- read_excel("C:\\Users\\LENOVO\\OneDrive\\Dokumen\\SMT 3\\Statistika Ekonomi & Industri\\Level Risiko Investasi.xlsx", sheet = "Training")
test_data <- read_excel("C:\\Users\\LENOVO\\OneDrive\\Dokumen\\SMT 3\\Statistika Ekonomi & Industri\\Level Risiko Investasi.xlsx", sheet = "Testing")
print(train_data)
## # 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>
print(test_data)
## # A tibble: 17 × 15
## Country X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 SE 23.2 60338. 175. 1.62 0.676 2.47 0.353 186. 64.1 538.
## 2 SG 16.8 62433. 410. 0.105 0.907 2.78 0.291 94.0 -201. 340.
## 3 SI 18.3 28684. 103. 0.844 0.0746 3.55 1.93 72.3 16.2 52.8
## 4 SK 19.7 21043. 103. 1.17 0.0734 3.22 1.23 112. 33.4 103.
## 5 SM 11.9 49356. 60.2 0.896 0.586 1.75 -1.13 88.6 -145. 1.49
## 6 SV NA 3989. 65.6 0.394 0.504 2.45 -0.125 88.9 27.3 24.6
## 7 TH 19.8 7451. 33.2 0.345 0.315 3.44 1.28 100. -42.6 502.
## 8 TN 12.9 3617. 85.3 5.56 1.12 1.61 -1.50 134. 64.5 39.2
## 9 TR 18 8653. 51.7 11.7 1.48 4.16 1.81 117. 28.6 720.
## 10 TW 14.1 31854. 48.5 0.724 0.102 2.54 2.77 71.1 -189. 668.
## 11 UA 22 3955. 104. 19.2 -0.391 0.34 1.89 72.3 -5.47 156.
## 12 UG 21.6 787. 42.3 4.29 3.66 5.74 0.421 69.5 21.9 33.5
## 13 US 16.3 69325. 104. 1.55 0.626 2.46 0.487 NA 47.7 20935
## 14 UY 17.0 15968. 73.0 8.00 0.359 0.821 -0.717 49.1 -16.2 53.6
## 15 UZ 18.4 1873. 30.0 12.3 1.61 5.84 3.07 NA -45.2 57.7
## 16 VN 12.1 3887. 34.5 2.80 0.851 6.95 5.28 86.6 7.40 352.
## 17 ZA 16.6 6405. 50.8 4.98 1.48 0.789 -2.32 107. 15.0 302.
## # ℹ 4 more variables: X11 <dbl>, X12 <dbl>, X13 <dbl>, X14 <dbl>
str(train_data)
## tibble [100 × 16] (S3: tbl_df/tbl/data.frame)
## $ Country : chr [1:100] "AD" "AE" "AE-AZ" "AE-RK" ...
## $ X1 : num [1:100] 17.5 18.2 18.7 NA 14 ...
## $ X2 : num [1:100] 38675 40105 76038 27883 4251 ...
## $ X3 : num [1:100] 172.8 103.5 31 24.8 89.6 ...
## $ X4 : num [1:100] 0.68 1.77 2.63 1.29 1.44 ...
## $ X5 : num [1:100] 1.221 0.87 1.489 1.753 0.256 ...
## $ X6 : num [1:100] 1.79 2.66 1.85 2.23 4.75 ...
## $ X7 : num [1:100] -2.084 -0.725 -1.901 -1.135 2.332 ...
## $ X8 : num [1:100] 55 103 103 103 167 ...
## $ X9 : num [1:100] -26.5 -13.6 -56.2 24.8 47.3 ...
## $ X10 : num [1:100] 2.86 352.91 199.93 10.11 12.65 ...
## $ X11 : num [1:100] 8 8.15 8.15 NA 6.6 ...
## $ X12 : num [1:100] 23.1 24.9 20.4 21.7 19.4 ...
## $ X13 : num [1:100] 26.9 32.5 31 17.3 15.1 ...
## $ X14 : num [1:100] 3 2.45 NA NA 18.5 ...
## $ Risk Level: chr [1:100] "low" "low" "low" "low" ...
str(test_data)
## tibble [17 × 15] (S3: tbl_df/tbl/data.frame)
## $ Country: chr [1:17] "SE" "SG" "SI" "SK" ...
## $ X1 : num [1:17] 23.2 16.8 18.3 19.7 11.9 ...
## $ X2 : num [1:17] 60338 62433 28684 21043 49356 ...
## $ X3 : num [1:17] 175.4 409.7 103.1 102.7 60.2 ...
## $ X4 : num [1:17] 1.62 0.105 0.844 1.174 0.896 ...
## $ X5 : num [1:17] 0.6755 0.9068 0.0746 0.0734 0.5865 ...
## $ X6 : num [1:17] 2.47 2.78 3.55 3.22 1.75 ...
## $ X7 : num [1:17] 0.353 0.291 1.93 1.232 -1.134 ...
## $ X8 : num [1:17] 185.6 94 72.3 111.8 88.6 ...
## $ X9 : num [1:17] 64.1 -201 16.2 33.4 -145.4 ...
## $ X10 : num [1:17] 537.61 339.99 52.76 102.57 1.49 ...
## $ X11 : num [1:17] 0.5 1.31 3.02 2.53 63.5 ...
## $ X12 : num [1:17] 25.1 26.8 19.9 22.8 17.8 ...
## $ X13 : num [1:17] 28 47.3 25.8 21 23.2 ...
## $ X14 : num [1:17] 8.6 3 5 7 7.3 9 2 17 13.2 3.7 ...
summary(train_data)
## Country X1 X2 X3
## Length:100 Min. : 4.20 Min. : 434.5 Min. : 13.63
## Class :character 1st Qu.:15.93 1st Qu.: 4265.9 1st Qu.: 42.96
## Mode :character Median :18.58 Median : 11659.1 Median : 70.42
## Mean :18.97 Mean : 22641.6 Mean : 191.94
## 3rd Qu.:21.80 3rd Qu.: 34815.2 3rd Qu.: 130.63
## Max. :47.50 Max. :124340.4 Max. :6908.35
## NA's :12
## X4 X5 X6 X7
## Min. :-0.151 Min. :-0.8862 Min. :-5.135 Min. :-9.84530
## 1st Qu.: 0.869 1st Qu.: 0.4419 1st Qu.: 1.765 1st Qu.:-1.18720
## Median : 1.700 Median : 1.1402 Median : 2.984 Median : 0.07155
## Mean : 3.263 Mean : 1.2019 Mean : 3.076 Mean : 0.10804
## 3rd Qu.: 3.939 3rd Qu.: 1.9502 3rd Qu.: 4.305 3rd Qu.: 1.94108
## Max. :36.703 Max. : 4.4021 Max. :10.076 Max. : 6.07120
##
## X8 X9 X10 X11
## Min. : 34.82 Min. :-1955.72 Min. : 1.171 Min. : 0.3357
## 1st Qu.: 76.95 1st Qu.: -14.11 1st Qu.: 32.813 1st Qu.: 1.9250
## Median : 90.19 Median : 12.67 Median : 106.872 Median : 3.9000
## Mean : 99.94 Mean : -13.58 Mean : 582.318 Mean : 5.5346
## 3rd Qu.:113.39 3rd Qu.: 36.67 3rd Qu.: 366.370 3rd Qu.: 7.9500
## Max. :359.14 Max. : 456.49 Max. :14866.703 Max. :26.9780
## NA's :7 NA's :17
## X12 X13 X14 Risk Level
## Min. :12.67 Min. :10.95 Min. : 0.120 Length:100
## 1st Qu.:20.79 1st Qu.:19.06 1st Qu.: 4.818 Class :character
## Median :23.40 Median :24.28 Median : 6.800 Mode :character
## Mean :24.96 Mean :24.48 Mean : 8.441
## 3rd Qu.:28.38 3rd Qu.:29.36 3rd Qu.:10.500
## Max. :46.83 Max. :55.09 Max. :24.650
## NA's :11
summary(test_data)
## Country X1 X2 X3
## Length:17 Min. :11.90 Min. : 786.9 Min. : 30.05
## Class :character 1st Qu.:15.76 1st Qu.: 3955.1 1st Qu.: 48.51
## Mode :character Median :17.52 Median : 8653.0 Median : 65.56
## Mean :17.42 Mean :22330.4 Mean : 92.59
## 3rd Qu.:19.70 3rd Qu.:31854.3 3rd Qu.:103.06
## Max. :23.20 Max. :69324.7 Max. :409.70
## NA's :1
## X4 X5 X6 X7
## Min. : 0.1051 Min. :-0.3906 Min. :0.340 Min. :-2.3230
## 1st Qu.: 0.8435 1st Qu.: 0.3153 1st Qu.:1.754 1st Qu.:-0.1248
## Median : 1.6200 Median : 0.6255 Median :2.539 Median : 0.4867
## Mean : 4.4949 Mean : 0.8249 Mean :2.994 Mean : 0.8826
## 3rd Qu.: 5.5560 3rd Qu.: 1.1173 3rd Qu.:3.553 3rd Qu.: 1.8906
## Max. :19.1730 Max. : 3.6551 Max. :6.946 Max. : 5.2762
##
## X8 X9 X10 X11
## Min. : 49.06 Min. :-200.98 Min. : 1.491 Min. : 0.500
## 1st Qu.: 72.28 1st Qu.: -42.56 1st Qu.: 52.762 1st Qu.: 1.571
## Median : 88.89 Median : 15.04 Median : 155.582 Median : 2.530
## Mean : 96.54 Mean : -18.76 Mean : 1463.386 Mean :11.258
## 3rd Qu.:109.52 3rd Qu.: 28.57 3rd Qu.: 501.644 3rd Qu.: 3.336
## Max. :185.64 Max. : 64.46 Max. :20935.000 Max. :63.500
## NA's :2 NA's :4
## X12 X13 X14
## Min. :16.45 Min. : 8.882 Min. : 2.000
## 1st Qu.:17.79 1st Qu.:17.208 1st Qu.: 4.675
## Median :22.03 Median :23.211 Median : 7.150
## Mean :21.91 Mean :23.693 Mean : 8.963
## 3rd Qu.:24.86 3rd Qu.:27.953 3rd Qu.: 9.700
## Max. :31.60 Max. :47.254 Max. :33.700
## NA's :1
Nama kolom diformat ulang dengan make.names() agar sesuai dengan format R, dan tipe data variabel target (Risk.Level) diubah menjadi faktor. Dimana ini menjadi penting untuk pemrosesan data.
colnames(train_data) <- make.names(colnames(train_data))
colnames(test_data) <- make.names(colnames(test_data))
train_data$Risk.Level <- as.factor(train_data$Risk.Level)
str(train_data)
## tibble [100 × 16] (S3: tbl_df/tbl/data.frame)
## $ Country : chr [1:100] "AD" "AE" "AE-AZ" "AE-RK" ...
## $ X1 : num [1:100] 17.5 18.2 18.7 NA 14 ...
## $ X2 : num [1:100] 38675 40105 76038 27883 4251 ...
## $ X3 : num [1:100] 172.8 103.5 31 24.8 89.6 ...
## $ X4 : num [1:100] 0.68 1.77 2.63 1.29 1.44 ...
## $ X5 : num [1:100] 1.221 0.87 1.489 1.753 0.256 ...
## $ X6 : num [1:100] 1.79 2.66 1.85 2.23 4.75 ...
## $ X7 : num [1:100] -2.084 -0.725 -1.901 -1.135 2.332 ...
## $ X8 : num [1:100] 55 103 103 103 167 ...
## $ X9 : num [1:100] -26.5 -13.6 -56.2 24.8 47.3 ...
## $ X10 : num [1:100] 2.86 352.91 199.93 10.11 12.65 ...
## $ X11 : num [1:100] 8 8.15 8.15 NA 6.6 ...
## $ X12 : num [1:100] 23.1 24.9 20.4 21.7 19.4 ...
## $ X13 : num [1:100] 26.9 32.5 31 17.3 15.1 ...
## $ X14 : num [1:100] 3 2.45 NA NA 18.5 ...
## $ Risk.Level: Factor w/ 2 levels "high","low": 2 2 2 2 1 1 1 2 2 1 ...
colSums(is.na()) digunakan untuk menghitung jumlah nilai yang hilang di setiap kolom dalam data.
colSums(is.na(train_data))
## Country X1 X2 X3 X4 X5 X6
## 0 12 0 0 0 0 0
## X7 X8 X9 X10 X11 X12 X13
## 0 7 0 0 17 0 0
## X14 Risk.Level
## 11 0
colSums(is.na(test_data))
## Country X1 X2 X3 X4 X5 X6 X7 X8 X9
## 0 1 0 0 0 0 0 0 2 0
## X10 X11 X12 X13 X14
## 0 4 0 0 1
aggr(train_data)
Missing value diimputasi menggunakan metode Predictive Mean Matching (pmm) dari package mice. Data hasil imputasi ditampilkan dan diperiksa kembali untuk memastikan tidak ada missing value.
train_data_imp <- mice(train_data, m = 10, method = "pmm", 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
## 1 6 X1 X8 X11 X14
## 1 7 X1 X8 X11 X14
## 1 8 X1 X8 X11 X14
## 1 9 X1 X8 X11 X14
## 1 10 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
## 2 6 X1 X8 X11 X14
## 2 7 X1 X8 X11 X14
## 2 8 X1 X8 X11 X14
## 2 9 X1 X8 X11 X14
## 2 10 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
## 3 6 X1 X8 X11 X14
## 3 7 X1 X8 X11 X14
## 3 8 X1 X8 X11 X14
## 3 9 X1 X8 X11 X14
## 3 10 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
## 4 6 X1 X8 X11 X14
## 4 7 X1 X8 X11 X14
## 4 8 X1 X8 X11 X14
## 4 9 X1 X8 X11 X14
## 4 10 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
## 5 6 X1 X8 X11 X14
## 5 7 X1 X8 X11 X14
## 5 8 X1 X8 X11 X14
## 5 9 X1 X8 X11 X14
## 5 10 X1 X8 X11 X14
## Warning: Number of logged events: 1
train_data_comp <- complete(train_data_imp, action = 10)
aggr(train_data_comp)
aggr(test_data)
test_data_imp <- mice(test_data)
##
## 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
## Warning: Number of logged events: 31
test_data_comp <- complete(test_data_imp)
aggr(test_data_comp)
train_data_comp$Risk.Level <- as.factor(train_data_comp$Risk.Level)
set.seed(123)
train_index <- createDataPartition(train_data_comp$Risk.Level, p = 0.8, list = FALSE)
train_data <- train_data_comp[train_index,]
test_data <- train_data_comp[-train_index,]
str(train_data)
## 'data.frame': 81 obs. of 16 variables:
## $ Country : chr "AE" "AE-AZ" "AE-RK" "AR" ...
## $ X1 : num 18.2 18.7 22.7 23.3 18.6 ...
## $ X2 : num 40105 76038 27883 9203 53174 ...
## $ X3 : num 103.5 31 24.8 43.3 159.4 ...
## $ X4 : num 1.77 2.63 1.29 36.7 1.52 ...
## $ X5 : num 0.87 1.489 1.753 0.966 0.726 ...
## $ X6 : num 2.659 1.85 2.232 -0.237 1.88 ...
## $ X7 : num -0.725 -1.901 -1.135 -3.73 -0.3 ...
## $ X8 : num 102.5 102.5 102.5 50.1 116.4 ...
## $ X9 : num -13.6 -56.24 24.79 -5.01 15.37 ...
## $ X10 : num 352.9 199.9 10.1 375.2 430 ...
## $ X11 : num 8.15 8.15 6.2 10.6 2.02 ...
## $ X12 : num 24.9 20.4 21.7 16.7 24.8 ...
## $ X13 : num 32.5 31 17.3 13.8 26.9 ...
## $ X14 : num 2.45 4.9 7.5 11.05 6 ...
## $ Risk.Level: Factor w/ 2 levels "high","low": 2 2 2 1 2 2 1 1 2 2 ...
str(test_data)
## 'data.frame': 19 obs. of 16 variables:
## $ Country : chr "AD" "AM" "AO" "BD" ...
## $ X1 : num 17.5 14 16 4.2 19.3 ...
## $ X2 : num 38675 4251 2034 2324 89771 ...
## $ X3 : num 172.8 89.6 57.1 19.7 275.6 ...
## $ X4 : num 0.68 1.44 22.35646 5.812 0.00116 ...
## $ X5 : num 1.221 0.256 3.342 1.057 0.84 ...
## $ X6 : num 1.786 4.748 -0.878 7.39 1.885 ...
## $ X7 : num -2.084 2.332 -5.203 6.071 0.173 ...
## $ X8 : num 55 166.8 34.8 78.4 82.5 ...
## $ X9 : num -26.52 47.27 15.45 4.92 -152.44 ...
## $ X10 : num 2.86 12.65 62.49 347.15 749.02 ...
## $ X11 : num 8 6.6 10.3 7.7 0.75 ...
## $ X12 : num 23.1 19.4 31.1 32.7 24.4 ...
## $ X13 : num 26.9 15.1 20.6 32.2 32.8 ...
## $ X14 : num 3 18.5 10.5 5 3.17 ...
## $ Risk.Level: Factor w/ 2 levels "high","low": 2 1 1 1 2 1 2 1 2 2 ...
train_data <- train_data[, -which(names(train_data) == "Country")]
test_data <- test_data[, -which(names(test_data) == "Country")]
dim(train_data_comp)
## [1] 100 16
dim(test_data_comp)
## [1] 17 15
Model Support Vector Machine (SVM) dengan kernel linear dibuat untuk memprediksi tingkat risiko investasi (Risk.Level) menggunakan semua variabel prediktor.Menggunakan library ‘caret, ’e1071’ dan ‘ggplot2’ untuk membuat model SVM linear. Ini dikonfigurasi untuk memprediksi ‘Risk.Level’ berdasarkan semua fitur (‘.’) dalam (‘train_data’)
svm_model <- svm(Risk.Level ~ ., data = train_data, kernel = "linear")
Model SVM yang telah dibentuk digunakan untuk memprediksi nilai pada data uji.
svm_pred <- predict(svm_model, newdata = test_data)
print(svm_pred)
## 1 5 6 12 22 30 32 42 50 51 58 62 66 68 71 73
## low high high high low high low high low high high low high low high high
## 75 93 94
## low high low
## Levels: high low
Akurasi model dihitung dengan membandingkan prediksi model dengan label sebenarnya dari data uji.Akurasi model dihitung dengan menghitung persentase prediksi yang benar (‘svm_pred’) dibandingkan dengan label aktual (‘test_data$Risk.Level’)
accuracy_svm <- sum(svm_pred == test_data$Risk.Level) / nrow(test_data)
print(paste("SVM Akurasi:", accuracy_svm))
## [1] "SVM Akurasi: 0.947368421052632"
Confusion matrix dibuat untuk mengevaluasi kinerja model SVM, yang memberikan rincian tentang prediksi yang benar dan salah. Script juga membuat matrix confusio untuk melihat presisi model SVM
confusionMatrix <- confusionMatrix(as.factor(svm_pred), as.factor(test_data$Risk.Level))
print(confusionMatrix)
## Confusion Matrix and Statistics
##
## Reference
## Prediction high low
## high 10 1
## low 0 8
##
## Accuracy : 0.9474
## 95% CI : (0.7397, 0.9987)
## No Information Rate : 0.5263
## P-Value [Acc > NIR] : 9.149e-05
##
## Kappa : 0.8939
##
## Mcnemar's Test P-Value : 1
##
## Sensitivity : 1.0000
## Specificity : 0.8889
## Pos Pred Value : 0.9091
## Neg Pred Value : 1.0000
## Prevalence : 0.5263
## Detection Rate : 0.5263
## Detection Prevalence : 0.5789
## Balanced Accuracy : 0.9444
##
## 'Positive' Class : high
##
Confusion matrix dikonversi menjadi data frame untuk keperluan visualisasi selanjutnya.
confusion_data <- as.data.frame(confusionMatrix$table)
library(ggplot2)
Heatmap dari confusion matrix dibuat menggunakan ggplot2 untuk memvisualisasikan hubungan antara prediksi dan nilai sebenarnya.
ggplot(confusion_data, aes(x = Prediction, y = Reference, fill = Freq)) +
geom_tile(color = "white") +
scale_fill_gradient(low = "white", high = "orange") +
labs(title = "Confusion Matrix: Test Data vs Prediksi", x = "Predicted", y = "Actual") +
theme_minimal()
Scatter plot dibuat untuk melihat sebaran data berdasarkan dua variabel di data latih.
ggplot(train_data, aes(x = X1, y = Risk.Level, color = Risk.Level)) +
geom_point() +
labs(title = "Scatter Plot Train Data", x = "X1", y = "Risk.Level")
ggplot(test_data, aes(x = X1, y = Risk.Level, color = Risk.Level)) +
geom_point() +
labs(title = "Scatter Plot Test Data", x = "X1", y = "Risk.Level")
Plot distribusi (density plot) dibuat untuk melihat sebaran data di antara kategori Risk.Level dalam data latih dan uji.
ggplot(train_data, aes(x = X1, fill = Risk.Level)) +
geom_density(alpha = 0.5) +
labs(title = "Density Plot - Train Data Berdasarkan Risk Level", x = "X1")
ggplot(test_data, aes(x = Risk.Level, fill = Risk.Level)) +
geom_density(alpha = 0.5) +
labs(title = "Density Plot - Test Data Berdasarkan Risk Level", x = "Risk.Level")
Plot garis dibuat untuk melihat perubahan data dari waktu ke waktu, berdasarkan variabel X1 dan Risk.Level.
library(ggplot2)
ggplot(train_data, aes(x = X1, y = Risk.Level, color = Risk.Level)) +
geom_line() +
labs(title = "Line Plot Train Data Berdasarkan Waktu", x = "X1", y = "Risk.Level")
ggplot(test_data, aes(x = X1 , y = Risk.Level, color = Risk.Level)) +
geom_line() +
labs(title = "Line Plot Test Data Berdasarkan Waktu", x = "X1", y = "Risk.Level")
df <- data.frame(
x = rep(1:5, each=5),
y = rep(1:5, times=5),
Freq = sample(1:100, 25, replace=TRUE)
)
Line plot dan heatmap dibuat dari data frame sampel untuk keperluan visualisasi tambahan.
library(ggplot2)
ggplot(train_data, aes(x = X1, y = Risk.Level)) +
geom_line(color = "blue") +
labs(title = "Train Data - Line Plot", x = "X Axis", y = "Y Axis")
ggplot(test_data, aes(x = X1, y = Risk.Level)) +
geom_line(color = "red") +
labs(title = "Test Data - Line Plot", x = "X Axis", y = "Y Axis")
ggplot(df, aes(x = x, y = y, fill = Freq)) +
geom_tile(color = "black") +
scale_fill_gradient(low = "white", high = "purple") +
theme_minimal()
Berdasarkan plot diatas, diketahui : x = nilai akurasi y = nilai prediksi Freq = frekuensi atau intensitas
keterangan : 1. skala warna ~ Low = “white” menunjukkan nilai frekuensi rendah dimana intensitas warna putih menunjukkan sedikit atau tidak ada frekuensi ~ High = “purple” menunjukkan nilai frekuensi yang tinggi dimana dengan intensitas warna ungu menunjukkan banyaknya frekuensi 2. interpretasi visual ~ area dengan warna putih menunjukkan kombinasi nilai aktual dan prediksi yang memiliki frekuensi rendah, yang berarti model mungkin kurang akurat pada titik tersebut ~ dan sebaliknya, area dengan warna ungu menunjukkan kombinasi nilai aktual dan prediksi yang memiliki frekuensi tinggi, menunjukkan bahwa model berhasil memprediksi dengan baik pada titik tersebut
kesimpulan : Dalam keseluruhan hasil proses analisis ini, kita berhasil mengolah data yang kompleks hingga dapat digunakan dalam pembuatan model prediktif yang efektif. Model SVM telah terbukti memiliki potensi besar dalam mendeteksi tingkat risiko investasi dengan akurasi yang cukup baik. namun perlu dilakukan evaluasi lebih lanjut guna meningkatkan performa hasil.