Saran untuk pembelajaran yang sensitif biaya dalam lingkungan yang sangat tidak seimbang


15

Saya memiliki dataset dengan beberapa juta baris dan ~ 100 kolom. Saya ingin mendeteksi sekitar 1% dari contoh dalam dataset, yang termasuk kelas umum. Saya memiliki batasan presisi minimum, tetapi karena biaya yang sangat asimetris, saya tidak terlalu tertarik pada penarikan tertentu (selama saya tidak dibiarkan dengan 10 pertandingan positif!)

Apa saja pendekatan yang akan Anda rekomendasikan dalam pengaturan ini? (tautan ke makalah diterima, tautan ke implementasi dihargai)

Jawaban:


15

Saya telah menemukan He dan Garcia (2009) sebagai ulasan yang bermanfaat untuk belajar dalam masalah kelas yang tidak seimbang. Berikut adalah beberapa hal yang pasti tidak komprehensif untuk dipertimbangkan:

Pendekatan berbasis data:

Seseorang dapat menggarisbawahi kelas mayoritas atau terlalu banyak kelas minoritas. (Breiman menunjukkan bahwa ini secara formal setara dengan menetapkan biaya kesalahan klasifikasi yang tidak seragam.) Ini dapat menyebabkan masalah: Undersampling dapat menyebabkan pelajar kehilangan aspek-aspek dari kelas mayoritas; oversampling meningkatkan risiko overfitting.

Ada metode "undersampling informasi" yang mengurangi masalah ini. Salah satunya adalah EasyEnsemble , yang secara mandiri mengambil sampel beberapa himpunan bagian dari kelas mayoritas dan membuat beberapa pengklasifikasi dengan menggabungkan setiap subset dengan semua data kelas minoritas.

SMOTE (Sintetis Minority Oversampling Technique) atau SMOTEBoost, (menggabungkan SMOTE dengan boosting) membuat instance sintetis dari kelas minoritas dengan membuat tetangga terdekat di ruang fitur. SMOTE diimplementasikan dalam R dalam paket DMwR (yang menyertai buku Luis Torgo "Penambangan Data dengan R, pembelajaran dengan studi kasus" CRC Press 2016 ).

Pendekatan model fitting

Terapkan bobot kelas-spesifik dalam fungsi kerugian Anda (bobot lebih besar untuk kasus minoritas).

Untuk pendekatan berbasis pohon, Anda dapat menggunakan jarak Hellinger sebagai fungsi pengotor simpul, seperti yang disarankan dalam Cieslak et al. "Pohon keputusan jarak Hellinger kuat dan tidak peka" ( kode Weka di sini .)

Gunakan classifier satu kelas , belajar baik (tergantung pada model) kepadatan probabilitas atau batas untuk satu kelas dan memperlakukan kelas lain sebagai outlier.

Tentu saja, jangan gunakan akurasi sebagai metrik untuk pembuatan model. Kappa Cohen adalah alternatif yang masuk akal.

Pendekatan evaluasi model

Jika model Anda mengembalikan probabilitas yang diprediksi atau skor lainnya, pilih cutoff keputusan yang membuat tradeoff dalam kesalahan (menggunakan dataset yang independen dari pelatihan dan pengujian). Dalam R, paket OptimalCutpoints mengimplementasikan sejumlah algoritma, termasuk yang sensitif biaya, untuk memutuskan cutoff.


Terima kasih atas jawaban rinci. Saya telah mencoba melakukan undersampel dan gagal secara menyedihkan. Model menunjukkan kinerja sampel yang sangat baik, tetapi ketidakseimbangan masih ada dalam set uji (dan data dunia nyata akhirnya saya akan gunakan) sehingga presisi OOS model mengerikan. Saya juga telah mencoba bobot kelas-spesifik, tetapi aplikasi saya melibatkan biaya yang lebih tinggi yang mudah diukur untuk false positive daripada false negative. Adapun satu classifiers kelas, saya mencoba agar sesuai dengan linear svm (yang non-linear terlalu lambat) dan yang memiliki 0 presisi bahkan dalam sampel ...
em70

1
Aku merasakan untukmu Presisi tinggi sulit jika mayoritas kasus Anda negatif. Saya akan menggunakan bobot kelas-spesifik (seperti berbanding terbalik dengan fraksi kasus di kelas) untuk mempelajari dan menyimpan bobot tipe kesalahan spesifik untuk menentukan ambang keputusan. Semoga Anda menggunakan validasi silang dengan Cohen kappa bukan akurasi untuk pemilihan model. Saya akan memvisualisasikan kepadatan probabilitas untuk kelas dalam data kalibrasi sepanjang sisi presisi dan pengayaan (presisi / proporsi kasus positif) di semua cutoff untuk benar-benar memahami pengorbanan yang tersedia.
MattBagg

Jawaban yang bagus, terima kasih. Saya telah menggunakan teknik yang mirip dengan EasyEnsemble yang disebutkan untuk beberapa waktu tetapi meragukannya (meskipun kinerja yang masuk akal pada data simulasi). Sekarang saya tahu itu masuk akal.
ayorgo

5

Pemahaman saya adalah bahwa ini adalah bidang penelitian aktif dalam komunitas pembelajaran mesin dan tidak ada jawaban yang bagus, tetapi lebih banyak dan semakin banyak solusi potensial. Anda kemungkinan akan mendapatkan jawaban yang lebih baik jika Anda menentukan algoritma spesifik yang Anda pertimbangkan.

Jika Anda menggunakan model parametrik (regresi logistik) ini seharusnya tidak terlalu menjadi masalah dan Anda bisa memvariasikan ambang batas berdasarkan fungsi kerugian Anda (biaya negatif palsu ke positif palsu)

Jika Anda menggunakan algoritma pembelajaran mesin, ini mungkin lebih sulit. Max Kuhn melakukan upaya yang adil untuk meringkas masalah dalam Bab 16 dari "Pemodelan Prediktif Terapan". Tapi topik yang menantang untuk diringkas. Jika Anda tidak ingin membeli buku, kode R tersedia dalam paket AppliedPredictiveModeling untuk bab ini dan mungkin cukup tergantung pada keakraban Anda dengan R dan algoritma yang digunakan.

Biasanya pembahasan berkisar pada algoritma undersampling / oversampling +/- sensitif biaya. Dengan variasi seperti jous-boost juga dimungkinkan.
Contoh diskusi semacam ini: Chen et al "Menggunakan Hutan Acak untuk Mempelajari Data yang Tidak Seimbang" http://statistics.berkeley.edu/sites/default/files/tech-reports/666.pdf


Masalah dengan memvariasikan ambang adalah bahwa itu seperti mengubah intersep model regresi. Pada kenyataannya, saya mungkin ingin mengubah vektor bobot untuk mempertimbangkan biaya. Tetapi jika saya melakukan itu, mengingat ketidakseimbangan yang sudah parah, saya berakhir dengan 0 presisi! Saya belum menentukan algoritma apa pun dan memiliki sumber daya untuk mengimplementasikan ide-ide penelitian mutakhir, jika mereka menjanjikan. Saya akan melihat buku yang Anda sarankan.
em70

Bab ini begitu-begitu. Upaya yang solid, tapi topik sulit untuk diringkas. Banyak klaim yang tidak didukung dipublikasikan pada berbagai metode. Saya pikir undersampling bertingkat di hutan acak adalah awal yang baik dari perspektif pembelajaran mesin. Kode ada dalam paket buku.
charles

0

Anda dapat melihat implementasi scikit-learn. perhatikan argumen bobot class_ yang dapat memiliki nilai kamus bobot kelas atau 'otomatis':

class sklearn.svm.SVC (C = 1.0, kernel = 'rbf', degree = 3, gamma = 0.0, coef0 = 0.0, menyusut = Benar, probabilitas = Salah, tol = 0.001, cache_size = 200, class_weight = Tidak ada, verbose = Salah, max_iter = -1, random_state = Tidak Ada)

Anda bisa bermain dengan nilai argumen class_weight yang bisa berupa kamus bobot kelas atau 'otomatis'. Dalam mode 'otomatis', algoritma pembelajaran akan secara otomatis menetapkan bobot untuk setiap kelas berdasarkan jumlah sampel dalam masing-masing kelas.

scikit-learn memiliki beberapa algoritma klasifikasi lain, beberapa di antaranya menerima bobot kelas.


Bisakah Anda mengatakan lebih banyak tentang bagaimana bobot kelas dapat digunakan untuk mencapai tujuan OP? Saya pikir itu tersirat dalam posting Anda, tetapi ini belum merupakan jawaban.
gung - Reinstate Monica

Ya, argumen class_weight dapat memiliki nilai 'otomatis' jika beberapa melihat ke dalam dokumentasi atau dapat memiliki nilai kamus yang memiliki bobot kelas. Dalam kasus 'otomatis', algoritma pembelajaran itu sendiri menemukan bobot masing-masing kelas sesuai dengan jumlah sampel di masing-masing.
Ash
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.