Melanjutkan artikel sebelumnya, bagaimana menghitung similarity antara user di sistem rekomendasi collaborative filtering(CF) dengan menggunakan excel, pada artikel ini saya akan share menghitung similarity user dan prediksi rating dengan menggunakan bahasa python di jupyter notebook.
Prediksi rating |
Pada eksperimen ini akan digunakan sample data yang sama seperti pada artikel sebelumnya, lebih detail bisa anda simak disini: "Memahami Collaborative filtering di Sistem rekomendasi". Untuk pembahasan notebook tersebut saya bagi kedalam 2 bagian yaitu: User-based dan Item-based.
User-based CF Notebook
Pertama diperlukan membuat sample data dari library pandas yang kemudian kita susun menjadi matrix untuk user, item, dan rating. Pada matrix tersebut, nilai Nan/kosong di ubah menjadi rating dengan nilai 0.
Matrix user-based rating |
Selanjutnya kita akan buat nilai rerata dari tiap user dan membuat matrix baru dengan nilai rating diambil dari selisih rerata dan rating asli.
Untuk menghitung similarity, dapat menggunakan library dari sklearn yaitu cosine_similarity. Disini kita perlu membuat suatu fungsi dengan parameter yaitu matrix rating, user aktif (yang akan kita cari nilai rating kosongnya) dan nilai k (jumlah tetangga/neighbor).
Output dari fungsi diatas akan menghasilkan nilai similarity dari user: Arif ke user lainnya berdasar dari matrix yang kita inputkan di parameter.
(['Don', 'Bob'], [0.7071067811865476, 0.30151134457776363])
Langkah terakhir adalah kita buat fungsi predict( ) untuk menghitung prediksi nilai kosong dari matrix tersebut pada user Arif di item-4.
Output dari fungsi tersebut adalah prediksi rating pada kolom item-4 seperti berikut:
array([[4.42526623], [1.93594684], [3.42953847]])
Item-based CF Notebook
Sedikit berbeda dengan code sebelumnya, pada code item-based ini kita akan melakukan prediksi pada beberapa rating kosong. Mari kita bedah code tersebut dari awal. Dimulai dari membuat matrix rating data sample data seperti pada postingan ini: "Memahami Collaborative filtering di Sistem rekomendasi".
Matrix item-based rating |
Berikutnya kita bisa buat fungsi untuk menghitung similarity antara 2 item
Sedangkan fungsi predict( ) untuk item-based ini sedikit lebih complicated, berikut langkah-langkah penjelasannya:
- Perulangan pertama adalah menjadikan nilai setiap item menjadi list
- Perulangan ke-2 kita gunakan untuk memfilter rating 0 dari tiap user
- Didalam perulangan ke-2, terdapat perulangan lagi untuk menghitung nilai prediksi dengan membaca per-baris dari rating item.
Setelah kita running fungsi diatas, maka akan menghasilkan output dalam bentuk list beberapa rating prediksi dari rating 0 di matrix yang kita inputkan pada parameter.
[2.4899844588770113, 3.4286096052067627, 2.0]
Sebagai informasi, pada kedua kode diatas belum ada fungsi untuk mengenerate item rekomendasi, disini hanya fokus pada bagaimana menghitung nilai similarity dan prediksi saja. Jika anda ingin mendapatkan kode lengkap di file python notebook (*.ipynb), silahkan isi pada kolom komentar dengan email anda, inshaAllah akan saya share kode lengkap tersebut.
Referensi
- Gambar diambil dari https://www.formstack.com/resources/blog-new-rating-field
- User-based collaborative filtering, https://www.geeksforgeeks.org/user-based-collaborative-filtering/
- Item-based collaborative filtering, https://www.geeksforgeeks.org/item-to-item-based-collaborative-filtering/
min, tolong kirimin file notebooknya ke shiroikiri97@gmail.com , bisa gk?
ReplyDeleteSudah dikirim, silahkan cek inbox yaa
Deleteboleh minta juga file notebooknya min ke romyyansyah107@gmail.com
DeleteUpdate untuk yang metode hybrid juga pak Arif
ReplyDeleteMetode hybrid bisa disimak paper saya & mas Johari di link berikut: http://www.jurnal.iaii.or.id/index.php/RESTI/article/view/3486
Deleteijin minta file lengkapnya dong pak 🙏
ReplyDeleteapakah boleh pak? untuk dikirim ke email algamarfb@gmail.com 🙏
DeleteOk, sudah saya kirim ke email
Deleteterima kasih pak 🙏
Deleteizin untuk minta file lengkapnya untuk dijadikan referensi tugas akhir
ReplyDeletejika dibolehkan berikut saya lampirkan emailnya yessisf09@gmail.com
Terimakasih..
Ok, sudah saya kirim ke email
Deleteboleh minta file ipynb nya pak ke email caca.choco17@gmail.com, trimakasih sblmnya pak
ReplyDeleteboleh minta file pak, ke email andreask898@gmail.com, terimakasih
ReplyDeleteOk, sudah saya kirimkan ke email
Deletekalau masih berkanan format pythonya gan. renkjava@gmail.com
ReplyDeleteSaya izin minta file jupyter notebook nya, pak. Karena untuk membantu pengerjaan tesis saya. Terima kasih
ReplyDeleteSilahkan, bisa dituliskan alamat email nya ya
DeleteIjin minta file jupyter notebooknya ya pak ? untuk bahan jurnal saya saptasaputra@gmail.com
ReplyDeleteDone!, sudah dikirim
DeleteIjin minta file jupyter notebooknya untuk memepermudah pekerjaan saya ini email saya muhamadsairil2@gmail.com
ReplyDeletemantaf pak, terima kasih, mohon info code untuk yang terakhirnya, saya sudah mencoba menambahkan code dengan menganalsis code yanag bpk buat, belum kelatr juga, mohon bantuannya untuk *.ipynb tugasfikom2016@gmail.com
ReplyDeleteAssalamualaikum...Persimi pak...barangkali bisa dibantu terkait file ipynb nya dan link jurnal bapak terkait hal tersebut..saya sedang mengerjakan tugas akhir. email saya: aamsaifudin@gmail.com. Terimakasih bapak..sehat selalu
ReplyDeleteWaalaikumsalam wr wb, file notebook dan artikel jurnal sudah saya lampirkan di email yaa
Deletemau tanya kalau buat sistem rekomendasi produk gimana ya kalau pake collaborative filtering
ReplyDeletePastikan untuk menyiapkan data transaksi users - items (Bisa data transaksi pembelian atau data rating users ke items). Selanjutnya anda bisa membuat sistem rekomendasi berbasis CF ini. Best!
DeleteSelamat malam pak, saya ijin meminta file notebooknya. Terimakasih banyak.. berikut emailnya : futoh988@gmail.com
Delete