Fitur Anda Penting? Bukan Berarti Mereka Bagus - KDnuggets

Fitur Anda Penting? Bukan Berarti Bagus – KDnuggets

Node Sumber: 2893531

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
[Gambar oleh Penulis]

 

Konsep “kepentingan fitur” banyak digunakan dalam pembelajaran mesin sebagai jenis penjelasan model yang paling dasar. Misalnya, ini digunakan dalam Recursive Feature Elimination (RFE), untuk menghilangkan fitur paling tidak penting dari model secara berulang.

Namun, ada kesalahpahaman mengenai hal tersebut.

Fakta bahwa suatu fitur penting tidak berarti fitur tersebut bermanfaat bagi model!

Memang benar, ketika kami mengatakan bahwa suatu fitur itu penting, ini berarti bahwa fitur tersebut memberikan kontribusi yang tinggi terhadap prediksi yang dibuat oleh model. Namun kita harus mempertimbangkan hal itu kontribusi seperti itu mungkin salah.

Ambil contoh sederhana: seorang data scientist secara tidak sengaja melupakan ID Pelanggan di antara fitur-fitur modelnya. Model ini menggunakan ID Pelanggan sebagai fitur yang sangat prediktif. Akibatnya, fitur ini akan memiliki tingkat kepentingan fitur yang tinggi meskipun justru memperburuk model, karena tidak dapat berfungsi dengan baik pada data yang tidak terlihat.

Untuk memperjelasnya, kita perlu membedakan dua konsep:

  • Kontribusi Prediksi: bagian mana dari prediksi yang disebabkan oleh fitur tersebut; ini setara dengan pentingnya fitur.
  • Kontribusi Kesalahan: bagian mana dari kesalahan prediksi yang disebabkan oleh kehadiran fitur dalam model.

Dalam artikel ini, kita akan melihat cara menghitung besaran ini dan cara menggunakannya untuk mendapatkan wawasan berharga tentang model prediktif (dan cara memperbaikinya).

Catatan: artikel ini difokuskan pada kasus regresi. Jika Anda lebih tertarik dengan kasus klasifikasi, Anda dapat membaca “Fitur mana yang berbahaya bagi model klasifikasi Anda?”

Misalkan kita membuat model untuk memprediksi pendapatan masyarakat berdasarkan pekerjaan, usia, dan kebangsaan. Sekarang kami menggunakan model tersebut untuk membuat prediksi pada tiga orang.

Jadi, kita memiliki kebenaran dasar, prediksi model, dan kesalahan yang dihasilkan:

 

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
Kebenaran dasar, prediksi model, dan kesalahan absolut (dalam ribuan $). [Gambar oleh Penulis]

 

Jika kita memiliki model prediktif, kita selalu dapat menguraikan prediksi model tersebut menjadi kontribusi yang dihasilkan oleh fitur tunggal. Ini dapat dilakukan melalui nilai SHAP (jika Anda tidak mengetahui cara kerja nilai SHAP, Anda dapat membaca artikel saya: Nilai-nilai SHAP Dijelaskan Persis Bagaimana Anda Ingin Seseorang Dijelaskan kepada Anda).

Jadi, katakanlah ini adalah nilai SHAP yang relatif terhadap model kita untuk ketiga individu tersebut.

 

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
Nilai SHAP untuk prediksi model kami (dalam ribuan $). [Gambar oleh Penulis]

 

Properti utama nilai SHAP adalah nilai aditif. Artinya - dengan mengambil jumlah setiap baris - kita akan memperoleh prediksi model untuk individu tersebut. Misalnya, jika kita mengambil baris kedua: 72k $ +3k $ -22k $ = 53k $, yang merupakan prediksi model untuk individu kedua.

Sekarang, nilai SHAP adalah indikator yang baik tentang betapa pentingnya suatu fitur untuk prediksi kita. Memang benar, semakin tinggi nilai SHAP (mutlak), semakin besar pengaruh fitur tersebut terhadap prediksi individu tertentu. Perhatikan bahwa saya berbicara tentang nilai absolut SHAP karena tanda di sini tidak penting: suatu fitur sama pentingnya jika mendorong prediksi ke atas atau ke bawah.

Oleh karena itu, Kontribusi Prediksi suatu fitur sama dengan rata-rata nilai absolut SHAP fitur tersebut. Jika Anda memiliki nilai SHAP yang disimpan dalam kerangka data Pandas, ini sesederhana:

prediction_contribution = shap_values.abs().mean()

Dalam contoh kita, inilah hasilnya:

 

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
Kontribusi Prediksi. [Gambar oleh Penulis]

 

Seperti yang Anda lihat, pekerjaan jelas merupakan fitur yang paling penting karena, rata-rata, pekerjaan menyumbang 71.67 ribu $ dari prediksi akhir. Kebangsaan dan usia masing-masing merupakan ciri paling relevan kedua dan ketiga.

Namun, fakta bahwa fitur tertentu menyumbang bagian yang relevan dari prediksi akhir tidak menjelaskan apa pun tentang performa fitur tersebut. Untuk mempertimbangkan juga aspek ini, kita perlu menghitung “Kontribusi Kesalahan”.

Katakanlah kita ingin menjawab pertanyaan berikut: “Prediksi apa yang akan dibuat oleh model jika model tersebut tidak memiliki fitur tersebut? pekerjaan?” Nilai SHAP memungkinkan kita menjawab pertanyaan ini. Faktanya, karena bersifat aditif, cukup dengan mengurangi nilai SHAP yang terkait dengan fitur tersebut pekerjaan dari prediksi yang dibuat oleh model.

Tentu saja kita dapat mengulangi prosedur ini untuk setiap fitur. Di Panda:

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

Inilah hasilnya:

 

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
Prediksi yang akan kami peroleh jika kami menghapus fitur masing-masing. [Gambar oleh Penulis]

 

Artinya, jika kita tidak memiliki fitur tersebut pekerjaan, maka model akan memperkirakan 20rb$ untuk individu pertama, -19rb$ untuk individu kedua, dan -8rb$ untuk individu ketiga. Melainkan jika kita tidak mempunyai fitur tersebut usia, model akan memperkirakan 73rb $ untuk individu pertama, 50rb $ untuk individu kedua, dan seterusnya.

Seperti yang Anda lihat, prediksi untuk setiap individu sangat bervariasi jika kami menghapus fitur yang berbeda. Konsekuensinya, kesalahan prediksi juga akan sangat berbeda. Kita dapat dengan mudah menghitungnya:

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

Hasilnya adalah sebagai berikut:

 

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
Kesalahan absolut yang akan kami peroleh jika kami menghapus fitur terkait. [Gambar oleh Penulis]

 

Ini adalah kesalahan yang akan kami peroleh jika kami menghapus fitur tersebut. Secara intuitif, jika kesalahannya kecil, menghapus fitur tersebut tidak menjadi masalah — atau bahkan bermanfaat — bagi model. Jika kesalahannya tinggi, menghapus fitur tersebut bukanlah ide yang baik.

Tapi kita bisa melakukan lebih dari ini. Memang benar, kita dapat menghitung perbedaan antara kesalahan model lengkap dan kesalahan yang diperoleh tanpa fitur:

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

Yang:

 

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
Perbedaan antara kesalahan model dan kesalahan yang kita alami tanpa fitur. [Gambar oleh Penulis]

 

Jika nomor ini adalah:

  • negatif, maka kehadiran fitur tersebut menyebabkan berkurangnya kesalahan prediksi, sehingga fitur tersebut berfungsi dengan baik untuk pengamatan tersebut!
  • positif, maka kehadiran fitur tersebut menyebabkan peningkatan kesalahan prediksi, sehingga fitur tersebut buruk untuk pengamatan tersebut.

Kita dapat menghitung “Kontribusi Kesalahan” sebagai rata-rata nilai-nilai ini, untuk setiap fitur. Di Panda:

error_contribution = error_diff.mean()

Inilah hasilnya:

 

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
Kontribusi Kesalahan. [Gambar oleh Penulis]

 

Jika nilainya positif, berarti rata-rata kehadiran fitur pada model menghasilkan error yang lebih tinggi. Jadi, tanpa fitur itu, prediksi secara umum akan lebih baik. Dengan kata lain, fitur ini lebih banyak merugikan daripada menguntungkan!

Sebaliknya, semakin negatif nilai ini, semakin bermanfaat fitur tersebut untuk prediksi karena kehadirannya menyebabkan kesalahan yang lebih kecil.

Mari kita coba menggunakan konsep ini pada kumpulan data nyata.

Selanjutnya saya akan menggunakan dataset yang diambil dari Picaret (perpustakaan Python di bawah Lisensi MIT). Kumpulan data tersebut disebut “Emas” dan berisi data keuangan deret waktu.

 

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
Sampel kumpulan data. Semua fitur dinyatakan dalam persentase, jadi -4.07 berarti return sebesar -4.07%. [Gambar oleh Penulis]

 

Ciri-cirinya terdiri dari imbal hasil aset keuangan masing-masing 22, 14, 7, dan 1 hari sebelum momen observasi (“T-22”, “T-14”, “T-7”, “T-1”). Berikut adalah daftar lengkap semua aset keuangan yang digunakan sebagai fitur prediktif:

 

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
Daftar aset yang tersedia. Setiap aset diamati pada waktu -22, -14, -7, dan -1. [Gambar oleh Penulis]

 

Secara total, kami memiliki 120 fitur.

Tujuannya adalah untuk memprediksi harga (pengembalian) Emas 22 hari ke depan (“Emas_T+22”). Mari kita lihat variabel target.

 

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
Histogram variabel. [Gambar oleh Penulis]

 

Setelah saya memuat kumpulan data, berikut langkah-langkah yang saya lakukan:

  1. Pisahkan seluruh kumpulan data secara acak: 33% baris dalam kumpulan data pelatihan, 33% baris lainnya dalam kumpulan data validasi, dan 33% sisanya dalam kumpulan data pengujian.
  2. Latih Regresor LightGBM pada kumpulan data pelatihan.
  3. Buat prediksi pada kumpulan data pelatihan, validasi, dan pengujian, menggunakan model yang dilatih pada langkah sebelumnya.
  4. Hitung nilai SHAP dari kumpulan data pelatihan, validasi, dan pengujian, menggunakan pustaka Python “shap”.
  5. Hitung Kontribusi Prediksi dan Kontribusi Kesalahan setiap fitur pada setiap dataset (pelatihan, validasi, dan pengujian), menggunakan kode yang telah kita lihat di paragraf sebelumnya.

Mari kita bandingkan Kontribusi Kesalahan dan Kontribusi Prediksi pada dataset pelatihan. Kami akan menggunakan plot sebar, sehingga titik-titik tersebut mengidentifikasi 120 fitur model.

 

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
Kontribusi Prediksi vs. Kontribusi Kesalahan (pada dataset Pelatihan). [Gambar oleh Penulis]

 

Terdapat korelasi yang sangat negatif antara Kontribusi Prediksi dan Kontribusi Kesalahan pada set pelatihan.

Dan ini masuk akal: karena model belajar dari kumpulan data pelatihan, model tersebut cenderung mengatribusikan fitur-fitur yang sangat penting (yaitu Kontribusi Prediksi yang tinggi) yang menghasilkan pengurangan besar dalam kesalahan prediksi (yaitu Kontribusi Kesalahan yang sangat negatif).

Tapi ini tidak menambah banyak pengetahuan kita bukan?

Memang, yang paling penting bagi kami adalah kumpulan data validasi. Kumpulan data validasi sebenarnya adalah proksi terbaik yang dapat kami miliki tentang bagaimana fitur kami akan berperilaku pada data baru. Jadi, mari kita buat perbandingan yang sama pada set validasi.

 

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
Kontribusi Prediksi vs. Kontribusi Kesalahan (pada dataset Validasi). [Gambar oleh Penulis]

 

Dari plot ini, kita dapat menggali lebih banyak informasi menarik.

Fitur di bagian kanan bawah plot adalah fitur yang menurut model kami sangat penting karena fitur tersebut benar-benar mengurangi kesalahan prediksi.

Perhatikan juga bahwa “Emas_T-22” (pengembalian emas 22 hari sebelum periode observasi) bekerja dengan sangat baik dibandingkan dengan pentingnya hal tersebut yang dikaitkan dengan model tersebut. Artinya fitur ini mungkin kurang pas. Dan informasi ini sangat menarik karena emas adalah aset yang kami coba prediksi (“Emas_T+22”).

Di sisi lain, fitur yang mempunyai Kontribusi Error diatas 0 membuat prediksi kita semakin buruk. Misalnya, “US Bond ETF_T-1” rata-rata mengubah prediksi model sebesar 0.092% (Kontribusi Prediksi), namun hal ini menyebabkan model membuat prediksi rata-rata 0.013% (Kontribusi Kesalahan) lebih buruk dibandingkan jika tanpa fitur tersebut .

Kita mungkin mengira demikian semua fitur dengan Kontribusi Kesalahan yang tinggi (dibandingkan dengan Kontribusi Prediksinya) mungkin mengalami overfitting atau, secara umum, mereka memiliki perilaku berbeda di set pelatihan dan di set validasi.

Mari kita lihat fitur mana yang memiliki Kontribusi Error terbesar.

 

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
Fitur diurutkan berdasarkan penurunan Kontribusi Kesalahan. [Gambar oleh Penulis]

 

Dan kini fitur dengan Kontribusi Error terendah:

 

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
Fitur diurutkan berdasarkan peningkatan Kontribusi Kesalahan. [Gambar oleh Penulis]

 

Menariknya, kita dapat mengamati bahwa semua fitur dengan Kontribusi Kesalahan lebih tinggi relatif terhadap T-1 (1 hari sebelum momen pengamatan), sedangkan hampir semua fitur dengan Kontribusi Kesalahan lebih kecil relatif terhadap T-22 (22 hari sebelum momen pengamatan). ).

Hal ini tampaknya menunjukkan hal itu fitur-fitur terbaru cenderung mengalami overfitting, sedangkan fitur-fitur yang lebih jauh cenderung dapat digeneralisasi dengan lebih baik.

Perhatikan bahwa, tanpa Kontribusi Kesalahan, kami tidak akan pernah mengetahui wawasan ini.

Metode Penghapusan Fitur Rekursif (RFE) tradisional didasarkan pada penghapusan fitur yang tidak penting. Ini setara dengan menghapus fitur dengan Kontribusi Prediksi kecil terlebih dahulu.

Namun, berdasarkan apa yang kami katakan di paragraf sebelumnya, akan lebih masuk akal untuk menghapus fitur dengan Kontribusi Kesalahan tertinggi terlebih dahulu.

Untuk memeriksa apakah intuisi kita terverifikasi, mari kita bandingkan kedua pendekatan tersebut:

  • RFE tradisional: menghapus fitur yang tidak berguna terlebih dahulu (Kontribusi Prediksi terendah).
  • RFE kami: menghapus fitur berbahaya pertama (Kontribusi Kesalahan tertinggi).

Mari kita lihat hasilnya pada set validasi:

 

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
Mean Absolute Error dari dua strategi pada set validasi. [Gambar oleh Penulis]

 

Iterasi terbaik untuk setiap metode telah dilingkari: model dengan 19 fitur untuk RFE tradisional (garis biru) dan model dengan 17 fitur untuk RFE (garis oranye).

Secara umum, tampaknya metode kami berfungsi dengan baik: menghapus fitur dengan Kontribusi Kesalahan tertinggi akan menghasilkan MAE yang lebih kecil secara konsisten dibandingkan dengan menghapus fitur dengan Kontribusi Prediksi tertinggi.

Namun, Anda mungkin berpikir ini berfungsi dengan baik hanya karena kami melakukan overfitting pada set validasi. Bagaimanapun, kami tertarik dengan hasil yang akan kami peroleh pada set pengujian.

Jadi mari kita lihat perbandingan yang sama pada set pengujian.

 

Fitur Anda Penting? Itu Tidak Berarti Mereka Baik
Mean Absolute Error dari dua strategi pada set pengujian. [Gambar oleh Penulis]

 

Hasilnya mirip dengan yang sebelumnya. Sekalipun jarak antara kedua garis lebih kecil, MAE yang diperoleh dengan menghilangkan Error Contributor tertinggi jelas lebih baik daripada MAE yang diperoleh dengan menghilangkan Prediction Contributor terendah.

Karena kita memilih model yang mengarah ke MAE terkecil pada set validasi, mari kita lihat hasilnya pada set pengujian:

  • Kontribusi Prediksi RFE (19 fitur). MAE pada set pengujian: 2.04.
  • Kontribusi Kesalahan RFE (17 fitur). MAE pada set pengujian: 1.94.

Jadi MAE terbaik yang menggunakan metode kami adalah 5% lebih baik dibandingkan dengan RFE tradisional!

Konsep pentingnya fitur memainkan peran mendasar dalam pembelajaran mesin. Namun, pengertian “kepentingan” sering disalahartikan sebagai “kebaikan”.

Untuk membedakan kedua aspek ini kami telah memperkenalkan dua konsep: Kontribusi Prediksi dan Kontribusi Kesalahan. Kedua konsep tersebut didasarkan pada nilai SHAP dari kumpulan data validasi, dan dalam artikel kita telah melihat kode Python untuk menghitungnya.

Kami juga telah mencobanya pada kumpulan data keuangan nyata (yang tugasnya adalah memprediksi harga Emas) dan membuktikan bahwa Penghapusan Fitur Rekursif berdasarkan Kontribusi Kesalahan menghasilkan Mean Absolute Error 5% lebih baik dibandingkan dengan RFE tradisional berdasarkan Kontribusi Prediksi.

Semua kode yang digunakan untuk artikel ini dapat ditemukan di notebook ini.

Terima kasih telah membaca!

 
 
Samuele Mazzanti adalah Ilmuwan Data Utama di Jakala dan saat ini tinggal di Roma. Ia lulus dalam bidang Statistik dan minat penelitian utamanya berkaitan dengan aplikasi pembelajaran mesin untuk industri. Dia juga seorang pembuat konten lepas.

 
Original. Diposting ulang dengan izin.
 

Stempel Waktu:

Lebih dari KDnugget