Basit Doğrusal Regresyon Nedir?
Bu yazımda Python’da basit doğrusal regresyon modeli oluşturacağız.
Regresyon analizinde, iki ya da daha çok değişkenin yer aldığı istatiksel modellerde, genellikle neden-sonuç ilişkileri araştırılır. Yani değişkenlerden biri ya da birkaçının, diğer bir ya da birkaç değişkeni ne ölçüde etkilediği incelenir. Eğer değişkenler arasında ilişki varsa, ilişkinin derecesi matematiksel bir fonksiyon olarak ortaya konur. Bu fonksiyona regresyon fonksiyonu denir.
Regresyon analizi; bağımsız değişkenler (X1,X2…..Xn ) ile bağımlı değişken (Y)’deki değişimi açıklamayı hedefler. Örneğin; bir öğrencinin başarısı ve çalışma saati arasındaki ilişki araştırıldığında; bağımlı değişken Y olarak tanımlanır ve çalışma saati bağımsız değişkeni X olarak tanımlanır.
Regresyon modeli iki ya da daha fazla değişken arasındaki ilişkinin fonksiyonel şeklini göstermekle kalmaz, değişkenlerden birinin değeri bilindiğinde diğeri hakkında tahmin yapılmasını da sağlar.
İki ya da daha çok değişken arasındaki ilişkinin matematiksel bağıntısı “Regresyon Analizi” ile ilişkinin yönü ve derecesi ise “Korelasyon Analizi” ile incelenir.
Regresyon analizi bir tahmin (öngörüsel) analizi olup, bağımlı değişkenin bağımsız değişkenler yardımıyla tahmin edilmesini sağlar. Ayrıca bağımlı değişkeni etkileyen en önemli bağımsız değişken/değişkenlerin hangisini olduğunu ortaya çıkarır.
Regresyon analizi;
Basit doğrusal regresyon,
Çoklu değişkenli regresyon analizi,
Doğrusal olmayan regresyon analizi olarak sınıflandırılabilir.
Aralarında ilişki araştırılması istenen değişkenler sayılabilir veya ölçülebilir nitelikte olabilir. Üzerinde durulan değişkenlerden bağımlı değişken y, bağımsız değişken x ise, y=f(x) şeklindeki fonksiyona regresyon modeli denir. f(x) fonksiyonu farklı şekiller alabilir.
Bu bölümde; f(x) fonksiyonu doğrusal olan bir bağımlı(y) ve bir bağımsız(x) değişkeninin yer aldığı “basit doğrusal regresyon” analizinden bahsedeceğim.
Basit doğrusal regresyon; bağımsız değişken (X)ile bağımlı değişken (Y)deki değişimi açıklamayı, bağımsız değişkendeki bir birimlik değişimin bağımlı değişken üzerindeki etkisini ölçmeyi amaçlar.
Temel amaç, bağımlı ve bağımsız değişken arasındaki ilişkiyi ifade eden doğrusal fonksiyonu bulmaktır.
Stokastik (Olasılıklı) bir model olan ve ana kütledeki ilişkiyi gösteren basit doğrusal regresyon denklemi aşağıdaki gibi ifade edilir.
Burada;
β0:Doğrunun y-eksenini kestiği yer ve regresyon sabitidir.
β1:Doğrunun eğimi veya regresyon katsayısıdır.
ϵ: Rastgele(Tesadüfi-Şans) hata değeridir.
R2: Regresyon Modelinin Performansı
Bağımsız değişken x’in, regresyon modeli ile bağımlı değişken y’i ne kadar açıkladığı yüzdesinin ölçütü olan belirtme katsayısı bir diğer adıyla determinasyon katsayısıdır ve R2 ile gösterilir. Belirtme katsayısı, bağımlı değişkendeki değişimin yüzde kaçının bağımsız değişkenler tarafından açıklanabildiğini gösterir.
R2, “0” ile “1” arasında değerler alır(0<R2<1). Değişkenler arasında doğrusal bir ilişki olduğunda, R2 değerinin 1’e yaklaşması; bağımlı değişkendeki değişimin büyük bir kısmının bağımsız değişkenler tarafından açıklandığını gösterir. Bağımlı ve bağımsız değişken arasındaki ilişkinin derecesi ve yönünü gösteren korelasyon katsayısının(r) karesi belirtme katsayısına (R2) eşittir. Belirtme katsayısı:
R2=Açıklanabilen Değişim/Toplam Değişim=RKT/YOAKT eşitliğiyle hesaplanır.
Eşitlikte verilen RKT; regresyon kareler toplamı ve YOAKT; Y ortalama ayrılış kareler toplamıdır.
Kurulan regresyon modelinin performansı, R2 ile ölçülür. R2, 1’e ne kadar yakınsa, regresyon o kadar anlamlıdır ve belirleyicidir. Bu konuda bilimsel bir karar verebilmek için hipotez testi yapılır.
Düzeltilmiş R Kare
R-kare, lineer regresyon modeli için bağımsız değişkenlerimiz (X) tarafından açıklanan bağımlı değişkenimizdeki (Y) varyasyon oranını ölçer. Düzeltilmiş R-kare sadece gerçekte bağımlı değişkeni etkileyen bağımsız değişkenler tarafından açıklanan varyasyon oranını ölçer.
Düzeltilmiş R kare= 1-(1 – R2 )*n-1/n-p-1
n: Örneklemdeki veri sayısı
p: bağımsız değişken sayısı
Korelasyon Katsayısı(r)
Korelasyon katsayısı, bağımlı değişken ile bağımsız değişkenler arasındaki ilişkinin gücünü gösteren bir katsayıdır. Örneğin; öğrencinin ders çalışma süresi ile aldığı istatistik notu arasında ilişki olup olmadığını veya borsada işlem gören bir hisse senedinin belli bir dönemdeki günlük getirisi (X) ile içinde yer aldığı bir endeksin günlük getirisi (Y) arasındaki ilişki korelasyon katsayısı ile incelenebilir. Korelasyon katsayısı değişkenlerin yönü ve etkileşimlerin nasıl olduğu hakkında bilgi verir.
Korelasyon katsayısı iki değişken arasındaki doğrusal ilişkinin ölçüsü olup incelenen değişkenlerin birimlerinden bağımsızdır ve -1 ≤ r ≤1 arasındadır. Yani 5 ya da -5 olamaz. Korelasyon katsayısının 0’a yaklaşması değişkenler arasında zayıf ilişkinin varlığını gösterir. Değişkenler birlikte artıyor veya azalıyorsa pozitif yönde, değişkenlerden biri artarken diğeri azalıyorsa ise negatif yönde bir ilişki vardır.
Korelasyon Katsayısı ve R Kare Farkları
- Korelasyon katsayısı, iki değişken arasındaki doğrusal ilişkiyi temsil etmek için kullanılır. Regresyon katsayısı ise bir değişkeni başka bir değişken temelinde tahmin etmek için kullanılır.
- Korelasyon değişkenler arasındaki ilişkinin gücünü gösterir. Regresyon katsayısı ise bağımsız değişkendeki birim değişikliğinin bağımlı değişken üzerindeki etkisini gösterir.
Regresyon Katsayısının Hipotez Testi
Kurulan regresyon modelinde verilerin (gözlemlerin) regresyon doğrusuna uyumunun araştırılması gereklidir. Regresyon doğrusunun anlamlılığını test etmek için β1 regresyon katsayısının analizi yapılmalıdır. Çünkü β0, regresyon sabiti “0” olsa bile, regresyon modeli kurulabilir (Y=β0+β1X) . Dolayısıyla β1 katsayısının “0”dan farklı olması bir model kurmak için önemlidir β1 katsayısının hipotez testi (önem testi) aşağıdaki gibi kurulur.
Bir regresyonun anlamlı olması aslında doğrunun eğimi olan β1’in sıfırdan farklı olması ile eş değerdir.
Kullanılacak Olan Bütün Formüller
X Ortalamadan Ayrılış Kareler Toplamı (XOAKT)
XOAKT=∑X2-(∑X)2/n
Y Ortalamadan Ayrılış Kareler Toplamı (YOAKT)
YOAKT=∑y2-(∑y)2/n
XY Ortalamadan Ayrılış Kareler Toplamı (XYOAÇT)
XY Ortalamadan Ayrılış Çarpımlar Toplamı (XYÇT)
XYÇT=∑x*y-n* x̄*y
Regresyon Kareler Toplamı(RKT)
RKT=b1*XYOAÇT=B1*XYÇT
Regresyon Ayrılış Kareler Toplamı(RAKT)
RAKT=YOAKT-RKT
Regresyon Kareler Ortalaması (RKO)
RKO=RKT/RSD=RKT/1 formülüyle bulunur.Basit doğrusal regresyon analizinde regresyon serbestlik derecesi (RSD) her zaman 1’dir.
Regresyon Ayrılış Kareler Ortalaması (RAKO)
RAKO=RAKT/RASD=RAKT/n-2=s2 formülüyle bulunabilir.
Burada 1.adım: H0 (null) ve Hs (alternatif) hipotezler yazılır.
H0:β1=0 (Regresyon katsayısı önemsizdir, regresyon doğrusu önemsizdir.)
Hs:β1≠0 (Regresyon katsayısı önemlidir, regresyon doğrusu önemlidir.)
2.adım: Bir regresyonun anlamlı olup olmadığını anlamak için anlamlılık düzeyinde tT =t(α/2;n-2) ve tH =b1/Sb1 hesaplanır. tT, t-tablosu yardımıyla bulunur. tH, modelin test istatistiği hesap değeridir ve formül ile bulunur.
b1 katsayısı= XYOAÇT/XOAKT
b1 katsayısının hatası olan Sb1=
formülüyle hesaplanır.
3.adım : tH ve tT karşılaştırılır.
Eğer |tH|> tT ise H0 hipotezi reddedilir. Yani b1 ≠ 0.
Eğer |tH|< tT ise H0 hipotezi kabul edilir.
4.adım: Regresyon modelinin anlamlı olup olmadığıyla ilgili istatiksel karar verilir. b1 ≠ 0 ise kurulan regresyon modeli α anlamlılık düzeyinde anlamlıdır deriz.
Makine Öğrenmesinde Basit Doğrusal Regresyon Uygulaması
Öncelikle bir veri seti seçmemiz gerekiyor. Ben bu örnekte reklam veri setini kullanacağım.
Kullanacağımız kütüphaneleri içe aktaralım. Veri görselleştirme için gerekli kodları da girelim.
import pandas as pd import numpy as np import seaborn as snd from matplotlib import pyplot as plt
Kütüphaneyi kodumuzda içeri aktardıktan sonra ilk işimiz işleyeceğimiz verilere erişim sağlamak olacak.
- CSV (Virgülle ayrıştırılmış): read_csv
- Veri tabanından: read_sql
- JSON biçiminde dosyadan: read_json
df.head() koduyla verileri çağırdık. iloc[] kodu ile bir seçim işlemi yapıyoruz.
df = pd.read_csv("Desktop/reklam/reklam.csv") df= df.iloc[:,1:len(df)] df.head()
Elimizde TV, radyo, gazete için reklam harcamaları ve satış verileri var. Biz bu çalışmada TV ve satış değişkenleriyle ilgileneceğiz.
Amacımız TV-reklam harcamalarını modelleyebilmek ve çalışmalar yapmak.
TV ‘yi bağımsız değişken(x), satışı da bağımlı değişken(y) olarak belirledik. Kodlarımızı çalıştırarak X ve y’yi çağırıyoruz.
X= df[["TV"]] X.head()
y=df[["satis"]] y.head()
Regresyonu modelleyebilmek için bir model nesnesi oluşturalım. Bunun için scikit-learn kütüphanesinden yararlanalım.
reg =LinearRegression()
Modelimizi fit() metoduyla kuralım. Doğrusal bir fit en küçük kareler yöntemiyle bulunur.
model=reg.fit(X,y) model
β0 katsayısını çağırmak için:
model.intercept_
β1 katsayısını çağırmak için:
model.coef_
Scikit-learn kütüphanesinde eğitim verisinden elde edilen parametrelerin sonuna alt tire(_) konur. Böylece bulunan parametreler ile kullanıcıdan alınan parametreler birbirinden ayrılır.
R2 değeri
Yazımın başında R2 den bahsetmiştim kısaca anlatmam gerekirse R2 modelin açıklanabilirliği ile ilgili bir değerdir. R2 elimizdeki bağımsız değişkenleri kullandığımızda bağımlı değişkendeki değişimin yüzde kaçını açıklayabiliyoruz bilgisini bize sunar. R2yi hesaplayabilmek için:
model.score(X,y)
Regresyon Grafiği
import seaborn as sns import matplotlib.pyplot as plt g= sns.regplot(df["TV"], df["satis"],ci=None,scatter_kws={'color':'r','s':9}) g.set_title("Reklama Göre Satış Tahmin Regresyon Model") g.set_ylabel("Satış Sayısı") g.set_xlabel("TV Harcamaları")
Yukarıdaki kodda regresyon modelimizi görselleştirme işlemini gerçekleştirdik. Tek tek açıklayacak olursak;
1.satır ve 2.satır: Veri görselleştirme için gerekli kodları girdik.
3.satır: TV ve satış değişkeni üzerinden bir regresyon görselleştirmesi yapmak için bu satırdaki kodu girdik. Bu satırdaki ci=None güven aralığı koymaması için girilmiş bir koddur.
4.satır: Regresyon modelimize bir başlık ekledik.
5.ve 6. satır: y-ekseni ve x-eksenini adlandırma işlemini yaptık.
Mavi çizgi basit bir fonksiyondur. Başta söylemiş olduğum temel amacımıza ulaşmış olduk. Yani bağımlı ve bağımsız değişken arasındaki ilişkiyi ifade eden doğrusal fonksiyonu bulmuş olduk.
Modelimizi eğitmiş olduk şimdi bu kurmuş olduğumuz model üzerinde tahmin işlemi yapalım.
Tahmin Yapma İşlemi
Eğitmiş olduğumuz model üzerinden tahminler yapmaya çalışalım. TV’ye ne kadar yatırım yaparsam ne kadar kazanç elde ederimin sonucunu bulmak için tahmin etmeye çalışalım.
Sckit-Learn aracılığıyla model nesnemizi kullanarak tahminde bulunalım.
model.intercept_+model.coef_*165
Harcamalarımız 5, 15, 30 olduğunda kazancımızın ne olacağını tahmin etmek için model.predict() metodundan yararlanalım.
model.predict([[165]])
yeni_veri=[[5],[15],[30]]
model.predict(yeni_veri)
Hatalar ve Hata Kareler Ortalaması
Amacımız gerçek değerler ile tahmin değerler arasındaki farkı minimum yapmak.
y mizin gerçek değerlerini çağıralım.
y.head()
Kurmuş olduğumuz modeli kullanarak bir tahmin edilen değeri çağıralım.
model.predict(X)[0:6]
gercek_y=y[0:10] tahmin_edilen_y=pd.DataFrame(model.predict(X)[0:10]) hatalar=pd.concat([gercek_y,tahmin_edilen_y],axis=1) hatalar
Bu tabloyu isimlendirmek için:
hatalar.columns=["gercek_y","tahmin_edilen_y"] hatalar
hatalar["hata"]=hatalar["gercek_y"]-hatalar["tahmin_edilen_y"] hatalar
Kare alma işlemini pozitif ve negatif değerlerinin birbirini götürmesini engellemek için yaparız. Hata kareler ortalamasını bulmak için:
hatalar["hata_kareler"]=hatalar["hata"]**2 hatalar
np.mean(hatalar["hata_kareler"])
Hata kareler ortalaması, veriler üzerinde elde ettiğimiz ortalama hatamızdır. Yani tahmin edilen değer ve gerçek değer arasındaki farkının karesini alıp ortalamasını aldığımızda hatamızın 9.2 olduğu sonucuna ulaştık.
Başka bir yazıda görüşmek dileğiyle hoşça kalın.
Kaynaklar:
- https://gelecegiyazanlar.turkcell.com.tr/konu/makine-ogrenmesi
- Prof. Dr. Filiz ERSÖZ & Dr. Taner ERSÖZ, İstatistik, Seçkin Kitabevi
veri setini indiremedikten sonra neye yarar? link ölmüş.