Kurs
Bir lojistik regresyon modeli eğittikten sonra, katsayılara güvenebileceğinizden nasıl emin olabilirsiniz?
Lojistik regresyon basitliğiyle bilinir. scikit-learn ile .fit() çağırır, olasılık oranlarını okur ve konu kapanır gibi görünür. Ancak çoğu yeni başlayan kişinin bilmediği, modelin kendi varsayımları olduğudur; bu varsayımlara uyulmadığında, katsayılar yanıltıcı olur ve tahminler, hiçbir test metriğinin size söylemeyeceği şekillerde sapar.
Doğrusunu söylemek gerekirse, lojistik regresyonun doğrusal regresyondan daha az varsayımı vardır ve sahip olduklarını kontrol etmek de kolaydır. Çıktıyı yorumlamadan önce doğru tanı kontrollerini çalıştırmanız yeterlidir; böylece modelin hangi kısımlarına güvenebileceğinizi bilirsiniz.
Bu yazıda, lojistik regresyonun yaptığı her varsayımı, her birini Python ve R'de nasıl kontrol edeceğinizi, ihlal edildiklerinde ne olduğunu ve varsayımlara uyulamadığında hangi alternatiflere yönelmeniz gerektiğini adım adım göstereceğim.
Veri bilimi ve makine öğrenmesine yeni başladıysanız, Basit Doğrusal Regresyon hakkındaki blog yazımızı okuyarak varsayımlarını ve tanılarını anlayın.
Lojistik Regresyon Nedir?
Lojistik regresyon, kategorik bir sonucun olasılığını tahmin eden bir sınıflandırma modelidir. Ona yordayıcılar verirsiniz ve size 0 ile 1 arasında, belirli bir sınıfa ait olma olasılığı olarak okunabilecek bir sayı döndürür.
Çoğu kişi bunu churn/olmayan churn, spam/spam değil gibi ikili sınıflandırma için kullanır. Multinom ve sıralı (ordinal) lojistik regresyon gibi türler ikiden fazla sınıfı kapsar, ancak insanlar "lojistik regresyon" dediğinde genellikle ikili durumu kasteder.
Yüzeyin altında, model yordayıcılarınızın doğrusal bir birleşimini uydurur ve sonucu lojistik fonksiyondan geçirir. Çıktı bir olasılıktır ve katsayılar her yordayıcının log-olasılıkları (log-odds) nasıl kaydırdığını söyler.
Lojistik regresyonun doğrusal regresyondan farklı olduğunu belirtmekte fayda var. İlki, artıkların normalliği, homoskedastisite, yordayıcılarla hedef arasındaki doğrusallık gibi tanıdık varsayımlara sahiptir. Lojistik regresyon bu varsayımları yapmaz. Kendi listesi vardır ve bunlar doğrusal regresyonun varsayımlarından yeterince farklıdır; doğrusal regresyon varsayımlarını kullanmak yanıltıcı sonuçlara yol açar.
Lojistik regresyon hakkında daha fazla ayrıntı için, Python ile uygulamayı gösteren blog yazımızı okuyun.
Lojistik Regresyon Varsayımları Neden Önemlidir
Varsayımlar önemlidir çünkü doğrudan modelle ne yaptığınızla bağlantılıdır.
Varsayımlara saygı duyarsanız, katsayılar düşündüğünüz şeyi ifade eder. Okuduğunuz olasılık oranları geçerlidir ve modelin olasılıkları gerçek sonuçlarla iyi örtüşür. Varsayımlara uyulmadığında, karışıklık matrisi veya başka bir metrik size göstermeyecek şekillerde her şey belirsizleşir.
İyi haber, ihlallerin ikili olmamasıdır. Örneğin, logit-doğrusallığı varsayımından hafif bir sapma, modelinizi işe yaramaz hale getirmez. Sadece olasılık oranlarınızın biraz hatalı olacağı ve tahminlerinizin olması gerekenden daha kötü olabileceği anlamına gelir. Üretimdeki pek çok model, mükemmel olmayan varsayım kontrolleriyle yaşar ve bu gayet normaldir.
İstemediğiniz şey kontrolleri atlamaktır. Tanılar olmadan, tahminler yanlış gidene kadar küçük mü yoksa büyük bir soruna mı baktığınızı anlayamazsınız.
Lojistik Regresyon Varsayımlarına Genel Bakış
Her bir varsayıma girmeden önce, kontrol etmeniz gereken tam liste burada.
| Varsayım | Ne gerektirir | Yaygın tanı |
|---|---|---|
| Bağımsız gözlemler | Hiçbir kayıt başka bir kaydı etkilemez | Çalışma tasarımı, sınıf içi korelasyon |
| Uygun sonuç değişkeni | İkili ya da doğru varyantla modellenmiş | Hedefi inceleyin |
| Logit'in doğrusallığı | Yordayıcılar log-olasılıklarda doğrusal | Box-Tidwell testi, spline'lar |
| Ağır çoklu doğrusal bağlantı yok | Yordayıcılar güçlü şekilde ilişkili değil | VIF, korelasyon matrisi |
| Yeterli örneklem büyüklüğü | Değişken başına yeterli olay | EPV başparmak kuralı |
| Etkileyici aykırı değer yok | Tek bir kayıt uyumu saptırmıyor | Cook uzaklığı, leverage |
Lojistik regresyon varsayımları tablosu
Liste bu kadar. Yazının geri kalanında, her varsayımı Python ve R tanılarıyla birlikte anlatacağım; ihlal nasıl görünür ve bir şeyler ters gittiğinde ne yapmalısınız, hepsini göreceksiniz.
Başlıca Lojistik Regresyon Varsayımları
Varsayım 1: Sonuç değişkeni ikilidir (veya uygun şekilde modellenmiştir)
Standart lojistik regresyon ikili bir sonuç için tasarlanmıştır. Hedef değişkenin tam olarak iki kategorisi olmalıdır ve model bu duruma göre kurgulanmıştır.
Klasik örnekler churn/olmayan churn, hastalık/olmayan hastalıktır. Evet/hayır sorusu olarak ifade edilebilen her şey iyi bir adaydır.
Sonucunuzun ikiden fazla kategorisi varsa, farklı bir varyanta ihtiyacınız var. Multinom lojistik regresyon, müşteri segmentleri veya ürün türleri gibi sırasız kategorileri; sıralı lojistik regresyon ise 1'den 5'e memnuniyet puanları gibi, düzeyler arasındaki sıranın anlamlı olduğu sıralı kategorileri ele alır.
Çok sınıflı bir sonucu ikili modele zorlamak genelde sıkmamanız gereken kategorileri sıkıştırmanız anlamına gelir. Beş seviyeli bir memnuniyet hedefini "memnun vs değil"e indirirseniz, modelinize yardımcı olabilecek bilgiyi kaybedersiniz. Hedefinizin yapısına uyan varyantı seçin.
Varsayım 2: Gözlemler bağımsızdır
Veri kümenizdeki her satır, modelin başka hiçbir satırdan zaten almadığı bilgiyi sağlamalıdır. İki kayıt bu varsayımı ihlal edecek şekilde bağlantılıysa, standart hatalarınız ve p-değerleriniz olması gerektiği anlamı taşımayacaktır.
Varsayım, gözlemler modellenmemiş bir yapıyı paylaştığında bozulur. Aynı hastada yinelenen ölçümler, hastanın biyolojisini paylaşır; iyi bir örnektir. Bir diğer örnek de aynı sınıfta gruplanmış öğrenciler; öğretmeni ve sınıfı paylaşırlar.
Bunu yok sayıp düz bir lojistik regresyon uydurduğunuzda, model her satırı yeni bilgi gibi değerlendirir ve standart hataları gereğinden fazla düşürür. Katsayılar yüzeyde hâlâ iyi görünebilir, ancak p-değerleri ve güven aralıkları fazla kendinden emin olur.
Standart alternatifler karma etkili (mixed-effects) lojistik regresyon ve GEE'dir. Karma etkili modeller, gruplar (hasta, sınıf) için rassal etkiler ekleyerek modelin grup içi korelasyonu hesaba katmasını sağlar. GEE, yani genelleştirilmiş tahmin denklemleri, rassal etki mekaniğine girmeden düzeltilmiş standart hatalarla nüfus ortalaması etkiler verir.
Grup içi değişkenlikle ilgileniyorsanız karma etkili modelleri seçin. Tüm nüfus genelinde marjinal etkiler istiyorsanız GEE'yi seçin.
Varsayım 3: Logit'in doğrusallığı
Lojistik regresyon hakkında en çok yanlış anlaşılan varsayım budur.
Model, yordayıcılarınızın sonuçla doğrusal bir ilişkiye sahip olduğunu varsaymaz. Sonucun log-olasılıklarıyla doğrusal bir ilişkiye sahip olduklarını varsayar. Bu farklı bir ifadedir ve neyi kontrol etmeniz gerektiğini değiştirir.
Logit nedir
Logit, olasılık oranının doğal logaritmasıdır. Bir p olasılığı için olasılık oranı p / (1 - p)'dir ve logit bu oranın logudur:

Logit
Lojistik regresyon ardından bu ölçekte doğrusal bir denklem uydurur:

Lojistik regresyon formülü
Sağ taraf yordayıcılarda doğrusaldır. Sol taraf olasılık değil, log-olasılıktır. Aslında önemsediğiniz olasılık, doğrusal birleşimi doğrusal olmayan lojistik fonksiyondan geçirerek elde edilir.
Dolayısıyla herhangi bir yordayıcı ile olasılık arasındaki ilişki doğrusal değildir. Doğrusal olması gereken, herhangi bir yordayıcı ile log-olasılıklar arasındaki ilişkidir.
Pratikte neden önemlidir
Logit-doğrusallığı bazı yordayıcılar için sağlanmadığında, o yordayıcının katsayısı bir eğriyi düz bir çizgiyle özetler. Model hâlâ bir sayı verir ve bu sayı istatistiksel olarak anlamlı da olabilir, ancak sayı verinizdeki gerçek ilişkiyi tanımlamaz.
Örneğin, age bir hastalığın log-olasılıkları üzerinde U-şekilli bir etkiye sahip olabilir; her iki uçta yüksek, ortada daha düşük risk. age'i tek bir doğrusal terim olarak eklerseniz, katsayı sıfıra yakın çıkabilir ve yaşın önemsiz olduğuna karar verirsiniz. Oysa önemlidir. Belirtim yanlıştır.
Logit-doğrusallığını kontrol etmek
Bu varsayımı kontrol etmek için birkaç seçeneğiniz var.
En hızlı kontrol görsel incelemedir. Sürekli her yordayıcıyı desillere ayırın, her bir dilimdeki ampirik log-olasılıkları hesaplayın ve sonucu yordayıcıya karşı çizin. Kabaca düz bir çizgi varsayımın sağlandığına, belirgin bir eğri ise sağlanmadığına işaret eder. Kontrol gayriresmidir ama dilim başına yeterli veri olduğunda iyi çalışır.
Box-Tidwell testi, her sürekli yordayıcı ile kendi doğal logu arasına bir etkileşim terimi ekler. Etkileşim istatistiksel olarak anlamlıysa, o yordayıcı için logit-doğrusallığı varsayımı ihlal edilmiştir. Test yalnızca kesinlikle pozitif yordayıcılarda çalışır (çünkü sıfırın veya negatif bir sayının logu alınamaz) ve diğer anlamlılık testleri gibi örneklem büyüklüğüne duyarlıdır.
Spline'lar başka bir seçenektir. Doğrusallığın sağlanıp sağlanmadığını kontrol etmek yerine, doğrusal terimi kısıtlı kübik spline gibi esnek bir temel fonksiyonla değiştirir ve modele ihtiyaç duyduğu şekli uydurtursunuz. Spline, doğrusal terime göre çok daha iyi uyarsa (olasılık oranı testi veya AIC ile değerlendirilir), doğrusal belirtimin fazla kısıtlayıcı olduğuna dair kanıtınız olur. Spline'lar ayrıca bir düzeltme olarak da işe yarar. Doğrusallık başarısız olduğunda, onları nihai modelde tutmak genellikle en iyi yanıttır.
Doğrusallık başarısız olduğunda ne yapmalı
Varsayım bir yordayıcı için sağlanmıyorsa, birkaç seçeneğiniz var:
- Yordayıcıyı dönüştürün (log veya karekök dönüşümü genellikle işe yarar) ve ilişki log-olasılıklarda doğrusal görününceye kadar deneyin
- Spline kullanın ve biraz daha karmaşık bir modeli kabul edin
İkisi de sizi lojistik regresyon ailesinde tutar ve ikisi de aslında bilgi taşıyan bir yordayıcıyı dışlamaktan daha iyidir.
Varsayım 4: Ağır çoklu doğrusal bağlantı yok
Lojistik regresyon bir noktaya kadar ilişkili yordayıcılarla başa çıkar. O noktadan sonra model, herhangi bir test metriğinden fark edilmesi zor şekillerde sorun çıkarmaya başlar.
Çoklu doğrusal bağlantı, iki veya daha çok yordayıcının aynı (veya çok benzer) bilgiyi taşımasıyla ortaya çıkar. Belki hem inç hem santimetre cinsinden boyu aynı modele koydunuz. Ya da toplam gelir ve müşteri başına geliri müşteri sayısıyla birlikte kullandınız.
Çoklu doğrusal bağlantı olduğunda iki şey ters gider:
- Katsayılar dengesizleşir: Tek bir satırı ekleyip çıkarmak, kollineer bir yordayıcının katsayısını saptırabilir veya işaretini tersine çevirebilir. Model hâlâ çalışır, ancak tekil katsayılar anlamlı değildir.
- Standart hatalar şişer: Yordayıcı başına bağımsız bilgi azaldıkça, model her katsayı hakkında daha az emin olur. P-değerleri yükselir ve gerçek etkiler anlamlı çıkmayabilir.
Tahminler genellikle iyidir. Sadece tahmin olasılığına önem veriyorsanız, hafif-orta şiddette çoklu doğrusal bağlantı nadiren sorun yaratır. "Hasar" katsayılarda ve bunlara dair yaptığınız çıkarımlarda yoğunlaşır.
İki kontrol: korelasyon matrisi ve varyans şişme faktörü (VIF). Korelasyon matrisi bakılacak ilk şeydir; özellikle mutlak değeri 0.8 veya 0.9'un üzerinde olan yordayıcı çiftleri. Sınırlaması, yalnızca ikili kollineerliği yakalaması; üç veya daha fazla yordayıcının birlikte artık olduğu çok yönlü durumu yakalamaz.
VIF çok yönlü durum için vardır. Her yordayıcı için, VIF katsayısının varyansının diğer yordayıcılarla kollineerlik nedeniyle ne kadar şiştiğini ölçer. VIF'in 1 olması kollineerlik yok demektir, 5'e kadar olan değerler genelde sorun değildir, 10'un üzeri ise yordayıcının modeldeki diğerleriyle artık olduğuna güçlü bir işarettir.
VIF bir şeyi işaretlediğinde, en kolay düzeltme kollineer yordayıcılardan birini çıkarmak veya onları toplam ya da oran gibi tek bir değişkende birleştirmektir. Hepsini tutmak isterseniz, düzenlileştirme (ridge veya elastik net) sizi seçim yapmadan katsayıları dengeler.
Varsayım 5: Yeterli örneklem büyüklüğü
Lojistik regresyon küçük örneklemlerle de çalışır, ancak bir miktar güvenilmezdir. Katsayılar gereğinden fazla oynar ve nadir sınıf etkilerini tahmin etmek neredeyse imkânsız hale gelir.
Lojistik regresyon için önemli olan örneklem büyüklüğü toplam satır sayısı değildir. Olay sayısıdır (azınlık sınıfındaki gözlemler). 100.000 satır ve 50 sahtecilik vakası olan bir veri kümesi, az sayıda olay olduğu için küçük örneklem problemidir; model öğrenmeye çalıştığı şeyi yalnızca 50 örnekten görür.
İşte bu noktada değişken başına olay (EPV) devreye girer. EPV, azınlık sınıfı gözlem sayısının modeldeki yordayıcı sayısına bölünmesidir. 50 sahtecilik vakası ve 10 yordayıcı varsa, EPV'niz 5'tir.
Eski başparmak kuralı en az 10 EPV idi. Daha yeni benzetim çalışmaları, doğru sayının verinizdeki etki büyüklüklerine ve kullandığınız düzenlileştirme miktarına bağlı olduğunu gösterdi. Bazı durumlarda 5 kadar düşük EPV'ler yeterli olabilir, bazılarında 20 veya üzeri gerekebilir.
Çıkarım: EPV'yi bir uyarı bilgisi olarak ele alın. 10'un altında, dengesiz tahminler bekleyin ve Firth'in lojistik regresyonu veya ridge gibi cezalı yöntemleri düşünün. 5'in altında, tekil katsayıya güvenmeden önce daha fazla veri edinin veya modeli basitleştirin.
Sınıf dengesizliği ilişkili ama farklı bir problemdir.
Vakaların %99'unun tek bir sınıf olduğu bir veri kümesinde mutlak olarak hâlâ yeterli olay/ değişken olabilir. Değişen EPV değil, sonucun taban oranıdır. Dengesiz veriler, temkinli olasılık tahminleri üretme eğilimindedir ve doğruluk (accuracy) faydalı bir metrik olmaktan çıkar. Bunu aşmak için, doğruluk yerine log-loss veya Brier skoru ile değerlendirin ve dengeli kararlar gerekirse sınıf ağırlıklarını veya eşik ayarlamasını düşünün.
Varsayım 6: Çok etkileyici aykırı değer yok
Lojistik regresyon, yordayıcılarınızın normal dağılmış olmasını varsaymaz. Çarpık yordayıcılar ve sayım değişkenleri başlı başına sorun değildir. Modelin önemsediği, herhangi bir tekil gözlemin uydurulan katsayılar üzerinde orantısız etkiye sahip olup olmadığıdır.
Etkileyici bir gözlem, onu çıkardığınızda modelde anlamlı değişikliğe yol açacak olandır. Artık aykırı değerle aynı şey değildir. Bir noktanın artık değeri büyük olabilir (model onu kötü tahmin eder) ama etkileyici olmayabilir; bir nokta çok etkileyici olabilir (model ona aşırı yaslanır) ama artık değeri büyük olmayabilir.
Etkini farklı açılardan inceleyen birkaç tanıya ihtiyacınız olacak:
- Leverage, bir gözlemin yordayıcı değerlerinin geri kalan veriye göre ne kadar alışılmadık olduğunu ölçer. Tek başına leverage, gözlemin etkileyici olduğu anlamına gelmez. Sonucu, yordayıcılarının önerdiğiyle uyuşmuyorsa etkileyici olma potansiyeline sahip olduğu anlamına gelir
- Cook uzaklığı leverage ile artığı tek bir sayıda birleştirir ve gözlemi çıkarırsanız uydurulan katsayıların ne kadar değişeceğini tahmin eder. Büyük Cook uzaklığı değerleri incelenmeye değer noktaları vurgular. Yaygın uygulamalar n'in (örneklem büyüklüğü) 4/n eşiği veya veri kümenizdeki en büyük birkaç Cook uzaklığı değerine bakmaktır
- Artık tanıları leverage ve Cook uzaklığının yakalayamadığı durumlar için idealdir. Sapma (deviance) artıkları ve Pearson artıkları, modelin uyum sağlamakta zorlandığı gözlemleri işaretler. Leverage'ı orta düzeyde olsa bile, artık değeri büyük olan bir noktaya bakmaya değerdir; model size diğer yordayıcılarla o vakayı açıklayamadığını söylemektedir
Etkileyici bir nokta bulduğunuzda soru, noktanın gerçek mi yoksa hatalı mı olduğudur. Veri girişi hatası düzeltilir veya kaldırılır. Gerçek ama alışılmadık bir vaka kalır ve sonuçlarınızın ona bağlı olduğunu not edersiniz. Sırf etkileyici diye noktaları dışlamayın. Bu, yalnızca eğitim verinizi iyi uyduran ama başka hiçbir şeye uymayan bir modelle sonuçlanır.
Lojistik Regresyon Varsayımları Hakkında Yaygın Yanılgılar
Lojistik regresyonun varsayımları etrafındaki kafa karışıklığının çoğu, doğrusal regresyonun kontrol listesinin kullanılmasından kaynaklanır. Doğrusal regresyonun varsayımları iyi bilinir ve her yerde öğretilir; lojistik regresyona da ait olmadıkları halde taşınırlar. İşte netleştirmeniz gereken dört yaygın yanılgı.
Lojistik regresyon normal dağılmış değişkenler gerektirir
Bu yanlıştır. Lojistik regresyon modeldeki hiçbir değişken için normallik varsayımı yapmaz.
Sonucun ikili olması gerekir, normal değil; bunu Varsayım 1'de ele aldık. Yordayıcıların da normal olduğu varsayılmaz; veri hangi şekle sahipse o şekli alabilirler. Önemli olan, yordayıcılar ile log-olasılıklar arasındaki ilişkidir; tekil bir değişkenin marjinal dağılımı değil.
Lojistik regresyon homoskedastisite gerektirir
Bu da yanlıştır. Homoskedastisite (tahmin edilen değerler aralığı boyunca artıkların sabit varyansı), lojistik regresyona uygulanmayan bir doğrusal regresyon varsayımıdır.
Lojistik regresyonda sonucun varyansı, tahmin edilen olasılığın kendisine bağlıdır. Bernoulli sonuç için varyans p(1 - p)'dir; p = 0.5 civarında en yüksek, 0 ve 1'e yakın noktalarda en düşüktür. Varyans sabit değildir ve model bunu ençok olabilirlik fonksiyonu ile hesaba katar.
Dolayısıyla lojistik regresyon kurduğunuzda, farklı varyanslara sahip tahmin olasılıkları olması bir ihlal değildir. Model böyle çalışır.
Yordayıcılar normal dağılmış olmalıdır
Bu yanlıştır. Lojistik regresyon yordayıcılar üzerine herhangi bir dağılımsal varsayım koymaz.
Aynı modelde sürekli, ikili, sayım ve kategorik yordayıcıları karıştırabilirsiniz. Çarpık yordayıcılar sorun değildir. Ağır kuyruklu yordayıcılar da öyle. Model marjinal şekillerle ilgilenmez. Önemli tek şey, logit-doğrusallığıdır (Varsayım 3'te ele alınır); bu, dağılım şekli değil, ilişki şekli varsayımıdır.
Bir yordayıcının çarpıklığı sorun yaratıyorsa, genelde logit-doğrusallığı veya etkileyici aykırı değerler yüzündendir.
Artıklar normal dağılmış olmalıdır
Bu da yanlıştır. Lojistik regresyonun artıklarında normallik varsayımı yoktur.
Doğrusal regresyon, çıkarımının bir parçası olarak artıkların sıfır etrafında normal dağıldığını varsayar. Lojistik regresyon, binom olasılık üzerinde ençok olabilirlik kestirimi kullanır ve artıkların dağılımı, sonuç (0 veya 1) ve uydurulan olasılık tarafından belirlenir. Normal değildir ve olması da gerekmez.
Bu yüzden lojistik regresyon için artık tanılarını kontrol ederken (Varsayım 6'da olduğu gibi), bir çan eğrisi aramazsınız; etkileyici gözlemler ve modelin açıklayamadığı noktaları ararsınız.
Python'da Lojistik Regresyon Varsayımları Nasıl Kontrol Edilir
Tanıları statsmodels ile yapacağım. Scikit-learn lojistik regresyonu uydurur ama VIF, etki istatistikleri veya artık tanılarını kutudan çıkar çıkmaz vermez.
Örneği hazırlamak
Üç yordayıcılı (yaş, gelir ve harcama skoru) sentetik bir churn veri kümesi oluşturacağım; yaş ve geliri bilerek ilişkili kılacağım ki çoklu doğrusal bağlantı bulunacak bir şeyler olsun.
import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf
np.random.seed(42)
n = 1000
age = np.random.normal(40, 12, n).clip(18, 80)
income = 30000 + 1500 * age + np.random.normal(0, 8000, n)
spending_score = np.random.uniform(1, 100, n)
logit_p = -3 + 0.04 * age + 0.02 * spending_score
p = 1 / (1 + np.exp(-logit_p))
y = np.random.binomial(1, p)
df = pd.DataFrame({
"churned": y,
"age": age,
"income": income,
"spending_score": spending_score,
})
model = smf.glm(
"churned ~ age + income + spending_score",
data=df, family=sm.families.Binomial()
).fit()
print(model.summary())

Model özeti
Özet size katsayılar, standart hatalar, z-istatistikleri ve p-değerleri verir. age ve spending_score anlamlı yordayıcılar olarak çıkar. income katsayısı küçüktür çünkü sonuç doğrudan gelire bağlı değildir. Görünen etkisi yaş tarafından soğurulur.
VIF ile çoklu doğrusal bağlantı
Statsmodels bu hesabı inanılmaz kolaylaştırır:
from statsmodels.stats.outliers_influence import variance_inflation_factor
X = sm.add_constant(df[["age", "income", "spending_score"]])
vif = pd.DataFrame({
"feature": X.columns,
"VIF": [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
})
print(vif[vif["feature"] != "const"])

VIF çıktısı
age ve income için VIF'ler yaklaşık 5.5 çıkar; bu hafif çoklu doğrusal bağlantıyı gösterir. spending_score 1'e yakındır; istediğiniz budur. Varyansı diğerleriyle kollineerlik tarafından şişirilmemektedir. 5'in üzerindeki VIF'ler hafif uyarıdır; 10'un üzeri derhal çözmeniz gereken ciddi bir sorundur. Buradaki hamle age veya income'dan birini çıkarmak ya da tek bir özelliğe birleştirmektir.
Box-Tidwell ile logit-doğrusallığı
Box-Tidwell testi, her sürekli yordayıcı ile kendi doğal logu arasında etkileşim terimleri ekler. Anlamlı etkileşimler, o yordayıcı için doğrusal olmayan log-olasılık ilişkisinin göstergesidir.
df_bt = df.copy()
for col in ["age", "income", "spending_score"]:
df_bt[f"{col}_logx"] = df_bt[col] * np.log(df_bt[col])
bt_formula = (
"churned ~ age + income + spending_score + "
"age_logx + income_logx + spending_score_logx"
)
bt_model = smf.glm(
bt_formula, data=df_bt, family=sm.families.Binomial()
).fit()
interactions = ["age_logx", "income_logx", "spending_score_logx"]
print(bt_model.pvalues[interactions])

Box-Tidwell çıktısı
Bu p-değerlerinden herhangi biri 0,05'in altına düşerse, o yordayıcı için logit-doğrusallığı varsayımı şüphelidir. Burada logit doğrusal üretilmiştir, bu yüzden etkileşimler anlamlı çıkmamalıdır. Gerçek veride, anlamlı bir sonucu, o yordayıcıya karşı ampirik log-olasılıkları çizmek ve dönüşüm mü spline mı uygun düzeltmedir kararını vermek için bir uyarı olarak ele alın.
Etki tanıları
Statsmodels, get_influence() ile Cook uzaklığı ve leverage'a erişim sağlar.
influence = model.get_influence()
cooks_d = influence.cooks_distance[0]
leverage = influence.hat_matrix_diag
flagged = pd.DataFrame({
"cooks_d": cooks_d,
"leverage": leverage,
}).sort_values("cooks_d", ascending=False).head(10)
print(flagged)

Etki tanıları çıktısı
İncelenmeye değer Cook uzaklığı eşiği kabaca 4/n'dir. 1000 satırla bu 0.004 eder. Bu değerin hayli üzerindekiler daha yakından bakılmalıdır. Bu veri kümesinde en büyük Cook uzaklıkları mutlak olarak yine de küçüktür; genellikle isteyeceğiniz sıkıcı-iyi sonuç budur.
Şimdi dağılımı okumayı kolaylaştırmak için bir görselleştirme oluşturalım:

Görselleştirilmiş etki tanıları
Kesikli eşik çizgisinin epey üzerinde oturan noktalar incelenmelidir. Varlar ama çok değil.
Artık tanıları
Sapma (deviance) artıkları, modelin uyum sağlamakta zorlandığı gözlemleri gösterir.
deviance_resid = model.resid_deviance
fitted = model.fittedvalues
resid_df = pd.DataFrame({
"fitted": fitted,
"deviance": deviance_resid,
}).sort_values("deviance", key=abs, ascending=False).head(10)
print(resid_df)

Artık tanıları çıktısı
Büyük pozitif sapma artıkları, modelin düşük olasılık verdiği halde pozitif çıkan vakalardır. Büyük negatif artıklar bunun tersidir. Yüksek artık değerine sahip gözlemleri, yukarıdaki etki tanılarıyla çapraz referanslamalısınız. Hem kötü tahmin edilen hem de etkileyici olan vaka, incelenmeye en çok değer olandır.
R'de Lojistik Regresyon Varsayımları Nasıl Kontrol Edilir
R, bu tanılar için daha sıkı yerleşik desteğe sahiptir. İhtiyacınızın çoğu, temel R'nin glm() işlevi ve car paketinden gelir.
Örneği hazırlamak
Python örneğindekiyle aynı türden sentetik bir veri kümesi oluşturacağım; yaş ve geliri bilerek ilişkili kılacağım.
set.seed(42)
n <- 1000
age <- pmin(pmax(rnorm(n, mean = 40, sd = 12), 18), 80)
income <- 30000 + 1500 * age + rnorm(n, sd = 8000)
spending_score <- runif(n, min = 1, max = 100)
logit_p <- -3 + 0.04 * age + 0.02 * spending_score
p <- 1 / (1 + exp(-logit_p))
churned <- rbinom(n, size = 1, prob = p)
df <- data.frame(churned, age, income, spending_score)
model <- glm(churned ~ age + income + spending_score,
data = df, family = binomial)
summary(model)

Model özeti çıktısı
summary(model) çıktısı katsayılar, standart hatalar, z-istatistikleri ve p-değerleri verir. age ve spending_score anlamlı görünmeli, income etkisi ise age tarafından soğurulmalıdır.
VIF ile çoklu doğrusal bağlantı
car paketi, herhangi bir glm için vif() işlevini sağlar:
library(car)
vif(model)

R'de VIF çıktısı
age ve income her ikisi de yaklaşık 5.7 VIF ile dönecektir; bu, veriye yerleştirilmiş çoklu doğrusal bağlantıyı gösterir. spending_score 1'e yakındır. Python'da olduğu gibi, 5'in üzerindeki değerler dikkat gerektirir, 10'un üzerindekiler bariz bir sorundur.
Box-Tidwell ile logit-doğrusallığı
car::boxTidwell işlevi doğrusal regresyon için tasarlanmıştır; bu nedenle lojistik regresyon için en iyi yaklaşım, etkileşim terimlerini elle ekleyip yeniden uyarlamaktır:
df_bt <- df
df_bt$age_logx <- df_bt$age * log(df_bt$age)
df_bt$income_logx <- df_bt$income * log(df_bt$income)
df_bt$spending_score_logx <- df_bt$spending_score * log(df_bt$spending_score)
bt_model <- glm(
churned ~ age + income + spending_score +
age_logx + income_logx + spending_score_logx,
data = df_bt, family = binomial
)
interactions <- c("age_logx", "income_logx", "spending_score_logx")
summary(bt_model)$coefficients[interactions, ]

R'de BoX-Tidwell çıktısı
Çıktı, her etkileşim terimi için katsayıyı ve p-değerini gösterir. Anlamlı p-değerleri, o yordayıcı için logit-doğrusallığı varsayımının ihlalini işaret eder. Buradaki sentetik veri için test doğrusallığı reddetmemelidir. Gerçek veride, testin işaret ettiği herhangi bir yordayıcı için ampirik log-olasılık grafikleri ile devam edin veya (splines paketinden) spline'lı bir model uyarlayın.
Etki tanıları
R, temelinde cooks.distance() ve hatvalues() sağlar; üçüncü taraf pakete gerek yoktur:
cooks_d <- cooks.distance(model)
leverage <- hatvalues(model)
influence_df <- data.frame(
index = seq_along(cooks_d),
cooks_d = cooks_d,
leverage = leverage
)
head(influence_df[order(-influence_df$cooks_d), ], 10)

R'de etki tanıları
Cook uzaklığı eşiği Python'dakiyle aynıdır: 4/n, 1000 satır için 0.004. Bu değerin hayli üzerindekiler incelenmelidir. Hızlı bir görsel kontrol için, temel R'nin plot(model, which = 4) işlevi tek satırda Cook uzaklığı grafiği verir.

R'de görselleştirilmiş etki tanıları
Artık tanıları
R'nin residuals() işlevi bir glm'den sapma artıklarını verir:
deviance_resid <- residuals(model, type = "deviance")
fitted_vals <- fitted(model)
resid_df <- data.frame(
fitted = fitted_vals,
deviance = deviance_resid
)
head(resid_df[order(-abs(resid_df$deviance)), ], 10)

R'de artık tanıları
Büyük mutlak sapma artıkları, modelin tahmininin ıskaladığı vakalardır. Bunları, en çok etki yapan gözlemleri bulmak için yukarıdaki Cook uzaklığı işaretleriyle çapraz referanslayın.
Her şeyi tek seferde görmek için, influence.measures(model), Cook uzaklığı, leverage, DFBETA'lar ve birkaç başka etki istatistiğini tek tabloda birleştirir. Uydurulmuş bir glm üzerindeki tüm standart tanıları hızlıca taramanın en hızlı yoludur.
Varsayımlar İhlal Edilirse Ne Olur?
Çoğu varsayım ihlali, modelinizi çalışmaz hale getirmez. Yalnızca ne arayacağınızı biliyorsanız fark edeceğiniz, ince ayarda sorunlara yol açar.
Dört sonuç çoğu zaman karşınıza çıkar:
- Dengesiz katsayılar: Verideki küçük değişiklikler (birkaç satır ekleme/çıkarma, özellik mühendisliğinde hafif oynamalar) katsayıları ciddi şekilde değiştirebilir veya işaretlerini tersine çevirebilir. Çoklu doğrusal bağlantı bunu yapar; örneklem büyüklüğünüz, yordayıcı sayısı için çok küçük olduğunda da aynısı olur
- Zayıf kalibrasyon: Modelin tahmin ettiği olasılıklar, verideki gerçek oranlarla örtüşmez. Bir grup için %30 churn tahmin eder ve %15 gözlemlersiniz. Doğruluk iyi görünebilir ama olasılıklar yanlıdır. Logit-doğrusallığının ihlali ve etkileyici aykırı değerler buna katkıda bulunur
- Yanıltıcı çıkarım: Bunu saptamak en zordur; model hâlâ düzgün görünen standart hatalar ve p-değerleri üretir. İlişkili gözlemler, standart hataları olması gerekenden aşağı çeker ve yanlış yordayıcı belirtimleri onları şişirir. Her iki durumda da, elde ettiğiniz p-değerleri düşündüğünüz şeyi ifade etmez
- Bozulmuş tahmin kalitesi: En bariz belirti, pratikte çoğu zaman en küçüğü olsa da. Tahminler genellikle katsayılara göre daha iyi dayanır; bu nedenle yalnızca doğruluğa odaklanan ekipler uyarı işaretlerini sıklıkla kaçırır.
Ancak dürüst olmak gerekirse, ihlaller nadiren bir modeli işe yaramaz kılar. Modelin bazı kısımlarını güvenilmez kılar ve hangi kısmın güvenilmez olduğu, hangi varsayımın bozulduğuna bağlıdır. Tanıların önemi de bu yüzden.
Lojistik Regresyon Varsayımları Sağlanmadığında Alternatifler
Tanılarınız, lojistik regresyon içinde çözemeyeceğiniz sorunlara işaret ederse, bir sonraki adım bu varsayımları koymayan bir model kullanmaktır.
Genelleştirilmiş toplamsal modeller (GAM) bakılacak ilk şeydir. GAM, lojistik bağ (link) fonksiyonunu ve yorumlanabilir toplamsal yapıyı korur, ancak doğrusal terimleri her yordayıcının düzgün (smooth) fonksiyonlarıyla değiştirir. Tek sayı yerine şekilli katsayılar elde edersiniz; bu da logit-doğrusallığı sorununu çözer. GAM'ler hâlâ yeterince parametriktir; incelemek ve yorumlamak mümkündür. Bu da, doğrusallık varsayımının sağlanamadığı durumlarda lojistik regresyondan makul bir adım yukarı yapar.
Ağaç tabanlı modeller daha esnek alternatiftir. Rastgele ormanlar ve gradyan artırma, yordayıcı dağılımları veya ilişki şekilleri hakkında varsayım yapmaz. Çoklu doğrusal bağlantıyla başa çıkar ve doğrusal olmayanlığı bile yakalayabilir. Lojistik regresyonun sunduğu kolay katsayı yorumunu vermezler, ancak veride sizin modele koymadığınız doğrusal olmayan yapı veya etkileşimler olduğunda, tahmin metriklerinde genellikle daha iyi performans gösterirler.
GAM ile ağaç tabanlı modeller arasındaki tercih, modelden ne istediğinize bağlıdır.
- Öncelik yorumlanabilirlikse ve her yordayıcının log-olasılıkları nasıl etkilediğini görmek istiyorsanız GAM'leri seçin
- Öncelik tahmin kalitesiyse ve daha az şeffaf bir modeli kabul edebiliyorsanız gradyan artırmalı ağaç seçin
Şunu da not etmek gerekir: Lojistik regresyonun varsayımları, yok saymaktan daha kolay kontrol edilir. Sorunu bir dönüşüm, spline, düzenlileştirme veya daha iyi bir örneklemle çözebiliyorsanız, lojistik regresyonun yorumlanabilirliği ve çıkarımsal çıktısı genellikle daha esnek bir modele geçişten alacağınızdan daha iyidir.
Yani, yalnızca lojistik regresyon son teknoloji bir algoritma olmadığı için değil, tanılar varsayımların gerçekten sağlanamadığını söylediğinde GAM'lere veya ağaçlara geçin.
Lojistik Regresyon Modellemede En İyi Uygulamalar
Ve son olarak, her zaman güvenebileceğiniz bir model elde etmek için şu kısa listeyi izleyin:
- Yorumlamadan önce varsayımları inceleyin: Katsayıları okumadan önce VIF, Box-Tidwell testi ve etki tanılarını çalıştırın. Önce yorumlayıp sonra kontrol ederseniz, doğrulamadığınız sayıları savunmak zorunda kalırsınız. Toplantıda o kişi olmak istemezsiniz
- Örneklem küçükse düzenlileştirme kullanın: Ridge veya elastik net, EPV düşükken veya yordayıcılar ilişkiliyken katsayıları dengeler. Değiş-tokuş, küçük bir yanlılık karşılığında büyük bir varyans azalmasıdır; genellikle iyi bir anlaşmadır
- Modelin görmediği veride doğrulayın: Bir test kümesi ayırın veya çapraz doğrulama kullanın. Modelin aşırı uyum yapma alanı olduğunda (çok yordayıcı veya nadir olay varsa lojistik regresyonda vardır), eğitim metrikleri performansı olduğundan yüksek gösterir
- Kalibrasyonu değerlendirin: Doğruluk, tahmin olasılıklarınızın gerçek oranlarla örtüşüp örtüşmediğini gizler. Değerlendirme için log-loss veya Brier skoru kullanın; olasılıkların iş kararları için önemli olduğu durumlarda bir kalibrasyon grafiğine bakın
Sonuç
Doğrusunu söylemek gerekirse, lojistik regresyon uydurabileceğiniz en hoşgörülü modellerden biridir.
Çarpık yordayıcıları ve dengesiz sonuçları tolere eder ve artıklarınızın nasıl göründüğünü umursamaz. Tahammül edemediği şey, log-olasılıklarla yanlış belirtilmiş bir ilişki veya aynı bilgiyi taşıyan bir yordayıcı kümesidir.
Bu yüzden logit-doğrusallığı ve çoklu doğrusal bağlantı, zorunlu muamelesi görmesi gereken iki varsayım kontrolüdür. Modeli, hiçbir test metriğinin yakalayamayacağı şekillerde bozanlar bunlardır. Diğer dört varsayım da önemlidir, ancak esas odaklanmanız gereken ikisi bunlardır.
Güvende olmak için, değerlendirme ile birlikte tanıları da çalıştırın; sonrasında değil. Hem iyi tahmin eden hem de varsayım kontrollerini geçen bir modelin arkasında durabilirsiniz. Daha azı, eğittiğiniz ama gerçekten doğrulamadığınız bir modeldir.
Bu karmaşık geliyorsa, öyledir. İyi bir makine öğrenmesi mühendisi olmak çok şey gerektirir; bu nedenle Python ile Makine Öğrenmesi Bilimcisi yolumuza kaydolmanızı öneririz. 85 saatlik içerik sizi 2026 için işe hazır hale getirecek.
SSS
Lojistik regresyonun varsayımları var mı?
Evet. Lojistik regresyon, doğrusal regresyondan daha az varsayım yapar ama varsayımsız değildir. Başlıcaları, sonuç değişkeninin biçimi, gözlemlerin bağımsızlığı, log-olasılıkların doğrusallığı ve yüksek çoklu doğrusal bağlantı ile çok etkileyici noktaların yokluğu etrafında toplanır.
Lojistik regresyonun en önemli varsayımları nelerdir?
En çok önem taşıyan ikisi logit-doğrusallığı ve yüksek çoklu doğrusal bağlantının yokluğudur. Logit-doğrusallığı en sık yanlış anlaşılır; zira lojistik regresyon yordayıcılarla sonuç arasında doğrusal bir ilişki varsaymaz, yordayıcılarla log-olasılıklar arasında varsayar. Çoklu doğrusal bağlantı ise katsayıları çarpıtır ve standart hataları şişirir; doğruluğu etkilemeden bunu yaptığı için yalnızca tahmine bakan kontrollerden gizlenebilir.
Lojistik regresyon varsayımları ihlal edilirse ne olur?
Hangi varsayımın bozulduğuna bağlıdır. Logitteki doğrusallığın ihlali veya güçlü çoklu doğrusal bağlantı, doğruluğu yerinde bırakırken katsayıları sessizce bozar; bu yüzden gözden kaçırılması kolaydır. Bağımsızlık ihlalleri standart hataları büyütür veya küçültür ve p-değerlerini güvenilmez kılar. Çoğu ihlal modeli işe yaramaz kılmaz, ama yalnızca doğrulukla görünmeyen şekillerde bazı kısımlarını güvenilmez kılar.
Lojistik regresyon normal dağılmış yordayıcılar gerektirir mi?
Hayır. Lojistik regresyon yordayıcılar üzerine herhangi bir dağılım varsayımı koymaz. Aynı modelde sürekli, kategorik, çarpık ve ağır kuyruklu yordayıcıları sorun olmadan kullanabilirsiniz. Önemli olan, her yordayıcı ile log-olasılıklar arasındaki ilişkidir; yordayıcının marjinal şekli değil.
Lojistik regresyon için iyi bir VIF eşiği nedir?
VIF değerlerinin 5'e kadar olması genelde sorun değildir; 5 ile 10 arası, araştırmaya değer orta düzey çoklu doğrusal bağlantıyı; 10'un üzeri ise bir veya daha fazla yordayıcının artık olduğuna işaret eder. Eşikler katı kurallar değil konvansiyonlardır; çünkü VIF yorumlaması örneklem büyüklüğüne ve ihtiyaç duyduğunuz kesinliğe bağlıdır. Bir yordayıcının VIF'i yüksekse ve standart hatası veri alt kümeleri arasında dengesiz görünüyorsa, kollineerliğin sorun çıkardığına dair kanıtınız vardır.
