ML Project : Sarıyer Ev Kirası Tahmini
Her veri bilimi projesinin amacı sorunlara çözüm bulmaktır.Bu veri bilimi projesinde farz edelim ki Sariyer’de kiralık ev beğeneceğiz ve kafamızda düşündüğümüz,uygun kriterlerde olan bir evin kirasını tahmin etmek istiyoruz.Peki bunun için veri bilimine başvurmaya ne dersiniz? Haydi başlayalım.Öncelikle yol haritamızı bir belirleyelim.
1. Emlak sitelerinden Web Scraping ile ilan verisi çekmek.
2. Veriyi işlenebilir bir formata getirmek
3. Veriye yeni özellikler eklemek
4. Regresyon modelleri kurup en iyisini seçmek. Burada Lineer Regresyon,Ridge,Lasso ve OLS model sonuçları karşılaştırıldı.
1. Web Scraping İle Veri Çekmek
Türkçe anlamıyla web kazımak.Veriler genelde Kaggle’daki gibi tertemiz gelmez.Ellerimizi kirletmeye hazır olmamız gerekir.Python, web sayfasından içerik almak için request kütüphanesine ve ilgili bilgileri çıkarmak için bs4'e (BeautifulSoup) sahiptir. En sonunda web sitesinden GET ile talebimizi iletiriz veee sayfa html formatıyla elimizdee. Web sitesi içerisinde temelde html,javascript kodları barındırır. Biz BeatifulSoup ve Selenium gibi kütüphanelerle bunları kod editör sayfamıza ekleyebilir ve içindeki bilgileri ayıklayabiliriz.
2. Data Preprocessing
Veriyi çektikten sonra direk modele sokmak zor bir şey değil ama bu tek başına bize doğru tahminleri vermek için yeterli değil.Gördüğünüz gibi null veriler var.Bu null veriler aslında ilk 5 kayıtta bize el sallıyor burdayız diye :).Öncelikle m2'nin 0 olması biraz imkansız duruyor ve kat bilgisi kimi ilanda verilmemiş “boş” gözüküyor.Bu değerlerle ilgilenmemiz gerekir.Bunun için 3 strateji belirledim.
- Description kolonundan bilgi aramak
- Kategorik veriyi en sık görülen bilgiyle doldurmak
- Nümerik veriler için KNNImputer kullanmak
Description sütunu insanların verdikleri ilan için yazdıkları reklam ve tanıtım yazılarıdır. Bu sütunu kullanarak m2'den 5 ve kat bilgisinden 19 olmak üzere toplamda 24 boş değerimi doldurdum.Kat bilgim kategorikti onu en sık bulunan 2.kat bilgisiyle ve nümerik değerlerimi KNNImputer ile doldurdum.Boş değerlere sonsuza dek elveda dediğimize göre diğer adımımıza geçelim.
3. EDA ve Feature Engineering
Şimdi boş değerlerle ilgilendiğimize göre description’ı biraz daha sömürüp sonra vedalaşalım. Description’da geçen “metroya yakın”,”teras”,”eşyalı” ve “boğaz” kelimelerinin geçtiği satırlarda 1 gözükecek şekilde 4 sütun daha ekliyorum. Bu özellikler ev fiyatını belirlemede etkili olabilir.
Sonra EDA ile verilerimize hızlıca bakış atıyoruz.Verileri çekerken ilanın verildiği tarihi de çekmiştik.Bunu kaç gün önce ilan verildiğini gösterecek şekilde düzenliyorum.Bu sütun verimizde etkili olabilir çünkü ilan verildikten sonra geçen uzun süre zarfında ilanı veren kişi fiyatta düşmeye gitmiş olabilir.Yani ilanı verildikten sonra geçen süre zarfı arttıkça daha düşük fiyatları gözlemlememiz mümkün.Aynı zamanda 1999 depremi öncesi ve sonrası bina kira dağılımına da bakarsak yüksek kira fiyatlarını deprem sonrasındaki fiyatlarda gözlemleyebiliriz.
Ayrıca mahalle dağılımını ve m2-fiyat arası doğrusal ilişkiyi gözlemliyoruz.Fiyat dağılımında dikkatimi çeken sola yatıklık,yani hedef değişkenimiz normal dağılımdan gelmiyor. Burada fiyatı modele sokarken logaritmik dönüşümü yapmamız gerektiğini modele sokmadan görüyorum.
Lokasyon bazında da fiyatlar büyük oranda değişim gösteriyor bu da model için çok önemli bir kıstas.Tüm kategorik değerlerimi dummy ile nümerik forma soktuktan sonra (lineer modellerde genelde OneHotEncoding,dummy kullanırız.) modele featurelarımı vermek için hazırım.
4.Modele Sokmak
Geldik işin en kolay tarafına : Modele sokmak ama önce heatmap ile değişkenlerimiz arasındaki korelasyonları bir görelim.
Lineer regresyon için modele sokarken lineer regresyonun varsayımlarını sağlayabilecek miyiz bakmalıyız.Yeni özellikler eklemeden önceki nümerik değişkenlerle oluşturduğumuz OLS modelinde ilk dikkatimi çeken Cond. No oluyor.Eğer Cond. No 100 ile 1000 arasındaysa orta derece çoklu bağlantı var demek ve bu da parametre tahminlerimin yanlı olması anlamına geliyor.Cond No için istediğimiz 20'nin altında olmasıdır.Çoklu bağlantının sebebi featurelarımdan bazılarının birbirleriyle yüksek korelasyona sahip olması.Bunun için çoklu bağlantıya sebep olan featureları çıkartabilir ya da bunun üstesinden kolaylıkla gelen Ridge regresyonu tercih edebiliriz.
Bütün featurelarımı modele verdikten sonra sırasıyla model sonuçları :
1.Lineer Regresyon
Validasyon skoru : 0,68
Test skoru : 0,65
Bu veri normal dağılmıyor.Yukarıda OLS’de de çoklu bağlantı problemini de yakalamıştık.Lineer regresyon varsayımlarını sağlamıyor.
2. Polynomial Regression
Validasyon skoru : -26286207969292.043.Direk overfite gitti.
3. Lasso Regression
Validasyon skoru : 0,45.Katsayıların neredeyse hepsini sıfıra götürdü. Ridge burada kurtarıcımız olacak.
4. Ridge Regression
Validasyon skoru : 0,68 Test skoru : 0,65
Ridge çoklu doğrusal bağlantı problemini bizim için çözerken testte 65'i yakalayarak gönlümüzün de şampiyonu oluyor.
Lineer modellerde çalışmam bu şekildeydi,sonraki yazıma kadar hoşçakalın. Sunumum,kodlarım ve verilerimi github adresimde bulabilirsiniz.Beğendiyseniz bir alkışınızı alırım.Güzel bir gün geçirmeniz dileğiyle.
Ayrıca EDA ile alakalı projemi okumak isterseniz burdan ulaşabilirsiniz.