Gerekli paketlerin yüklenmesi

Bu bölümde, karar ağacı modeli oluşturmak ve görselleştirmek için gerekli paketler yükleniyor. “rpart” ve “rpart.plot” karar ağacı modellemesi ve görselleştirmesi için, “caret” ise veriyi eğitim ve test setlerine ayırmak için kullanılıyor.

Veri setini oluşturma

Burada veri seti oluşturuluyor. “Yas”, “Cinsiyet”, “KitapTuru”, “Uye” ve “HizmetKullanimi” gibi özellikler rastgele oluşturularak 100 kişilik bir örneklem oluşturuluyor. “set.seed(123)” kullanılarak sonuçların tekrarlanabilir olması sağlanıyor.


set.seed(123)  # Sonuçların tekrarlanabilir olması için
data <- data.frame(
  Yas = sample(18:70, 100, replace = TRUE),
  Cinsiyet = sample(c("Kadın", "Erkek"), 100, replace = TRUE),
  KitapTuru = sample(c("Roman", "Bilim", "Tarih", "Sanat"), 100, replace = TRUE),
  Uye = sample(c("Evet", "Hayır"), 100, replace = TRUE),
  HizmetKullanimi = sample(c("Evet", "Hayır"), 100, replace = TRUE)
)

Kategorik değişkenleri faktöre dönüştürme

Bu adımda, kategorik değişkenler (“Cinsiyet”, “KitapTuru”, “Uye”, “HizmetKullanimi”) faktör olarak tanımlanıyor. Bu, modelin bu değişkenleri kategorik olarak tanımasını sağlamak için gereklidir.


data$Cinsiyet <- as.factor(data$Cinsiyet)
data$KitapTuru <- as.factor(data$KitapTuru)
data$Uye <- as.factor(data$Uye)
data$HizmetKullanimi <- as.factor(data$HizmetKullanimi)

Veriyi eğitim ve test setlerine ayırma

Bu bölümde, veriler eğitim ve test setlerine ayrılıyor. Veri setinin %70’i eğitim, %30’u ise test için kullanılıyor. Bu, modelin performansını daha iyi değerlendirebilmek için gereklidir.


set.seed(123)
trainIndex <- createDataPartition(data$HizmetKullanimi, p = 0.7, list = FALSE)
trainData <- data[trainIndex, ]
testData <- data[-trainIndex, ]

Karar ağacı modeli oluşturma

Bu adımda, “rpart” fonksiyonu kullanılarak karar ağacı modeli oluşturuluyor. “HizmetKullanimi” bağımlı değişken olarak belirlenmiş ve “Yas”, “Cinsiyet”, “KitapTuru” ve “Uye” bağımsız değişkenler olarak kullanılıyor. “minsplit” ve “maxdepth” parametreleri ile ağacın karmaşıklığı kontrol ediliyor.


model <- rpart(HizmetKullanimi ~ Yas + Cinsiyet + KitapTuru + Uye, 
               data = trainData, method = "class", 
               control = rpart.control(minsplit = 10, maxdepth = 5))

Modeli görselleştirme

Bu bölümde, oluşturulan karar ağacı modeli görselleştiriliyor. “rpart.plot” fonksiyonu ile ağacın dalları ve yapısı gösteriliyor, böylece modelin nasıl bir karar süreci oluşturduğunu görselleştirebilirsiniz.


rpart.plot(model, type = 4, extra = 104, fallen.leaves = TRUE, cex = 0.6, 
           main = "Kütüphane Hizmeti Kullanımı Karar Ağacı")

Test seti üzerinde tahmin yapma

Test seti kullanılarak modelin tahminleri yapılıyor. “predict” fonksiyonu ile “HizmetKullanimi” sınıfı tahmin ediliyor.


predictions <- predict(model, testData, type = "class")

Model performansını değerlendirme

Bu adımda, modelin performansı değerlendirilmekte. “confusionMatrix” fonksiyonu, modelin doğruluğunu, duyarlılığını ve diğer performans metriklerini hesaplamak için kullanılıyor. Elde edilen sonuçlara göre modelin genel doğruluğu %51.72, yani rastgele tahmin seviyesinde bir doğruluğa sahip.


confusionMatrix(predictions, testData$HizmetKullanimi)
Confusion Matrix and Statistics

          Reference
Prediction Evet        Hayır
     Evet     8            8
     Hayır    6            7
                                          
               Accuracy : 0.5172          
                 95% CI : (0.3253, 0.7055)
    No Information Rate : 0.5172          
    P-Value [Acc > NIR] : 0.5743          
                                          
                  Kappa : 0.0379          
                                          
 Mcnemar's Test P-Value : 0.7893          
                                          
            Sensitivity : 0.5714          
            Specificity : 0.4667          
         Pos Pred Value : 0.5000          
         Neg Pred Value : 0.5385          
             Prevalence : 0.4828          
         Detection Rate : 0.2759          
   Detection Prevalence : 0.5517          
      Balanced Accuracy : 0.5190          
                                          
       'Positive' Class : Evet            
                                          
LS0tDQp0aXRsZTogIkthcmFyIEHEn2FjxLEgVXlndWxhbWFzxLEiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIEdlcmVrbGkgcGFrZXRsZXJpbiB5w7xrbGVubWVzaQ0KIyBCdSBiw7Zsw7xtZGUsIGthcmFyIGHEn2FjxLEgbW9kZWxpIG9sdcWfdHVybWFrIHZlIGfDtnJzZWxsZcWfdGlybWVrIGnDp2luIGdlcmVrbGkgcGFrZXRsZXIgecO8a2xlbml5b3IuICJycGFydCIgdmUgInJwYXJ0LnBsb3QiIGthcmFyIGHEn2FjxLEgbW9kZWxsZW1lc2kgdmUgZ8O2cnNlbGxlxZ90aXJtZXNpIGnDp2luLCAiY2FyZXQiIGlzZSB2ZXJpeWkgZcSfaXRpbSB2ZSB0ZXN0IHNldGxlcmluZSBhecSxcm1hayBpw6dpbiBrdWxsYW7EsWzEsXlvci4NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQoNCmluc3RhbGwucGFja2FnZXMoInJwYXJ0IikNCmluc3RhbGwucGFja2FnZXMoInJwYXJ0LnBsb3QiKQ0KaW5zdGFsbC5wYWNrYWdlcygiY2FyZXQiKQ0KDQpsaWJyYXJ5KHJwYXJ0KQ0KbGlicmFyeShycGFydC5wbG90KQ0KbGlicmFyeShjYXJldCkNCmBgYA0KDQojIFZlcmkgc2V0aW5pIG9sdcWfdHVybWENCiMgQnVyYWRhIHZlcmkgc2V0aSBvbHXFn3R1cnVsdXlvci4gIllhcyIsICJDaW5zaXlldCIsICJLaXRhcFR1cnUiLCAiVXllIiB2ZSAiSGl6bWV0S3VsbGFuaW1pIiBnaWJpIMO2emVsbGlrbGVyIHJhc3RnZWxlIG9sdcWfdHVydWxhcmFrIDEwMCBracWfaWxpayBiaXIgw7ZybmVrbGVtIG9sdcWfdHVydWx1eW9yLiAic2V0LnNlZWQoMTIzKSIga3VsbGFuxLFsYXJhayBzb251w6dsYXLEsW4gdGVrcmFybGFuYWJpbGlyIG9sbWFzxLEgc2HEn2xhbsSxeW9yLg0KDQpgYGB7ciBkYXRhLWNyZWF0aW9ufQ0KDQpzZXQuc2VlZCgxMjMpICAjIFNvbnXDp2xhcsSxbiB0ZWtyYXJsYW5hYmlsaXIgb2xtYXPEsSBpw6dpbg0KZGF0YSA8LSBkYXRhLmZyYW1lKA0KICBZYXMgPSBzYW1wbGUoMTg6NzAsIDEwMCwgcmVwbGFjZSA9IFRSVUUpLA0KICBDaW5zaXlldCA9IHNhbXBsZShjKCJLYWTEsW4iLCAiRXJrZWsiKSwgMTAwLCByZXBsYWNlID0gVFJVRSksDQogIEtpdGFwVHVydSA9IHNhbXBsZShjKCJSb21hbiIsICJCaWxpbSIsICJUYXJpaCIsICJTYW5hdCIpLCAxMDAsIHJlcGxhY2UgPSBUUlVFKSwNCiAgVXllID0gc2FtcGxlKGMoIkV2ZXQiLCAiSGF5xLFyIiksIDEwMCwgcmVwbGFjZSA9IFRSVUUpLA0KICBIaXptZXRLdWxsYW5pbWkgPSBzYW1wbGUoYygiRXZldCIsICJIYXnEsXIiKSwgMTAwLCByZXBsYWNlID0gVFJVRSkNCikNCmBgYA0KDQojIEthdGVnb3JpayBkZcSfacWfa2VubGVyaSBmYWt0w7ZyZSBkw7Zuw7zFn3TDvHJtZQ0KIyBCdSBhZMSxbWRhLCBrYXRlZ29yaWsgZGXEn2nFn2tlbmxlciAoIkNpbnNpeWV0IiwgIktpdGFwVHVydSIsICJVeWUiLCAiSGl6bWV0S3VsbGFuaW1pIikgZmFrdMO2ciBvbGFyYWsgdGFuxLFtbGFuxLF5b3IuIEJ1LCBtb2RlbGluIGJ1IGRlxJ9pxZ9rZW5sZXJpIGthdGVnb3JpayBvbGFyYWsgdGFuxLFtYXPEsW7EsSBzYcSfbGFtYWsgacOnaW4gZ2VyZWtsaWRpci4NCg0KYGBge3IgZmFjdG9yLWNvbnZlcnNpb259DQoNCmRhdGEkQ2luc2l5ZXQgPC0gYXMuZmFjdG9yKGRhdGEkQ2luc2l5ZXQpDQpkYXRhJEtpdGFwVHVydSA8LSBhcy5mYWN0b3IoZGF0YSRLaXRhcFR1cnUpDQpkYXRhJFV5ZSA8LSBhcy5mYWN0b3IoZGF0YSRVeWUpDQpkYXRhJEhpem1ldEt1bGxhbmltaSA8LSBhcy5mYWN0b3IoZGF0YSRIaXptZXRLdWxsYW5pbWkpDQpgYGANCg0KIyBWZXJpeWkgZcSfaXRpbSB2ZSB0ZXN0IHNldGxlcmluZSBhecSxcm1hDQojIEJ1IGLDtmzDvG1kZSwgdmVyaWxlciBlxJ9pdGltIHZlIHRlc3Qgc2V0bGVyaW5lIGF5csSxbMSxeW9yLiBWZXJpIHNldGluaW4gJTcwJ2kgZcSfaXRpbSwgJTMwJ3UgaXNlIHRlc3QgacOnaW4ga3VsbGFuxLFsxLF5b3IuIEJ1LCBtb2RlbGluIHBlcmZvcm1hbnPEsW7EsSBkYWhhIGl5aSBkZcSfZXJsZW5kaXJlYmlsbWVrIGnDp2luIGdlcmVrbGlkaXIuDQoNCmBgYHtyIHRyYWluLXRlc3Qtc3BsaXR9DQoNCnNldC5zZWVkKDEyMykNCnRyYWluSW5kZXggPC0gY3JlYXRlRGF0YVBhcnRpdGlvbihkYXRhJEhpem1ldEt1bGxhbmltaSwgcCA9IDAuNywgbGlzdCA9IEZBTFNFKQ0KdHJhaW5EYXRhIDwtIGRhdGFbdHJhaW5JbmRleCwgXQ0KdGVzdERhdGEgPC0gZGF0YVstdHJhaW5JbmRleCwgXQ0KYGBgDQoNCiMgS2FyYXIgYcSfYWPEsSBtb2RlbGkgb2x1xZ90dXJtYQ0KIyBCdSBhZMSxbWRhLCAicnBhcnQiIGZvbmtzaXlvbnUga3VsbGFuxLFsYXJhayBrYXJhciBhxJ9hY8SxIG1vZGVsaSBvbHXFn3R1cnVsdXlvci4gIkhpem1ldEt1bGxhbmltaSIgYmHEn8SxbWzEsSBkZcSfacWfa2VuIG9sYXJhayBiZWxpcmxlbm1pxZ8gdmUgIllhcyIsICJDaW5zaXlldCIsICJLaXRhcFR1cnUiIHZlICJVeWUiIGJhxJ/EsW1zxLF6IGRlxJ9pxZ9rZW5sZXIgb2xhcmFrIGt1bGxhbsSxbMSxeW9yLiAibWluc3BsaXQiIHZlICJtYXhkZXB0aCIgcGFyYW1ldHJlbGVyaSBpbGUgYcSfYWPEsW4ga2FybWHFn8Sxa2zEscSfxLEga29udHJvbCBlZGlsaXlvci4NCg0KYGBge3IgbW9kZWwtY3JlYXRpb259DQoNCm1vZGVsIDwtIHJwYXJ0KEhpem1ldEt1bGxhbmltaSB+IFlhcyArIENpbnNpeWV0ICsgS2l0YXBUdXJ1ICsgVXllLCANCiAgICAgICAgICAgICAgIGRhdGEgPSB0cmFpbkRhdGEsIG1ldGhvZCA9ICJjbGFzcyIsIA0KICAgICAgICAgICAgICAgY29udHJvbCA9IHJwYXJ0LmNvbnRyb2wobWluc3BsaXQgPSAxMCwgbWF4ZGVwdGggPSA1KSkNCmBgYA0KDQojIE1vZGVsaSBnw7Zyc2VsbGXFn3Rpcm1lDQojIEJ1IGLDtmzDvG1kZSwgb2x1xZ90dXJ1bGFuIGthcmFyIGHEn2FjxLEgbW9kZWxpIGfDtnJzZWxsZcWfdGlyaWxpeW9yLiAicnBhcnQucGxvdCIgZm9ua3NpeW9udSBpbGUgYcSfYWPEsW4gZGFsbGFyxLEgdmUgeWFwxLFzxLEgZ8O2c3RlcmlsaXlvciwgYsO2eWxlY2UgbW9kZWxpbiBuYXPEsWwgYmlyIGthcmFyIHPDvHJlY2kgb2x1xZ90dXJkdcSfdW51IGfDtnJzZWxsZcWfdGlyZWJpbGlyc2luaXouDQoNCmBgYHtyIG1vZGVsLXZpc3VhbGl6YXRpb259DQoNCnJwYXJ0LnBsb3QobW9kZWwsIHR5cGUgPSA0LCBleHRyYSA9IDEwNCwgZmFsbGVuLmxlYXZlcyA9IFRSVUUsIGNleCA9IDAuNiwgDQogICAgICAgICAgIG1haW4gPSAiS8O8dMO8cGhhbmUgSGl6bWV0aSBLdWxsYW7EsW3EsSBLYXJhciBBxJ9hY8SxIikNCmBgYA0KDQojIFRlc3Qgc2V0aSDDvHplcmluZGUgdGFobWluIHlhcG1hDQojIFRlc3Qgc2V0aSBrdWxsYW7EsWxhcmFrIG1vZGVsaW4gdGFobWlubGVyaSB5YXDEsWzEsXlvci4gInByZWRpY3QiIGZvbmtzaXlvbnUgaWxlICJIaXptZXRLdWxsYW5pbWkiIHPEsW7EsWbEsSB0YWhtaW4gZWRpbGl5b3IuDQoNCmBgYHtyIHByZWRpY3Rpb25zfQ0KDQpwcmVkaWN0aW9ucyA8LSBwcmVkaWN0KG1vZGVsLCB0ZXN0RGF0YSwgdHlwZSA9ICJjbGFzcyIpDQpgYGANCg0KIyBNb2RlbCBwZXJmb3JtYW5zxLFuxLEgZGXEn2VybGVuZGlybWUNCiMgQnUgYWTEsW1kYSwgbW9kZWxpbiBwZXJmb3JtYW5zxLEgZGXEn2VybGVuZGlyaWxtZWt0ZS4gImNvbmZ1c2lvbk1hdHJpeCIgZm9ua3NpeW9udSwgbW9kZWxpbiBkb8SfcnVsdcSfdW51LCBkdXlhcmzEsWzEscSfxLFuxLEgdmUgZGnEn2VyIHBlcmZvcm1hbnMgbWV0cmlrbGVyaW5pIGhlc2FwbGFtYWsgacOnaW4ga3VsbGFuxLFsxLF5b3IuIEVsZGUgZWRpbGVuIHNvbnXDp2xhcmEgZ8O2cmUgbW9kZWxpbiBnZW5lbCBkb8SfcnVsdcSfdSAlNTEuNzIsIHlhbmkgcmFzdGdlbGUgdGFobWluIHNldml5ZXNpbmRlIGJpciBkb8SfcnVsdcSfYSBzYWhpcC4NCg0KYGBge3IgcGVyZm9ybWFuY2UtZXZhbHVhdGlvbn0NCg0KY29uZnVzaW9uTWF0cml4KHByZWRpY3Rpb25zLCB0ZXN0RGF0YSRIaXptZXRLdWxsYW5pbWkpDQpgYGANCg==