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)

```