Veri kümesinden tespit modeline

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

Sebastiaan Höppner

PhD researcher in Data Science at KU Leuven

Yol haritası

  • (1) Veri kümesini eğitim ve test olarak ayır
  • (2) Bir Machine Learning modeli seç
  • (3) Sınıf dağılımını dengelemek için eğitimde SMOTE uygula
  • (4) Yeniden dengelenmiş eğitim kümesiyle modeli eğit
  • (5) (Orijinal) test kümesinde performansı test et
R ile Dolandırıcılık Tespiti

Veri kümesini eğitim ve test olarak ayır

  • Veri kümesini eğitim ve test olarak ayır (örn. 50/50, 75/25, ...)
  • Başta her iki kümede de sınıf dağılımı aynı olsun
  • Örnek: %50 eğitim ve %50 test
prop.table(table(train$Class))
   0    1 
0.98 0.02
prop.table(table(test$Class))
   0    1 
0.98 0.02
R ile Dolandırıcılık Tespiti

Machine Learning modelini seç ve eğit

  • Karar ağacı, yapay sinir ağı, destek vektör makineleri, lojistik regresyon, rastgele orman, Naive Bayes, k-En Yakın Komşu, ...
  • Örnek: Classification And Regression Tree (CART) algoritması
  • rpart paketindeki rpart fonksiyonu
library(rpart)

model1 = rpart(Class ~ ., data = train)
R ile Dolandırıcılık Tespiti
library(partykit)
plot(as.party(model1))

tree1

R ile Dolandırıcılık Tespiti
## Test kümesinin sahtekarlık olasılığını tahmin et
scores1 = predict(model1, newdata = test, type = "prob")[, 2]

## Test kümesinin sınıfını (sahtekarlık/normal) tahmin et predicted_class1 = factor(ifelse(scores1 > 0.5, 1, 0))
## Karmaşıklık matrisi & doğruluk, library(caret) CM1 = confusionMatrix(data = predicted_class1, reference = test$Class)
          Reference         
Prediction     0     1
         0 12046    55
         1     8   191       Accuracy : 0.994878
library(pROC)
auc(roc(response = test$Class, predictor = scores1)) ## ROC Eğrisi Altındaki Alan (AUC)
Area under the ROC curve: 0.8938
R ile Dolandırıcılık Tespiti

Eğitim kümesinde SMOTE uygula

library(smotefamily)
set.seed(123)

smote_result = SMOTE(X = train[, -17],
                     target = train$Class,
                     K = 5,
                     dup_size = 10)

train_oversampled = smote_result$data colnames(train_oversampled)[17] = "Class"
prop.table(table(train_oversampled$Class))
        0         1 
0.8166667 0.1833333
R ile Dolandırıcılık Tespiti
library(rpart)
model2 = rpart(Class ~ ., data = train_oversampled)

tree2

R ile Dolandırıcılık Tespiti
## Test kümesinin sahtekarlık olasılığını tahmin et
scores2 = predict(model2, newdata = test, type = "prob")[, 2]

## Test kümesinin sınıfını (sahtekarlık/normal) tahmin et predicted_class2 = factor(ifelse(scores2 > 0.5, 1, 0))
## Karmaşıklık matrisi & doğruluk library(caret) CM2 = confusionMatrix(data = predicted_class2, reference = test$Class)
          Reference
Prediction     0     1
         0 11967    34
         1    87   212       Accuracy : 0.9901626                                
library(pROC)
auc(roc(response = test$Class, predictor = scores2)) ## ROC Eğrisi Altındaki Alan (AUC)
Area under the curve: 0.9538
R ile Dolandırıcılık Tespiti

Bir tespit modelini devreye almanın maliyeti

  • Bir algoritmayı değerlendirirken farklı sahtekarlık tespit maliyetlerini hesaba kat
  • Maliyetler şunlarla ilişkilidir:
    • yanlış sınıflandırma hataları (yalancı pozitifler & yalancı negatifler) ve
    • doğru sınıflandırmalar (gerçek pozitifler & gerçek negatifler)
R ile Dolandırıcılık Tespiti

Maliyet matrisi

cost_matrix_1

  • $y_i$ = $i$ vakasının gerçek sınıfı
  • $c_i$ = $i$ vakasının tahmin edilen sınıfı
R ile Dolandırıcılık Tespiti

Maliyet matrisi

cost_matrix_2

  • $y_i$ = $i$ vakasının gerçek sınıfı
  • $c_i$ = $i$ vakasının tahmin edilen sınıfı
R ile Dolandırıcılık Tespiti

Maliyet matrisi

cost_matrix_3

  • $C_a$ = vakanın analiz maliyeti
R ile Dolandırıcılık Tespiti

Maliyet matrisi

cost_matrix_4

  • $C_a$ = vakanın analiz maliyeti
R ile Dolandırıcılık Tespiti

Bir tespit modeli için maliyet ölçüsü

  • Her vaka için gerçek maliyetleri dikkate al: $$Cost(model)=\sum_{i=1}^{N}y_i(1-c_i)Amount_i + c_iC_a$$
    • $y_i$ = $i$ vakasının gerçek sınıfı
    • $c_i$ = $i$ vakasının tahmin edilen sınıfı
cost_model = function(predicted.classes, true.classes, amounts, fixedcost) {

    cost = sum(true.classes * (1 - predicted.classes) * amounts +
               predicted.classes * fixedcost)

    return(cost)
}
R ile Dolandırıcılık Tespiti

Sahtekarlık tespitinin gerçek maliyeti

## SMOTE kullanmadan toplam maliyet:
cost_model(predicted_class1, test$Class, test$Amount, fixedcost = 10)
10061.8
## SMOTE kullanırken toplam maliyet:
cost_model(predicted_class2, test$Class, test$Amount, fixedcost = 10)
7431.93
  • Kayıplar %26 azaldı!
R ile Dolandırıcılık Tespiti

Hadi pratik yapalım!

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

Preparing Video For Download...