Bobot lebih banyak data terbaru dalam model Random Forest

14

Saya sedang melatih model klasifikasi dengan Random Forest untuk membedakan antara 6 kategori. Data transaksional saya memiliki sekitar 60k + pengamatan dan 35 variabel. Berikut adalah contoh bagaimana kira-kira terlihat.

 _________________________________________________
|user_id|acquisition_date|x_var_1|x_var_2| y_vay  |
|-------|----------------|-------|-------|--------|
|111    | 2013-04-01     | 12    | US    | group1 |
|222    | 2013-04-12     | 6     | PNG   | group1 |
|333    | 2013-05-05     | 30    | DE    | group2 |
|444    | 2013-05-10     | 78    | US    | group3 |
|555    | 2013-06-15     | 15    | BR    | group1 |
|666    | 2013-06-15     | 237   | FR    | group6 |

Setelah model dibuat, saya ingin membuat skor pengamatan dari beberapa minggu terakhir. Karena ada perubahan pada sistem, pengamatan yang lebih baru akan lebih mirip dengan lingkungan pengamatan saat ini yang ingin saya prediksi. Oleh karena itu, saya ingin membuat variabel bobot sehingga Hutan Acak akan lebih mementingkan pengamatan baru-baru ini.

Apakah ada yang tahu jika paket randomForest di R mampu menangani bobot per pengamatan?

Bisakah Anda menyarankan metode apa yang baik untuk membuat variabel bobot? Misalnya, karena data saya dari tahun 2013, saya berpikir bahwa saya dapat mengambil angka bulan dari tanggal sebagai berat. Adakah yang melihat masalah dengan metode ini?

Banyak terima kasih sebelumnya!

Nikolay Nenov
sumber
Anda mungkin mempertimbangkan memposting pertanyaan di stack overflow. Mereka akan membantu Anda lebih banyak dengan masalah implementasi. Fokus situs ini lebih berbasis teori.
Alex Williams
Saya mungkin tidak cukup jelas dalam tulisan saya, tetapi pertanyaan saya tidak mengenai masalah implementasi. Sebagai contoh, di bagian di mana saya bertanya tentang membuat variabel bobot, saya tidak bermaksud menanyakan perintah apa di R yang dapat membantu saya melakukan itu. Aku hanya bertanya-tanya apakah dengan itu aku akan melanggar asumsi hutan acak.
Nikolay Nenov
1
Jawabannya adalah tidak, saya percaya. Anda dapat menetapkan bobot untuk grup yang berbeda seperti yang saya jelaskan dalam jawaban saya di bawah ini. Saya mengerti ini bukan apa yang Anda minati, tetapi ini adalah ide yang serupa. Anda dapat mencoba menggunakan pengamatan rangkap seperti yang saya sarankan.
Alex Williams

Jawaban:

5

The rangerpaket di R ( pdf ), yang relatif baru, akan melakukan hal ini. Implementasi ranger hutan acak memiliki case.weightsargumen yang mengambil vektor dengan bobot kasus / pengamatan individu.

GrantRWHumphries
sumber
Rapi! Jahitannya seperti solusi yang saya cari. Apakah Anda memiliki tautan ke detail tentang bagaimana probabilitas dihitung dengan case.weights?
Nikolay Nenov
1
Saya tidak 100% yakin bagaimana mereka menghitung probabilitas - tetapi saya pikir, jika Anda ingin memulai, lihat makalah ini: Malley, JD, Kruppa, J., Dasgupta, A., Malley, KG, & Ziegler , A. (2012). Mesin probabilitas: estimasi probabilitas yang konsisten menggunakan mesin pembelajaran nonparametrik. Metode Inf Med 51: 74-81. dx.doi.org/10.3414/ME00-01-0052
GrantRWHumphries
7

Anda dapat menguji ulang data agar lebih mewakili titik data yang lebih baru. Rf melibatkan langkah sampel-dengan-replacment dan "mengantongi kurang lebih seimbang" untuk kelas yang tidak seimbang menggunakan pengambilan sampel untuk mewakili kelas minoritas secara berlebihan dan menghasilkan hasil yang baik atau lebih baik daripada kelas hutan acak berbobot kelas dalam pengalaman saya.

Anda bisa melakukan resample pada tingkat pembuatan matrik pelatihan ( referensi ) Anda alih-alih selama mengantongi agar implementasi mudah meskipun saya menyarankan melakukan banyak pengulangan dalam kasus itu.

Secara internal beberapa implementasi hutan acak termasuk scikit-belajar sebenarnya menggunakan bobot sampel untuk melacak berapa kali setiap sampel ada di dalam tas dan itu harus setara dengan oversampling di tingkat bagging dan hampir oversampling di tingkat pelatihan dalam validasi silang.

Ryan Bressler
sumber
4

Anda harus melihat ke dalam parameter "classwt". Ini sepertinya bukan apa yang secara langsung Anda minati, tetapi ini mungkin memberi Anda perasaan tentang apa yang ingin Anda lakukan.

Lihat di sini: Stack Exchange pertanyaan # 1

Dan di sini: Pertanyaan Stack Exchange # 2

Artikel tentang hutan acak tertimbang: PDF

Ide dasarnya adalah kelas bobot sedemikian sehingga kelompok / klasifikasi yang jarang diamati lebih cenderung dipilih dalam sampel bootstrap Anda. Ini berguna untuk data yang tidak seimbang (ketika probabilitas sebelumnya dari kelas yang berbeda sangat berbeda).

Sepertinya saya ingin melakukan sesuatu yang serupa, tetapi untuk acara terkini (bukan untuk grup / klasifikasi tertentu). Cara sederhana untuk melakukan ini adalah dengan membuat pengamatan duplikat (yaitu dimasukkan ke dalam, baris identik berulang) untuk pengamatan yang lebih baru. Namun, ini berpotensi menjadi tidak efisien. Saya tidak tahu cara untuk secara langsung memberi bobot pada setiap pengamatan dalam R, tetapi saya mungkin tidak menyadarinya.

Anda dapat mencoba mencari-cari implementasi alternatif, misalnya dalam C - paling buruk, ini dapat dikustomisasi dengan sedikit pengkodean.

Alex Williams
sumber
1
Terima kasih banyak untuk tautannya, Alex. Makalah ini memberikan contoh kasus yang baik di mana Anda ingin mempertimbangkan pengklasifikasi Anda. Saya khawatir ini tidak bekerja untuk saya, karena seseorang tidak dapat menggunakan parameter "classwt" untuk apa pun selain memberi bobot pada pengklasifikasi - yaitu Anda membutuhkan satu berat per kelas, jika tidak, randomForest akan mengembalikan kesalahan.
Nikolay Nenov
1
Ya saya tidak berpikir Anda bisa menggunakan "classwt" secara langsung. Anda ingin beberapa parameter seperti "bobot observasi" tetapi saya tidak berpikir itu ada.
Alex Williams