Basit Regresyon: R ile Uygulama

Lineer Regresyon serimize devam ediyoruz. Bu yazı bir öncekinin aynısı olacak ancak uygulamayı Python yerine R ile yapacağız. Çalışma dizninizi ayarlamayı unutmayın. Veri setine buradan ulaşabilirsiniz.

R ile Veri Setini Yükleme

 dataset = read.csv('Kidem_ve_Maas_VeriSeti.csv')

Bağımsız değişkenimiz Kidem, bağımlı değişkenimiz Maas yukarıdaki tabloda görülmektedir. Gerçek hayatta da tecrübe ettiğimiz gibi kıdem arttıkça maaş da artar. Yani bağımsız ve bağımlı değişken arasında doğrusal pozitif bir ilişkinin varlığından söz edebiliriz. Bu yazıda R kodları ve grafikleri ile bu doğrusal ilişkiyi daha bilimsel bir yöntemle ortaya koyacağız. Veri setimizi yükledikten sonra işimize başlayalım:

R ile Veri Setini Eğitim ve Test olarak İkiye Ayırma

library(caTools)
set.seed(123)
split = sample.split(dataset\$Maas, SplitRatio = 2/3)
training_set = subset(dataset, split == TRUE)
test_set = subset(dataset, split == FALSE)

Yukarıda ne yaptık kısaca açıklayayım: Kütüphane yükledik, rastgele örnekleme temel olacak bir rakam belirledik seed(123), hedef değişkenimizin 2/3’ünü eğitim seti olacak şekilde ayırdık ve eğitim için seçilenlere TRUE, test için seçilenlere FALSE damgasını vurduk. training_set ve test_set’i vurduğumuz bu damgalara göre ayırıp oluşturduk.

Evet yukarıda gördüğümüz gibi veri setimizi eğitim ve test olmak üzere ikiye ayırdık.

R ile Regresyon Modeli Kurma ve Modeli Eğitme

regressor = lm(formula = Maas ~ Kidem, data = training_set)

Modelimiz hakkında biraz bilgi alalım:

Regresyon Modeli Hakkında Bilgi Alma Sonuçları Yorumlama

summary(regressor)
Call:
lm(formula = Maas ~ Kidem, data = training_set)

Residuals:
 Min 1Q Median 3Q Max 
-7325.1 -3814.4 427.7 3559.7 8884.6 

Coefficients:
 Estimate Std. Error t value Pr(>|t|) 
(Intercept) 25592 2646 9.672 1.49e-08 ***
Kidem 9365 421 22.245 1.52e-14 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 5391 on 18 degrees of freedom
Multiple R-squared: 0.9649, Adjusted R-squared: 0.963 
F-statistic: 494.8 on 1 and 18 DF, p-value: 1.524e-14

Yukarıdaki bilgileri biraz yorumlayalım. Biz kıdeme göre maaşı tahmin eden bir model kurmayı hedeflemiştik. Daha doğrusu kıdeme göre maaşı belirlemek istiyoruz. İkisinin arasında nasıl bir ilişki var, kıdem maaşı ne doğrultuda ve ne derece etkiliyor ortaya koymak istiyoruz. Bu probleme uygun model basit doğrusal regresyon modeli. Niçin? Çünkü tek bir belirleyici değişken (kıdem) var ve hedef değişkenimiz de nümerik-sürekli bir değişken. Ve biz problemde hedef değişkenimizi (maaş) herhangi bir sınıfa sokmaya çalışmayıp hedef değişkenimizi (maaş) tahmin etmeye çalışıyoruz. Bu sebeple yukarıdaki bilgilerden bizim için en önemli olanlardan biri katsayılar yani kıdemin önündeki katsayı. Bu katsayı kıdemin maaşı ne derecede etkilediğinin bir göstergesi. Tabi modelimiz ve katsayımızın p değeri istatistiksel bir anlamlılığa (statistically significant) sahipse. Kidem katsayısı 9365 ve p anlamlılık işareti ***, yani anlamlı. Pardon bundan önce modelin anlamlılığına da bakmamız lazım. Modelin anlamlılığı en alt satırdaki p-value: 1.524e-14 gibi neredeyse sıfıra yakın bir değer yani oldukça güçlü bir anlamlılığa sahip. Bu değer, sosyal bilimlerde çoğu zaman 0.05 ve altı yeterli kabul ediliyor. Kısaca modelimiz ve katsayımız anlamlıdır. Bu modeli kullanabiliriz.

Eğitilen Regresyon Modeli ile Tahmin Yapma

Modelimizi eğittik. Şimdi daha önceden test verisi olarak ayırdığımız veriyi makineye verelim bakalım bize hangi sonuçları verecek ve bu sonuçlar gerçek sonuçlara ne derece yakın.

y_pred = predict(regressor, newdata = test_set)
View(y_pred)

Soldaki liste modelin bize tahmin ettiği, sağdaki ise gerçekte var olan değerlerdir. Örneğin 2 numaralı kayıtta 1.3 yıl kıdem için 37.766,77 TL yıllık maaş öngörmüş. Gerçekte ise bu değer 46.205 TL.

R ile Regresyon Modeli Çizmek

Grafik çizimi için R’ın ggplot2 kütüphanesini kullanacağız. Eğer indirmemiş iseniz install.packages('ggplot2') komutuyla indirebilirsiniz. Grafik komutlarımızı yazalım.

ggplot()+
 geom_point(aes(x = training_set\$Kidem, y = training_set\$Maas),
 color='red')+
 geom_line(aes(x = training_set\$Kidem, y = predict(regressor, newdata = training_set)),
 color = 'blue')+
 ggtitle('Kıdeme Göre Maaş Tahmini Regresyon Model Grafiği')+
 xlab('Kıdem(Yıl)')+
 ylab('Maaş(Yıllık - TL)')

Yukarıda dikkat etmek gereken bir nokta var geom_line() fonksiyonuna ikinci parametre y değerini mutlaka eğitim verileriyle elde edilen regresyon doğrusunu çizecek yani eğitim setine dayalı tahmin çizgisini vermemiz gerekir. Eğer geom_point() saçılma diyagramı fonksiyonundaki gibi y parametresine Maas verirsek yanlış olur. Grafiğimiz:

Eğitilen Regresyon Modelini ve Test Verileri Saçılma Diyagramını Çizmek

ggplot()+
 geom_point(aes(x = test_set\$Kidem, y = test_set\$Maas),
 color='red')+
 geom_line(aes(x = training_set\$Kidem, y = predict(regressor, newdata = training_set)),
 color = 'blue')+
 ggtitle('Kıdeme Göre Maaş Tahmini Regresyon Model Grafiği (Test Seti)')+
 xlab('Kıdem(Yıl)')+
 ylab('Maaş(Yıllık - TL)')

Sadece kırmızı renk yerleri değiştirdim. İşin aslı yeni grafiğimizde regresyon doğrumuz aynı kalacak sadece etrafındaki noktalar eğitim değil test veri setindeki noktalar olacak.

Şükür bitti bu yazı da. Başka bir yazıda görüşmek dileğiyle, veriyle kalın…

Yazar Hakkında
Toplam 177 yazı
Erkan ŞİRİN
Erkan ŞİRİN
10 yılı aşkın süredir yurtiçi ve yurtdışında sektörde büyük veri mühendisliği, platform yönetimi ve makine öğrenmesi ile ilgili çalışmalar yürütmekte ve aynı zamanda birçok kurum ve şirkete danışmanlık ve eğitimler vermektedir. Çalışma alanları: Data ve MLOps platformları, gerçek zamanlı veri işleme, değişen veriyi yakalama (CDC) ve Lakehouse.
Yorumlar (2 yorum)
Rumeli Depolama
Rumeli Depolama Yanıtla
- 21:42

hocam bu konu makine öğrenmesi ve derin öğrenmenin temel taşlarından birisi. emeğiniz için teşekkürler.

İstanbul Eşya Depolama
İstanbul Eşya Depolama Yanıtla
- 14:00

bu değerli makale için emeğinize sağlık diyorum başarılarınızın devamı diliyorum iyi çalışmalar.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara