Site Loader

Herkese selamlar, Veri Bilimi Bootcamp’ine devam ederken ikinci proje ile birlikteyiz. Bu yazıda bir makine öğrenme projesinin ilk başından en sonuna kadar ki süreci ele alacağım. Yazının içeriği şu şekilde olacak.

  • Makine öğrenme nedir?
  • Hangi problemi çözeceğiz.
  • Veri toplama(Web scraping)
  • Keşifsel veri analizi
  • Özellik mühendisliği
  • Özellik seçimi
  • Makine öğrenme modelini kurmak
  • Model seçme
  • Model değerlendirme
  • Model kaydetme
  • Model yayınlama

hadi o zaman başlayalım.  Keyifli okumalar.

Projeye Buradan Ulaşabilirsiniz

Makine Öğrenme Nedir?

Makine öğrenmesi basitçe, bilgisayarların insanlar gibi bazı şeyleri  kendi kendine öğrenme ve yapabilmesidir. Kısaca insan gibi davranmasıdır.  Makine öğrenme sistemleri elle programlanmak yerine eğitilirler. Makine öğrenme istatistik değildir. İstatistik ve matematiksel yöntemleri kullanarak veriler üzerinde çıkarımlar yaparak tahminlerde  bulunurlar.  Makine öğrenme özellikle Derin Öğrenme de  daha çok mühendislik tabanlı olup   matematik ve istatistik yöntemlerini daha az kullanır. Bu yüzden makine öğrenmesi istatistik ile yakından ilgili olsa da birçok noktada ayrılmaktadır. Genel olarak toplamak gerekirse makine öğrenme  insanlar gibi kendi kendine öğrenme hatta bununda ötesine giderek mükemmeli elde etmek amacıyla ortaya konmuş bir yapay zeka alt alanıdır.

Makine öğrenme, öğrenme yöntemlerine göre  dört gruba ayrılır:  Supervised(Gözetimli), Unsupervised(Gözetimsiz), Semisupervised(Yarı-gözetimli) ve Reinforcement(Takviyeli) öğrenme. En çok kullanılan yöntemler genelde Supervised(Gözetimli) ve Unsupervised(Gözetimsiz) öğrenme yöntemleridir. Biz bu yazıda sadece bu ikisine değineceğiz ve projemizde Supervised(Gözetimli) öğrenme yöntemini kullanacağız.

Gözetimli Öğrenme

Bu öğrenme yöntemi en çok kullanılan öğrenme yöntemidir. Derin öğrenme çalışmalarının  çoğu bu kategoride yer alır. Gözetimli makine öğrenme algoritmaları; olayları tahmin etmek için etiketli verilerden faydalanır. Tahmin yapabilmek için geçmiş etiketli verilerden faydalanır. Kısaca girdilere göre çıktıları eleştirir.  Sınıflandırma ve ve regresyon olarak iki farklı şekilde tahminlerde bulunur.

Gözetimsiz Öğrenme

Gözetimsiz öğrenme ikinci en çok kullanılan  makine öğrenme yöntemidir. Gözetimsiz öğrenme, etiketsiz verilerden yola çıkarak veriler arasında bir korelasyonu bulmak ve  bu korelasyondan sonuçlar çıkarmak için kullanılan makine öğrenme yöntemidir. Kümeleme ve boyut azaltma  en çok bilenen türleridir.

Problem Nedir?

Artık projemize yavaştan bir giriş yapalım. Öncelikle bir projeye başlamadan önce hangi problemi çözeceğimizi hangi sorunu çözeceğimizi tanımlamamız gerekiyor. Burada problem şu ben bir ikinci el araba satıcısıyım fakat araçları ne kadara satacağımı bilmiyorum. Peki biz bu problem için  ne yapacağız? Biz ikinci el fiyat otomobillerin  fiyatını tahmin eden bir sistem geliştireceğiz. O  zaman sistemimizi tasarlayalım;

İlk önce verileri toplayacağız. Topladığımız veriler üzerinde analizler  yapacağız daha sonra bu veriler üzerinde özellik mühendisliği işlemleri yapacağız. Verilerimizi düzenledikten sonra modelimiz için hangi özelliklerin önemli olduğunu bulmak ve almak için özellik seçimi yapacağız. Hazır hale gelmiş veriler üzerinde modeller kuracağız ve çıktılarımızı alacağız. Daha sonra model üzerinde değerlendirme işlemleri yapacağız. Son olarak modelimizi web üzerinde deploy(dağıtmak) edeceğiz.

Veri Toplama

Bir önceki aşamada bir ikinci araç fiyat tahmini yapan bir sistem geliştireceğimizi söylemiştik. Söz konusu proje bir fiyat tahmini projesi olduğu için biz regresyon algoritmalarını kullanacağız. Bir regresyon projesi yapabilmek için bizim elimizde bir etiketli veri olması gerekiyor çünkü biz bir gözetimli öğrenme algoritması kullanacağız.

Veri toplamanın birçok yöntemi vardır. Daha önce veritabanlarımız da satış yaptığımız  araçların verilerini kullanabiliriz. Peki ya elimizde veri yoksa o zaman ne yapacağız. O zaman web siteleri üzerinde bulunan verileri kullanabiliriz. Bunun için bir sonraki başlığa bakalım. Şimdi verilerimizi nasıl toplayacağız ilk önce belirlediğimiz bir site üzerinden selenium ile verileri çıkaracağız çıkardığımız verileri MongoDB veritabanına kaydedeceğiz.

Web Scraping

Web scraping günümüzde oldukça popüler bir alan çünkü artık  internetle birlikte şirketler, kurumlar  internet üzerinden işlemlerini yapıyor. Web scraping ise web siteleri üzerinden yapılandırılmış ver

i toplama/ çıkarma işlemidir.

Web scraping için özellikle Python programlamanın birçok  kütüphane ve framewok mevcut. Bunların en çok kullanılanları; requests, beautifulsoup, urllib, scrapy ve selenium.

Bu kütüphanelerin birbirilerine hız vb. üstünlükleri var. Peki biz hangi kütüphaneyi kullanacağız? Bu projede dinamik web site üzerinden veri toplayacağımız için selenium kütüphanesini kullanıyor olacağız. Eğer dinamik bir site üzerinden veri toplamayacaksanız diğer kütüphaneleri kullanmanızı tavsiye ederim çünkü selenium diğer kütüphanelere göre yavaş bir kütüphanedir.

Başarılı bir şekilde verilerimizi topladık.

 

Keşifsel Veri Analizi(EDA)

Keşifsel veri analizi kısmında ise verilerimizi anlamaya çalışacağız. Veriler arasında ki ilişkiyi, verilerin türünü(nümerik, kategorik, tarih vb.) ve verilerimiz üzerinde  çıkarımlar yaparak bunları görselleştireceğiz.

Daha önce MongoDB veritabanına kaydettiğimiz verileri  csv dosyası olarak dışarıya aktardık. Şimdi verileri okuyalım.

Biz bu tablodan birçok bilgi çıkarabiliriz. Veri setimizde toplam 18 sütun mevcut:

_id : MongoDB’ye veriyi eklerken MongoDB otomatik atıyor. Unique bir değerdir.

accelerate : Aracın hızının kaç saniyede 100 km/h ulaştığını veren float türünde özellik.

annual_mtv : Motorlu taşıtın yıllık ücret bilgisini veren float türü özellik.

brand: Aracın marka bilgisini veren kategorik türündeki özellik.

color: Aracın renk bilgisini veren kategorik türünde özellik.

drive_type: Aracın çekiş türünü veren kategorik türü özellik.

engine_capacity: Aracın motor hacmi bilgisini veren integer türü özellik.

fuel_type: Aracın yakıt türü bilgisini veren kategorik türü özellik

gear_type:  Aracın vites bilgisini veren kategorik türü özellik.

horse_power: Aracın beygir gücü bilgisini veren integer türü özellik.

kilometer: Aracın kilometre bilgisini veren integer veri türü özellik

max_power: Aracın maksimum güç bilgisi veren integer türü özellik

min_power: Aracın maksimum güç bilgisi veren integer türü özellik

max_speed: Aracın km/h ‘te alabildiği maksimum hız integer türü özellik.

model:  Aracın hangi paket ve motora sahip olduğu bilgisi kategorik türü özellik.

price: Aracın fiyat bilgisini taşıyan integer türü target.(Tahmin edilecek olan bağımlı değişken)

safe:

series:

year:

Verilere baktığımız zaman nümerik olması gereken verilerin kategorik veri türünde olduğunu görüyoruz bunları düzelttikten sonra verilerin yapısına tekrar bakalım.

Artık verilerin türünü biliyoruz. Çünkü verilerin türünü bilmeden üzerinde işlem yapamayız biz verilerin türüne göre görselleştirme işlemleri yapıyoruz.

Şimdi verilerimiz üzerinde çıkarımlar yapalım. Örneğin en pahalı ve en ucuz araba markalarını alalım. Daha sonra verisetinde bulanan arabaların sayılarını markalara göreselleştirelim.

         

Yıllara göre motorlu taşıt vergisi ücretine bakalım.

Şimdi kategorik verilerin fiyat üzerinde etkilerine bakalım.

 

Özellik Mühendisliği

Verisetini detaylı inceledikten sonra artık versetinin yapısını çok iyi biliyoruz. Peki verilerimiz model için uygun mu? İşte tamda burada özellik mühendisliği devreye giriyor. Özellik mühendisliği verileri model için uygun giriş verileri haline getirme ve modelimizin performansı için önemli ölçüde önemlidir.

O zaman işe koyulalım 🙂

Eksik Veri İşlemleri

Eksik veriler tanımlı olan değişkenlerdeki eksik olan gözlemlerdir. Eksik veri çoğu veri kümesinde sık rastlanan bir durumdur. Eksik veriler makine öğrenme algoritmalarının sonuçlarını verisetine bağlı olarak büyük oranda etkileyebilir. Bu oran modelden modele ve algoritmaya göre değişir. Eksik veriler üzerinde birçok yöntem kullanılır bunlar;

  • Complete case analysis(Eksik verileri verisetinden silme)
  • Aritmetik ve medyan ortalama atama
  • Keyfi değer atama
  • Sık değer atama(Kategorik veriler)

Benzer birçok yöntem kullanılmaktadır. Peki hangi yöntemi kullanmalıyız. Kesinlikle bu yöntem daha iyidir diyemeyiz. Kullanacağımız yöntemler;

  • Verisetinin yapısına
  • Kuracağımız model
  • Eksik değer sayısına
  • Eksik değerin diğer  özellikler ile ilişkisine göre değişir.

İlk önce veriseti içinde bulunan eksik değerlerin oranlarını görelim.

 

 

 

 

 

 

 

 

 

 

 

Şimdi eksik veriler üzerinde verilerin, nümerik ve kategorik türlerine, eksik veri sayısına vb. durumlara göre işlem yapacağız.

Kategorik Özelliklerde Eksik Veri

O zaman  ilk   color sütunu ile başlayalım.

Toplam eksik veri sayısı : 1285
Eksik veri yüzdesi : 10.69

Eksik veri oranı %10’un üstünde bir değere sahip bu büyük bir sayı bu yüzden bu verileri silmeyeceğiz. Çünkü bize bize olabildiğince veri lazım. Biz burada kategorik veri olduğu sık olan değer atayabiliriz. Bu yüzden ilk önce değerlere bakalım.

Beyaz                 36.943150
Siyah                 15.274930
Gri                   12.218080
İlk Sahibi Değilim     7.465051
Kırmızı                4.725070
Füme                   4.016775
Mavi                   3.448276
Mavi (metalik)         2.451072
Takasa Uygun           2.423113
Gri (Gümüş)            2.087605
İlk Sahibiyim          1.901212
Bordo                  1.230196
Takasa Uygun Değil     1.192917
Lacivert               1.146319
Kahverengi             0.792171
Bej                    0.633737
Gri (metalik)          0.419385
Yeşil                  0.410065
Şampanya               0.298229
Sarı                   0.186393
Turuncu                0.158434
Turkuaz                0.139795
Gri (titanyum)         0.111836
Altın                  0.102516
Mor                    0.102516
Yeşil (metalik)        0.083877
Diğer                  0.027959
Pembe                  0.009320
Name: color, dtype: float64

Görselleştirme ve tablodan da anlaşılacağı üzere en sık tekrar eden kategori “Beyaz” dır bu yüzden eksik verilere “Beyaz” kategorisini atıyoruz.

Aynı işlemleri drive_type ve safe  sütunü içinde yapıyoruz. Detaylı eksik veri işlemleri için buraya bakabilirsiniz.

Nümerik Özelliklerde Eksik Veri

Aykırı Veri İşlemleri

Aykırı Veri Silme

Aykırı Veri Baskılama

Etiket Kodlama

Sıcak Kodlama

Yüksek Kardinaliti ve Nadir Veri İşlemleri

Feature Selection

Machine Learning Model

Model Evalitoin

Model Save

Project Deploy

Post Author: Cahit ISLEYEN

Data Scientist at @embedica.ai

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir