Pada kesempatan kali ini saya akan mencoba membagikan bagaimana cara untuk membuat sistem rekomendasi user to user collaborative filtering. data yang akan saya pakai bersal dari
https://www.kaggle.com/rounakbanik/the-movies-dataset?select=ratings.csv
Sebelumnya saya pernah menjelaskan tentang sistem rekomendasi ini silahkan kalian pahami teorinya disini
Membuat Sistem Rekomendasi dengan Python — Part 1
Kita sudah tidak asing lagi dengan system rekomendasi, sistem rekomendasi sudah diterapkan dalam kehidupan kita sehari…
1. Load data
pada contoh kali ini saya menggunakan pandas sebagai library yang akan mengelola datanya
import pandas as pd
import numpy as np
# membaca data
rating = pd.read_csv("/content/ratings_small.csv")
rating.head()
data diatas akan terlihat seperti ini
data yang akan kita pakai adalah userId, movieId dan juga rating
2. Memilih user yang akan dibandingkan
didalam data yang kita punya terdapat banyak sekali user jadi kita harus memilih salah satu user anggap saja seperti ini, kita ingin mendapatkan rekomendasi film berdasarkan history film yang pernah di tonton orang lain maka dari itu kita harus mengetahui id kita
memilih user yang akan diberikan rekomendasi berdasarkan history user lain bisa dilakukan sebagai berikut
# mengurutkan id user dari yang terkecil hingga terbesar, kemudian menghilangkan duplikat userId
list_user = np.sort(rating.userId.unique()).tolist()
# mendapatkan posisi userId 80
user = list_user.index(80)
print("user yang akan dibandingkan berada pada index ke %d"%(user))
# hasil user yang akan dibandingkan berada pada index ke 79
3. Membuat Pivot Table
apa itu pivot table ?, pivot table akan terlihat seperti gambar dibawah ini
bisa kita lihat diatas, movieId akan menjadi kolom yang nilainya diurutkan dari yang terkecil hingga terbesar kemudian data yang duplikat dihilangkan
selain itu userId menjadi baris dari table tersebut, dan yang terakhir adalah values, values ini merupakan rating yang diberikan oleh user
Penjelasan Pivot Table
seperti yang kita lihat diatas terdapat kolom movieId dan baris userId, cara membacanya adalah seperti ini apakah user dengan id 1 telah menonton film dengan id 1 ? jika sudah maka rating tersebut akan bernilai lebih dari 0 ( rating > 0 )
cara membuat pivot table adalah sebagai berikut\
table = pd.pivot_table(rating, index='userId', columns='movieId', values='rating').fillna(0)
table.head()
4. Menghitung tingkat kesamaan tingkah laku user
Setelah kita mengetahui userid yang ingin kita berikan rekomendasi, maka langkah selanjutnya adalah menghitung tingkat kesamaan tingkah laku antara user A dengan user N
A = user yang kita pilih
N = semua user kecuali user A
untuk menghitung tingkat kesamaan saya akan menggunakan rumus cosine similarity
jika menggunakan python maka rumus tersebut dapat kita import dari library scikit-learn, perhatikan contoh berikut ini
from sklearn.metrics.pairwise import cosine_similarity
similarity = []
# menghitung kesamaan antara user A dengan user N
for r in table.values:
calc = cosine_similarity(table.values[user].reshape(1,-1), r.reshape(1, -1))[0][0]
similarity.append(calc)
# copy similary
# menurutkan tingkat kesamaan dari yang terbesar hingga terkecil
copy_similarity = [s for s in similarity]
copy_similarity.sort(reverse=True)
# menambil tingkat kesamaan dari index ke 1 sampai n, karena index 0 adalah tinggkat kesamaan id user A
copy_similarity = copy_similarity[2:len(similarity)]
# similar user
# mengambil index user yang memiliki tingkat kesamaan tertinggi
neirest_user = list_user[similarity.index(max(copy_similarity))]
# nilai tingkat kesamaan
similar_score = max(copy_similarity)
# cetak hasil
print("User dengan index ke {} mirip dengan user dengan index ke {}".format(user, neirest_user))
print("Tingkat sesamaan : {}".format(similar_score))
6. Mendapatkan Movie Id berdasarkan User Id
setelah kita mendapatkan user yang mirip dengan tingkah laku user ke A maka langkah selanjutnya adalah mengambil id film apa saja yang pernah dia tonton caranya adalah sebagai berikut
movieId = rating[rating['userId'] == list_user[neirest_user]]['movieId'].tolist()
print(movieId[0:10])
7. Mendapatkan Film berdasarkan MovieId
setelah mengetahui id film nya, maka selanjutnya adalah mengambil data film seperti: judul, overview dan lain sebagainya. buka lah file yang bernama movies_metadata.csv
# membaca data film
movie = pd.read_csv("/content/movies_metadata.csv")
# mendapatkan judul film berdasarkan movieId
for mid in movieId:
judul = movie[movie['id'] == str(mid)]['original_title'].values
print(judul[0])
demikianlah cara untuk membuat sistem rekomendasi user to user collaborative filtering
0 Comments