Makine Öğrenmesinde Değişken Seçimi
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.995976553015851Precision: 0.9936808846761453Recall: 0.9703795124961432Test set metrics:Accuracy: 0.8908311078740795Precision: 0.5334224598930482Recall: 0.2852037169406719
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
Yorum Gönder