Advertise

Membuat Sistem Rekomendasi Collaborative Filtering —Part 3

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

  1. Part 1 — Teori dan penjelasan sistem rekomendasi
  2. Part2 — Sistem rekomendasi Content Based Filtering

Post a Comment

0 Comments