Sunday, November 1, 2020

Membangun Sistem Rekomendasi dengan teknik Content-based Filtering

Di artikel ini kita akan belajar lebih detail lagi bagaimana membangun sistem rekomendasi menggunakan teknik Content-based filtering dengan menggunakan python. Pada artikel sebelumnya, telah kita pelajari apa itu sistem rekomendasi atau recommender system dan beberapa teknik  yang digunakannya.

Teknik Content-based filtering di Sistem rekomendasi

Content-based filtering(CB)

Ide dasar dari teknik CB adalah melakukan tag pada suatu produk dengan kata kunci tertentu, memahami apa yang pengguna sukai, mengambil data berdasar kata kunci di database dan memberikan rekomendasi kepada pengguna berdasarkan kesamaan atribut.

Sistem rekomendasi CB bekerja menggunakan data yang tersedia di pengguna, apakah itu data explisit(rating) atau implisit(klik pada link). Berdasarkan data tersebut, profile pengguna akan dibentuk, kemudian akan digunakan untuk memberikan produk rekomendasi. 

Sebagai contoh pada aplikasi Google Play, ketika seorang pengguna menginstall aplikasi tertentu(kategori Entertainment apps) yang diterbitkan oleh Science R Us, maka sistem akan menyimpan informasi tersebut dan selanjutnya sistem akan memberi rekomendasi berdasarkan kategori atau publisher yang sama. Pada teknik ini produk/item atribut yang dijadikan sebagai referensi kesamaan untuk hasil rekomendasi, model tidak memperhatikan informasi dari user lainnya.

TF-IDF dan Cosine similarity

Bagaimana kita dapat mengetahui kemiripan suatu produk/item? 

Secara umum, kemiripan dokumen didapatkan dari deskripsi suatu dokumen tersebut dengan konsep TF-IDF. TF-IDF merupakan sub-area dari Natural Language Processing(NLP) yang digunakan dalam information retrievel dengan tujuan untuk ekstrasi data. Sederhananya, bagaimana menghitung kemunculan setiap kata dalam dokumen dan memberi bobot pada setiap kata, dan menghitung skor untuk dokumen itu.

TF (term frequency) suatu kata adalah berapa kali kata itu muncul dalam dokumen.

TF(t) = (banyaknya term t muncul di dokumen) / (jumlah total terms di suatu dokumen)

IDF (inverse document frequency) dari sebuah kata adalah ukuran seberapa signifikan istilah tersebut di seluruh korpus.

IDF(t) = log_e(jumlah dari dokumen / jumlah dokumen dengan term t didalamnya)


Di python, kita dapat menggunakan library scikit-learn dengan pre-built function TF-IDF vectorizer yang akan menghitung score dari setiap deskrispi document.

Untuk menghitung kemiripan dari vector yang telah terbentuk, kita dapat menggunakan beberapa metode yaitu:

  1. Cosine similarity
  2. Euclidean distance
  3. Pearson's correlation
Setelah score kemiripan dari matrix dokumen terbentuk, kita bisa melakukan sorting berdasarkan score tersebut untuk dijadikan item rekomendasi.

Berikut ini contoh kode di jupyter notebook untuk domain data hotel description yang diperoleh dari challenge pada platform ecourse data science di DQLab dengan menggunakan TF-IDF dan cosine similarity untuk model sistem rekomendasinya.

Dari code python di jupyter notebook tersebut, hasil rekomendasi hotel beserta score-nya adalah seperti di bawah ini:

 
 ['Gunawangsa Manyar Hotel - 1.000000000000000',
 'Midtown Hotel Surabaya - 0.17992312860891296',
 'Aria Gajayana Hotel - 0.14461427726403756',
 'GP Mega Kuningan Hotel - 0.12367390420720603',
 'Le Polonia Medan managed by Topotels - 0.12049561758006845',
 'Swiss-Belinn Manyar Surabaya - 0.11731929279752672',
 'Hotel Santika Premiere Dyandra Hotel & Convention - 0.11442553936688896',
 'Best Western Plus Kemayoran Hotel - 0.10975989716138217',
 'Swiss-Belinn Malang - 0.09085670933358225',
 'Quest Hotel Darmo - Surabaya by ASTON - 0.08833161676427399',
 'Narita Classic Hotel Surabaya - 0.08833161676427399',
 'Premier Place Surabaya Airport - 0.08833161676427399',
 'Zoom Hotel Jemursari - 0.08833161676427399',
 'Cleo Hotel Basuki Rahmat - 0.0749975275102063',
 'Grand Darmo Suite by AMITHYA - 0.07174383261974006',
 'Varna Culture Hotel Surabaya - 0.06823993211613247']
 

Jika anda membutuhkan dataset hotel dan kode lengkap dalam file ipynb silahkan bisa download di github dengan alamat url berikut ini: https://github.com/ariflaksito/tfidf-cb-recsys

Referensi

  1. https://medium.com/@bindhubalu/content-based-recommender-system-4db1b3de03e7
  2. https://www.analyticsvidhya.com/blog/2015/08/beginners-guide-learn-content-based-recommender-systems/
  3. https://developers.google.com/machine-learning/recommendation/content-based/basics
  4. https://towardsdatascience.com/introduction-to-two-approaches-of-content-based-recommendation-system-fc797460c18c

28 comments:

  1. Replies
    1. Sudah saya kirim ke email ya, silahkan cek inbox

      Delete
  2. Saya membutuhkan dataset hotel dan kode lengkap. rip.wibowo@gmail.com. Trmksh

    ReplyDelete
  3. assalamulaikum wr wb mohon izin minta minta kode dan datasetnya. email saya : agungmuliawan96@gmail.com terima kasih

    ReplyDelete
    Replies
    1. Waalaikumsalam wr wb, sudah dikirim ke email ya, cek inbox.

      Delete
  4. Assalamualikum bang, boleh minta data st nya

    ReplyDelete
  5. Assalmualikum bang, boleh minta data set nya

    ReplyDelete
    Replies
    1. Waalaikumsalam, boleh bang.. silahkan bisa di share emailnya

      Delete
  6. Assalamualaikum Pak
    Minta izin minta dataset hotelnya

    ReplyDelete
    Replies
    1. Waalaikumsalam, silahkan di share emailnya

      Delete
    2. supikir180@gmail.com

      Delete
    3. Sudah saya kirim email ya, silahkan cek inbox

      Delete
  7. permisi kak, bisa minta dataset nya? niadyah1@gmail.com

    ReplyDelete
  8. selamat siang, saya tertarik dengan materi yang anda sampaikan, mohon saya dikirmi dataset dan codenya ya....
    terimakasih berbaginya...
    salam ke albertusdwiyoga@gmail.com

    ReplyDelete
    Replies
    1. Terima kasih, sudah saya kirim ke email, semoga bermanfaat

      Delete
  9. Assalamualaikum pak, boleh saya minta datasetnya? mashudirohmat.mr@gmail.com

    ReplyDelete
  10. selamat siang pak, boleh saya meminta datasetnya ? terima kasih
    dsindah87@gmail.com

    ReplyDelete
    Replies
    1. Ok mba, sudah saya kirim ke email anda

      Delete
  11. selamat malam pak boleh saya minta sourcecode nya?
    jika berkenan boleh dikirim ke email yessisf09@gmail.com
    Terima kasih sebelumnya

    ReplyDelete
  12. bagaimana mengecek akurasi dari pemodelannya

    ReplyDelete
    Replies
    1. Evaluasi content-based filtering bisa menggunakan NDCG. Cek di artikel berikut http://www.jurnal.iaii.or.id/index.php/RESTI/article/view/3909

      Delete
    2. code untuk mengetahui akurasinya maksudnya Pak

      Delete
    3. Tidak perlu menggukan code/script programming, pakai spreadsheet sudah cukup membantu dalam menghitung NDCG

      Delete
    4. Boleh minta contoh penghitungan NDCG di spreadsheet? bisa kirim ke email: jokoadenursiyono@gmail.com

      Delete
  13. Boleh minta code lengkapnya sekalian Pak, ke email: jokoadenursiyono@gmail.com

    ReplyDelete