Sistem rekomendasi menyimpan log tentang rekomendasi apa yang telah dibuat untuk pengguna tertentu dan apakah pengguna itu menerima rekomendasi tersebut. Itu seperti
user_id item_id result
1 4 1
1 7 -1
5 19 1
5 80 1
di mana 1 berarti pengguna menerima rekomendasi sementara -1 berarti pengguna tidak menanggapi rekomendasi tersebut.
Pertanyaan: Jika saya akan membuat rekomendasi kepada sekelompok pengguna berdasarkan jenis log yang dijelaskan di atas, dan saya ingin memaksimalkan skor MAP @ 3, bagaimana saya harus berurusan dengan data implisit (1 atau -1)?
Ide saya adalah memperlakukan 1 dan -1 sebagai peringkat, dan memprediksi peringkat menggunakan algoritma tipe-mesin faktorisasi. Tapi ini sepertinya tidak benar, mengingat asimetri data implisit (-1 tidak berarti pengguna tidak menyukai rekomendasi).
Sunting 1 Mari kita pikirkan dalam konteks pendekatan faktorisasi matriks. Jika kami memperlakukan -1 dan 1 sebagai peringkat, akan ada beberapa masalah. Misalnya, pengguna 1 menyukai film A yang mendapat skor tinggi dalam satu faktor (misalnya memiliki musik latar yang agung) di ruang faktor laten. Sistem merekomendasikan film B yang juga mendapat skor tinggi dalam "musik latar belakang yang mulia", tetapi karena alasan tertentu pengguna 1 terlalu sibuk untuk melihat ke dalam rekomendasi, dan kami memiliki film rating -1. , maka sistem mungkin disarankan untuk merekomendasikan film dengan BGM mulia kepada pengguna 1 sementara pengguna 1 masih menyukai film dengan BGM mulia. Saya pikir situasi ini harus dihindari.
Jawaban:
Sistem Anda tidak hanya terlatih pada item yang direkomendasikan, bukan? jika demikian, Anda memiliki lingkaran umpan balik yang besar di sini. Anda ingin belajar dari semua klik / tampilan, saya harap.
Anda menyarankan bahwa tidak melihat item adalah sinyal negatif. Saya sangat menyarankan Anda tidak memperlakukannya seperti itu. Tidak berinteraksi dengan sesuatu hampir selalu diperlakukan sebagai tidak ada informasi. Jika Anda memiliki sinyal eksplisit yang menunjukkan ketidaksukaan, seperti suara turun (atau, mungkin menonton 10 detik video dan berhenti), mungkin itu valid.
Saya tidak akan menafsirkan input ini sebagai data seperti peringkat. (Meskipun dalam kasus Anda, Anda mungkin lolos begitu saja.) Alih-alih menganggapnya sebagai bobot, yang merupakan perawatan di kertas Hu Koren Volinsky pada ALS yang @Trey sebutkan dalam komentar. Ini memungkinkan Anda merekam kekuatan relatif dari interaksi positif / negatif.
Akhirnya saya akan mencatat bahwa makalah ini, meskipun sangat mungkin untuk apa yang Anda cari, tidak memberikan bobot negatif. Sangat mudah untuk memperluas dengan cara ini. Jika Anda sejauh itu, saya bisa mengarahkan Anda ke ekstensi yang mudah, yang sudah ada dalam dua implementasi yang saya tahu, di Spark dan Oryx .
sumber