title: “Dashboard Deteksi Outlier_Fraud Transaksi” output: flexdashboard::flex_dashboard: orientation: rows vertical_layout: fill runtime: shiny —
library(flexdashboard)
## Warning: package 'flexdashboard' was built under R version 4.4.3
library(DT)
## Warning: package 'DT' was built under R version 4.4.3
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
library(dbscan)
## Warning: package 'dbscan' was built under R version 4.4.3
##
## Attaching package: 'dbscan'
## The following object is masked from 'package:stats':
##
## as.dendrogram
library(factoextra)
## Warning: package 'factoextra' was built under R version 4.4.3
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
##baca data
dt <- read.csv("datatransaksi.csv", stringsAsFactors = FALSE)
dt <- read.delim(
"datatransaksi.csv",
sep = ";",
stringsAsFactors = FALSE
)
names(dt) <- tolower(names(dt))
names(dt) <- gsub("\\.", "_", names(dt))
dt$trx_trans_amt <- as.numeric(dt$trx_trans_amt)
colnames(dt)
## [1] "group_id" "trx_trans_date" "trx_trans_hour"
## [4] "acct_number" "trx_cd_trans_desc" "opp_acct_number"
## [7] "trx_opp_bank_cd" "trx_trans_amt"
str(dt$trx_trans_amt)
## num [1:1512] 5.86e+09 1.51e+09 1.07e+09 4.66e+09 5.70e+09 ...
Row {data-height=120}
valueBox(nrow(dt), "Jumlah Transaksi")
1512
valueBox(length(unique(dt$acct_number)), "Jumlah Rekening")
4
valueBox(sum(dt$trx_trans_amt, na.rm = TRUE), "Total Nominal")
106935364470
Row
##Tabel Transaksi
DT::datatable(dt, options = list(pageLength = 10, scrollX = TRUE))
ggplot(dt, aes(x = trx_trans_amt)) +
geom_histogram(bins = 40, fill = "#8B0A50") +
scale_x_log10() +
labs(
x = "Nominal Transaksi (log)",
y = "Frekuensi"
)
acct_feat <- aggregate(
trx_trans_amt ~ acct_number,
data = dt,
FUN = function(x) c(
frek = length(x),
total = sum(x),
rata = mean(x),
maks = max(x)
)
)
acct_feat <- do.call(data.frame, acct_feat)
DT::datatable(acct_feat)
### PCA Deteksi Outlier Rekening
row.names(acct_feat) <- acct_feat$acct_number
acct_feat$acct_number <- NULL
acct_scaled <- scale(acct_feat)
pca <- prcomp(acct_scaled)
plot(pca$x[,1], pca$x[,2],
pch = 19,
xlab = "PC1",
ylab = "PC2")
### DBSCAN Deteksi Outlier
library(dbscan)
db <- dbscan(acct_scaled, eps = 1.2, minPts = 5)
acct_feat$cluster <- db$cluster
plot(
acct_scaled[,1],
acct_scaled[,2],
col = acct_feat$cluster + 1,
pch = 19,
xlab = "Fitur 1",
ylab = "Fitur 2"
)
### Rekening Kandidat Fraud / Outlier
outlier <- acct_feat[acct_feat$cluster == 0, ]
DT::datatable(outlier)
```