Python İle Keşifsel Veri Analizi:

ARABA FİYATLARINI ETKİLEYEN MUHTEMEL ÖZELLİKLER

Muhammet Bektaş
8 min readJan 8, 2020

Veri, olgular üzerinde yapılan gözlemlerin sonucu ve bu anlamda bilginin üretildiği hammaddedir. Veri analizi ise ham verilerden bilgi ve öngörüler elde etmemizi sağlar. Bu nedenle verilerden yararlı bilgileri keşfetmemizde ve problemleri çözüme kavuşturmada hatta geleceği ve bilinmeyeni tahmin etmemizde yardımcı olarak veri analizi önemli bir rol oynamaktadır. Bu yazımızda gerçek, hayata dair bir problemi ele alacağız ve ‘python’ dilini kullanarak temel bilgiler elde edeceğiz. Hadi başlayalım.

1.PROBLEM

Varsayalım ki arabanızı satmak istiyorsunuz ve ya bir araba satın almak istiyorsunuz. Buradaki problem, arabanız için ne kadar fiyat belirleme konusunda fikir sahibi olmamanız. Aynı zamanda makul bir fiyat belirlemek istiyorsunuz ki birisi otomobilinizi satın alsın.

Veri bilimci olarak problemin çözümü için çeşitli sorular sormalıyız. Hangi özellikler arabamızın fiyatını etkiler? Renk? Marka? Veya beygir gücü arabamızın fiyatını etkiler mi? Bu sorulara cevap verebilmek için ‘carprice’ isimli veri kümemizi inceleyelim.

2. VERİYİ ANLAMA

Kullanılan veri kümesi açık kaynak bir veri kümesidir. Buradan ulaşabilirsiniz.

Veri kümemiz 205 satır ve 25 sütun içermektedir. İlk özelliğimiz olan “symboling’’ arabanın sigorta risk seviyesine karşılık gelir. +3 değeri otomobilin riskli olduğunu, -3 değeri ise muhtemelen oldukça güvenli olduğunu söylemektedir. Diğer özellikler kolayca anlaşılabilir.

25. özellik “price” bizim hedef değişkenimizdir. Yani bu veri setini kullanarak tahmin etmek istediğimiz değerdir.

Not: Bu veri seti 1985 yılına aittir. Bu yüzden araba marka ve özelliklerine ait fiyat değerleri günümüze kıyasla düşüktür. Ancak bu yazının amacının verileri anlamak ve analiz etmek olduğunu unutmayınız.

4. VERİ SETİNE GENEL BİR BAKIŞ

4.1. Veri Türleri

İlk olarak kullanacağımız kütüphaneleri aktif hale getirelim ve veri setimizi Jupyter Notebook ortamına aktaralım.

4.2. Veri Kümemize ait Temel Bilgiler

dataframe.head(n) komutu veri kümemizde ki ilk n satırı gösterir. Veri kümesinin genel bilgisini elde etmek için, ‘Pandas’ kütüphanesinin ‘info( )’ metodunu kullanabiliriz. Bu fonksiyon, satır ve sütun sayısını ve ayrıca her sütunun veri türünü döndürür.

Herhangi bir analiz yapmadan önce verileri açıkça anlamak gerekir. Veri çeşitli türlere sahiptir. ‘Object’, ‘float’, ‘int’, ‘DataTime’ gibi. Veri türlerini kontrol etmeliyiz. Çünkü sayısal değer içermesini beklediğimiz “price” sütununa ‘object ‘veri tipinin atanması tuhaf olacaktır.

4.3. Veri Dağılımı

Her bir sütundaki verilerin dağılımı hakkından bilgi edinmek için her bir sütunun istatistiksel özetini kontrol etmeliyiz. İstatistiksel ölçümler, aşırı anlamlı değerler ve büyük sapmalar gibi olabilecek herhangi bir matematiksel sorunu söyleyebilir. ‘describe( )’ metodu ‘NaN’ değerleri hariç veri dağıtımının merkezi eğilimini, dağılımını ve şeklini özetleyen tanımlayıcı istatistikler üretir. Sayısal değişkenler için ‘count’, ‘mean’, ‘quartiles’ gibi bazı istatistikleri döndürür.

Bu istatistiklere ve bunların analizlerine, veri araştırmasında yaygın bir uygulama olan tanımlayıcı istatistikler denir. Varsayılan olarak sonuçları yalnızca sayısal değişkenler için verir, metinler için döndürmez. Onları da görmek istiyorsak, tüm değişkenleri bir arada görmek için yönteme ‘include='all'’ parametresini ya da sadece metin değişkenlerini görmek için ‘include=['O']’ parametresini ekleyebiliriz.

5. VERİ TEMİZLEME

5.1. Kayıp Değerler

Veri kümemizde kayıp değerler bulunmamaktadır. Aşağıda sütunlara ait kayıp değerlerin sayısını ve sütun içerisindeki yüzdelerini ‘Pandas’ ın concat( ) metodunu kullanarak aynı tablo üzerinde görebiliriz.

5.2. Aşırı Değerler İle Mücadele

Verilerin açıklama ölçütlerini başka tarafa çekerler. Örnek olarak, bir değişkenin merkezi eğilimini düşünün. Ortalama en yaygın kullanılan merkezi eğilim istatistiklerinden biridir. Bununla birlikte, aykırı değerlerden muzdariptir. Bazı makine öğrenme modelleri aşırı değerlere duyarlıdır. Dolayısıyla, doğru tahminler alabilmek için bu değerleri veri kümemizden çıkarmamız gerekir.

Aykırı değerleri sınırlandırmanın yaygın bir yoluna ‘winsorization’ denir. ‘Winsorize’ etmede fikir, uç noktaların değerlerini belirli bir yüzdelik değere ayarlamaktır.

Gördüğünüz gibi kutu grafiği artık aykırı değer içermemektedir.

5.4. Kategorik Değişkenleri Nicel Değişkenlere Dönüştürme

Çoğu model yalnızca sayısal veriler üzerinde çalışacağından, metin değerli kategorik verilerimizi sayısal bir değere dönüştürmemiz gerekir. Bu amaç için iki yöntem kullanılmaktadır. Bunlar ‘Label Encoder’ ve ‘One Hot Encoder’ dır. Biz burada kategorik değişkenlerin az olması ve sütun sayısının fazla olmamasından dolayı ‘One Hot Encoder’ yöntemini kullanacağız. ‘One Hot’ kodlamada, X seviyeli kategorik bir değişkenden bilgi edinmek için, her biri 1 veya 0 kodlanan X-1 adet sayısal özellik yaratırız. Her kategori için 0 veya 1 alan sonuç değişkenleri ‘dummy’ veya gösterge değişkenler olarak bilinir. ‘One-hot’ kodlamayı kategorik bir değişkene uygulamak için ‘Pandas’ ın ‘get_dummies()’ metodunu kullanabiliriz.

Aşağıda örneğin “fueltype” kategorik değişkenine ait ‘one-hot’ kodlama uygulanarak her kategori için 1,0 değerleri atanmıştır.

6. KEŞİFSEL VERİ ANALİZİ (EDA)

Adından da anlaşılacağı gibi, ‘EDA(Exploratory Data Analysis)’, verilerde gizlenmiş olan bilgilere ulaşmak için verileri keşfetme sürecidir. Araştırma, yeni şeyler keşfetmek için yapıldığından, yeni ilişkiler ve kalıplar keşfetmek için verileri araştırırız veya varsayımlarımızın verilerde haklı olup olmadığını gözlemleriz. Beklendiği gibi, bir veri bilimcisinin en yakın arkadaşı en çok bildiği veridir. Ancak, verileri bilmek hızlı bir başarı değildir ve verileri dinlemek için yeterince zaman harcamamız gerekir. ‘EDA’, verilerin kendisi için konuşmasına izin verme sürecidir.Burada cevap bulmamız gereken soru “Araba fiyatı üzerinde en fazla etkiye sahip olan özellikler hangileridir?” sorusudur.

6.1. Sürekli ve Kategorik Bir Çiftin İki Değişkenli Analizi

Sürekli ve kategorik bir değişken çifti analiz ettiğimizde, kategorik değerin her bir değeri için genellikle sürekli değişkenin bazı ölçümlerine bakarız. Kategoriler arasında farklı değerler gözlemlersek, bu kategorik değişkenin sürekli değişkenle ilgili bazı önemli bilgilere sahip olduğunu gösterir. Aşağıda, “cylindernumber” değişkenindeki her değer için ortalama fiyat miktarını gösteren bir çubuk grafiği çiziyoruz:

Silindir numaralarına göre arabaların ortalama fiyatlarına baktığımızda en pahalı araçların 8 silindirli araçlar olduğu görmekteyiz. Ancak ortalama her zaman gerçeği yansıtmaz. Bu yüzden istatistiksel olarak doğrulatmak için t-test yapalım.

Farklılıkların istatistiksel olarak anlamlı olup olmadığını öğrenmek için t-test yaptık. Bunu anlamak için p-değeri 0.05 ten küçük olanları ekrana yazdırdık. Burada da gördük ki sekiz silindirli araçlar ile diğer araçlar arasındaki bu fark istatistiksel olarak anlamlıdır. Tek değer bulunan kategorik özellikler ile t-test uygulanamamaktadır. P-değeri NaN olarak hesaplanmaktadır. Bu yüzden sekiz ve on iki silindirli araçlar karşılaştırılamamıştır. Şimdi de diğer bir kategorik değişkenimiz olan “carbody” için sütun grafiği çizdirelim.

Ancak ortalama her zaman gerçeği yansıtmaz. Bu yüzden istatistiksel olarak doğrulatmak için t-test yapalım.

Burada p değerleri 0.05 den küçük olanları yani aralarında anlamlı bir fark olanları tabloda görüyoruz. ‘Hatchback’ arabaların ‘sedan’, ‘hardtop’ ve ‘convertible’ tipindeki araçlara göre daha pahalı olduğunu doğruladık. Diğer araçlar ile arasında anlamlı bir fark yoktur. Yani mesela ‘hatchback’ araçların ‘wagon’ tipindeki araçlara göre pahalı olduğunu söyleyemeyiz.

6.2. İki Sürekli Değişkenin İki Değişkenli Analizi

İki sürekli değişken arasındaki ilişkiye bakmanın en bilgilendirici yollarından biri dağılım grafiklerini çizmektir (‘scattergram’ olarak da bilinir). Örneğin, ilk değişkenin değerinin genellikle ikincisinin değeri arttığı zaman arttığını görürsek, bu, bu iki değişken arasında pozitif bir ilişki olduğunu gösterir. Hedef değişkenimizi “price” olarak belirleyip diğer sürekli değişkenler ile korelasyonunu inceleyelim.

Grafikleri incelediğimizde ‘carlengt&price’ dağılım grafiği üstel dağılımı andırmaktadır. Belirli aralıklarda aralarında pozitif (lineer) ilişki vardır. Pozitif korelasyonun en belirgin olduğu dağılım grafiği ise ‘enginesize&price’ grafiğidir. İkinci olarak da ‘curbweight&price’ arasında görülmektedir. Bu değişkenlere ‘np.log( )’ dönüşümü yapılarak daha lineer ilişkiler yakalanabilir.

Log dönüşümü ile ilişkiler daha doğrusal hale geldi. Şimdi de korelasyon matrisine bakalım.

Yukarıda değişkenlerin “price” ile olan hem negatif hem de pozitif korelasyonlarını görebilmekteyiz.

7. ÖZELLİK MÜHENDİSLİĞİ

Verilerimizi temizlediğimize ve onları incelediğimize göre, bir sonraki adım hedef değişkeni açıklamada faydalı olacağını düşündüğümüz özellikleri belirlemektir. Bu adıma özellik mühendisliği denir.

‘Horsepower/enginesize’ oranı bize maksimum gücü vermektedir. O halde bu yeni değişkenimizin fiyat üzerindeki etkisini araştıralım.

Ancak korelasyon matrisine baktığımızda “maxpower” değişkenimizin fiyat üzerindeki etkisi çok azdır.

8. TEMEL BİLEŞEN ANALİZİ (PCA)

‘PCA’, değişkenlerdeki bilgilerin çoğunu temsil eden daha küçük bir bileşen grubuna indirgemeye çalışan bir karmaşıklık azaltma tekniğidir. Kavramsal düzeyde ‘PCA’, varyansı paylaşan değişken kümelerini tanımlar ve bu varyansı temsil edecek bir bileşen yaratır.

Veri kümemizi ait varyansı üç bileşen tarafından temsil edecek şekilde boyut azaltma işlemi yapalım.

İlk temel bileşen varyansın %63.8 ini açıklamaktadır. Bu oran iyi bir sonuçtur. Bu problemde değişken sayımız az olduğu için bu yöntemi kullanmadık. Sadece nasıl yapıldığından bahsetmek amacıyla gösterilmiştir.

9. SONUÇLAR

Analizimiz bitti. Verileri, sınıflandırılmış değişkenleri, çizilen grafikleri anladık. Bazı testler yaptık ve hedef değişkenlerimiz üzerinde etkili olan özellikler elde etmeye çalıştık. Elde ettiğim bazı sonuçlar şöyle;

· ‘Horsepower’, ‘enginesize’ ve ‘curbweight’ fiyat için oldukça iyi bir tahmin aracı olduğunu söyleyebiliriz.

· Kategorik değişkenlerimizi incelediğimizde, ‘rwd’ (drivewheel), ‘gas’ (fueltype), ‘hatchback’ (carbody) ve ‘eight’ (cylindernumber) için fiyat diğerlerinden daha yüksektir.

· ‘Peakrpm’ ile fiyat arasında bir ilişki tespit edemedik.

· Son olarak, python içinde ‘PCA’ modülünü kullanarak, ilk temel bileşenin varyansın en fazla % 63.8'ini temsil ettiğini bulduk.

Sonuç olarak, bu aşamadan sonra makine öğrenimi modellerinin inşasına geçmemiz gerekmektedir. Modelimizi, hedef değişkeni anlamlı şekilde etkileyen özelliklerle beslememiz modelin tahmin performansını etkileyecektir.

Daha fazla ayrıntı için lütfen GitHub hesabımı ziyaret edin:

https://github.com/muhammetbektas/Temel-Veri-Analizi/blob/master/The%20Most%20Probable%20Signals%20Of%20Automobile%20Price.ipynb

--

--