Ana içeriğe atla

R ile Lojistik Regresyon Eğitimi

Lojistik regresyon hakkında her şeyi keşfedin: doğrusal regresyondan farkı, R'de glm() ile bu modelleri nasıl kurup değerlendirileceği ve daha fazlası!
Güncel 3 Eki 2026  · 14 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Bu eğitimdeki kodu çevrimiçi olarak çalıştırın ve düzenleyin

Kodu çalıştır

Lojistik regresyon, ikili sonuçları tahmin etmek için basit ama güçlü bir modeldir. Yani bir şeyin olup olmayacağını. Bu, denetimli makine öğrenimi için bir sınıflandırma model türüdür.

Lojistik regresyon neredeyse her sektörde—pazarlama, sağlık, sosyal bilimler ve diğerleri—kullanılır ve her veri bilimcisinin araç setinin vazgeçilmez bir parçasıdır.

Bu eğitimden en iyi şekilde yararlanmak için R hakkında temel düzeyde çalışma bilgisine ihtiyacınız var. İlgili bir model türü olan doğrusal regresyon hakkında bilgi sahibi olmak da faydalıdır. Bunun için R ile Doğrusal Regresyon Eğitimi yazısını okuyun.

Lojistik Regresyona Genel Bakış

Diyelim ki bugünün güneşli bir gün olup olmayacağını tahmin etmek istiyorsunuz. İki olası sonuç vardır: "güneşli" veya "güneşli değil". Sonuç değişkeni, "hedef değişken" veya "bağımlı değişken" olarak da bilinir.

Sonucu etkileyebilecek birçok değişken vardır; ‘bir önceki günün sıcaklığı’, ‘hava basıncı’ vb. Bu etkileyen değişkenler sırasıyla özellikler, bağımsız değişkenler veya yordayıcılar olarak bilinir—bu terimlerin hepsi aynı anlama gelir. 

Diğer örnekler arasında bir müşterinin ürününüzü satın alıp almayacağı, bir e-postanın spam olup olmadığı, bir işlemin sahtecilik içerip içermediği ve bir ilacın hastayı iyileştirip iyileştirmeyeceği sayılabilir.  

Lojistik regresyon nasıl çalışır?

Lojistik regresyon, hedef değişkenin etiketli bir sınıfa/kategoriye ait olma olasılığını tahmin etmek için yordayıcı ve hedef değişkenler arasında mümkün olan en iyi uyumu bulur. 

Doğrusal regresyon, sonuçları özelliklerden tahmin eden en iyi doğruyu bulmaya çalışır. Şu şekilde bir denklem oluşturur

y_predictions = intercept + slope * features

ve kesişim ve eğimin en iyi olası değerlerini bulmak için optimizasyondan yararlanır.

Lojistik regresyon da benzer şekilde çalışır, ancak sonucu bir kategori olasılıkları üzerinden regresyona tabi tutar. Denklemin sağ tarafını dönüştürmek için bir sigmoid fonksiyonu (lojistik dağılımın kümülatif dağılım fonksiyonu) kullanır.

y_predictions = logistic_cdf(intercept + slope * features)

Yine, model kesişim ve eğimin en iyi olası değerlerini bulmak için optimizasyon kullanır.

Lojistik regresyonun algoritması doğrusal regresyon denklemiyle çok benzer olduğundan, "genelleştirilmiş doğrusal modeller" olarak adlandırılan bir model ailesinin parçasıdır. Bu nedenle lojistik regresyon bir sınıflandırma modeli olmasına rağmen adında "regresyon" geçer.

Sigmoid fonksiyon aşağıdaki görselde S-şeklinde bir eğriye benzer. Gerçek sayılı girdi değerlerini alır ve bunları 0 ile 1 arasına dönüştürür (her iki uçtan daraltarak; yani negatif değerleri 0'a ve çok yüksek pozitifleri 1'e). Ayrıca, bu olasılıkların üzerine uygulandığında çıktıyı kategorilere veya sınıflara ayıran belirleyici unsur eşik değeridir.

image4.png

Karmaşık kavramlar örneklerle açıklandığında en iyi anlaşılır; bu yüzden LR algoritmasının nasıl çalıştığını anlamak için bir benzetme yapalım. LR modelinin, kullanıcının konumu, satın alma tutarı, IP adresi vb. gibi birden fazla sahtecilik göstergesini inceleyerek sahte bir işlemi tespit etmekle görevlendirildiğini varsayalım. Amaç, verilen bir işlemin meşru mu yoksa sahte mi olduğunu belirleme olasılığını tahmin etmektir – bu da hedef değişkeni oluşturur.

Model, yordayıcıların hedef değişken üzerindeki etkisine göre onlara ağırlıklar atar ve bunları birleştirerek normalize edilmiş bir skor veya sahtecilik olasılığını hesaplar. 

Veri Kümesi

Portekizli bir bankanın telefonla yürüttüğü bir doğrudan pazarlama kampanyası veri setini kullanacağız. Kampanyanın amacı, y değişkeniyle temsil edilen vadeli mevduat aboneliklerini (abonelik var/yok) satmaktır. Lojistik regresyon modelinin amacı, müşterinin demografik bilgiler gibi öznitelikleri olarak adlandırılan yordayıcı değişkenlere dayanarak bir abonelik satın alıp almayacağını tahmin etmektir.

image1.png

Bu veri kümesi ve birçok faydalı veri kümesi için veri sözlüğünü DataCamp’in web sitesinde bulabilirsiniz.

Değişken

Açıklama

Detaylar

age

müşterinin yaşı

 

job

iş türü

kategorik: "admin.","blue-collar","entrepreneur","housemaid","management","retired","self-employed","services","student","technician","unemployed","unknown"

marital

medeni durum

kategorik: "divorced","married","single","unknown"; not: "divorced" boşanmış veya dul anlamına gelir

education

müşterinin en yüksek derecesi

kategorik: "basic.4y","basic.6y","basic.9y","high.school","illiterate","professional.course","university.degree","unknown"

default

temerrüde düşmüş kredi var mı?

kategorik: "no","yes","unknown"

housing

konut kredisi var mı?

kategorik: "no","yes","unknown"

loan

ihtiyaç kredisi var mı?

kategorik: "no","yes","unknown"

contact

iletişim türü

kategorik: "cellular","telephone"

month

yılın son iletişim ayı

kategorik: "jan", "feb", "mar", ..., "nov", "dec"

day_of_week

haftanın son iletişim günü

kategorik: "mon","tue","wed","thu","fri"

campaign

bu kampanyada müşteriyle iletişim kurulan sayısı

sayısal, son iletişimi içerir

pdays

önceki bir kampanyadan bu yana müşteriyle en son iletişimden geçen gün sayısı

sayısal; 999, müşteriye daha önce ulaşılamadığını belirtir

previous

bu kampanyadan önce bu müşteri için yapılan iletişim sayısı

sayısal

poutcome

önceki pazarlama kampanyasının sonucu

kategorik: "failure","nonexistent","success"

emp.var.rate

istihdam değişim oranı - üç aylık gösterge

sayısal

cons.price.idx

tüketici fiyat endeksi - aylık gösterge

sayısal

cons.conf.idx

tüketici güven endeksi - aylık gösterge

sayısal

euribor3m

euribor 3 ay oranı - günlük gösterge

sayısal

nr.employed

çalışan sayısı - üç aylık gösterge

sayısal

y

müşteri vadeli mevduata abone oldu mu?

ikili: "yes","no"

Lojistik Regresyon İş Akışı

Tam makine öğrenimi iş akışı Makine Öğrenimi İş Akışına Yeni Başlayanlar İçin Rehber infografiğinde ele alınmıştır. Burada veri hazırlama ve modelleme adımlarına odaklanacağız. Özellikle şunları kapsayacağız:

  • Verilerin eğitim ve test kümelerine ayrılması
  • Modelin kurulması (eğitilmesi)
  • Tahminlerin yapılması
  • Model performansının değerlendirilmesi
  • Hiperparametre ayarı

Lojistik Regresyon Paketleri

R'de lojistik regresyon modellemek için iki popüler iş akışı vardır: base-R ve tidymodels.

Base-R iş akışı daha basittir ve modeli kurmak ve özetini üretmek için glm() ve summary() gibi fonksiyonları içerir.

Tidymodels iş akışı, birden fazla modeli daha kolay yönetmeye ve farklı model türleriyle çalışmak için tutarlı bir arayüz sunmaya olanak tanır.

Bu eğitimde tidymodels iş akışını kullanacağız.

Veriyi Görselleştirme

library() fonksiyonunu çağırarak tidymodels paketini içe aktarın. 

Veri kümesi, Avrupa tarzı biçimlendirmeye sahip (ondalıklar için virgül ve ayırıcı olarak noktalı virgül) bir CSV dosyasında. Bunu readr paketinden read_csv2() ile okuyacağız. 

Hedef değişken y'yi modelleme için bir faktör değişkenine dönüştürün. 

ggplot() fonksiyonunu kullanarak her bir iş mesleğinin y'ye göre sayımını çizin.

library(readr)
library(tidymodels)

# Read the dataset and convert the target variable to a factor
bank_df <- read_csv2("bank-full.csv")
bank_df$y = as.factor(bank_df$y)

# Plot job occupation against the target variable
ggplot(bank_df, aes(job, fill = y)) +
    geom_bar() +
    coord_flip()

image5.png

Verilerin Ayrılması

Modeli kurmak için bir eğitim kümesi ve modeli değerlendirmek için bir test kümesi olacak şekilde veri kümesini ayıralım; böylece eğitilen modelin görülmemiş bir veri kümesinde de çalıştığından emin olalım.

Verileri eğitim ve test kümesine ayırma işlemi initial_split() fonksiyonu ve eğitim veri oranını tanımlayan prop niteliği kullanılarak yapılabilir.

# Split data into train and test
set.seed(421)
split <- initial_split(bank_df, prop = 0.8, strata = y)
train <- split %>% 
         training()
test <- split %>% 
        testing()

Modelin Kurulması ve Değerlendirilmesi

Modeli oluşturmak için bir logistic_reg() modeli tanımlayın. Bu, düzenlileştirme miktarını kontrol eden mixture ve penalty argümanlarına ihtiyaç duyar. Mixture değeri 1 ise lasso, 0 ise ridge regresyonu ifade eder. Aradaki değerler de mümkündür. Penalty argümanı, düzenlileştirmenin gücünü belirtir.

Mixture ve penalty için "double" kayan noktalı sayılar geçirmeniz gerektiğini unutmayın.

set_engine() ile "motoru" (hesaplamaları çalıştırmak için kullanılan arka uç yazılımı) ayarlayın. Birkaç seçenek vardır: Varsayılan motor "glm"dir ve klasik bir lojistik regresyon yapar. Bu, her katsayı için p-değerleri verdiği ve her katsayının önemini anlamayı kolaylaştırdığı için istatistikçiler tarafından sıklıkla tercih edilir.

Burada "glmnet" motorunu kullanacağız. Bu, düzenlileştirmeye izin verdiği için makine öğrenimi bilimcileri tarafından tercih edilir; özellikle çok sayıda özelliğiniz varsa tahminleri iyileştirebilir. (Python'da scikit-learn paketi, lojistik regresyonda varsayılan olarak bir miktar düzenlileştirme içerir.)

Önceki adımda oluşturulan eğitim verisi üzerinde modeli eğitmek için fit() metodunu çağırın. Bu, ilk argüman olarak bir formül alır. Formülün sol tarafına hedef değişkeni (burada y) yazarsınız. Sağ tarafına ise istediğiniz özellikleri dahil edebilirsiniz. Nokta, "formülün sol tarafında yazılmayan tüm değişkenleri kullan" anlamına gelir. Formül yazımı hakkında daha fazla bilgi için R Formül Eğitimi'ni okuyun.

# Train a logistic regression model
model <- logistic_reg(mixture = double(1), penalty = double(1)) %>%
  set_engine("glmnet") %>%
  set_mode("classification") %>%
  fit(y ~ ., data = train)

# Model summary
tidy(model)

Çıktı aşağıda gösterilmiştir; estimate sütunu yordayıcının katsayılarını temsil eder.

# A tibble: 43 × 3
   term              estimate penalty
   <chr>                <dbl>   <dbl>
 1 (Intercept)      -2.59           0
 2 age              -0.000477       0
 3 jobblue-collar   -0.183          0
 4 jobentrepreneur  -0.206          0
 5 jobhousemaid     -0.270          0
 6 jobmanagement    -0.0190         0
 7 jobretired        0.360          0
 8 jobself-employed -0.101          0
 9 jobservices      -0.105          0
10 jobstudent        0.415          0
# ... with 33 more rows
# ℹ Use `print(n = ...)` to see more rows

Tahmin yapma

predict() fonksiyonunu kullanarak test verisi üzerinde tahmin yapın. Tahmin türünü seçebilirsiniz.

  • type = "class", her gözlem için en olası hedef değeri döndürür. Burada, modelin müşterinin vadeli mevduata abone olma olasılığına göre "yes" veya "no" dönecektir.
  • type = "prob", her gözlem için her hedef değerinin olasılığını döndürür. Burada, her gözlem için toplamı bire eşit olan "yes" olasılığı ile "no" olasılığını döndürecektir.
# Class Predictions
pred_class <- predict(model,
                      new_data = test,
                      type = "class")

# Class Probabilities
pred_proba <- predict(model,
                      new_data = test,
                      type = "prob")

Modeli accuracy() fonksiyonunu kullanarak değerlendirin; truth argümanını y olarak ve estimate argümanını da önceki adımdaki tahminler olacak şekilde verin.

results <- test %>%
           select(y) %>%
           bind_cols(pred_class, pred_proba)

accuracy(results, truth = y, estimate = .pred_class)

Hiperparametre Ayarı

Mixture ve penalty argümanlarına ("hiperparametreler") belirli değerler vermek yerine, ayarlama yaparak modelin tahmin gücünü optimize edebilirsiniz. 

Fikir, modeli hiperparametrelerin farklı değerleriyle çok kez çalıştırıp hangisinin en iyi tahminleri verdiğini görmektir.

  • logistic_reg() fonksiyonunda mixture ve penalty argümanlarını tune() çağrısı olarak ayarlayın.
  • grid_regular() fonksiyonunu kullanarak mixture ve penalty için olası değerlerden bir ızgara tanımlayın.
  • workflow() fonksiyonu, modeli birçok kez çalıştırdığınızda ihtiyaç duyulan, model ayrıntılarını depolamak için bir nesne oluşturur. 
  • select_best() fonksiyonunu kullanarak en iyi modeli seçin. "En iyi"yi tanımlayan metrikler arasından seçim yapabilirsiniz. Burada "alıcı işletim karakteristiği eğrisi altında kalan alan" (ROC AUC) metriğini kullanacağız.
# Define the logistic regression model with penalty and mixture hyperparameters
log_reg <- logistic_reg(mixture = tune(), penalty = tune(), engine = "glmnet")

# Define the grid search for the hyperparameters
grid <- grid_regular(mixture(), penalty(), levels = c(mixture = 4, penalty = 3))

# Define the workflow for the model
log_reg_wf <- workflow() %>%
  add_model(log_reg) %>%
  add_formula(y ~ .)

# Define the resampling method for the grid search
folds <- vfold_cv(train, v = 5)

# Tune the hyperparameters using the grid search
log_reg_tuned <- tune_grid(
  log_reg_wf,
  resamples = folds,
  grid = grid,
  control = control_grid(save_pred = TRUE)
)

select_best(log_reg_tuned, metric = "roc_auc")
# A tibble: 1 × 3
       penalty mixture .config              
         <dbl>   <dbl> <chr>                
1 0.0000000001       0 Preprocessor1_Model01

Daha Fazla Değerlendirme Metrikleri

En iyi hiperparametreleri kullanarak:

  1. Bir lojistik regresyon modeli eğitelim
  2. Test kümesi üzerinde tahmin üretelim
  3. Gerçek değerler ve tahminleri kullanarak bir karmaşıklık matrisi (confusion matrix) oluşturalım
# Fit the model using the optimal hyperparameters
log_reg_final <- logistic_reg(penalty = 0.0000000001, mixture = 0) %>%
                 set_engine("glmnet") %>%
                 set_mode("classification") %>%
                 fit(y~., data = train)

# Evaluate the model performance on the testing set
pred_class <- predict(log_reg_final,
                      new_data = test,
                      type = "class")
results <- test %>%
  select(y) %>%
  bind_cols(pred_class, pred_proba)

# Create confusion matrix
conf_mat(results, truth = y,
         estimate = .pred_class)
Truth
Prediction   no  yes
       no  7838  738
       yes  147  320

Kesinliği (pozitif öngörü değeri, doğru pozitiflerin tahmin edilen pozitiflere oranı) precision() fonksiyonu ile hesaplayabilirsiniz.

precision(results, truth = y,
          estimate = .pred_class)
# A tibble: 1 × 3
  .metric   .estimator .estimate
  <chr>     <chr>          <dbl>
1 precision binary         0.914

Benzer şekilde, duyarlılığı (hassasiyet, doğru pozitiflerin gerçek pozitiflere oranı) recall() fonksiyonu ile hesaplayabilirsiniz.

recall(results, truth = y,
          estimate = .pred_class)
# A tibble: 1 × 3
  .metric .estimator .estimate
  <chr>   <chr>          <dbl>
1 recall  binary         0.982

Abonelik satın alma kararını etkileyen değişkenleri anlayalım. Lojistik regresyon bağlamında katsayılar, hedef değişkenin tek tek yordayıcılara ne kadar duyarlı olduğunu belirler. Katsayıların değeri ne kadar yüksekse önemleri de o kadar fazladır. Değişkenleri katsayılarının mutlak değerine göre azalan sırada sıralayın ve mutlak değeri 0,5’ten büyük olan katsayıları görüntüleyin.

coeff <- tidy(log_reg_final) %>% 
  arrange(desc(abs(estimate))) %>% 
  filter(abs(estimate) > 0.5)
# A tibble: 10 × 3
   term            estimate      penalty
   <chr>              <dbl>        <dbl>
 1 (Intercept)       -2.59  0.0000000001
 2 poutcomesuccess    2.08  0.0000000001
 3 monthmar           1.62  0.0000000001
 4 monthoct           1.08  0.0000000001
 5 monthsep           1.03  0.0000000001
 6 contactunknown    -1.01  0.0000000001
 7 monthdec           0.861 0.0000000001
 8 monthjan          -0.820 0.0000000001
 9 housingyes        -0.550 0.0000000001
10 monthnov          -0.517 0.0000000001

Özellik önemini ggplot() fonksiyonunu kullanarak görselleştirin.

ggplot(coeff, aes(x = term, y = estimate, fill = term)) + geom_col() + coord_flip()

image2.png

Bir Sonraki Seviyeye Taşıyın

Böylece, tidymodels paketini kullanarak bir lojistik regresyon modelinin nasıl eğitilip değerlendirileceğini gösteren bu eğitimin sonuna geldik. Ayrıca model sonuçlarının nasıl yorumlanacağını ve özellik önemi gibi görsellerin nasıl çizileceğini de ele aldık. 

Tidymodels ile yapay zekâ modellerini oluşturma hakkında daha fazla bilgi edinmek istiyorsanız, R'de tidymodels ile Modelleme kursuna göz atın. Base-R yaklaşımıyla modelleme için R'de Regresyona Giriş, R'de Orta Düzey Regresyon ve R'de Genelleştirilmiş Doğrusal Modeller kurslarına bakın.

Konular
R
Veri Bilimi

R Kursları

Kurs

R’ye Giriş

4 sa
3.1M
Vektörler, listeler ve veri çerçeveleri de dahil olmak üzere R'da veri analizinin temellerini öğrenin ve gerçek veri setleriyle R pratiği yapın.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör