Sistem rekomendasi telah menjadi bagian penting dari berbagai layanan digital, seperti e-commerce, platform streaming, dan media sosial. Dalam konteks platform streaming film, sistem rekomendasi memainkan peran penting dalam meningkatkan pengalaman pengguna dengan menyarankan film yang sesuai dengan preferensi individu. Dua metode utama yang digunakan dalam sistem rekomendasi adalah content-based filtering dan collaborative filtering 1.
Content-based filtering bekerja dengan menganalisis karakteristik atau fitur dari konten yang telah dinikmati pengguna sebelumnya, lalu merekomendasikan konten yang memiliki karakteristik serupa. Di sisi lain, collaborative filtering berfokus pada perilaku dan preferensi pengguna lain yang memiliki pola serupa, menggunakan pendekatan seperti Singular Value Decomposition (SVD) untuk memprediksi preferensi 2.
Proyek ini menggabungkan kedua metode tersebut untuk menciptakan sistem rekomendasi film yang lebih akurat dan personal. Dengan menggabungkan content-based dan collaborative filtering, diharapkan dapat mengatasi kelemahan dari masing-masing metode. Misalnya, content-based filtering sering kali terbatas pada preferensi pengguna yang sudah ada, sementara collaborative filtering dapat menghasilkan rekomendasi yang lebih inovatif namun mungkin rentan terhadap masalah cold start.
Sistem rekomendasi yang akurat sangat penting dalam meningkatkan kepuasan pengguna dan menjaga keterlibatan pengguna dalam platform streaming. Dalam dunia di mana jumlah konten digital yang tersedia terus bertambah secara eksponensial, pengguna sering kali merasa kewalahan dengan banyaknya pilihan yang ada. Oleh karena itu, sistem rekomendasi yang dapat menyaring dan menyajikan konten yang relevan menjadi sangat berharga.
Proyek ini penting untuk diselesaikan karena akan memungkinkan platform streaming untuk menyediakan rekomendasi film yang lebih tepat sasaran, meningkatkan retensi pengguna, dan pada akhirnya, mengoptimalkan pendapatan platform tersebut. Selain itu, dengan memanfaatkan metode gabungan, proyek ini berpotensi untuk memberikan wawasan baru dalam pengembangan sistem rekomendasi yang lebih canggih di masa depan.
Membangun sistem rekomendasi film berbasis konten yang dapat memberikan rekomendasi yang relevan berdasarkan kesamaan konten film yang telah ditonton pengguna. Tujuan ini akan dicapai dengan menggunakan metode content-based filtering yang menganalisis kesamaan fitur seperti genre dan tag antara film.
Menggunakan metode collaborative filtering untuk meningkatkan personalisasi rekomendasi dengan menganalisis pola interaksi pengguna terhadap berbagai film. Sistem ini akan memanfaatkan pendekatan Singular Value Decomposition (SVD) untuk mengidentifikasi preferensi implisit pengguna dan memberikan rekomendasi yang lebih akurat.
Content-Based Filtering:
Pendekatan ini menggunakan informasi yang terdapat dalam deskripsi film, seperti genre dan tag, untuk menemukan film yang mirip dengan film yang sudah ditonton oleh pengguna. Algoritma ini bekerja dengan menganalisis kesamaan antara fitur-fitur tersebut menggunakan metode cosine similarity
untuk menghasilkan rekomendasi yang relevan.
Collaborative Filtering
Pendekatan ini menggunakan pola interaksi pengguna dengan berbagai film untuk memberikan rekomendasi. Dalam proyek ini, metode Singular Value Decomposition (SVD)
digunakan untuk mendeteksi pola dalam preferensi pengguna, yang kemudian digunakan untuk merekomendasikan film.
Dataset yang digunakan dalam proyek ini adalah MovieLens 20M dari Kaggle, yang terdiri dari 6 file CSV yang mencakup informasi mengenai film, tag, rating, dan relevansi tag. Dataset ini sangat kaya dengan sekitar 20 juta interaksi pengguna terhadap lebih dari 27.000 film, memberikan landasan yang kuat untuk mengembangkan sistem rekomendasi.
Data ini menggambarkan aktivitas pengguna yang memberikan rating dan tag pada film, dengan total 20 juta rating dan lebih dari 465.000 tag yang diterapkan. Dataset ini mencakup kontribusi dari lebih dari 138.000 pengguna yang aktif antara 9 Januari 1995 hingga 31 Maret 2015. Pengguna dalam dataset ini dipilih secara acak, dan setiap pengguna telah menilai setidaknya 20 film, memberikan wawasan yang mendalam tentang preferensi film mereka. Berdasarkan informasi pada halaman dataset ini terakhir diperbarui pada 17 Oktober 2016.
Namun, pada proyek ini hanya 3 file dataset yang akan digunakan, yaitu:
1. movie.csv:
# | Column | Non-Null Count | Dtype | Description |
---|---|---|---|---|
0 | movieId | 27278 non-null | int64 | ID film. |
1 | title | 27278 non-null | object | Judul film. |
2 | genres | 27278 non-null | object | Genre film. |
Memiliki 3 kolom dan data sebanyak 27.278 untuk masing-masing kolom. Tidak terdapat missing value dan duplicate.
2. tag.csv:
# | Column | Non-Null Count | Dtype | Description |
---|---|---|---|---|
0 | userId | 465564 non-null | int64 | ID pengguna yang memberikan tag. |
1 | movieId | 465564 non-null | int64 | ID film yang ditag oleh pengguna. |
2 | tag | 465548 non-null | object | Tag yang diberikan oleh pengguna. |
3 | timestamp | 465564 non-null | object | Waktu saat tag diberikan. |
Memiliki 4 kolom dan data sebanyak 465.564 baris. Tidak ditemukan data duplicate, namun ditemukan adanya missing value pada data kolom tag sebanyak 16 baris data.
3. rating.csv: | # | Column | Non-Null Count |Dtype | Description | | — | ——— | ————– |——- | ———————————————— | | 0 | userId | 20000263 non-null |int64 | ID pengguna yang memberikan rating. | | 1 | movieId | 20000263 non-null |int64 | ID film yang diberi rating. | | 2 | rating | 20000263 non-null |float64 | Nilai rating yang diberikan pengguna (skala 0.5 - 5.0). | | 3 | timestamp | 20000263 non-null |object | Waktu saat rating diberikan. |
Memiliki 4 kolom dan data sebanyak 20.000.263 baris untuk masing-masing kolom. Tidak terdapat missing value dan duplicate.
Genres Distribution
Produksi film dengan genres drama merupakan genre film terbanyak dengan sekitar 1300 film dan diikuti comedy di posisi kedua sebanyak 8000 lebih film. Genre Drama dan Comedy memiliki perbedaan yang cukup signifikan dibandingkan dengan genre lainnya.
Ratings Distribution
Kebanyakan pengguna memberikan rating dengan rentang 3 hingga 4 star. Mengindikasikan bahwa secara keseluruhan kualitas film sesuai dengan yang diharapkan oleh pengguna (konsumen).
Trend Number of Ratings Based on Time
Pemberian rating terbanyak terjadi di tahun 2000 mencapai lebih dari 400.000 rating. Seiring bejalannya waktu mulai dari tahun 2005 pengguna mulai mengalami penurunan dalam pemberian rating.
Normalization
Membuat fungsi bernama normalize_text
, yang berfungsi untuk:
text = text.replace('|', ' ').lower()
Menggunakan metode replace() untuk mengganti karakter tertentu dengan spasi dan lower() untuk mengubah semua teks menjadi huruf kecil.
text = text.translate(str.maketrans('', '', string.punctuation))
Menggunakan pustaka string dari Python untuk mengidentifikasi dan menghapus semua tanda baca dari teks.
text = ' '.join(text.split())
Menggunakan split() dan join() untuk menghapus spasi yang berlebih.
text = ' '.join([lemmatizer.lemmatize(word) for word in text.split()])
Menggunakan WordNetLemmatizer dari pustaka nltk untuk mengembalikan kata ke bentuk dasarnya.
text = ' '.join([word for word in text.split() if word not in stop_words])
Menggunakan daftar stopwords dari nltk untuk menghapus kata-kata umum yang tidak memberikan banyak informasi.
text = text.replace("n't", " not").replace("'re", " are")
Mengganti singkatan umum dalam teks seperti “n’t” menjadi “not”.
Normalisasi dilakukan agar data teks terhindar dari karakter dan kata-kata yang tidak diperlukan untuk meningkatkan akurasi dan efisiensi dalam proses analisis serta pemodelan selanjutnya.
Setelah dilakukan pengecekan tidak ditemukan data yang missing value ataupun duplikat. Sehingga tidak diperlukan penghapusan data missing value dan duplikat. Alasan mengapa data yang tidak lengkap atau duplikat dapat menyebabkan model bias harus dihapus. Karena untuk memastikan model lebih stabil dan akurat dengan data yang bersih dan representatif.
combined_clean
menjadi vektor numerik:
tfidf = TfidfVectorizer()
tfidf_matrix = tfidf.fit_transform(con_bf['combined_clean'])
Content-Based Filtering:
Content-based filtering bekerja dengan menganalisis fitur-fitur yang melekat pada film, yaitu genre dan tag untuk memberikan rekomendasi. Misalnya, jika pengguna menyukai film dengan genre “Action” dan tag “Hero,” sistem akan mencari film lain yang memiliki kesamaan dalam genre dan tag tersebut.
Implementasi model ini menggunakan data gabungan dari file movie.csv
dan tag.csv
. Menggunakan TF-IDF Vectorizer untuk menghilangkan mengubah deskripsi teks pada kolom combined_features
menjadi vektor numerik pada proses sebelummnnya. Kesamaan antar-film dihitung menggunakan teknik cosine similarity
, di mana film yang memiliki nilai kesamaan tertinggi dengan film yang telah ditonton pengguna akan direkomendasikan.
Model ini menghasilkan daftar Top-N film yang dapat diatur sesuai dengan kebutuhan rekomendasikan untuk pengguna berdasarkan kesamaan konten. Sebagai contoh, jika seorang pengguna baru saja menonton “The Dark Knight” sistem mungkin merekomendasikan “Justice League” atau “LEGO Batman” karena kesamaan dalam genre dan tag.
Lihat hasil yang direkomendasikan berikut:
Kelebihan Cosine Similarity:
Kekurangan Cosine Similarity:
Collaborative Filtering
Collaborative filtering menggunakan pola interaksi pengguna lain yang memiliki preferensi serupa untuk memberikan rekomendasi. Alih-alih hanya mengandalkan kesamaan konten, pendekatan ini mencari kesamaan dalam perilaku pengguna, seperti film yang mereka beri rating tinggi.
Implementasi pendekatan ini menggunakan data gabungan dari movie.csv
dan rating.csv
. Model Singular Value Decomposition (SVD) digunakan untuk memprediksi film yang mungkin disukai oleh pengguna. SVD bekerja dengan mendekonstruksi matriks rating pengguna-film menjadi komponen yang lebih kecil, memungkinkan sistem untuk mengidentifikasi preferensi tersembunyi dan kesamaan antar pengguna berdasarkan pola rating yang serupa.
Sistem ini kemudian menghasilkan daftar Top-N film yang dapat diatur sesui dengan kebutuhan rekomendasikan untuk pengguna berdasarkan perilaku pengguna lain yang serupa. Misalnya, jika pengguna A dan pengguna B memiliki rating yang mirip untuk beberapa film, dan pengguna B menyukai film yang belum ditonton oleh pengguna A, film tersebut akan direkomendasikan kepada pengguna A.
Lihat hasil yang direkomendasikan berikut:
Kelebihan SVD:
Kekurangan SVD:
Untuk Content Based filtering menggunakan metrik Precission. Metrik ini digunakan untuk mengukur akurasi sistem rekomendasi. Precision mengukur seberapa banyak item yang direkomendasikan atau diklasifikasikan sebagai positif yang benar-benar relevan atau positif.
Formula Precission:
Cara Kerja:
Hasil:
Precission |
---|
1.0 |
Precision sebesar 1.0, artinya semua film yang direkomendasikan memiliki kemiripan yang tinggi dengan film dasar dalam hal konten yang dianalisis, sehingga semua rekomendasi dianggap relevan dan sesuai dengan preferensi yang diukur. Bisa dikatakan
Untuk collaborative filtering digunakan metode Singular Value Decomposition (SVD)
dan metrik evaluasi yang dipakai adalah Root Mean Square Error (RMSE)
. RMSE mengukur seberapa dekat prediksi rating film dengan rating asli yang diberikan oleh pengguna.
Formula RMSE sebagai berikut:
Di mana:
Cara Kerja RMSE:
Untuk setiap prediksi yang dihasilkan oleh model, hitung selisih antara nilai yang diprediksi dan nilai asli (rating sebenarnya). Selisih ini dikenal sebagai kesalahan prediksi.
Kuadratkan setiap kesalahan prediksi untuk menghilangkan tanda negatif dan memberikan bobot lebih pada kesalahan yang lebih besar.
Hitung rata-rata dari semua kesalahan kuadrat (MSE). Memberikan ukuran umum dari kesalahan prediksi model, tanpa mempertimbangkan arah kesalahan (lebih tinggi atau lebih rendah dari nilai sebenarnya).
Ambil akar kuadrat dari nilai Mean Squared Error (MSE) untuk mengembalikan ukuran kesalahan ke unit yang sama dengan nilai asli (rating) dan menghasilkan RMSE.
Interpretasi RMSE:
Hasil:
RMSE |
---|
0.288 |
RMSE (Root Mean Square Error) sebesar 0.288 menunjukkan bahwa rata-rata kesalahan antara prediksi dan nilai sebenarnya (rating yang diberikan pengguna) adalah sekitar 0.288. Menunjukkan bahwa prediksi sistem cukup dekat dengan nilai yang diharapkan dan sudah cukup baik. BIsa dikatakan model berhasil memberikan rekomendasi yang cukup relevan. Namun masih perlu ditingkatkan lagi agar mendapatkan nilai yang lebih kecil atau mendekati nol.
Content-Based Filtering:
Precission: 1.0
Collaborative Filtering:
RMSE: 0.288
Menunjukkan bahwa model pada Content Based Filtering sudah baik baik dan Collaborative Filtering juga sudah cukup baik. Namun untuk Collaborative Filtering masih perlu dilakukan eksperimen lebih lanjut agar nilai RMSE menjadi lebih kecil atau mendekati nol.
Meel, P., et al. “Movie Recommendation Using Content-Based and Collaborative Filtering”. 2020. SpringerLink. Link Available ↩
Koren, Y., et al. “Matrix Factorization Techniques for Recommender Systems”. 2009. IEEE. DOI: 10.1109/MC.2009.263 ↩