Ana içeriğe atla

Python - Basit ve Çoklu Doğrusal Regresyon

Regresyon analizi, aralarında ilişki olan iki ya da daha fazla değişkenden birinin bağımlı değişken, diğerlerinin bağımsız değişkenler olarak ayrımı ile aralarındaki ilişkinin bir matematiksel eşitli ile açıklanması sürecidir.

Basit Regresyon

Basit doğrusal regresyon bize normal dağılmış, hakkında aralıklı/oranlı ölçekle veri toplanmış iki değişken arasında doğrusal ilişki olup olmadığını test etme olanağı verir. Değişkenlerden biri tahmin, biri sonuç değişkenidir.

Öncelikle kaggle.com ve diğer sitelerde rahatlıkla bulabileceğiniz “Advertising” veri setini Jupyter notebooka indirip, dataframe olarak kaydediyorum. Veri, bir şirketin TV, radio, newspaper harcamaları ile sales rakamlarından oluşuyor. Ben ilk olarak basit regresyonda TV ile satış arasındaki ilişkiyi inceleyeceğim. Df’nin 200 satır ve 5 sütundan oluştuğunu görüyorum.


Daha sonra, Unnamed olarak gelen indeksi değişkenler arasından çıkarıyorum, böylece sütun sayım 4’e düşüyor.


Analize başlamadan önce verimin istatistiki özelliklerini inceliyorum: buna göre değişkenlerimin adedini, ortalamasını, standart sapmasını ve dörtte birlik değerlerini görüyorum. Ayrıca, değişkenler arasındaki korelasyona da bakıyorum. Sadece korelasyona bakarak; TV ile satış arasında %78 gibi yüksek pozitif bir ilişki olduğunu görüyorum.


Daha sonra bu ilişkiyi görselleştirmek için seaborn kütüphanesinden pairplot fonksiyonunu indiriyorum. Burada x eksenine TV’yi, y eksenine ise sales değişkenini getiriyorum. Ayrıca, TV ve sales değişkenlerinin adetsel dağılımını da histogram olacak şekilde plot grafiğinin üstünde yer veriyorum. Grafikten de görüleceği üzere TV ile sales arasında güçlü bir ilişki bulunmaktadır.


Basit ve çoklu regresyon modelimi iki farklı kütüphane kullanarak kuracağım. İlk olarak statsmodels kütüphanesini indiriyorum. Burada X yani bağımsız değişkenimi TV, y yani bağımlı değişkenimi ise sales olarak tanımlıyorum.


Şimdi modelimi kuruyorum: modelime lm adını vererek önce basit regresyonu tanımlayıp, sonra modeli fit ediyorum.


Modelin çıktısına bakabiliriz artık: Burada model özet tablosunda ilk bakacağım yer coeff yani katsayı değerleri oluyor. Buna göre; benim sabit değerim 7.03 ve TV katsayım 0.04 olarak gerçekleşiyor. İkinci olarak R2 değerine bakıyorum. R2 değeri bağımsız değişkenin/değişkenlerin bağımlı değişkeni açıklama oranıdır. Yani buradan yola çıkacak olursak TV harcamaların sales rakamlarının %61’ini açıklayabilmektedir. Ayrıca p değerim <0,05 olduğu için modeli doğru olarak kabul edebilirim.


Şimdi modelin tahmin ettiği ve gerçekleşen değerleri inceliyorum:


Son olarak, ilişkiyi daha iyi görebilmek için modelimi görselleştiriyorum:

Statsmodels ile yaptığım regresyon analizini şimdi sklearn kütüphanesi ile yapacağım. Bunun için sklearn kütüphanesinden regresyon modelini indiriyorum. Daha önce yaptığım gibi bağımlı ve bağımsız değişkenimi tanımladıktan sonra modelin sonuçlarına bakmak için coef, intercept ve r2 değerlerini inceliyorum. Daha sonra modelin tahmin ettiği değerlere kısaca bir bakıyorum.



Çoklu Doğrusal Regresyon

Basit regresyona çok benzer. Çoklu regresyon denkleminde birden fazla tahmin değişkeni vardır.

Formül Yi = (b0 + b1X1 + b2X2+…bnXn)+ ei biçimini alır. Y bağımlı değişken, b0, regresyon eğrisinin y eksenini kesim noktası, b1 ilk tahmin değişkeninin X1 katsayısı,b2 ikinci tahmin değişkeninin X2 katsayısı,… ei ise i’inci denek için Y’nin tahmin edilen değeriyle gözlenen değeri arasındaki farktır.

Çoklu doğrusal regresyon analizimi de önce statsmodels ile daha sonra sklearn ile yapacağım. Ama verimi train – test diye ayırabilmek için split fonksiyonlarını indiriyorum. Bu analizde de yine aynı Advertising verimi kullanacağım. Öncelikle veri setimden sales değişkenini çıkararak bağımsız değişkenlerimi X, sales değişkenini de y olarak tanımlıyorum. Daha sonra verimi %20 test, %80 train olacak şekilde ayırıyorum.


Şimdi modelin özetini inceliyorum: R2 değerim %98 gibi çok büyük bir oran çıkıyor, p değerim <0,05 yani model çıktısı anlamlı ve parametre katsayıları da normal görünüyor.


Modelimi sklearn ile kurup, özet değerlerine bakıyorum.


Modeli kurduktan sonra şimdi tahmin aşamasına geçiyorum: burada bir örnek yapıyorum; eğer ben tv harcamasını 30, radio harcamasını 10, gazete harcamasını 40 birim yaparsam, satışım nasıl gerçekleşir diye tahmin yürütüyorum ve sonuç 6.32 çıkıyor.


Modelin tahmin aşamasını geçtikten sonra şimdi model tuning yani doğrulama yapıyorum. Modelleme yaparken modelin belirli bir kısmını seçiyoruz, ama hangi kısmını seçtiğimiz belli olmadığı için model kurulumundan sonra tuning yapmamız gerekiyor. Bunun için hata kareler toplamına baktıktan sonra cross validation yapıyoruz. Önce test ve train olmak üzere hata karelerimi inceliyorum. Yani benim gerçek değerlerim ile modelleme sonucu bulduğum veriler arasındaki verilerin karesinin toplamı. Bu model doğrulama açısından önemli bir fikir veriyor.


Sonrasında ise çokça kullanılan cross validation yönetimini yapıyorum: buna göre cross validation sonucu benim doğrulanmış r2 değerim ve doğrulanmış rmse(hata kareler toplamı) değerlerine bakıyorum.


Sonuç olarak; benim r2 değerim %87 gibi çok yüksek bir oran. Bu da şu demek: benim TV, Radio ve Newspaper değişkenlerim sales bağımlı değişkenimin %87’sini açıklıyor. Rmse değerim de 1.66 gibi çok düşük bir oran çıkıyor, yani benim regresyon modeli ile tahmin ettiğim değerler gerçekleşen değerlere oldukça yakın. Dolayısıyla, modelimin başarılı ve anlamlı olduğunu tespit ediyorum.

Yorumlar