Asumsikan, saya memiliki classifier (Ini bisa berupa pengklasifikasi standar seperti pohon keputusan, hutan acak, regresi logistik, dll.) Untuk deteksi penipuan menggunakan kode di bawah ini
library(randomForest)
rfFit = randomForest(Y ~ ., data = myData, ntree = 400) # A very basic classifier
Say, Y is a binary outcome - Fraud/Not-Fraud
Sekarang, saya telah memprediksi pada set data yang tidak terlihat .
pred = predict(rfFit, newData)
Kemudian saya mendapatkan umpan balik dari tim investigasi mengenai klasifikasi saya dan menemukan bahwa saya telah membuat kesalahan dengan mengklasifikasikan penipuan sebagai Non-Fraud (yaitu One False Negative ) . Apakah ada yang bisa saya biarkan algoritma saya mengerti bahwa ia telah melakukan kesalahan? mis. Apakah ada cara menambahkan umpan balik ke algoritma sehingga dapat memperbaiki kesalahan?
Salah satu opsi yang dapat saya pikirkan dari atas kepala saya adalah membangun sebuah adaboost classifier
sehingga classifier baru mengoreksi kesalahan yang lama. atau saya telah mendengar sesuatu dari Incremental Learning
atau Online learning
. Apakah ada implementasi (paket) yang ada di R
?
Apakah ini pendekatan yang tepat? atau Apakah ada cara lain untuk mengubah model alih-alih membangunnya dari awal?
sumber
Jawaban:
Strategi peningkatan dapat meningkatkan kinerja model Anda, sehingga patut dicoba. Sehubungan dengan pembelajaran tambahan / online, saya tidak mengetahui adanya paket dalam R yang mengimplementasikannya (yang lain, tolong perbaiki saya jika saya salah). Di Scikit Learn, ada pengklasifikasi out-of-core yang memungkinkan untuk pembelajaran tambahan. Namun, jika Anda terikat menggunakan R, Anda mungkin tidak punya pilihan selain menulis model incremental Anda sendiri. Dalam kedua kasus tersebut, melihat ke dalam pengklasifikasi Scikit Learn di luar inti mungkin memberi Anda ide untuk memulai.
Detail lain yang perlu diingat adalah sejauh mana memperbarui model pada satu false positive atau false negative akan meningkatkan kinerja model. Dalam domain penipuan, biasanya ada ribuan hingga jutaan kali lebih banyak kasus non-penipuan daripada penipuan. Karena itu, penting untuk mencoba belajar membedakan setiap instance penipuan dengan benar, tetapi memperbarui model pada instance fraud tunggal kemungkinan tidak akan mengubah model secara signifikan. Pertimbangkan strategi lain untuk mendapatkan model agar lebih penting pada kejadian penipuan.
Cara paling mudah untuk meningkatkan model yang Anda awasi, berdasarkan umpan balik dari penyelidik manusia adalah dengan membuat model terpisah dari mesin virtual yang diperbaiki (yaitu mesin virtual yang diprediksi tidak tepat yang setelah diberi label dengan benar). Anda kemudian dapat memiliki dua model Anda "memilih" pada klasifikasi instance masa depan dengan menggabungkan keanggotaan kelas yang diprediksi. Misalnya, ModelA mungkin percaya Instance1 adalah [Penipuan: 0,65, Non-Penipuan: 0,35], sedangkan ModelB percaya Instance1 adalah [Penipuan: 0,47, Non-Penipuan: 0,53]. Prediksi ensemble dengan demikian adalah [Penipuan: (0,65 + 0,47) /2=0,56, Non-Penipuan: (0,35 + 0,53) /2=0,44].
Jika model asli Anda berkinerja lebih baik daripada kebetulan, jumlah instance yang diklasifikasi dengan benar akan lebih besar daripada jumlah yang diklasifikasikan secara salah. Dengan demikian, Anda tidak ingin menghubungkan bobot yang sama dengan model jika mereka dilatih dengan jumlah instance yang tidak proporsional. Ada dua opsi langsung untuk menangani perbedaan ini: 1) menunggu sampai Anda mengumpulkan cukup banyak contoh yang dikoreksi kira-kira sama dengan jumlah model asli yang dilatih, atau 2) menetapkan bobot untuk masing-masing model berdasarkan pada bagaimana kinerja model pada set validasi.
sumber
Saya melakukan riset di masa lalu tentang pembelajaran online dan tambahan. Ada beberapa ide yang perlu Anda pertimbangkan.
Setiap pengklasifikasi dapat 'melakukan' pembelajaran tambahan, satu-satunya masalah adalah bahwa dengan beberapa lebih sulit untuk melakukannya. Tidak ada algoritma pembelajaran tambahan seperti itu, hanya cara untuk mencapai pembelian ini menggunakan algoritma umum. Biasanya, Anda akan memilih salah satu dari mereka dan menyesuaikan cara Anda melatihnya dan memberi makan data baik dalam batch atau secara online.
Anda dapat melakukan ini dengan dua cara: a) Latih kembali model dari awal setiap kali sampel baru (atau set sampel) tiba. Jelas ini tidak ideal, tetapi jika model Anda tidak terlalu kompleks (artinya Anda dapat melakukan seluruh pelatihan di antara kejadian yang akan datang) dan Anda membatasi ukuran dataset Anda (membuang data lama, data baru atau data acak dan menyimpan jumlah instance pelatihan yang stabil) ), ini dapat bekerja dalam beberapa skenario. Contoh yang bagus dari pembelajaran 'pseudo-incremental' ini dengan mesin-mesin vektor dukungan dapat ditemukan di sini .
b) Temukan cara untuk memperbarui parameter / bobot model Anda dengan hanya memodifikasi 'sedikit' parameter ini ketika prediksi salah. Neural Nets sangat bagus untuk ini karena Anda dapat melatih model, menyimpan bobot dan kemudian berlatih dengan kumpulan data baru saat mereka datang. Selain itu, Anda dapat mengubah tingkat pembelajaran untuk memberikan lebih banyak / kurang relevansi dengan input baru Anda. Jika Anda dapat memilih algoritma apa pun untuk kasus Anda, ini akan menjadi pilihan saya. Namun, ada banyak metode lain: misalnya dalam pendekatan Bayesian Anda dapat memodifikasi distribusi menerapkan kenaikan / penurunan numerik ke parameter tertentu (lihat ini untuk contoh lain.)
Lakukan beberapa bacaan dan cari pendekatan sebelumnya yang cocok dengan apa pun yang Anda inginkan perilaku algoritma pembelajaran Anda. Pada awalnya mungkin tampak menakutkan untuk mengatur semuanya untuk diri Anda sendiri alih-alih menggunakan perpustakaan ini atau itu, tetapi itu menjadi supercool ketika Anda sampai pada titik di mana Anda merasa bertanggung jawab atas semua proses pembelajaran model Anda.
Semoga berhasil!
sumber