Showing posts with label Research. Show all posts
Showing posts with label Research. Show all posts

Saturday, April 17, 2021

Sistem rekomendasi Non-personalized vs Personalized

Di akhir pekan bulan Ramadhan ini kembali lagi saya akan share tentang salah satu topik menarik di sistem rekomendasi yaitu tentang personalisasi. Secara umum sistem rekomendasi terbagi menjadi tipe personalized dan non-personalized.

Sedangkan menurut Kim Falk dalam bukunya "Practical Recommender System" (silahkan bisa tulis alamat email di comment jika ingin versi PDF nya 😉), menjelaskan terdapat 3 tipe level dalam personalisasi ini, yaitu sebagai berikut:

Kim Falk - Practical Recommender System

Mari kita bahas lebih mendalam satu-persatu

1. Non-personalized

Merupakan tipe personalisasi yang sederhana, dimana hasil generate dari teknik rekomendasi ini tidak membedakan antar pengguna. Semua pengguna akan mendapatkan item rekomendasi yang sama. Biasanya digunakan untuk menampilkan item favorit pada film, produk terlaris di e-commerce atau top hits music chart di sistem rekomendasi musik. 

Pada tipe ini kita tidak perlu mengetahui informasi khusus tentang preferensi pengguna. Jadi, kita tidak mengumpulkan data historis dari penilaian atau pembelian pengguna untuk menghasilkan rekomendasi. Pada e-commerce biasanya terdapat juga mode rekomendasi seperti ini "People who buy X also buy Y", misalkan, Orang yang membeli Smartphone juga membeli Phone Cover.

Rekomendasi Non-personalized pada Amazon


Umumnya teknik rekomendasi yang digunakan pada Non-pesonalized yaitu IMDb weight rating atau Content-based filtering

2. Semi/Segment-personalized

Berikutnya adalah personalisasi dengan segmentasi khusus, sebagai contoh pengguna dengan kesamaan usia, lokasi, distinct pattern seperti pengusaha atau pelajar, akan mendapatkan rekomendasi yang sama berdasarkan segment tersebut.

Contoh lainnya adalah seperti pada sistem rekomendasi music yang dijalankan pada smartphone, dimana aplikasi tersebut dapat mendeteksi apakah pengguna sedang bergerak(jogging, running, cycling atau sedang mengemudi) atau pengguna tidak beraktifitas, seperti menikmati kopi di cafe sambil mendengarkan musik, maka item rekomendasi yang dihasilkan akan berbeda dari kedua segment tersebut.

Sistem ini tidak menggunakan history dari data anda, tetapi karena anda berada pada group atau segment tertentu maka akan mendapatkan item rekomendasi yang sama pada setiap segment. Metode yang digunakan pada tipe ini masih sama seperti pada tipe sebelumnya yaitu Non-personalized, dimana dengan tambahan filter berdasarkan segment yang bisa diambil dari informasi pengguna.

3. Personalized

Personalized recommendation ini didasarkan pada data tentang pengguna yang menunjukkan bagaimana pengguna telah berinteraksi dengan sistem sebelumnya. Dengan kata lain, pada rekomendasi ini akan dihasilkan item yang khusus pada masing-masing pengguna.

Tipe rekomendasi ini paling banyak digunakan pada beberapa layanan populer seperti Amazon, Netflix, Youtube, dsb. Hal ini dirasa paling sesuai dengan filter yang dibutuhkan setiap pengguna sehingga sangat perlu di implementasikan pada layanan tersebut. Terdapat 2 cara untuk mendapatkan interaksi dari pengguna ke sistem yaitu dengan cara implisit(browsing history) dan explisit(rating).

Collaborative filtering paling banyak digunakan pada tipe ini, dimana preferensi pengguna akan di komparasi kemiripannya dengan pengguna lain kemudian prediksi rating akan diterapkan untuk mendapatkan item rekomendasi tersebut.

Personalized recommendation di Netflix

Kesimpulan

Jika kita ingin membuat personalized recommendation, maka perhatikan data-data history rating dari pengguna. Jika terdapat pengguna baru dan belum ada history ratingnya, akan menyebabkan hasil rekomendasi kurang sesuai (biasa disebut cold start problem). Sedangkan pada tipe non-personalized dan segment-personalized tidak membutuhkan data rating tersebut, karena menggunakan atribut dari setiap item product.

Sistem rekomendasi dengan tipe Non-personalized merupakan cara yang sederhana, lebih jauh lagi dalam bukunya, Francesco Ricci - Recommender System Handbook, mengatakan bahwa tipe ini efektif dalam beberapa situasi tetapi penelitian tentang Recommender system tidak ditujukan untuk tipe ini.

Tidak perlu dishare artikel ini jika dirasa tidak bermanfaat yaa.. 

Referensi

    1. Anna Makharadze, 1) Introduction to Recommendation Systems, https://medium.com/machine-learning-and-artificial-intelligence/1-introduction-to-recommendation-systems-for-beginners-b50c86f5fccf
    2. Kim Falk, Practical Recommender System
    3. Francesco Ricci, Recommender System Handbook

    Saturday, March 27, 2021

    Simple rekomendasi dengan Formula IMDb Weighted Rating

    Alhamdulillah setelah diskusi seputar penelitian bidang sistem rekomendasi dengan rekan-rekan di kampus, akhirnya ter inisialisasi group telegram untuk kolaborasi penelitian dan belajar bersama di bidang information retrieval dan sistem rekomendasi di url berikut: https://t.me/joinchat/CH_ihoMW7XdjZTA1

    Oiyaa, siapapun yang ingin belajar bersama boleh koq join di group tersebut, semoga saja bisa bermanfaat. Semoga kita bisa konsisten sharing-sharing setiap akhir pekan.. mohon doanya ya.

    Langsung aja degh, kita bahas kembali tentang metode yang sangat simple pada sistem rekomendasi yaitu dengan menggunakan rumus yang ada di IMDb (Internet Movie Database). Metode ini termasuk ke dalam konsep non-personalized, jadi setiap users/costumers akan mendapatkan suatu list item rekomendasi yang sama, tidak ada interferensi dari history atau kemiripan item atau pengguna.

    Ide untuk menggunakan metode rekomendasi ini adalah:

    1. Film-film yang lebih populer akan memiliki kemungkinan yang lebih besar untuk disukai juga oleh rata-rata penonton.
    2. Model ini tidak memberikan rekomendasi yang personal untuk setiap tipe user. 
    3. Implementasi model ini pun juga bisa dibilang cukup mudah, yang perlu kita lakukan hanyalah mengurutkan film-film tersebut berdasarkan rating dan popularitas dan menunjukkan film teratas dari list film tersebut.
    Berikut ini formula/rumus yang digunakan untuk mengenerate score pada IMDb Weighted rating:


    Dimana:
    v: jumlah votes untuk film tersebut
    m: jumlah minimum votes yang dibutuhkan supaya dapat masuk dalam chart
    R: rata-rata rating dari film tersebut
    C: rata-rata jumlah votes dari seluruh semesta film
    
    Formula ini digunakan IMDb untuk perhitungan Top Rated 250 titles, dengan perhitungan Bayesian estimate yang menghitung jumlah vote dari setiap judul, vote minimum untuk masuk ke dalam daftar, dan rata – rata vote dari keseluruhan judul.

    Berikut ini contoh kode di python (Jupyter notebook) untuk perhitungannya, disini saya masih menggunakan dataset seperti pada artikel sebelumnya untuk rekomendasi dengan metode content-based filtering yaitu di domain hotel.

    Code 


    Untuk kode lengkap dan dataset yang saya gunakan bisa langsung meluncuuur di github berikut ini: https://github.com/ariflaksito/imdb-wr-recsys.

    Untuk skripsi ataupun TA, metode ini terlalu sederhana untuk dijadikan topik/tema penelitian. Saran saya anda bisa menggabungkan dengan metode yang lainnya, misalnya di kombinasikan dengan content-based filtering atau dengan collaborative filtering.

    Referensi

    1. DQLab Academy, Building Recommedner system, https://academy.dqlab.id/main/package/practice/212
    2. IMDb, Help, https://help.imdb.com/article/imdb/track-movies-tv/ratings-faq/G67Y87TFYYP6TWAV?ref_=helpms_helpart_inline#calculatetop
     




    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

    Monday, October 5, 2020

    Menyusun latar belakang skripsi yang baik


    Latar belakang merupakan bagian pertama yang sangat penting dalam menyusun karya ilmiah/skripsi. Latar belakang yang baik dan menarik akan membuat orang yang mempelajari/membaca semakin mudah memahami maksud dari penelitian yang kita lakukan. Selain itu memudahkan juga anda(para mahasiswa) dalam menghadapi pertanyaan-pertanyaan dosen penguji di ujian akhir nantinya. 

    Syarat mutlak dan wajib untuk dapat menulis latar belakang yang baik dengan banyak membaca literature (paper dari penelitian sebelumnya). Dengan banyak membaca literature, maka akan semakin jelas arah penelitian yang akan kita lakukan dan menyusun latar belakang menjadi lebih mudah dan terarah.

    Berikut ini beberapa tahapan dalam menuliskan latar belakang:

    1. Tuliskan masalah yang dihadapi oleh objek penelitian. Atau masalah yang sudah pernah dihadapi peneliti sebelumnya dan belum ada solusinya. Untuk masalah-masalah di objek penelitian sampaikan secara detail bukan bersifat general.
    2. Sampaikan gambaran umum tentang metode/teknologi/solusi yang anda rencanakan untuk mengatasi masalah diatas. Gunakan beberapa referensi terkait metode/solusi yang akan anda gunakan tersebut.
    3. Jawab semua pertanyaan WHY di judul skripsi
    Dibawah ini adalah contoh penulisan latar belakang pada paper berjudul IMPLEMENTASI ALGORITMA REGRESI LINEAR BERGANDA UNTUK MEMPREDIKSI PRODUKSI PADI DI KABUPATEN BANTUL" oleh Ervan Triyanto yang dapat didownload pada url: http://jurnal.univrab.ac.id/index.php/rabit/article/view/666

    Sesuai pada poin ke-3 diatas, maka yang perlu dijawab pada pertanyaan WHY judul adalah:
    • Mengapa prediksi produksi padi?
    • Mengapa di kabupaten Bantul?
    • Mengapa menggunakan Algoritam Regresi linear berganda?
    Ketersediaan pangan yang cukup dan merata merupakan salah satu pilar perwujudan ketahanan pangan. Salah satu inti pokok dari ketahanan pangan adalah tersedianya makanan pokok bagi masyarakat. Salah satu makanan pokok yang dikonsumsi adalah nasi. Nasi adalah hasil dari pengolahan hasil pertanian yaitu padi. Padi (Oryza Sativa) adalah salah satu dari jenis tanaman pertanian yang bernilai ekonomis, di Bantul sendiri padi tergolong sebagai tanaman pangan pokok yang banyak dibudidayakan.
    Kabupaten Bantul sendiri merupakan salah satu kabupaten di Provinsi Daerah Istimewa Yogyakarta. Kabupaten Bantul memiliki luas wilayah 50.810 hektare, dengan pemanfaatan lahan pertanian berupa sawah sebesar 15.183 ha dan lahan bukan sawah sebesar 12.742 ha. Luas lahan sawah yang cukup luas ini dimanfaatkan untuk pertanian padi. Produksi padi di Bantul pada tahun 2014 sebesar 192.847 ton, pada tahun 2015 sebesar 199.141 ton, dan pada tahun 2016 sebesar 180.593 ton [1].  

    Paragraf 1 dan 2 diatas merupakan jawaban dari "Mengapa di kabupaten Bantul?" 

    Karena produksi padi di kabupaten Bantul setiap tahun selalu berubah – ubah, maka sebuah prediksi perlu dilakukan untuk mengetahui gambaran masa depan apakah hasil produksi padi di kabupaten Bantul akan mengalami kenaikan ataupun penurunan. Hasil prediksi ini dapat digunakan sebagai tolak ukur untuk mengetahui ketahanan pangan di kabupaten bantul khususnya padi. Penelitian ini memanfaatkan data panen atau produksi padi di dinas pertanian kabupaten Bantul sebagai data acuan untuk melakukan prediksi hasil panen padi di kabupaten Bantul. Selain itu prediksi ini juga mempertimbangkan beberapa faktor yang dapat mempengaruhi hasil prodiksi yang berupa luas lahan, curah hujan, serangan hama, hasil produksi sebelumnya, serta pengetahuan petani tentang penanaman padi. 

    Paragraf 3 adalah jawaban dari "Mengapa prediksi produksi padi?"

    Untuk melakukan prediksi tentunya harus menggunakan sebuah algoritma, salah satu algoritma untuk melakukan prediksi yaitu menggunakan Algoritma Regresi Linear Berganda. Algoritma Regresi Linear Berganda merupakan salah satu teknik analisis data yang sering digunakan untuk mengkaji hubungan antar beberapa variabel dan meramal satu variable [1]. Algoritma ini dapat dilakukan untuk memprediksi beberapa hal seperti prediksi kelayakan operasional mesin rivet produksi [2] atau prediksi konsumsi bahan bakar [3].

    Paragraf 4 diatas yaitu jawaban dari "Mengapa menggunakan Algoritam Regresi linear berganda?"

    Dari beberapa penjelasan diatas disimpulkan bahwa metode Regresi Linear Berganda dapat digunakan untuk meprediksi sesuatu di masa depan dengan menggunakan lebih dari 2 faktor atau variabel yang memiliki pengaruh terhadap apa yang akan diprediksi, oleh karena itu peneliti akan menggunakan metode ini untuk melakukan prediksi produksi padi di kabupaten Bantul.

    Paragraf ke 5 merupakan rangkuman dari penelitian yang akan dilakukan.

    Selain anda ikuti ketiga tips tersebut, selalu konsultasikan naskah anda dengan dosen pembimbing dan sekali lagi, banyak membaca paper yang berkaitan dengan area penelitian yang diambil. Untuk penelitian di level Skripsi (S1) sebaiknya membaca paper terkait minimal 30 paper. Semoga bermanfaat artikel penulisan latar belakang di skripsi berikut dan bagi para #PejuangSkripsi semakin menemukan titik terang dan terarah penelitian skripsi anda.