Makine Öğrenmesinde Değişken Seçimi

Bu çalışmamızda model seçimi önemini UCI dizinindeki banka pazarlama veri kümesi üzerinden inceleyelim. Amaç müşterilerin özelliklerine ve ekonomik göstergelere bakarak müşterilerin kampanya tekliflerine dönüş yapıp yapmayacağını tahmin etmek. Elimizdeki problem iki sınıftan oluşan bir sınıflandırma problemi, burada Random Forest Algoritmasını kullandım.

Algoritmanın iç işleyişini anlama konusunda yetkin olmak önemli olmakla birlikte, bulguları makine öğrenimi hakkında teorik / pratik bilgisi olmayan bir kitleye iletebilmek çok daha önemlidir. Sadece algoritmanın iyi tahmin ettiğini göstermek yeterli değildir. Tahminleri, doğruluğunuza katkıda bulunan giriş verilerinin öğelerine atfetmelisiniz. Neyse ki, sklearn veri kümesindeki özelliklerin tahmin gücünü açıklamamıza yardımcı olan “ değişken önemi(feature importances) ” adı verilen bir çıktı vermektedir Ancak, bu çıktının dezavantajlarını ve bunların üstesinden nasıl geleceğimizi açıklayacağım.

Verideki değişkenlerin anlamlarını aşağıda ve veri kümesini indirebileceğiniz web sayfasında bulabilirsiniz:

  • yaş: Müşterinin yaşı.
  • iş: Müşterinin işinin tanımı.
  • medeni_durum: Müşterinin medeni durumu.
  • eğitim: Müşterinin eğitim durumu.
  • gecikme: Borcunu ödemekte gecikme yaşadığı kredi var mı?
  • ev: Ev kredisi ödüyor mu?
  • borç: Başka kredi ödüyor mu?
  • iletişim: İletişim için seçtiği telefon tipi (sabit hat, GSM).
  • ay: En son iletişim kurulan ay.
  • haftanın_günü: En son iletişim kurulan gün (haftanın günü olarak).
  • süre: En son iletişim kurulan süre. Bu değişken 0 değerini aldığında etiket de 0 (ya da no) değerini aldığı için sağlıklı bir analiz için bu değişkeni veri kümesinden çıkarıyoruz.
  • kampanya: Müşteri için bu kampanya özelinde kaç kere iletişim kurulduğu bilgisi.
  • önceki_iletişimden_sonra_geçen_gün: Müşteriyle başka bir kampanya için iletişim kurulan günden bu yana geçen zaman. Değer 999 ise iletişim kurulmadığı anlamına geliyor.
  • iletişim_sayısı: Müşteriyle bu kampanya öncesi kurulan iletişim sayısı.
  • iletişim_sonucu: Önceki kampanya iletişiminin sonucu.
  • işsizlik: İşsizlik endeksindeki değişim.
  • tüketici_fiyat_endeksi: Tüketici fiyat endeksi.
  • tüketici_güven_endeksi: Tüketici güven endeksi.
  • euribor_faizi: Euribor faizi (Euro Interbank Offered Rate).
  • çalışan_sayısı: Hanehalkı çalışan nüfus sayısı.

Gördüğümüz gibi son beş değişken daha çok sosyal ve ekonomik göstergelerden oluşuyor. Bu göstergeler kampanya teklifinin yapıldığı zamana ait değerleri içeriyor. Veri kümesinde eksik değer yok.

Veri kümesindeki kategorik değişkenleri sayısal hale getirip train ve test datasını ayıralım.

Düz bir rastgele orman modelinin bu veri kümesinde nasıl performans gösterdiğini görelim:

Training set metrics:
Accuracy: 0.995976553015851
Precision: 0.9936808846761453
Recall: 0.9703795124961432
Test set metrics:
Accuracy: 0.8908311078740795
Precision: 0.5334224598930482
Recall: 0.2852037169406719

Modelimiz açıkça Overfitting problemi ile karşı karşıya. Modelin train datasını çok iyi öğrendiğini ancak test datasını tahmin etmede başarısız olduğunu görüyoruz. Bu modelin arkasındaki en önemli değişkenleri inceleyelim:



 

Sürpriz şekilde modelin tahminlerine katkıda bulunan en önemli özelliğin yaş olduğunu bulduk. Random forest modellerinde değişken önem düzeyi, test veri kümesindeki tahminlere değil, modele verilen eğitim verilerine dayanarak hesaplanır. Bu nedenle, bu sayılar modelin gerçek tahmin gücünü göstermez. Ayrıca, modelin eğitim veri seti ve test veri seti üzerindeki performansının çok farklı olduğunu gördük. Bu nedenle, bir test veri kümesindeki özellik önemlerini hesaplayabilecek ve ayrıca accuracy, precision veya recall gibi farklı metriklere göre hesaplayabilecek alternatif bir tekniğe ihtiyacımız var.

Permütasyon Değişken Önemi Testi

Permütasyon değişken önemi testi, yukarıda gördüğümüz dezavantajları çok basit bir kavramla aşar: bir değişkeni model için kullanılamaz hale getirirsek, performans üzerindeki etkisi nedir?

Senaryomuz için, permütasyonun önemini, bir özelliğin permütasyonunun neden olduğu temel metrikteki fark olarak tanımlayalım. Aşağıdaki işlev, önceden eğitilmiş bir sınıflandırıcı verildiğinde permütasyon önemini hesaplar:

def PermImportance(X, y, clf, metric, num_iterations=100):
    '''
    Veri kümesindeki değişkenlerin permütasyon önemini hesaplar.
    Girdiler:
    X: Bütün değişkenlere sahip dataframe
    y: Bağımlı Değişken 
    clf: sklearn sınıflandırıcı
    metric: sklearn metrik, accuracy_score, precision_score or recall_score gibi
    num_iterations: permütasyonun iterasyon sayısı
    Çıktılar:
    baseline: taban metriği
    scores: her bir özelliğin permütasyonundan kaynaklanan temel metrikteki farklar {feature:[diffs]}
    '''
    bar=progressbar.ProgressBar(maxval=len(df.columns)).start()
    baseline_metric=metric(y, clf.predict(df))
    scores={c:[] for c in df.columns}
    for c in df.columns:
        X1=df.copy(deep=True)
        for _ in range(num_iterations):
            temp=X1[c].tolist()
            random.shuffle(temp)
            X1[c]=temp
            score=metric(y, clf.predict(X1))
            scores[c].append(baseline_metric-score)
        bar.update(df.columns.tolist().index(c))
    return baseline_metric, scores

Şimdi test dataseti içindeki tüm değişkenleri permüte ederek recall skorundaki değişime bakalım:


Öncekinden farklı olarak, permütasyon testinde yaş değişkeni sıralamada 
çok gerilerde kalıyor. 
Bunun nedeni, random forest algoritmasının değişken önem düzeyi yüksek kardinaliteye 
sahip değişkenleri tercih etmesidir.
Veri setimizde, yaş 78 benzersiz değere sahipti ve bu, algoritmanın onun en önemli özellik 
olduğunu düşünmesine neden oldu.
Permütasyon testinde akla yatkın bir şekilde faiz oranı ve hanehalkı çalışan sayısı daha 
önemli değişkenler olarak gözüktü.
Umarım bilgilendirici bir yazı olmuştur.

Yorumlar

Bu blogdaki popüler yayınlar

Preprocessing için PCA( Principal Component Analysis) Kullanımı

Adversarial Validator