Détection de la fraude en R
Tim Verdonck
Professor Data Science at KU Leuven
Virements effectués par Alice et Bob :
trans %>% select(fraud_flag, orig_account_id,
benef_country, authentication_cd, channel_cd, amount)
fraud_flag account_name benef_country authentication_cd channel_cd amount
1 0 Bob ISO03 AU02 CH07 549
2 0 Alice ISO03 AU03 CH04 37
3 0 Bob ISO03 AU04 CH07 25
4 0 Bob ISO03 AU02 CH06 25
5 0 Alice ISO03 AU01 CH07 13
... ... ... ... ... ... ...
37 0 Bob ISO03 AU02 CH06 22
38 0 Alice ISO03 AU03 CH04 41
39 1 Bob ISO03 AU03 CH05 3779
40 1 Alice ISO03 AU04 CH05 1531
Méthodes d'authentification utilisées par Alice :
fraud_flag
authentication_cd 0 1
AU01 6 0
AU02 0 0
AU03 7 0
AU04 0 1
AU05 9 0
Méthodes d'authentification utilisées par Alice :
fraud_flag
authentication_cd 0 1
AU01 6 0
AU02 0 0
AU03 7 0
AU04 0 1
AU05 9 0
Méthodes d'authentification utilisées par Bob :
fraud_flag
authentication_cd 0 1
AU01 1 0
AU02 8 0
AU03 0 1
AU04 7 0
AU05 0 0
Trier les données par ordre chronologique
library(dplyr)
trans <- trans %>% arrange(timestamp)
Trier les données par ordre chronologique
library(dplyr)
trans <- trans %>% arrange(timestamp)
Données d'Alice :
trans_Alice <- trans %>% filter(account_name == "Alice")
Trier les données par ordre chronologique
library(dplyr)
trans <- trans %>% arrange(timestamp)
Données d'Alice :
trans_Alice <- trans %>% filter(account_name == "Alice")
authentication_cd freq_auth
AU03 0
Étape 1 : créer la fonction frequency_fun
La fonction compte le nombre de virements précédents ayant la même méthode d'authentification que l'actuelle :
frequency_fun <- function(steps, auth_method) {
n <- length(steps)
frequency <- sum(auth_method[1:n] == auth_method[n + 1])
return(frequency)
}
steps authentication_cd freq_auth
AU03 0
1 AU03 1
Étape 1 : créer la fonction frequency_fun
frequency_fun <- function(steps, auth_method) {
n <- length(steps)
frequency <- sum(auth_method[1:n] == auth_method[n + 1])
return(frequency)
}
steps authentication_cd freq_auth
AU03 0
1 AU03 1
2 AU03 2
Étape 1 : créer la fonction frequency_fun
frequency_fun <- function(steps, auth_method) {
n <- length(steps)
frequency <- sum(auth_method[1:n] == auth_method[n + 1])
return(frequency)
}
steps authentication_cd freq_auth
AU03 0
1 AU03 1
2 AU03 2
3 AU01 0
Étape 1 : créer la fonction frequency_fun
frequency_fun <- function(steps, auth_method) {
n <- length(steps)
frequency <- sum(auth_method[1:n] == auth_method[n + 1])
return(frequency)
}
steps authentication_cd freq_auth
AU03 0
1 AU03 1
2 AU03 2
3 AU01 0
4 AU01 1
Étape 2 : utiliser rollapply du paquet zoo
library(zoo)
freq_auth <- rollapply(trans_Alice$transfer_id,
width = list(-1:-length(trans_Alice$transfer_id)),
partial = TRUE,
FUN = frequency_fun,
trans_Alice$authentication_cd)
Étape 2 : utiliser rollapply du paquet zoo
library(zoo)
freq_auth <- rollapply(trans_Alice$transfer_id,
width = list(-1:-length(trans_Alice$transfer_id)),
partial = TRUE,
FUN = frequency_fun,
trans_Alice$authentication_cd)
Étape 3 : la caractéristique de fréquence commence à zéro
freq_auth <- c(0, freq_auth)
authentication_cd freq_auth fraud_flag
1 AU03 0 0
2 AU03 1 0
3 AU03 2 0
4 AU01 0 0
5 AU01 1 0
6 AU05 0 0
7 AU05 1 0
8 AU05 2 0
9 AU01 2 0
10 AU05 3 0
11 AU05 4 0
12 AU05 5 0
13 AU03 3 0
14 AU05 6 0
15 AU01 3 0
Étape 1 : regrouper les données par account_name :
trans %>% group_by(account_name)
Étape 2 : utiliser group_by() et mutate() du paquet dplyr
trans <- trans %>% group_by(account_name) %>%
mutate(freq_auth = c(0,
rollapplyr(transfer_id,
width = list(-1:-length(transfer_id)),
partial = TRUE,
FUN = count_fun, authentication_cd)
)
)
account_name authentication_cd freq_auth fraud_flag
1 Bob AU02 0 0
2 Alice AU03 0 0
3 Bob AU04 0 0
4 Bob AU02 1 0
5 Alice AU01 0 0
6 Bob AU02 2 0
7 Alice AU03 1 0
8 Bob AU02 3 0
... ... ... ... ...
37 Bob AU02 7 0
38 Alice AU03 5 0
39 Bob AU03 0 1
40 Alice AU04 0 1
Détection de la fraude en R