Kural Tabanlı Sınıflandırma

Tugrulyilmaz
4 min readJun 1, 2021

Her insan farklıdır. Farklı fikirleri, farklı renkleri, farklı zevkleri vardır. Ama ortak noktaları oldukça ironik bir şekilde sınıflandırmaktır. Yani ortak noktalara göre ayırmak. İnsan tarihten bugüne her şeyi sınıflandırmıştır. Kuşları, kitapları, bitkileri ve hatta kendi cinsini. Bunu hep belli bir amaç uğruna yapmıştır. Bu sınıflandırma bazen karşındakini tanımak , bazen ona bir tedavi sunabilmek , bazen de bir şeyler satabilmek amacıyla olabilir.

Kural bazlı sınıflandırma, makine öğrenmesi algoritmaları bu kadar popüler değil iken müşteri, hasta ya da herhangi bir sınıflandırması gereken şey sınıflandırılmak istenildiğinde akla ilk gelen hatta farkında olmadan günlük hayatımızda da çok sık kullandığımız bir yaklaşımdır.

Hepimiz kıyafet dolabımızı düzeltmişizdir, özellikle mevsim geçişlerinde. Örneğin ben önce yazlık kışlık diye ayırırım. Sonrasında vücudumun üst kısmına mı giyiyorum yoksa alt kısmına mı. İşte bu ardışık kurallar uzar gider ve en sonunda oluşturduğum sistem ile neyin nerede olduğunu ya da yeni aldığım bir kıyafeti hangi çekmeceye koyacağımı biliyor oluyorum. Kısa bir süreliğine.. :)

Çok uzatmadan bende size kural tabanlı bir sınıflandırma nasıl yapılır bir hastaneye ödeme yapan hastalar için hazırlanmış veri seti üzerinden anlatmaya çalışacağım.

Çalışmanın nihai amacı sigara içip içmediğini, yaşını, bulunduğu bölgeyi, sahip olduğu çocuk sayısı gibi bilgilerini bildiğimiz bir hastanın ortalama ne kadar ücret ödeyeceğini tahmin etmek.

Çalışma Python dili ile Kaggle platformu üzerinde yapılmıştır. Detaylı bilgilere ve kullandığım fonksiyonlara https://www.kaggle.com/tugrulyilmaz/kural-tabanli-siniflandirma adresinden ulaşabilirsiniz.

GİRİŞ

Bu çalışmada, farklı tipte insanların sağlık harcamaları kural tabanlı sınıflandırılıp tahmin edilmeye çalışılacaktır. Çalışmanın özeti şöyledir:

  1. Veri Setinin Yüklenmesi
  2. Veri Setine Genel Bakış
  3. Veri Manipülasyonu
  4. Persona Oluşturulması
  5. Sonuç

1.Veri Setinin Yüklenmesi

df=pd.read_csv("/kaggle/input/insurance/insurance.csv")

2.Veri Setine Genel Bakış

Veri setinde 7 değişken 1338 örnek var. Bu değişkenler:

  • age : yaş
  • sex : cinsiyet
  • bmi : vücut kitle indeksi
  • children : sahip olduğu çocuk sayısı
  • smoker : sigara içip içmediği
  • region : bulunduğu bölge
  • charges : ödenen ücret bilgisini içeriyor.

Veri setine genel bir bakış atarak inceleyelim.

cat_cols,num_cols=control_df(df)

3. Veri Manipülasyonu

Veriler her zaman istediğimiz şekilde olmayabilir. Verileri istediğimiz, kullanabileceğimiz formata çevirmeye çalışacağız.

Örneğin “age” değişkeni taşıdığı bilgi nedeniyle sınıflandırma için işimize yarayabilir. Ancak taşıdığı eşsiz değer sayısı çok fazla bunu azaltmamız lazım.

Persona sınıflandırmamızı “smoker”, ”region”, ”children”, ”age_cat” değişkenlerine göre oluşturacağız. Bu yüzden bu değişkenlere göre kırılımların ücret ortalamalarını incelemekte fayda var.

Burada görülüyor ki oluşturduğumuz senaryoda bazı değerler için elimizde hiç örnek yok. Bu örnekler için değer ataması yapmamız gerekiyor.

Eksik değerleri doldurmak için şöyle bir yöntem seçtim. Bölgelere ait ücret ortalaması grafiğini hatırlarsak “northwest” ile “southwest” bölgesi ve “northeast” ile “southeast” bölgesi birbirine benzer davranışlar sergiliyor. Bu yüzden eksik verileri doldurmak için bu bölgelerin birbirinde karşılık gelen koşullarından fayda sağladım.

Eksik değerleri missing_fill fonksiyonu ile doldurduktan sonra doldurma yapmadan önceki yaşa göre ücret ortalamaları ile yeni ücret ortalamalarını karşılaştırmak istiyorum.

Eksik veri doldurma işlemi yapılmamış ortalamalar :

Eksik verileri doldurduktan sonraki ortalamalar:

Görüldüğü üzere yaş kategorilerine göre ücret dağılımını incelediğimizde eksik verileri tamamladığımız zaman bütün ortalamalar ücretler yükselmiştir. Bu durumun nedeni için doldurduğumuz eksik verileri incelemekte fayda var.

Görüldüğü üzere doldurduğumuz eksik verilerin çoğunluğu sigara içen kişilerden oluşuyordu. Sigara içen kişilerin ödediği ücret ortalaması içmeyenlere göre çok daha yüksek olduğu için genel ücret ortalaması artmış oldu.

4.Persona Oluşturulması

Bu kısımda verilerimiz persona dataframe şekline çevirilecektir.

Oluşturduğumuz persona dataframe’ine göz atalım.

Ücretlerimizi de [“F”,”E”,”D”,”C”,”B”,”A”] (F en düşük A en yüksek) 6 segmente ayırıyoruz.

Çalışmanın sonunda tahmin yapmak için aşağıdaki dataframe’i elde ediyoruz.

5. Sonuç

Kendi girdiğim örnekte “southwest” bölgesinde yaşayan 5 çocuklu sigara içmeyen 60 yaşında bir insanın yaklaşık 10.824 birim para ödeyeceğine ulaştım.

Sizlerde kaynakçada bırakacağım çalışmanın linkine tıklayarak kendi örnekleriniz için deneme yapabilirsiniz.

Çalışma ile ilgili soru, görüş ya da öneriniz olursa benimle iletişime geçebilirsiniz.

Kaynakça:

https://bootcamp.veribilimiokulu.com/egitim/veri-bilimci-yetistirme-programi/

--

--