Friday, August 20, 2021

Menghitung Similarity dan Prediksi rating pada Collaborative filtering menggunakan Python

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:
  1. Perulangan pertama adalah menjadikan nilai setiap item menjadi list
  2. Perulangan ke-2 kita gunakan untuk memfilter rating 0 dari tiap user
  3. 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

  1. Gambar diambil dari https://www.formstack.com/resources/blog-new-rating-field
  2. User-based collaborative filtering, https://www.geeksforgeeks.org/user-based-collaborative-filtering/
  3. Item-based collaborative filtering, https://www.geeksforgeeks.org/item-to-item-based-collaborative-filtering/

23 comments:

  1. min, tolong kirimin file notebooknya ke shiroikiri97@gmail.com , bisa gk?

    ReplyDelete
    Replies
    1. Sudah dikirim, silahkan cek inbox yaa

      Delete
    2. boleh minta juga file notebooknya min ke romyyansyah107@gmail.com

      Delete
  2. Update untuk yang metode hybrid juga pak Arif

    ReplyDelete
    Replies
    1. Metode hybrid bisa disimak paper saya & mas Johari di link berikut: http://www.jurnal.iaii.or.id/index.php/RESTI/article/view/3486

      Delete
  3. ijin minta file lengkapnya dong pak 🙏

    ReplyDelete
    Replies
    1. apakah boleh pak? untuk dikirim ke email algamarfb@gmail.com 🙏

      Delete
    2. Ok, sudah saya kirim ke email

      Delete
    3. terima kasih pak 🙏

      Delete
  4. izin untuk minta file lengkapnya untuk dijadikan referensi tugas akhir
    jika dibolehkan berikut saya lampirkan emailnya yessisf09@gmail.com
    Terimakasih..

    ReplyDelete
  5. boleh minta file ipynb nya pak ke email caca.choco17@gmail.com, trimakasih sblmnya pak

    ReplyDelete
  6. boleh minta file pak, ke email andreask898@gmail.com, terimakasih

    ReplyDelete
  7. kalau masih berkanan format pythonya gan. renkjava@gmail.com

    ReplyDelete
  8. Saya izin minta file jupyter notebook nya, pak. Karena untuk membantu pengerjaan tesis saya. Terima kasih

    ReplyDelete
    Replies
    1. Silahkan, bisa dituliskan alamat email nya ya

      Delete
  9. Ijin minta file jupyter notebooknya ya pak ? untuk bahan jurnal saya saptasaputra@gmail.com

    ReplyDelete
  10. Ijin minta file jupyter notebooknya untuk memepermudah pekerjaan saya ini email saya muhamadsairil2@gmail.com

    ReplyDelete
  11. mantaf 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

    ReplyDelete
  12. Assalamualaikum...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

    ReplyDelete
    Replies
    1. Waalaikumsalam wr wb, file notebook dan artikel jurnal sudah saya lampirkan di email yaa

      Delete