R ile Otomatik Makine Öğrenmesi

İbrahim Baran
Bankalararası Kart Merkezi
3 min readDec 12, 2019

H2O, makine öğrenmesini kolaylaştıran açık kaynaklı kütüphanedir. Bu kütüphaneyi Python ve R üzerinden çağırabiliyoruz.

Vereceğim örnekte R kodu ve h2o kütüphanesi ile otomatik makine öğrenme özelliğinin nasıl kullanılabileceğini göstereceğim.

Sahtekarlık ile ilgili vereceğim örnekte kaggle’daki [1] kredi kartı sahtekarlık verisini kullanacağım. Adresteki [1] zip içerisinde bulunan csv formatındaki veri setinden yararlanacağım.

R kodunun çalışacağı makineye [2] adresinden h2o kurulumu yapılır. Kurulum tamamlandıktan sonra kütüphaneler aşağıdaki gibi tanımlanır.

library(h2o)
library(DT)

İndirmiş olduğumuz CSV dosyası, “dataset_fraud” değişkenine atanır. İlk satır başlık olduğu için “header =T” parametresi verilir.

dataset_fraud = read.csv(‘creditcard.csv’,header = T)

Class değişkeni 1 ve 0 olarak belirlendiği için “as.factor” fonksiyonu ile tip dönüşümü yapıyoruz.

dataset_fraud$Class <- as.factor(dataset_fraud$Class)

Veri setini görsel olarak sayfalayabilmek için datatable fonksiyonu kullanılır.

datatable(head(dataset_fraud),rownames = FALSE, options = list(pageLength = 6, scrollX = TRUE))

Görsel olarak aşağıdaki gibi listelenebilir hale getirilir.

V1'den V28'e kadar olan kolonlar, time ve amount alanları modelin özniteliklerdir. Class kolonu ise hedef kolondur. 1 fraud işlem, 0 ise diğer işlemler olarak tanımlanmıştır. İlgili adreste [1] veri seti ve kolonlar ile ilgili detaylı açıklama bulunuyor.

Class değişkeni bizim için hedef (target), geri kalan kolonlar(features) ise özniteliklerdir.

target <- “Class”
features <- setdiff(colnames(dataset_fraud), target)
print(features)

"Time" "V1" "V2" "V3" "V4" "V5" "V6" "V7" "V8" "V9" "V10" "V11" "V12" "V13" "V14" "V15" "V16" "V17" "V18" "V19" "V20" "V21" "V22" "V23" "V24" "V25" "V26" "V27" "V28" "Amount"

H2o işlemi başlatılır. Eğer arka planda askıda kalan işler varsa silinir.

h2o.init()

h2o.removeAll()

H2O başladıktan sonra ilgili makine konfigurasyonları aşağıdaki gibi listenecektir.

H2O dataframe nesnesine yukarıda oluşturduğumuz veri seti atanır. “Seed” değişkenine atanan değer, yeniden aynı sonucun üretilebilmesini sağlıyor. Veriyi %80 model %20 test olarak ayırıyoruz.

h_fraud <- as.h2o(dataset_fraud)
n_seed <- 12345
h_split <- h2o.splitFrame(h_fraud, ratios = 0.8, seed = n_seed)
h_train <- h_split[[1]] # 80% model
h_test <- h_split[[2]] # 20% test

H2O‘nun automl fonksiyonuna ilgili parametreler verilerek çalıştırılır. Parametrelerin yanlarına açıklamalarını ekledim.

automl = h2o.automl(x = features, # öznitelik
y = target, #hedef
training_frame = h_train, #test veri seti
nfolds = 5, # çapraz kontrol edebilmek için kullanılan parametre
project_name = “otomatik_fraud”, # Proje ismi
seed = n_seed, #aynı sonucu üretebilmek için verilen parametre
max_runtime_secs = 600 #toplamda ne kadar sürede tamamlanacağı süresi)

Sonuçları listeleyebilmek için aşağıdaki automl değişkenindeki değeri datatable nesnesi ile görsel hale getirebiliyoruz.

datatable(as.data.frame(automl@leaderboard),
rownames = FALSE, options = list(pageLength = 10, scrollX = TRUE, round)) %>%
formatRound(columns = -1, digits = 7)

Seçilen en iyi modelin performansı aşağıdaki kod ile ölçümlenir.

perf <- h2o.performance(automl@leader, newdata = h_test)

Hata matrisini de şu şekilde yazdırabiliriz.

h2o.confusionMatrix(perf)

Confusion Matrix (vertical: actual; across: predicted)  for max f1 @ threshold = 0.076227276370678:
0 1 Error Rate
0 56643 19 0.000335 =19/56662
1 26 77 0.252427 =26/103
Totals 56669 96 0.000793 =45/56765

Kaynaklar

[1] https://www.kaggle.com/mlg-ulb/creditcardfraud/data

[2] http://docs.h2o.ai/h2o/latest-stable/h2o-docs/downloading.html

--

--