Caratteristiche temporali

Rilevamento delle frodi in R

Bart Baesens

Professor Data Science at KU Leuven

Analizzare il tempo

  • Alcuni eventi tendono a verificarsi in momenti simili
  • Esempio: un cliente effettua transazioni a ore simili
  • Obiettivo: catturare l’informazione temporale con feature utili
  • Gestire il tempo è insidioso
    • 00:00 = 24:00
    • Nessun ordine naturale: 23:00 < o > 01:00?
Rilevamento delle frodi in R
  • Non usare la media aritmetica per l’ora media!
    • Esempio: transazioni alle 01:00, 02:00, 21:00 e 22:00
    • la media aritmetica è 11:30, ma non c’è alcuna operazione vicino a quell’ora!
head(timestamps)
"20:27:28" "21:08:41" "01:30:16" "00:57:04" "23:12:14" "22:54:16"
  • Converti i timestamp digitali in decimale (ore)
library(lubridate)
ts <- as.numeric(hms(timestamps)) / 3600

head(ts)
20.4577778 21.1447222  1.5044444  0.9511111 23.2038889 22.9044444
Rilevamento delle frodi in R

Istogramma circolare

library(ggplot2)

clock <- ggplot(data.frame(ts), aes(x = ts)) +
    geom_histogram(breaks = seq(0, 24), colour = "blue", fill = "lightblue") +
    coord_polar()


arithmetic_mean <- mean(ts) clock + geom_vline(xintercept = arithmetic_mean, linetype = 2, color = "red", size = 2)
Rilevamento delle frodi in R

Istogramma circolare con media aritmetica

orologio_errato

Rilevamento delle frodi in R

Distribuzione di probabilità di von Mises

  • Modella il tempo come variabile periodica con la distribuzione di von Mises (Correa Bahnsen et al., 2016)
  • Normale periodica = normale avvolta su un cerchio
  • Distribuzione di von Mises per timestamp $D= $ {$t_1, t_2, \ldots, t_n$}

$$D\sim vonMises\left(\mu,\kappa\right)$$

  • $\mu$ : media periodica (posizione), la distribuzione si concentra intorno a $\mu$
  • $1/\kappa$ : varianza periodica; $\kappa$ misura la concentrazione
Rilevamento delle frodi in R

Stima dei parametri $\mu$ e $\kappa$

# Converti i timestamp decimali in classe "circular"
library(circular)
ts <- circular(ts, units = "hours", template = "clock24")

head(ts)
Circular Data: 
[1] 20.457889 21.144607  1.504422  0.950982 23.203917  4.904397
estimates <- mle.vonmises(ts)
p_mean <- estimates$mu %% 24
concentration <- estimates$kappa
Rilevamento delle frodi in R

Istogramma circolare con media periodica

orologio_corretto

Rilevamento delle frodi in R

Intervallo di confidenza

  • Estrai nuove feature: intervallo di confidenza per l’ora di una transazione
  • $S= $ {$x_i^{time}|i=1,\ldots,n$} : insieme di transazioni dello stesso cliente

(1) Stima $\mu(S)$ e $\kappa(S)$ su $S$ con mle.vonmises():

estimates <- mle.vonmises(ts)
p_mean <- estimates$mu %% 24
concentration <- estimates$kappa

(2) Calcola la densità (= verosimiglianza) dei timestamp con dvonmises():

densities <- dvonmises(ts, mu = p_mean, kappa = concentration)
Rilevamento delle frodi in R

Estrazione di feature

  • Feature binaria: il timestamp di una nuova transazione è nel confidence interval (CI) con probabilità $\alpha$ (es. 0,90; 0,95) oppure no
  • La feature temporale è TRUE se il timestamp è nel CI, altrimenti FALSE
  • Il timestamp è nel CI al 90% se la sua densità è maggiore della soglia (cutoff):
alpha <- 0.90
quantile <- qvonmises(p = (1 - alpha)/2, 
                        mu = p_mean,
                        kappa = concentration) %% 24
cutoff <- dvonmises(quantile,
                      mu = p_mean, kappa = concentration)

time_feature <- densities >= cutoff
Rilevamento delle frodi in R

Intervallo di confidenza

orologio_confidenza

Rilevamento delle frodi in R

Intervallo di confidenza

orologio_confidenza_2

Rilevamento delle frodi in R

Esempio

$$ $$ tabella_tempi

Rilevamento delle frodi in R

Intervallo di confidenza con finestra temporale mobile

## ts contiene i timestamp 18.42, 20.45, 20.88, 0.75, 19.20, 23.65 e 6.08

time_feature = c(NA, NA) for (i in 3:length(ts)) { ts_history <- ts[1:(i-1)] ## (1) Timestamp precedenti
estimates <- mle.vonmises(ts_history) ## (2) Stima mu e kappa sui timestamp storici p_mean <- estimates$mu %% 24 concentration <- estimates$kappa
dens_i <- dvonmises(ts[i], mu = p_mean, kappa = concentration) ## (3) Stima la densità del timestamp corrente
alpha <- 0.90 ## (4) Verifica se la densità supera la soglia con confidenza 90% quantile <- qvonmises((1-alpha)/2, mu=p_mean, kappa=concentration) %% 24 cutoff <- dvonmises(quantile, mu = p_mean, kappa = concentration) time_feature[i] <- dens_i >= cutoff }
print(time_feature)
NA    NA  TRUE FALSE  TRUE  TRUE FALSE
Rilevamento delle frodi in R

Ayo berlatih!

Rilevamento delle frodi in R

Preparing Video For Download...