Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez - KDnuggets

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez – KDnuggets

Kaynak Düğüm: 2893531

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
[Yazarın Resmi]

 

“Özellik önemi” kavramı, model açıklanabilirliğinin en temel türü olarak makine öğreniminde yaygın olarak kullanılmaktadır. Örneğin, Özyinelemeli Özellik Eliminasyonunda (RFE), modelin en az önemli özelliğini yinelemeli olarak çıkarmak için kullanılır.

Ancak bu konuda bir yanılgı var.

Bir özelliğin önemli olması onun modele faydalı olduğu anlamına gelmez!

Aslında bir özelliğin önemli olduğunu söylediğimizde bu, o özelliğin modelin yaptığı tahminlere yüksek katkı sağladığı anlamına gelir. Ama şunu dikkate almalıyız böyle bir katkı yanlış olabilir.

Basit bir örneği ele alalım: Bir veri bilimcisi, modelinin özellikleri arasında yanlışlıkla Müşteri Kimliğini unutuyor. Model, son derece öngörücü bir özellik olarak Müşteri Kimliğini kullanır. Sonuç olarak bu özellik, modeli gerçekten kötüleştirse bile yüksek bir özellik önemine sahip olacaktır çünkü görünmeyen veriler üzerinde iyi çalışamaz.

İşleri daha açık hale getirmek için iki kavram arasında bir ayrım yapmamız gerekecek:

  • Tahmin Katkısı: tahminlerin hangi kısmının bu özellikten kaynaklandığı; bu, özelliğin önemine eşdeğerdir.
  • Hata Katkısı: Tahmin hatalarının hangi kısmının modeldeki özelliğin varlığından kaynaklandığı.

Bu makalede, bu miktarların nasıl hesaplanacağını ve tahmine dayalı bir model hakkında değerli bilgiler elde etmek (ve onu geliştirmek) için bunları nasıl kullanacağımızı göreceğiz.

Not: Bu makale regresyon durumuna odaklanmıştır. Sınıflandırma durumuyla daha fazla ilgileniyorsanız, okuyabilirsiniz “Sınıflandırma modeliniz için hangi özellikler zararlıdır?”

İnsanların gelirlerini işlerine, yaşlarına ve uyruklarına göre tahmin etmek için bir model oluşturduğumuzu varsayalım. Şimdi modeli üç kişi hakkında tahminlerde bulunmak için kullanıyoruz.

Böylece temel gerçeğe, model tahminine ve sonuçta ortaya çıkan hataya sahibiz:

 

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
Temel gerçek, model tahmini ve mutlak hata (bin dolar cinsinden). [Yazarın Resmi]

 

Tahmine dayalı bir modele sahip olduğumuzda, model tahminlerini her zaman tekil özelliklerin getirdiği katkılara ayrıştırabiliriz. Bu SHAP değerleri üzerinden yapılabilir (SHAP değerlerinin nasıl çalıştığını bilmiyorsanız şu yazımı okuyabilirsiniz: SHAP Değerleri Birinin Size Açıklanmasını İstediğiniz Şekilde Açıklanıyor).

Diyelim ki bunlar üç birey için modelimize göre SHAP değerleri.

 

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
Modelimizin tahminlerine ilişkin SHAP değerleri (bin $ cinsinden). [Yazarın Resmi]

 

SHAP değerlerinin temel özelliği toplamalı olmalarıdır. Bu, her satırın toplamını alarak modelimizin o birey için tahminini elde edeceğimiz anlamına gelir. Mesela ikinci sırayı alırsak: 72k $ +3k $ -22k $ = 53k $, bu da modelin ikinci birey için tahmininin tam tersi.

Artık SHAP değerleri, bir özelliğin tahminlerimiz açısından ne kadar önemli olduğunun iyi bir göstergesidir. Gerçekten de, (mutlak) SHAP değeri ne kadar yüksek olursa, söz konusu birey hakkındaki tahmin özelliği de o kadar etkili olur. Mutlak SHAP değerlerinden bahsettiğimi unutmayın çünkü buradaki işaret önemli değildir: bir özellik, tahmini yukarı veya aşağı itiyorsa eşit derecede önemlidir.

Bu nedenle, Bir özelliğin Tahmin Katkısı, o özelliğin mutlak SHAP değerlerinin ortalamasına eşittir. Pandas veri çerçevesinde depolanan SHAP değerlerine sahipseniz, bu şu kadar basittir:

prediction_contribution = shap_values.abs().mean()

Örneğimizde sonuç şu:

 

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
Tahmin Katkısı. [Yazarın Resmi]

 

Gördüğünüz gibi iş açıkça en önemli özellik çünkü ortalama olarak nihai tahminin 71.67 bin $'ını oluşturuyor. Milliyet ve yaş sırasıyla ikinci ve üçüncü en alakalı özelliktir.

Ancak belirli bir özelliğin nihai tahminin ilgili bir kısmını oluşturması, özelliğin performansı hakkında hiçbir şey söylemez. Bu hususu da dikkate almak için “Hata Katkısını” hesaplamamız gerekecek.

Diyelim ki şu soruya cevap vermek istiyoruz: “Model bu özelliğe sahip olmasaydı ne gibi tahminlerde bulunurdu? ?” SHAP değerleri bu soruyu cevaplamamızı sağlar. Aslında toplamsal oldukları için özelliğe göre SHAP değerlerini çıkarmak yeterlidir.  Modelin yaptığı tahminlerden.

Elbette bu işlemi her özellik için tekrarlayabiliriz. Pandalarda:

y_pred_wo_feature = shap_values.apply(lambda feature: y_pred - feature)

Sonuç budur:

 

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
İlgili özelliği kaldırırsak elde edeceğimiz tahminler. [Yazarın Resmi]

 

Bunun anlamı, eğer bu özelliğe sahip olmasaydık , o zaman model ilk kişi için 20 bin $, ikinci kişi için -19 bin $ ve üçüncü kişi için -8 bin $ tahmin edecektir. Bunun yerine, eğer bu özelliğe sahip olmasaydık yaşmodel ilk kişi için 73 bin $, ikinci kişi için 50 bin $ vb. öngörüyordu.

Gördüğünüz gibi, farklı özellikleri kaldırırsak her bireye ilişkin tahminler büyük ölçüde farklılık gösterir. Sonuç olarak, tahmin hataları da çok farklı olacaktır. Bunları kolayca hesaplayabiliriz:

abs_error_wo_feature = y_pred_wo_feature.apply(lambda feature: (y_true - feature).abs())

Sonuç aşağıdaki gibidir:

 

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
İlgili özelliği kaldırırsak elde edeceğimiz mutlak hatalar. [Yazarın Resmi]

 

Bunlar, ilgili özelliği kaldırdığımızda elde edeceğimiz hatalardır. Sezgisel olarak, eğer hata küçükse, o zaman özelliğin kaldırılması model için bir sorun teşkil etmez, hatta faydalıdır. Hata yüksekse özelliği kaldırmak iyi bir fikir değildir.

Ama bundan daha fazlasını yapabiliriz. Aslında, tam modelin hataları ile özellik olmadan elde edeceğimiz hatalar arasındaki farkı hesaplayabiliriz:

error_diff = abs_error_wo_feature.apply(lambda feature: abs_error - feature)

Hangi:

 

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
Modelin hataları ile özellik olmasaydı yapacağımız hatalar arasındaki fark. [Yazarın Resmi]

 

Bu sayı ise:

  • negatifse, bu durumda özelliğin varlığı tahmin hatasında bir azalmaya yol açar, dolayısıyla özellik bu gözlem için iyi çalışır!
  • pozitifse, o zaman özelliğin varlığı tahmin hatasının artmasına neden olur, dolayısıyla özellik o gözlem için kötüdür.

Her bir özellik için bu değerlerin ortalaması olarak “Hata Katkısını” hesaplayabiliriz.. Pandalarda:

error_contribution = error_diff.mean()

Sonuç budur:

 

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
Hata Katkısı. [Yazarın Resmi]

 

Bu değerin pozitif olması ortalama olarak özelliğin modelde bulunmasının daha yüksek hataya yol açtığı anlamına gelir. Dolayısıyla bu özellik olmasaydı tahmin genel olarak daha iyi olurdu. Başka bir deyişle, özellik faydadan çok zarar veriyor!

Tam tersine bu değer ne kadar negatif olursa, varlığı daha küçük hatalara yol açacağından özelliğin tahminler açısından faydası o kadar artar.

Bu kavramları gerçek bir veri kümesi üzerinde kullanmaya çalışalım.

Bundan sonra, şuradan alınan bir veri kümesini kullanacağım: Pycaret (altında bir Python kütüphanesi MIT lisansı). Veri seti “Altın” olarak adlandırılıyor ve finansal verilerin zaman serilerini içeriyor.

 

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
Veri kümesi örneği. Özelliklerin tümü yüzde olarak ifade edilir, dolayısıyla -4.07, %-4.07'lik bir getiri anlamına gelir. [Yazarın Resmi]

 

Özellikler, finansal varlıkların gözlem anından sırasıyla 22, 14, 7 ve 1 gün önceki getirilerinden oluşmaktadır (“T-22”, “T-14”, “T-7”, “T-1”). Tahmin özelliği olarak kullanılan tüm finansal varlıkların kapsamlı listesi:

 

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
Kullanılabilir varlıkların listesi. Her varlık -22, -14, -7 ve -1 zamanında gözlemlenir. [Yazarın Resmi]

 

Toplamda 120 özelliğimiz var.

Amaç, Altın fiyatını (getirisini) 22 gün önceden (“Gold_T+22”) tahmin etmektir. Hedef değişkene bir göz atalım.

 

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
Değişkenin histogramı. [Yazarın Resmi]

 

Veri kümesini yükledikten sonra uyguladığım adımlar şunlardır:

  1. Tüm veri kümesini rastgele bölün: Eğitim veri kümesindeki satırların %33'ü, doğrulama veri kümesindeki diğer %33 ve test veri kümesindeki kalan %33.
  2. Eğitim veri kümesinde bir LightGBM Regressor eğitin.
  3. Önceki adımda eğitilen modeli kullanarak eğitim, doğrulama ve test veri kümeleri hakkında tahminler yapın.
  4. Python kitaplığı "shap"ı kullanarak eğitim, doğrulama ve test veri kümelerinin SHAP değerlerini hesaplayın.
  5. Önceki paragrafta gördüğümüz kodu kullanarak, her bir veri kümesindeki (eğitim, doğrulama ve test) her özelliğin Tahmin Katkısını ve Hata Katkısını hesaplayın.

Eğitim veri setindeki Hata Katkısını ve Tahmin Katkısını karşılaştıralım. Noktaların modelin 120 özelliğini tanımlaması için bir dağılım grafiği kullanacağız.

 

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
Tahmin Katkısı ve Hata Katkısı (Eğitim veri kümesinde). [Yazarın Resmi]

 

Eğitim setinde Tahmin Katkısı ile Hata Katkısı arasında oldukça negatif bir korelasyon vardır.

Ve bu mantıklı: Model, eğitim veri kümesinden öğrendiğinden, tahmin hatasında büyük bir azalmaya (yani oldukça olumsuz Hata Katkısı) yol açan özelliklere yüksek önem (yani yüksek Tahmin Katkısı) atfetme eğilimindedir..

Ama bu bizim bilgimize pek bir şey katmıyor, değil mi?

Aslında bizim için asıl önemli olan doğrulama veri kümesidir. Doğrulama veri kümesi aslında özelliklerimizin yeni veriler üzerinde nasıl davranacağına dair sahip olabileceğimiz en iyi temsilidir. Şimdi aynı karşılaştırmayı doğrulama seti üzerinde yapalım.

 

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
Tahmin Katkısı ve Hata Katkısı (Doğrulama veri kümesinde). [Yazarın Resmi]

 

Bu olay örgüsünden çok daha ilginç bilgiler elde edebiliriz.

Grafiğin sağ alt kısmındaki özellikler, aslında tahmin hatasını azalttıkları için modelimizin doğru bir şekilde yüksek önem verdiği özelliklerdir.

Ayrıca, "Gold_T-22"nin (altının gözlem süresinden 22 gün önce geri dönüşü) modelin kendisine atfettiği önemle karşılaştırıldığında gerçekten iyi çalıştığını unutmayın. Bu şu demek bu özellik muhtemelen yeterince uymuyor. Ve bu bilgi özellikle ilginç çünkü altın tahmin etmeye çalıştığımız varlık (“Altın_T+22”).

Öte yandan, Hata Katkısı 0'ın üzerinde olan özellikler tahminlerimizi daha da kötüleştiriyor. Örneğin, "ABD Tahvili ETF_T-1" ortalama olarak model tahminini %0.092 oranında değiştirir (Tahmin Katkısı), ancak modelin bu özellik olmasaydı olacağından ortalama %0.013 (Hata Katkısı) daha kötü bir tahmin yapmasına yol açar .

Öyle olduğunu varsayabiliriz Hata Katkısı yüksek olan tüm özellikler (Tahmin Katkılarıyla karşılaştırıldığında) muhtemelen gereğinden fazla uyuyor veya genel olarak eğitim setinde ve doğrulama setinde farklı davranışlara sahiptirler.

Hangi özelliklerin en büyük Hata Katkısına sahip olduğunu görelim.

 

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
Özellikler, Hata Katkısı azaltılarak sıralanmıştır. [Yazarın Resmi]

 

Ve şimdi en düşük Hata Katkısına sahip özellikler:

 

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
Özellikler, Hata Katkısı artırılarak sıralanmıştır. [Yazarın Resmi]

 

İlginç bir şekilde, Hata Katkısı daha yüksek olan tüm özelliklerin T-1'e (gözlem anından 1 gün önce) göreli olduğunu, oysa Hata Katkısı daha küçük olan hemen hemen tüm özelliklerin T-22'ye (gözlem anından 22 gün önce) göreli olduğunu gözlemleyebiliriz. ).

Bu şunu gösteriyor gibi görünüyor en yeni özellikler aşırı uyum eğilimi gösterirken, zaman içinde daha uzak olan özellikler daha iyi genelleme eğilimindedir.

Hata Katkısı olmasaydı bu öngörüyü asla bilemeyeceğimizi unutmayın.

Geleneksel Özyinelemeli Özellik Eliminasyonu (RFE) yöntemleri, önemsiz özelliklerin kaldırılmasına dayanır. Bu, önce küçük bir Tahmin Katkısı olan özelliklerin kaldırılmasına eşdeğerdir.

Ancak bir önceki paragrafta söylediklerimize dayanarak Hata Katkısı en yüksek olan özelliklerin ilk önce kaldırılması daha mantıklı olacaktır.

Sezgimizin doğrulanıp doğrulanmadığını kontrol etmek için iki yaklaşımı karşılaştıralım:

  • Geleneksel RFE: Önce işe yaramaz özelliklerin kaldırılması (en düşük Tahmin Katkısı).
  • RFE'miz: zararlı özelliklerin kaldırılması ilk (en yüksek Hata Katkısı).

Doğrulama kümesindeki sonuçları görelim:

 

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
Doğrulama kümesindeki iki stratejinin Ortalama Mutlak Hatası. [Yazarın Resmi]

 

Her yöntem için en iyi yineleme daire içine alınmıştır: geleneksel RFE için 19 özelliğe sahip model (mavi çizgi) ve RFE'miz için 17 özelliğe sahip model (turuncu çizgi).

Genel olarak yöntemimiz iyi çalışıyor gibi görünüyor: En yüksek Hata Katkısına sahip özelliğin kaldırılması, en yüksek Tahmin Katkısına sahip özelliğin kaldırılmasıyla karşılaştırıldığında sürekli olarak daha küçük bir MAE'ye yol açar.

Ancak doğrulama setini gereğinden fazla donattığımız için bunun işe yaradığını düşünebilirsiniz. Sonuçta test setinde elde edeceğimiz sonuçla ilgileniyoruz.

Şimdi aynı karşılaştırmayı test setinde görelim.

 

Özellikleriniz Önemli mi? Bu onların iyi olduğu anlamına gelmez
Test setindeki iki stratejinin Ortalama Mutlak Hatası. [Yazarın Resmi]

 

Sonuç bir öncekine benzer. İki çizgi arasında daha az mesafe olsa bile, en yüksek Hata Katkı Sağlayanı çıkararak elde edilen MAE, en düşük Tahmin Katkı Sağlayanı çıkararak elde edilen MAE'den açıkça daha iyidir.

Doğrulama setinde en küçük MAE'ye yol açan modelleri seçtiğimize göre, bunların test setindeki sonuçlarını görelim:

  • RFE-Tahmin Katkısı (19 özellik). Test setindeki MAE: 2.04.
  • RFE-Hata Katkısı (17 özellik). Test setindeki MAE: 1.94.

Yani bizim yöntemimizi kullanan en iyi MAE, geleneksel RFE'ye kıyasla %5 daha iyidir!

Özellik önemi kavramı makine öğreniminde temel bir rol oynar. Ancak “önem” kavramı sıklıkla “iyilik” ile karıştırılmaktadır.

Bu iki hususu birbirinden ayırmak için iki kavramı tanıttık: Tahmin Katkısı ve Hata Katkısı. Her iki kavram da doğrulama veri kümesinin SHAP değerlerine dayanmaktadır ve makalede bunları hesaplamak için Python kodunu gördük.

Bunları ayrıca gerçek bir finansal veri kümesi üzerinde de denedik (burada görev, Altın fiyatını tahmin etmektir) ve Hata Katkısı'na dayalı Özyinelemeli Özellik Eliminasyonunun, Tahmin Katkısı'na dayalı geleneksel RFE'ye kıyasla %5 daha iyi Ortalama Mutlak Hataya yol açtığını kanıtladık.

Bu makale için kullanılan kodun tamamını şurada bulabilirsiniz: bu defter.

Okuduğunuz için teşekkürler!

 
 
Samuele Mazzanti Jakala'da Baş Veri Bilimcisidir ve şu anda Roma'da yaşamaktadır. İstatistik bölümünden mezun oldu ve ana araştırma ilgi alanları endüstriye yönelik makine öğrenimi uygulamalarıyla ilgilidir. Aynı zamanda serbest içerik yaratıcısıdır.

 
orijinal. İzinle yeniden yayınlandı.
 

Zaman Damgası:

Den fazla KDNuggets