Zaman özellikleri

R ile Dolandırıcılık Tespiti

Bart Baesens

Professor Data Science at KU Leuven

Zamanı analiz etme

  • Bazı olayların benzer zamanlarda gerçekleşmesi beklenir
  • Örnek: müşterinin benzer saatlerde işlem yapması
  • Amaç: zaman boyutunu anlamlı özelliklerle yakalamak
  • Zamanla çalışmak çetrefilli olabilir
    • 00:00 = 24:00
    • Doğal bir sıralama yok; örneğin 23:00 $<$ veya $>$ 01:00?
R ile Dolandırıcılık Tespiti
  • Ortalama zaman damgasını hesaplamak için aritmetik ortalamayı kullanma!
    • Örnek: işlemler 01:00, 02:00, 21:00 ve 22:00'de yapılmış
    • aritmetik ortalama 11:30 çıkar, ama o saate yakın hiç işlem yok!
head(timestamps)
"20:27:28" "21:08:41" "01:30:16" "00:57:04" "23:12:14" "22:54:16"
  • Dijital zaman damgalarını saat cinsinden ondalık biçime çevir
library(lubridate)
ts <- as.numeric(hms(timestamps)) / 3600

head(ts)
20.4577778 21.1447222  1.5044444  0.9511111 23.2038889 22.9044444
R ile Dolandırıcılık Tespiti

Dairesel histogram

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)
R ile Dolandırıcılık Tespiti

Aritmetik ortalamalı dairesel histogram

yanlis_saat

R ile Dolandırıcılık Tespiti

von Mises olasılık dağılımı

  • Zamanı periyodik bir değişken olarak von Mises dağılımı ile modelle (Correa Bahnsen vd., 2016)
  • Periyodik normal dağılım = normalin bir çember etrafına sarılmış hali
  • Zaman damgaları kümesinin von Mises dağılımı $D= $ {$t_1, t_2, \ldots, t_n$}

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

  • $\mu$ : periyodik ortalama, konum ölçüsü; dağılım $\mu$ çevresinde toplanır
  • $1/\kappa$ : periyodik varyans; $\kappa$ yoğunluk ölçüsüdür
R ile Dolandırıcılık Tespiti

Parametreleri tahmin et: $\mu$ ve $\kappa$

# Ondalık zaman damgalarını "circular" sınıfına dönüştür
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
R ile Dolandırıcılık Tespiti

Periyodik ortalamalı dairesel histogram

dogru_saat

R ile Dolandırıcılık Tespiti

Güven aralığı

  • Yeni özellikler çıkar: bir işlemin zamanı için güven aralığı
  • $S= $ {$x_i^{time}|i=1,\ldots,n$} : aynı müşterinin yaptığı işlemler kümesi

(1) mle.vonmises() ile $S$ üzerinden $\mu(S)$ ve $\kappa(S)$ tahmin et:

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

(2) dvonmises() ile zaman damgalarının yoğunluğunu (= olabilirlik) hesapla:

densities <- dvonmises(ts, mu = p_mean, kappa = concentration)
R ile Dolandırıcılık Tespiti

Özellik çıkarımı

  • İkili özellik: yeni işlemin zaman damgası, $\alpha$ olasılıkla (örn. 0.90, 0.95) GA içinde ya da değil
  • İkili zaman özelliği, zaman damgası GA içinde ise TRUE, değilse FALSE olur
  • Zaman damgası, yoğunluğu eşik değerden büyükse %90 GA içindedir:
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
R ile Dolandırıcılık Tespiti

Güven aralığı

guven_araligi_saat

R ile Dolandırıcılık Tespiti

Güven aralığı

guven_araligi_saat_2

R ile Dolandırıcılık Tespiti

Örnek

$$ $$ zaman_tablo

R ile Dolandırıcılık Tespiti

Hareketli zaman penceresiyle güven aralığı

## ts, 18.42, 20.45, 20.88, 0.75, 19.20, 23.65 ve 6.08 zaman damgalarını içerir

time_feature = c(NA, NA) for (i in 3:length(ts)) { ts_history <- ts[1:(i-1)] ## (1) Önceki zaman damgaları
estimates <- mle.vonmises(ts_history) ## (2) Geçmiş zaman damgalarında mu ve kappa tahmin et p_mean <- estimates$mu %% 24 concentration <- estimates$kappa
dens_i <- dvonmises(ts[i], mu = p_mean, kappa = concentration) ## (3) Geçerli zaman damgasının yoğunluğunu tahmin et
alpha <- 0.90 ## (4) %90 güven düzeyiyle yoğunluk eşikten büyük mü kontrol et 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
R ile Dolandırıcılık Tespiti

Hadi pratik yapalım!

R ile Dolandırıcılık Tespiti

Preparing Video For Download...