Apa yang dimaksud fraud : Fraud is the crime of getting money by deceiving people.
Menyambung postingan terdahulu, bahwa aplikasi Benford hanya cocok untuk uji data yang sifatnya time serries, bagaimana jika data yang akan kita analisa terdiri dari banyak variable prediktor dan data target yang tidak balance.
Fraud data preparation
Kita akan ambil bahan dari dataset creditcard yang ada di Kaggle, terdiri 284315 observasi dan dicurigai ada 17% nya creditcard tsb kena fraud. Yang jadi masalah kita harus menentukan dari 17 % tersebut, berapa persenkah data yang benar-benar fraud atau hanya yang kelihatannya fraud saja.
Dimensi dataset
Dimensi dataset creditcard terdiri dari 284315 baris predictor, dan variable kolom 31, terdiri dari :
Variable Time dalah waktu dalam detik antara trasaksi pertama dan lainnya.
Variable V1 - V28, yang merupakan hasil dari transformasi PCA original data(rahasia).
Variable Amount adalah jumlah uang yang ditransfer.
Class berisi 1=fraud dan 0=bukan fraud
library(tidyverse)
# download from https://www.kaggle.com/dalpozz/creditcardfraud<- creditcard.csv="" div="" read.csv="">
->
table(creditcard$Class)
# 0 1
#284315 492
#492/284315=17%
# download from https://www.kaggle.com/dalpozz/creditcardfraud<- creditcard.csv="" div="" read.csv="">
->
table(creditcard$Class)
# 0 1
#284315 492
#492/284315=17%
creditcard
%>%
ggplot(aes(x = Class)) +
geom_bar(color = "grey", fill =
"lightgrey") +
theme_bw()
Pig1 |
Time adalah variable yang menerangkan urutan transaksi, jadi tidak benar-benar menerangkan aktual waktu transaksi. Oleh karena itu, saya menormalkan mereka dan mengelompokkan mereka menjadi empat kelompok waktu.
summary(creditcard$Time)
## Min. 1st Qu. Median
Mean 3rd Qu. Max.
## 0
54202 84692 94814
139320 172792
#
how many seconds are 24 hours
#
1 hr = 60 mins = 60 x 60 s = 3600 s
3600
* 24
##
[1] 86400
#
separate transactions by day
creditcard$day
<- ifelse(creditcard$Time > 3600 * 24, "day2",
"day1")
#
make transaction relative to day
creditcard$Time_day
<- ifelse(creditcard$day == "day2", creditcard$Time - 86400,
creditcard$Time)
summary(creditcard[creditcard$day
== "day1", ]$Time_day)
## Min. 1st Qu. Median
Mean 3rd Qu. Max.
## 0
38432 54689 52948
70977 86400
summary(creditcard[creditcard$day
== "day2", ]$Time_day)
## Min. 1st Qu. Median
Mean 3rd Qu. Max.
## 1
37843 53425 51705
68182 86392
#
bin transactions according to time of day
creditcard$Time
<- as.factor(ifelse(creditcard$Time_day <= 38138, "gr1",
# mean 1st Qu.ifelse(creditcard$Time_day <= 52327, "gr2", # mean mean
# mean 1st Qu.ifelse(creditcard$Time_day <= 52327, "gr2", # mean mean
ifelse(creditcard$Time_day
<= 69580, "gr3", # mean 3rd Qu
"gr4"))))
creditcard
%>%
ggplot(aes(x = day)) +
geom_bar(color = "grey", fill =
"lightgrey") +
theme_bw()
Pig2 |
Sekarang, saya akan hapus kolom (-Time_day)dan (-day)
creditcard
<- select(creditcard, -Time_day, -day)
#
convert class variable to factor
creditcard$Class
<- factor(creditcard$Class)
creditcard
%>%
ggplot(aes(x = Time)) +
geom_bar(color = "grey", fill =
"lightgrey") +
theme_bw() +
facet_wrap( ~ Class, scales =
"free", ncol = 2)
Pig3 |
Pig4 |
summary(creditcard[creditcard$Class
== "0", ]$Amount)
## Min.
1st Qu. Median Mean
3rd Qu. Max.
## 0.00
5.65 22.00 88.29
77.05 25691.16
summary(creditcard[creditcard$Class
== "1", ]$Amount)
## Min. 1st Qu. Median
Mean 3rd Qu. Max.
## 0.00
1.00 9.25 122.21
105.89 2125.87
creditcard
%>%
ggplot(aes(x = Amount)) +
geom_histogram(color = "grey",
fill = "lightgrey", bins = 50) +
theme_bw() +
facet_wrap( ~ Class, scales =
"free", ncol = 2)
Model.
Selanjutnya akan dibuat model untuk menyelesaikan analisa ini, analisanya akan dimuat dipostingan selanjutnya.
Tidak ada komentar:
Posting Komentar