Advertise

Membuat Sistem Rekomendasi Content Based Filtering dengan Python — Part 2

 Sebelumnya saya telah menjelaskan teori tentang sistem rekomendasi yang akan kita buat, jika belum membaca tulisan saya di part pertama silahkan baca di tautan berikut ini

pada kesempatan kali ini saya akan membuat sistem rekomendasi berdasarkan tingkat kesamaan data atau biasa disebut content based filtering, data yang akan saya gunakan berasal dari tautan berikut ini

baiklah langsung saja kita praktekan

1. Muat Dataset

untuk membaca data csv tersebut saya menggunakan library pandas

import pandas as pd
data = pd.read_csv("movies_metadata.csv")

2. Memilih data yang diperlukan

disini saya akan menggunakan overview atau sinopsis film untuk mencoba membandingkan dengan film yang lain dan dihitung tingkat kemiripannya. jadi data yang akan saya pilih adalah overview dan title

film = data[["original_title", "overview"]]
film.head()

3. Menghilangkan outlier dan stopwords

outlier di dalam data text berupa kumpulan punctuation seperti : !@#$^&* karakter tersebut harus dihilangkan karena tidak memiliki makna yang begitu berarti, kemudian kita harus menghilangkan stopwords seperti : yang, dia, demikian, ingin, juga dll. untuk membersihkan data kita dari hal tersebut disini saya akan menggunakan library yang bernama mern

pertama install library tersebut melalui perintah berikut

# pip3 install mernfrom mern import TextOutlier
outlier_remover = TextOutlier()
# punctuation
outlier_punctuation=outlier_remover.remove_punctuation(film['overview'].values)
# stopwordsclean_data =
outlier_remover.remove_stopwords(outlier_punctuation, "english")

untuk menghilangkan stopwords, fungsi remove_stopwords memerlukan bahasa, masukan bahasa sesuai dengan bahasa yang digunakan pada dataset kalian. karena dataset saya berbahasa inggris jadi saya memasukan english

4. Menghitung bobot data

untuk menghitung bobot saya akan menggunakan metode TF-IDF, seperti yang saya jelaskan di artikel sebelumnya

# menghitung bobot data from sklearn.feature_extraction.text import TfidfVectorizer 
vector = TfidfVectorizer()
transformed = vector.fit_transform(clean_data).toarray()
# memilih index film berdasarkan judultitle = data['original_title'].str.lower().tolist()

jika kita lihat maka penampakan datanya akan terlihat seperti ini

5. Menghitung tingkat kesamaan film

data yang telah kita transformasikan dengan metode TF-IDF tadi akan kita gunakan untuk menghitung tingkat kesamaan antara film A dengan film yang lainnya. untuk menghitung tingkat kesamaan ini saya akan menggunakan rumus cosine similarity

sebelum kita menghitung tingakat kesamaannya kita perlu memilih film yang mana yang akan kita bandingkan, disini saya akan mengambil index array berdasarkan title dari film tersebut, dan disini saya akan memilih film toy story

misalnya seperti ini

nama = ['alex', 'george', 'david']
print(nama.index('alex')
# hasilnya adalah 0, karena alex berada di index ke 0

mencari index array berdasarkan title

# memilih index film berdasarkan judultitle = data['original_title'].str.lower().tolist() 
input_title = "toy story"
index_film = title.index(input_title)
print("index film %d"%(index_film))
# menghitung kesamaanfrom sklearn.metrics.pairwise import cosine_similaritysimilarity = []for tfidf in transformed:
calculate = cosine_similarity(transformed[index_film].reshape(1,-1), tfidf.reshape(1,-1))
similarity.append(calculate)
###
copy_similarity = [i for i in similarity]copy_similarity.sort(reverse=True)

6. Menampilkan hasil rekomendasi

pada kode diatas terlihat bahwa terdapat variable similarity, dan copy_similarity. variable similarity saya gunakan untuk menampung tingkat kesamaan data tanpa diurutkan, sedangkan copy_similarity saya gunakan untuk mengurutkan tingkat kesamaan dari yang terbesar sampai ke terkecil.

dari hasil perhitungan diatas berikut adalalah rekomendasi film yang dihasilkan

kode utuh

import pands as pd

data = pd.read_csv("movies_metadata")
data.head()

# memilih kolom yang diperlukan
film = data[["original_title", "overview"]]
film.head()

# menghilangkan outlier dan stopwords

from mern import TextOutlier
outlier_remover = TextOutlier()

# punctuation
outlier_punctuation = outlier_remover.remove_punctuation(film['overview'].values)

# stopwords
clean_data = outlier_remover.remove_stopwords(outlier_punctuation, "english")

# menghitung bobot data

from sklearn.feature_extraction.text import TfidfVectorizer

vector = TfidfVectorizer()
transformed = vector.fit_transform(clean_data).toarray()

# memilih index film berdasarkan judul
title = data['original_title'].str.lower().tolist()

input_title = "toy story"
index_film = title.index(input_title)
print("index film %d"%(index_film))

# menghitung tingkat kemiripan dengan menggunakan cosine similarity
from sklearn.metrics.pairwise import cosine_similarity
similarity = []

for tfidf in transformed:
    calculate = cosine_similarity(transformed[index_film].reshape(1,-1), tfidf.reshape(1,-1))
    similarity.append(calculate)

copy_similarity = [i for i in similarity]
copy_similarity.sort(reverse=True)

# result
similar_data = []

for i in copy_similarity:
    similar_data.append(title[similarity.index(i)])
    
# menampilkan 10 film dari yang paling mirip
for film_rekomendasi in similar_data[0:10]:
    print(film_rekomendasi)
itulah cara membuat sistem rekomendasi dengan menggunakan metode content based filtering, pada part berikutnya saya akan menjelaskan bagaimana cara membuat sistem rekomendasi dengan metode user to user collaborative filtering.

Post a Comment

0 Comments