Giriş:

Merhaba Dostlar,

Lineer Regresyon serimizi başarıyla tamamladık ve artık sayısal tahminin ötesine geçerek kategorik tahmin dünyasına adım atıyoruz. “Machine Learning Academy”mizin bu yeni bölümünde, Lojistik Regresyon’un kapılarını aralıyoruz.

Lineer Regresyon, bir evin fiyatını, bir kişinin maaşını veya bir şirketin karını tahmin etmek gibi sürekli değişkenler üzerinde harikalar yarattı. Ancak hayatın her anı sayısal değildir. Bazen sadece “evet” ya da “hayır”, “başarılı” ya da “başarısız”, “kazandı” ya da “kaybetti” gibi net kategorik kararlar vermemiz gerekir.

8.4.1. Regresyondan Sınıflandırmaya Geçiş:

Lineer Regresyon ile tahmin edebilirdik. Peki ya peşinde olduğumuz şey, “KAZANACAK mıyım, yoksa KAYBEDECEK miyim?” şeklinde olsaydı. İşte bu, bir sınıflandırma problemidir. Sonuç ya “KAZANMA” (1) ya da “KAYBETME” (0) olacaktır.

Lineer Regresyon modelimizden çıkan bir y değeri, örneğin 0.75 veya 1.2 gibi bir sayı, bu “kazanma/kaybetme” ikili sonucunu doğrudan temsil edemez. Bir kişinin hastalığını tahmin ederken, Lineer Regresyon’dan çıkan 0.2 değeri ne anlama gelir? Hastalığın %20’si mi? Hayır, bu mantıklı değil. Bizim ihtiyacımız olan şey, bir olayın gerçekleşme olasılığıdır, bu olasılık da her zaman 0 ile 1 arasında bir değer almalıdır.

İşte tam da bu noktada, Lojistik Regresyon devreye giriyor ve bizi olasılıklar dünyasına taşıyor.

Lojistik Regresyon’un Temelleri: Sigmoid’in Sırrı

8.4.2. Olasılıklar ve Sigmoid Fonksiyonu:

Lojistik Regresyon’un kalbinde, çıktıları 0 ile 1 arasına sıkıştıran özel bir matematiksel fonksiyon yatar: Sigmoid Fonksiyonu (aynı zamanda Lojistik Fonksiyon olarak da bilinir). Bu “S” şeklindeki eğri, lineer bir modelin çıktısını (yani −∞ ile +∞ arasında değişebilen bir değeri) bir olasılığa dönüştürür.

Matematiksel İfade Gösterimi

Lojistik Regresyon’un temel denklemi, bir olayın gerçekleşme olasılığını Sigmoid fonksiyonu aracılığıyla ifade eder. Bu olasılık (\(P(Y=1|X)\)) aşağıdaki gibi tanımlanır:

\[ P(Y=1|X) = \frac{1}{1 + e^{-z}} \]

Burada, \(z\) bağımsız değişkenlerin lineer kombinasyonunu temsil eder (\(z = \beta_0 + \beta_1 x_1 + \dots\)). Bu denklem, bir olayın gerçekleşme olasılığını 0 ile 1 arasına sıkıştırarak kategorik tahminler için zemin hazırlar.

Peki, neden bu fonksiyona ihtiyacımız var? Çünkü lineer regresyon çıktısı olan z değeri −∞ ’dan +∞’a kadar herhangi bir değer alabilir. Bir olasılığın 0’dan küçük veya 1’den büyük olması ise anlamsızdır. Sigmoid fonksiyonu, z değeri ne olursa olsun, çıktısını her zaman (0, 1) aralığında tutar. Bu, “Machine Learning Academy”mizde olasılıkları standart bir zemine oturtmanın anahtarıdır. Lojistik Regresyon’un bir Genelleştirilmiş Lineer Model (GLM) olarak sınıflandırılması ve bu fonksiyonun kullanımı, Nelder ve Wedderburn (1972) tarafından ortaya konan çerçeve ile uyumludur.

Sigmoid Fonksiyonunun Görselleştirilmesi

Şimdi, bu “S” şeklindeki eğriyi R’da nasıl görselleştireceğimize bakalım. Kendi Sigmoid fonksiyonumuzu tanımlayıp, farklı z değerleri için nasıl davrandığını inceleyelim.

library(ggplot2)

# Kendi Sigmoid fonksiyonumuzu tanımlayalım
sigmoid <- function(z) {
  return(1 / (1 + exp(-z)))
}

# Geniş bir 'z' değeri aralığı oluşturalım
z_values <- seq(-10, 10, length.out = 500)

# Sigmoid fonksiyonunu 'z' değerlerine uygulayalım
prob_values <- sigmoid(z_values)

# Veriyi bir data frame'e dönüştürelim (ggplot2 için en iyisi)
sigmoid_df <- data.frame(z = z_values, probability = prob_values)

# ggplot2 ile Sigmoid fonksiyonunu çizelim
ggplot(sigmoid_df, aes(x = z, y = probability)) +
  geom_line(color = "darkblue", size = 1) +
  geom_hline(yintercept = 0.5, linetype = "dashed", color = "red") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "red") +
  labs(title = "Sigmoid (Lojistik) Fonksiyonu",
       x = "Lineer Kombinasyon (z)",
       y = "Olasılık P(Y=1|X)") +
  theme_minimal() +
  scale_y_continuous(limits = c(0, 1), breaks = seq(0, 1, 0.1)) +
  annotate("text", x = 5, y = 0.9, label = "z arttıkça P(Y=1|X) 1'e yaklaşır", color = "darkgreen") +
  annotate("text", x = -5, y = 0.1, label = "z azaldıkça P(Y=1|X) 0'a yaklaşır", color = "darkgreen") +
  annotate("text", x = 2, y = 0.55, label = "Eşik Noktası: z=0 ise P=0.5", color = "darkred", hjust = 0)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Çıktı Yorumu:

Yukarıdaki grafikte de gördüğünüz gibi:

  • z değeri çok küçük (negatif sonsuza yakın) olduğunda, olasılık 0’a yaklaşır.

  • z değeri çok büyük (pozitif sonsuza yakın) olduğunda, olasılık 1’e yaklaşır.

  • z değeri tam olarak 0 olduğunda, olasılık tam olarak 0.5 olur. Bu nokta, genellikle sınıflandırma kararımızın eşik noktası olarak kullanılır.

Bu “S” şeklindeki dönüşüm, Lineer Regresyon’un lineer çıktısını, kategorik sınıflandırma için anlamlı bir olasılığa çevirmemizi sağlıyor.

Lojistik Regresyon’un Varsayımları: Lineer Regresyon(LR)’dan Farklılıklar

Sevgili Dostlar, Lineer Regresyon’da olduğu gibi, Lojistik Regresyon’un da geçerli ve güvenilir sonuçlar üretebilmesi için belirli varsayımları vardır. Ancak bu varsayımlar, bağımlı değişkenin doğası gereği (ikili kategorik) Lineer Regresyon’unkilerden önemli ölçüde farklıdır. Bu farklılıkları anlamak, her iki modelin de ne zaman ve nasıl uygulanacağını bilmek açısından kritiktir.

Aşağıdaki tablo, Lineer Regresyon’un (LR) varsayımları ile Lojistik Regresyon’un (LoJR) gereksinimleri arasındaki temel farkları özetlemektedir:

LR Varsayımı LoJR İçin Durum LoJR’de Ne Gereklidir? Açıklama
1. Hataların Normalliği GEÇERLİ DEĞİL Yoktur Lojistik Regresyon’da hatalar normal dağılmaz, çünkü çıktı 0/1 ikili (Bernoulli) bir dağılımdır. Bu, LR’den en büyük farklıktır.
2. Eşit Varyans (Homoscedasticity) GEÇERLİ DEĞİL Yoktur Varyans, tanım gereği olasılığa bağlıdır ve eşit değildir. (Örn: \(p(1-p)\) formülünden dolayı olasılık 0.5 iken varyans en yüksek, 0 veya 1’e yaklaştıkça varyans düşer.)
3. Bağımsızlık GEÇERLİDİR Gözlemler Bağımsız Olmalıdır. Tıpkı LR’de olduğu gibi, her gözlemin (müşterinin, işlemin) birbirinden bağımsız olması gerekir. Bu varsayımı LR’deki gibi Rastgele Sıralama ile sağlıyoruz.
4. Doğrusallık (Linearity) KISMİ OLARAK GEÇERLİ Logit Doğrusallığı Gereklidir. Bağımlı değişkenin kendisi değil, Log-Odds (yani Logit dönüşümü) ile bağımsız değişkenler arasında doğrusal bir ilişki olmalıdır. \(Logit(P(Y=1|X)) = \beta_0 + \beta_1 x_1 + \dots\)
5. Çoklu Doğrusallık (Multicollinearity) GEÇERLİDİR Düşük Olmalıdır. LR’deki gibi, bağımsız değişkenler arasında yüksek korelasyon olmamalıdır. (Çünkü bu, katsayıları şişirir ve yorumlanabilirliği bozar. VIF Kontrolü BURADA DA KRİTİKTİR).
6. Aykırı Gözlemler (Outliers) GEÇERLİDİR Aykırı ve Etkili Gözlemler Olmamalıdır. LoJR de bu tür noktalara karşı hassastır. Cook’s D’nin mantığı burada da geçerlidir (örn. cooks.distance() fonksiyonu ile R’da incelenebilir). Bu gözlemler modelin katsayılarını ve tahminlerini orantısız etkileyebilir (Hosmer & Lemeshow, 2000).

Varsayımlar Üzerine Notlar:

-Hataların Normalliği ve Eşit Varyans: Bu iki varsayımın geçersiz olması, Lojistik Regresyon’un Lineer Regresyon’dan temel farkını oluşturur. Bağımlı değişkenin Bernoulli (0/1) dağılımına sahip olması, hataların da Bernoulli dağılımına sahip olması anlamına gelir ve bu normal bir dağılım değildir. Ayrıca, bir Bernoulli dağılımının varyansı p(1−p) formülü ile verilir, bu da olasılığa (p) bağlı olduğu için sabit değildir.

-Logit Doğrusallığı: Lojistik Regresyon’da, bağımlı değişkenin logit dönüşümü ile bağımsız değişkenler arasında doğrusal bir ilişki beklenir. Bu, Lineer Regresyon’daki gibi doğrudan bağımlı değişkenin kendisinin lineer olmasından farklıdır. Bu varsayımın incelenmesi için R’da, bağımsız değişkenlerin kategorik formlarının veya etkileşim terimlerinin modelde doğru şekilde yer alması önemlidir. Bağımsız değişkenin kontinu olması durumunda, Box-Tidwell dönüşümü gibi yöntemlerle bu varsayım test edilebilir veya bağımsız değişkenlerin kategorize edilmesi düşünülebilir (Hosmer & Lemeshow, 2000).

-Çoklu Doğrusallık: Lineer Regresyon’da olduğu gibi, bağımsız değişkenler arasındaki yüksek korelasyon (çoklu doğrusallık), katsayıların standart hatalarını artırarak yorumlanabilirliği bozabilir. R’da car paketindeki vif() fonksiyonu ile bu durum kontrol edilebilir.

-Aykırı ve Etkili Gözlemler: Lojistik Regresyon da aykırı değerlere ve etkili noktalara karşı duyarlıdır. Bu tür noktalar, modelin katsayı tahminlerini ve dolayısıyla olasılık tahminlerini çarpıtabilir. R’da plot(model_logit, which=4) gibi standart teşhis grafikleri veya cooks.distance() gibi fonksiyonlar kullanılarak incelenebilirler.

Bu varsayımları anlamak, Lojistik Regresyon modelimizin sağlamlığını ve sonuçlarımızın güvenilirliğini değerlendirmemiz için bize bir “Veri Mimarı” olarak sağlam bir zemin sunar.

Lojistik Regresyon Türleri: Sınıflandırmanın Geniş Spektrumu

Dostlar, şimdiye kadar Lojistik Regresyon’u genellikle ikili (binary) bir çıktıya sahip durumlar için ele aldık. Ancak sınıflandırma problemleri her zaman iki kategoriyle sınırlı değildir. Bazen üç veya daha fazla sınıfı tahmin etmemiz gerekebilir. Lojistik Regresyon, bu daha karmaşık senaryoları ele almak için farklı formlarda genişletilmiştir.

Temelde üç ana Lojistik Regresyon biçimi bulunmaktadır:

Lojistik Regresyon Türü Temel Ayrım Açıklama R’daki Uygulama Örnekleri
2.1. İkili (Binary) Lojistik Regresyon 2 sınıf (örnek: “kazandı” / “kaybetti”) Olasılık 0-1 aralığındadır; bağımlı değişken iki kategorilidir. Bu, şimdiye kadar odaklandığımız ana türdür. glm(y ~ x1 + x2, data = veri, family = binomial)
2.2. Çok Sınıflı (Multinomial) Lojistik Regresyon 3 veya daha fazla, sırasız kategori (örnek: “memnun”, “kararsız”, “memnun değil”) Her sınıf için ayrı bir olasılık modeli kurulur (referans kategoriye göre). Kategoriler arasında doğal bir sıra yoktur. nnet::multinom(y ~ x1 + x2, data = veri) veya VGAM::vglm(y ~ x1 + x2, family = multinomial)
2.3. Sıralı (Ordinal) Lojistik Regresyon 3 veya daha fazla, sıralı kategori (örnek: “düşük”, “orta”, “yüksek”) Kategoriler arasında doğal bir sıralama vardır. Örneğin bir anket cevabı: “hiç katılmıyorum” < “katılmıyorum” < “kararsızım” < “katılıyorum” < “kesinlikle katılıyorum”. MASS::polr(y ~ x1 + x2, data = veri, Hess = TRUE) (Ordinal Lojistik Regresyon için) veya VGAM::vglm(y ~ x1 + x2, family = cumulative) (Sıralı için farklı bağlantı fonksiyonları)

Türler Üzerine Notlar:

-İkili Lojistik Regresyon: En yaygın kullanılan türdür ve derslerimizde ilk olarak buna odaklanacağız.

-Çok Sınıflı (Multinomial) Lojistik Regresyon: Eğer bağımlı değişkeniniz üç veya daha fazla kategoriye sahipse ve bu kategoriler arasında doğal bir sıralama yoksa (örneğin, “elma”, “armut”, “muz” veya “Müşteri A”, “Müşteri B”, “Müşteri C”), Multinomial Lojistik Regresyon kullanırız. R’da nnet paketindeki multinom() fonksiyonu veya VGAM paketindeki vglm() fonksiyonu bu tür modelleri kurmak için kullanılabilir. Bu modeller, her bir kategorinin referans kategoriye göre log-odds’unu tahmin eder.

-Sıralı (Ordinal) Lojistik Regresyon: Bağımlı değişkeniniz üç veya daha fazla kategoriye sahipse ve bu kategoriler arasında doğal bir sıralama varsa (örneğin, eğitim seviyeleri: “ilkokul”, “ortaokul”, “lise”, “üniversite” veya müşteri memnuniyet anketleri: “çok kötü”, “kötü”, “normal”, “iyi”, “çok iyi”), Sıralı Lojistik Regresyon daha uygun bir seçimdir. Bu modeller, kategoriler arasındaki doğal sıralamayı dikkate alarak daha verimli ve anlamlı sonuçlar üretebilir. R’da MASS paketindeki polr() fonksiyonu genellikle bu amaçla kullanılır.

Bu farklı Lojistik Regresyon türlerini bilmek, “Veri Mimarı” olarak karşılaştığınız çeşitli sınıflandırma problemlerine doğru modeli uygulamanız için size esneklik sağlayacaktır. İlk olarak ikili Lojistik Regresyon’un temellerini sağlam bir şekilde kavrayacak, ardından gerektiğinde diğer türlere de değineceğiz.

8.4.3. Lineer Modelden Lojistik Modele:

Önceki bölümlerde, Lojistik Regresyon’un ikili çıktıları tahmin etmek için Sigmoid fonksiyonunu kullandığını ve bu fonksiyonun, lineer bir kombinasyon olan \(z\) değerini 0 ile 1 arasına sıkıştıran bir olasılığa dönüştürdüğünü gördük. Şimdi, bu \(z\) değerinin nereden geldiğine odaklanalım ve Lineer Regresyon’un buradaki sınırlılıklarını daha net ortaya koyalım.

Lineer Regresyon’daki gibi, bağımsız değişkenlerimizin (\(x_1, x_2, \dots, x_p\)) ağırlıklı bir toplamı olarak bir lineer tahminci (\(z\)) oluştururuz. Bu \(z\) ifadesi, bağımsız değişkenlerin bağımlı değişkene olan doğrusal etkisini yakalar.

Lineer Regresyon denklemimizi hatırlayalım:

\[ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_p x_p + \epsilon \]

Ancak, bağımlı değişkenimiz ikili (0 veya 1) olduğunda, bu doğrusal modelin doğrudan uygulanması ciddi sorunlar yaratır. En başta, lineer regresyon modelinden elde edeceğimiz tahmin edilen \(y\) değeri \((-\infty, +\infty)\) aralığında herhangi bir değer alabilir. Bu, 0 ile 1 arasında olması gereken bir olasılık için anlamsızdır ve örneğin negatif bir “sınavı geçme olasılığı” gibi istenmeyen durumlarla karşılaşmamıza neden olur. Bu durum, olasılık modellerinin asıl gücünün, bireylerin veya kurumların kararlarını şekillendiren “gizli fayda”ları (Latent Utility) doğrudan ölçemediğimiz durumlarda ortaya çıktığını daha belirgin hale getirir. Bu yaklaşım, iktisat ve davranış bilimlerinde Rastlantısal Fayda Teorisi (Random Utility Model - RUM) olarak bilinen çerçevenin temelini oluşturur (bkz. McFadden, 1974). RUM’a göre bireyler, kendileri için faydayı maksimize eden seçeneği tercih ederler ve Lojistik Regresyon gibi olasılık modelleri, bu gizli faydaların etkilerini, yapılan seçimler üzerinden dolaylı olarak anlamamızı sağlar.

Lojistik Regresyon’da ise, bu lineer kısmı (\(\beta_0 + \beta_1 x_1 + \dots + \beta_p x_p\)) doğrudan çıktı olarak kullanmayız. Bunun yerine, bu lineer kombinasyonu Sigmoid fonksiyonunun argümanı olarak kullanırız. Böylece, \(z\) değeri aşağıdaki gibi ifade edilir:

\[ z = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_p x_p \]

Bu \(z\) değerini Sigmoid fonksiyonumuzun içine yerleştirdiğimizde, bağımlı değişkenin (örneğin \(Y=1\)) belirli \(X\) değerleri verildiğinde gerçekleşme olasılığını (\(P(Y=1|X)\)) veren Lojistik Regresyon denklemini elde ederiz:

\[ P(Y=1|X) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_p x_p)}} \]

Bu denklem, “Machine Learning Academy”mizin kalbindeki dönüşümü temsil eder: Lineer bir ilişkiyi (bağımsız değişkenler ve \(z\) arasında), kategorik bir çıktının olasılığına dönüştürürüz. Bu dönüşüm sayesinde, \(P(Y=1|X)\) değeri her zaman 0 ile 1 arasında kalır ve bir olasılık olarak yorumlanabilir. Bu yapı, hem esnekliği hem de gerçek hayata uygunluğu artırarak, sağlık, sosyal bilimler ve ekonomi gibi alanlarda daha derin ve anlamlı analizler yapmamıza imkan verir; bir nevi, görünmeyeni görünür hâle getiren bir araç gibi düşünebiliriz.

Basit Bir Lojistik Regresyon Modeli Oluşturma

Şimdi, bu teoriyi R’da nasıl uygulayacağımıza bakalım. Sentetik bir veri seti oluşturarak, tek bir bağımsız değişkenin ikili bir bağımlı değişken üzerindeki etkisini modelleyelim. R’daki glm() (generalized linear models) fonksiyonunu, family = “binomial” argümanıyla Lojistik Regresyon modelleri kurmak için kullanacağız.

# Gerekli kütüphaneleri yükleyelim (ggplot2 zaten yüklü varsayalım)
# library(ggplot2)

# Rasgelelik için sabitleme
set.seed(42)

# Sentetik veri seti oluşturalım
# Bağımsız değişken (örneğin, ders çalışma süresi)
x <- runif(100, min = 0, max = 10) # 0 ile 10 saat arasında çalışma süresi

# Bağımlı değişken (örneğin, sınavı geçme/kalma)
# z = -3 + 0.6 * x (basit bir lineer kombinasyon)
# Bu z'yi sigmoid'e sokarak olasılık hesaplayalım
linear_combination_z <- -3 + 0.6 * x + rnorm(100, mean = 0, sd = 1) # Biraz gürültü ekleyelim
simulated_prob <- sigmoid(linear_combination_z)

# Olasılıklara göre ikili çıktıyı belirleyelim (örneğin, 0.5 eşiği ile)
y <- ifelse(simulated_prob > 0.5, 1, 0)

# Veri çerçevesini oluşturalım
df_sim <- data.frame(study_hours = x, pass_exam = as.factor(y)) # 'y'yi faktör olarak tanımla

# Verinin ilk birkaç satırını görelim
head(df_sim)
# Lojistik Regresyon modelini kuralım
# family="binomial", ikili bağımlı değişkenler için Lojistik Regresyon kullanır
model_logit <- glm(pass_exam ~ study_hours, data = df_sim, family = "binomial")

# Modelin özetini görüntüleyelim
summary(model_logit)
## 
## Call:
## glm(formula = pass_exam ~ study_hours, family = "binomial", data = df_sim)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  -5.0052     1.0283  -4.868 1.13e-06 ***
## study_hours   0.9883     0.1877   5.265 1.40e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 138.269  on 99  degrees of freedom
## Residual deviance:  61.869  on 98  degrees of freedom
## AIC: 65.869
## 
## Number of Fisher Scoring iterations: 6

Çıktı Yorumu:

summary() Çıktısının Anatomisi:

Yukarıdaki summary(model_logit) komutunun çıktısı, modelimiz hakkında zengin bilgiler içerir. Gelin bu tabloyu bir “Veri Mimarı” gözüyle, parça parça inceleyelim.

Coefficients: (Katsayılar) Bölümü

Burası modelin kalbidir. Her bir değişkenin etkisini burada görürüz.

Estimate (Tahmin): Bunlar modelimizin öğrendiği β katsayılarıdır. Bu değerler log-odds birimindedir.

(Intercept): -5.0052, study_hours sıfır olduğunda, sınavı geçmenin başlangıç log-odds’udur.

study_hours: 0.9883, çalışma süresindeki her 1 saatlik artışın, sınavı geçme log-odds’unu ne kadar artırdığını gösterir.

Dostlara Not: summary() çıktısındaki katsayıların (Estimate) log-odds biriminde olmasından dolayı doğrudan yorumlanmasının zor olduğunu belirtmek isterim. Bu yorumlamayı aşağıda birazdan değineceğimiz Odds Ratios anlatımı sayesinde yapabileceğiz.

Std. Error (Standart Hata): Estimate sütunundaki tahminlerin ne kadar “belirsizlik” içerdiğinin bir ölçüsüdür. Düşük bir standart hata, tahminimize daha fazla güvendiğimiz anlamına gelir.

z value (z değeri): Bu, Estimate’in Std. Error’a bölünmesiyle elde edilir. Bir katsayının “sıfırdan” (yani “etkisiz” olmaktan) istatistiksel olarak ne kadar uzak olduğunu gösterir. Büyük bir (pozitif veya negatif) z değeri, etkinin muhtemelen tesadüfi olmadığını düşündürür.

Pr(>|z|) (p-değeri): Bu, istatistiksel anlamlılığı ölçen en önemli sütundur. Anlamı şudur: “Eğer bu değişkenin gerçekte hiçbir etkisi olmasaydı (yani gerçek katsayısı sıfır olsaydı), sadece şans eseri bu kadar güçlü bir etkiyi görme olasılığımız ne olurdu?”

Çok küçük bir p-değeri (genellikle < 0.05), bu etkinin şans eseri ortaya çıkma olasılığının çok düşük olduğunu, dolayısıyla değişkenin istatistiksel olarak anlamlı olduğunu söyler. study_hours için p-değeri 1.40e-07’dir. Bu, 0.00000014 anlamına gelir ki bu da son derece anlamlı bir sonuçtur.

Signif. codes (Anlamlılık Kodları): Bu yıldızlar p-değerleri için görsel birer kısayoldur. Anlamları şudur:

  • ***: P-değeri 0.001’den küçük (çok yüksek anlamlılık).

  • **: P-değeri 0.01’den küçük.

  • *: P-değeri 0.05’ten küçük.

  • .: P-değeri 0.1’den küçük.

  • (Boşluk): P-değeri 0.1’den büyük (anlamlı değil).

Modelin Genel Uyum İstatistikleri

Bu kısım, modelimizin genel olarak veriye ne kadar iyi uyduğunu anlatır.

  • Null deviance: Sadece kesim noktasını (Intercept) içeren, yani hiçbir bağımsız değişkenin olmadığı “boş” bir modelin uyum skorudur. Yüksek bir değer, kötü bir uyum anlamına gelir. Bu bizim başlangıç noktamızdır.

  • Residual deviance: Bizim study_hours değişkenini eklediğimiz modelimizin uyum skorudur. Amacımız, Residual deviance’ın Null deviance’dan önemli ölçüde daha düşük olmasıdır. Bizim örneğimizde 138’den 61’e düşmüş, bu da study_hours değişkeninin modeli anlamlı bir şekilde iyileştirdiğini gösterir.

  • AIC (Akaike Information Criterion): Farklı modelleri karşılaştırmak için kullanılan bir metriktir. Tek başına bir anlamı yoktur, ancak birden fazla model kurduğumuzda, daha düşük AIC değerine sahip olan model genellikle daha iyi olarak kabul edilir (hem veriye iyi uyum sağlayan hem de gereksiz karmaşık olmayan).

  • Number of Fisher Scoring iterations: 6: Bu, son bölümde bahsettiğimiz optimizasyon algoritmasının, en iyi katsayıları bulmak için 6 adımda zirveye ulaştığını gösterir. Küçük bir sayı olması, modelin sağlıklı ve hızlı bir şekilde çözüme ulaştığına işarettir.

Şimdi, bu modelin tahmin ettiği olasılıkları ve sınıflandırmaları görselleştirelim.

# Tahmin edilen olasılıkları modelden alalım
df_sim$predicted_prob <- predict(model_logit, type = "response")

# Karar eşiği (genellikle 0.5) kullanarak sınıflandırma yapalım
df_sim$predicted_class <- ifelse(df_sim$predicted_prob > 0.5, "1", "0")

# Orijinal 'pass_exam' değişkenini sayısal hale getirelim ki plot'ta sürekli görünebilsin
df_sim$pass_exam_numeric <- as.numeric(as.character(df_sim$pass_exam))

# ggplot2 ile sonuçları görselleştirelim
ggplot(df_sim, aes(x = study_hours, y = pass_exam_numeric)) +
  geom_point(aes(color = as.factor(pass_exam)), alpha = 0.7, size = 3) +
  geom_line(aes(y = predicted_prob), color = "darkblue", size = 1, linetype = "solid") + # Sigmoid eğrisi
  geom_hline(yintercept = 0.5, linetype = "dashed", color = "red") + # Karar sınırı
  labs(title = "Lojistik Regresyon Modeli: Sınavı Geçme Olasılığı",
       x = "Çalışma Saatleri",
       y = "Sınavı Geçme Olasılığı (Tahmin Edilen)",
       color = "Sınav Sonucu (Gerçek)") +
  scale_y_continuous(breaks = c(0, 0.5, 1), labels = c("0 (Kalma)", "0.5 (Eşik)", "1 (Geçme)")) +
  scale_color_manual(values = c("0" = "orange", "1" = "darkgreen")) +
  theme_minimal() +
  # Karar sınırının çalışma saatleri karşılığını da işaretleyelim
  annotate("text", x = 8, y = 0.6, label = "Sigmoid Olasılık Eğrisi", color = "darkblue", hjust = 0) +
  annotate("text", x = 8, y = 0.45, label = "Karar Sınırı (P=0.5)", color = "red", hjust = 0)

Görselleştirme Yorumu:

Grafikteki turuncu (0) ve yeşil (1) noktalar, sentetik olarak oluşturduğumuz gerçek sınav sonuçlarını (Y) ve çalışma saatlerini (X) temsil ediyor.

Koyu mavi çizgi, Lojistik Regresyon modelimizin çalışma saatlerine göre tahmin ettiği sınavı geçme olasılığını gösteren Sigmoid eğrisidir.

Kırmızı kesikli çizgi ise 0.5 olasılık eşiğini (karar sınırını) belirtir. Bu eşiğin üzerindeki noktalar “geçme” (1), altındaki noktalar “kalma” (0) olarak sınıflandırılacaktır.

Bu görselleştirme, lineer modelin (z) nasıl Sigmoid aracılığıyla olasılığa dönüştüğünü ve bunun ikili sınıflandırma için nasıl kullanıldığını açıkça göstermektedir.

Bu, Lineer Regresyon’dan Lojistik Regresyon’a geçişin ve kategorik tahminin nasıl gerçekleştiğinin somut bir örneğidir.