Skip to content

olfataVz/tmdb-recommender

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Project Overview

Sistem rekomendasi merupakan komponen penting dalam berbagai layanan digital, khususnya dalam industri hiburan seperti platform streaming film. Dalam proyek ini, fokus utama adalah membangun sistem rekomendasi film berbasis content-based filtering menggunakan data publik dari TMDB (The Movie Database).

Pendekatan content-based filtering bekerja dengan menganalisis informasi atau atribut dari item itu sendiri (seperti genre, sinopsis, pemeran, sutradara, dll.) untuk merekomendasikan item lain yang mirip dengan preferensi pengguna. Metode ini sangat berguna ketika informasi historis interaksi pengguna sangat terbatas ( cold-start ), karena tidak memerlukan data dari pengguna lain, berbeda dengan collaborative filtering .

Dalam konteks industri hiburan, content-based filtering memungkinkan sistem rekomendasi untuk menyarankan film-film yang memiliki kemiripan konten dengan film yang telah disukai pengguna sebelumnya. Ini mjadikan pendekatan ini sangat cocok untuk menyaring informasi berlebih dan menyajikan konten yang relevan, personal, dan konsisten dengan preferensi individual.

Studi sebelumnya menunjukkan bahwa sistem rekomendasi berbasis konten dapat meningkatkan keterlibatan dan kepuasan pengguna, terutama dalam fase awal adopsi layanan [1]. Selain itu, pendekatan ini lebih mudah untuk dijelaskan kepada pengguna karena alasan rekomendasi dapat ditelusuri melalui atribut konten [2].

Proyek ini mengimplementasikan berbagai variasi content-based filtering menggunakan teknik representasi teks seperti TF-IDF, Word2Vec , serta gabungan bobot konten untuk membangun sistem rekomendasi yang akurat dan efisien.

Referensi:

[1] Lops, P., Gemmis, M. D., & Semeraro, G. (2011). Content-based Recommender Systems: State of the Art and Trends. Recommender Systems Handbook . Springer.

[2] Ricci, F., Rokach, L., & Shapira, B. (2015). Recommender Systems Handbook . Springer.

Business Understanding

Sebelum merumuskan solusi, penting untuk memahami permasalahan yang ingin diselesaikan dalam proyek ini. Dalam konteks sistem rekomendasi film, kita perlu mempertimbangkan bagaimana pengguna berinteraksi dengan konten serta bagaimana karakteristik film dapat dimanfaatkan untuk menyajikan rekomendasi yang relevan. Oleh karena itu, bagian ini menguraikan pernyataan masalah yang menjadi fokus proyek, tujuan yang ingin dicapai, serta pendekatan solusi yang akan diterapkan.

Bagian laporan ini mencakup:

Problem Statements

  • Sulit merekomendasikan film yang relevan secara akurat berdasarkan karakteristik konten seperti genre, sinopsis, dan pemeran.
  • Kesulitan dalam memanfaatkan pola interaksi pengguna untuk memberikan rekomendasi yang sesuai preferensi individual.
  • Sistem rekomendasi saat ini kurang responsif terhadap perubahan selera pengguna dan variasi konten yang dinamis.

Goals

  • Mengembangkan sistem rekomendasi film berbasis content-based filtering dengan memanfaatkan metadata film seperti genre, overview, kata kunci, dan informasi pemeran/sutradara.
  • Membangun sistem rekomendasi film berbasis collaborative filtering yang dapat mengenali pola preferensi pengguna dari data interaksi pengguna-film.
  • Mengevaluasi dan membandingkan performa kedua pendekatan untuk menentukan metode yang paling efektif dan relevan dalam konteks dataset dan kebutuhan pengguna.

Solution Statements

Untuk menyelesaikan masalah di atas, tiga pendekatan utama akan digunakan:

  • Membuat model content-based filtering dengan teknik ekstraksi fitur dari kolom genre, sinopsis (overview), kata kunci, serta informasi pemeran dan sutradara, dan menghitung kemiripan antar film menggunakan metode seperti TF-IDF + cosine similarity, Word2Vec + cosine similarity, dan gabungan Word2Vec dan TF-IDF menggunakan Jarak Euclidean atau Manhattan.
  • Mengembangkan model collaborative filtering berbasis matriks interaksi pengguna-film, menggunakan algoritma seperti matrix factorization (misalnya SVD) atau nearest neighbors untuk mendeteksi pola preferensi pengguna.
  • Melakukan evaluasi model menggunakan metrik evaluasi khusus sistem rekomendasi seperti Precision dan Recall guna menilai kualitas dan relevansi rekomendasi yang diberikan.

Data Understanding

Dataset yang digunakan dalam proyek ini adalah TMDB 5000 Movie Dataset yang tersedia secara publik di Kaggle:

https://www.kaggle.com/datasets/tmdb/tmdb-movie-metadata

Dataset terdiri dari dua file utama:

  • tmdb_5000_movies.csv: Berisi metadata film seperti genre, sinopsis, kata kunci, popularitas, dll.
  • tmdb_5000_credits.csv: Berisi informasi tentang aktor dan kru dalam setiap film.

Variabel-variabel pada TMDB 5000 Movie Dataset adalah sebagai berikut:

  • Variabel tmdb_5000_movies (20 Kolom dan 4803 Baris):
Nama Kolom Tipe Data Jumlah Data Deskripsi
budget int64 4803 Anggaran produksi film.
genres object 4803 Kategori atau tipe film (misalnya: Action, Comedy).
homepage object 1712 Situs resmi film.
id int64 4803 Identifikasi unik film.
keywords object 4803 Kata kunci terkait tema atau elemen film.
original_language object 4803 Bahasa asli film.
original_title object 4803 Judul asli film sebelum translasi atau adaptasi.
overview object 4800 Ringkasan atau sinopsis singkat film.
popularity float64 4803 Skor popularitas berdasarkan interaksi pengguna.
production_companies object 4803 Nama perusahaan yang memproduksi film.
production_countries object 4803 Negara tempat film diproduksi.
release_date object 4802 Tanggal rilis film.
revenue int64 4803 Pendapatan total yang dihasilkan film.
runtime float64 4801 Durasi atau panjang film (dalam menit).
spoken_languages object 4803 Bahasa yang digunakan dalam film.
status object 4803 Status distribusi film (misalnya: Released, Post Production).
tagline object 3959 Slogan promosi film.
title object 4803 Judul film yang dirilis ke publik.
vote_average float64 4803 Rata-rata nilai rating pengguna.
vote_count int64 4803 Jumlah pengguna yang memberikan rating.
  • Variabel tmdb_5000_credits (4 Kolom dan 4803 Baris):
Nama Kolom Tipe Data Jumlah Data Deskripsi
movie_id int64 4803 Identifikasi unik film (digunakan untuk penggabungan dengan tmdb_5000_movies).
title object 4803 Judul film (duplikat dari tmdb_5000_movies).
cast object 4803 Daftar aktor utama dalam film (format JSON string).
crew object 4803 Daftar kru produksi, termasuk sutradara (format JSON string).
  • Variabel tmdb_5000_movies (Yang dirasa penting):

    • title
    • genres
    • overview
    • keywords
    • popularity
    • vote_average
    • vote_count
  • Variabel tmdb_5000_credits (Yang dirasa penting):

    • cast
    • crew
  • Variabel tmdb_5000_combined

    • title
    • genres
    • overview
    • keywords
    • popularity
    • vote_average
    • vote_count
    • cast
    • crew

Kondisi Data

Missing Value

  • Missing Values dari movies_df
Kolom Jumlah Missing Values
homepage 3091
overview 3
release_date 1
runtime 2
tagline 844
  • Missing Values dari credits_df
Kolom Jumlah Missing Values
Seluruh kolom 0

Duplikasi Data

  • Jumlah duplikat pada movies_df = 0
  • Jumlah duplikat pada credits_df = 0

Tidak ditemukan duplikasi data pada kedua dataset, sehingga tidak perlu dilakukan penghapusan data ganda.

Outlier

Meskipun terdapat nilai ekstrem (outlier) pada kolom budget, revenue, dan runtime, nilai-nilai tersebut tetap dipertahankan. Hal ini disebabkan karena setiap film memiliki anggaran dan pendapatan yang sangat bervariasi, serta durasi yang berbeda-beda sesuai dengan genre dan gaya produksi. Oleh karena itu, nilai ekstrem tersebut dianggap bukan outlier yang salah, melainkan representasi realistis dari variasi dalam industri film.

Data Preparation

Pada tahap ini, dilakukan berbagai proses persiapan data guna mendapatkan dataset yang bersih, relevan, dan siap digunakan dalam pemodelan sistem rekomendasi film berbasis konten.

Penggabungan Dataset- Menjelaskan proses data preparation yang dilakukan

Data film (movies_df) dan data kredit film (credits_df) digabung menggunakan kolom id dan movie_id sebagai kunci join. Setelah penggabungan, kolom yang duplikat seperti title_y dihapus dan kolom title_x diganti namanya menjadi title untuk konsistensi.

Seleksi Kolom Relevan

Kolom-kolom yang tidak relevan atau berpotensi menyebabkan bias dihapus untuk menjaga efisiensi dan fokus pada fitur yang berkontribusi pada penilaian kesamaan konten, seperti id, budget, revenue, homepage, dan metadata teknis lainnya. Kolom yang dipertahankan antara lain title, genres, overview, keywords, popularity, vote_average, vote_count, cast, dan crew.

Penanganan Duplikat dan Missing Values

Duplikat berdasarkan judul diidentifikasi dan dihapus agar data tidak bias karena pengulangan. Baris dengan nilai kosong pada kolom overview juga dihapus karena sinopsis merupakan komponen penting dalam sistem rekomendasi berbasis konten.

Ekstraksi dan Transformasi Fitur Kategori

Fungsi extract_names digunakan untuk mengekstrak nama dari kolom JSON yang berisi list of dictionaries, membatasi maksimal item yang diambil. Fungsi extract_director khusus mengambil nama sutradara dari kolom crew.

Kolom-kolom seperti genres, keywords, dan cast diubah dari string JSON menjadi list of names dengan batasan jumlah item. Kolom crew digunakan untuk mengekstrak nama sutradara ke kolom baru director.

Pemrosesan Kolom Overview

Kolom overview diubah dari string menjadi list kata (tokenisasi) dan dilakukan preprocessing seperti case folding (huruf kecil semua), penghilangan karakter khusus, dan pemecahan kalimat menjadi kata-kata untuk persiapan NLP

Penggabungan Fitur Menjadi Satu Kolom Tags

Semua fitur yang sudah berupa list diubah menjadi string, kemudian digabung menjadi satu kolom tags yang berisi representasi teks lengkap film.

Penghilangan Stopwords dan Stemming

Untuk mengurangi kata-kata umum yang kurang bermakna dan menyederhanakan kata ke bentuk dasarnya, dilakukan penghapusan stopwords dan stemming pada kolom tags.

Feature Extraction

Setelah proses pembersihan, transformasi, dan penggabungan data, langkah selanjutnya adalah mengubah data teks pada kolom tags menjadi bentuk numerik. Representasi numerik ini sangat penting dalam sistem rekomendasi berbasis konten agar kesamaan antar film bisa dihitung secara matematis. Proses ini terdiri dari beberapa metode:

  • Ekstraksi Fitur dengan TF-IDF

    TF-IDF (Term Frequency – Inverse Document Frequency) adalah teknik pemrosesan teks yang memberikan bobot pada setiap kata berdasarkan dua aspek:

    • Seberapa sering kata tersebut muncul dalam suatu dokumen ( term frequency )
    • Seberapa jarang kata tersebut muncul di seluruh dokumen ( inverse document frequency )

    Bobot TF-IDF yang tinggi menandakan bahwa kata tersebut cukup khas untuk membedakan isi film tertentu.

    Model TF-IDF ini dibatasi hanya pada 5000 kata terpenting menggunakan parameter max_features=5000.

    Hasil dari proses ini adalah vektor berdimensi 5000 untuk setiap film, yang digunakan dalam perhitungan cosine similarity .

  • Ekstraksi Fitur dengan Word2Vec

    Berbeda dengan TF-IDF yang berbasis frekuensi, Word2Vec membangun representasi vektor kata yang lebih kontekstual. Kata-kata yang sering muncul bersama dalam konteks serupa akan memiliki vektor yang berdekatan dalam ruang vektor.

    Langkah-langkahnya:

    • Kolom tags di-tokenisasi (dipecah menjadi kata-kata).
    • Model Word2Vec dilatih pada token tersebut menggunakan vector_size=100.
    • Setiap kata akan memiliki vektor berdimensi 100.
  • Representasi Dokumen dengan Rata-Rata Word2Vec

    Untuk mengubah teks film menjadi satu vektor tunggal, dihitung rata-rata dari semua vektor kata valid dalam tags film tersebut. Jika sebuah kata tidak terdapat dalam Word2Vec vocabulary, maka kata tersebut diabaikan. Hasilnya adalah vektor dense berdimensi 100 untuk setiap film. Vektor ini akan digunakan dalam penghitungan kemiripan antar film berdasarkan konteks semantik kata.

Modeling

Pada tahap modeling, dilakukan pengembangan tiga skema content-based filtering untuk sistem rekomendasi film. Ketiga skema menggunakan representasi teks dari fitur film yang sudah dipersiapkan sebelumnya (kolom tags), namun dengan pendekatan dan algoritma similarity yang berbeda.

Skema 1: Content-Based Filtering dengan TF-IDF + Cosine Similarity

Pada skema pertama, teks gabungan fitur film diubah menjadi representasi numerik menggunakan TF-IDF (Term Frequency-Inverse Document Frequency) . TF-IDF memberikan bobot pada kata berdasarkan frekuensi kemunculan kata dalam satu dokumen dan keunikannya di seluruh koleksi dokumen. Ini membantu memfilter kata-kata yang umum muncul namun kurang informatif.

Kemudian, dihitung kemiripan antar film menggunakan cosine similarity dari vektor TF-IDF tersebut. Cosine similarity mengukur sudut kemiripan antar vektor fitur sehingga cocok untuk data teks berdimensi tinggi dan sparse.

Fungsi recommend_tfidf menerima judul film dan menghasilkan 5 rekomendasi film teratas berdasarkan skor kemiripan cosine.

Contoh 5 rekomendasi teratas untuk film "Cars 2":

Rekomendasi Skor Cosine Similarity
Cars 0.392
Witless Protection 0.325
Toy Story 0.285
Larry the Cable Guy: Health Inspector 0.269
Cats Don't Dance 0.243

Skema 2: Content-Based Filtering dengan Word2Vec + Cosine Similarity

Skema kedua menggunakan representasi kata yang diperoleh dari model Word2Vec yang dilatih pada token hasil preprocessing kolom tags. Word2Vec menghasilkan vektor kata yang menangkap konteks semantik dan hubungan kata lebih dalam daripada TF-IDF.

Untuk setiap film, representasi vektor diperoleh dari rata-rata vektor kata (embedding) dari kata-kata valid dalam tag film tersebut. Kemudian dihitung cosine similarity antar vektor film untuk menentukan kemiripan.

Fungsi recommend_w2v melakukan rekomendasi 5 film teratas berdasarkan kemiripan cosine dari representasi Word2Vec.

Contoh 5 rekomendasi teratas untuk film "Cars 2":

Rekomendasi Skor Cosine Similarity
The Ant Bully 1.000
The Jungle Book 2 1.000
The Road to El Dorado 1.000
Ice Age: Continental Drift 1.000
Penguins of Madagascar 1.000

Skema 3: Content-Based Filtering dengan Gabungan Word2Vec dan TF-IDF menggunakan Jarak Euclidean atau Manhattan

Skema ketiga merupakan pengembangan dari skema Word2Vec, di mana representasi vektor film dihitung sebagai rata-rata vektor kata Word2Vec yang dibobot oleh nilai TF-IDF tiap kata. Hal ini bertujuan menggabungkan kekuatan TF-IDF (bobot kata yang informatif) dan Word2Vec (konteks semantik).

Setelah mendapatkan vektor representasi, dihitung jarak antar vektor menggunakan metrik Euclidean dan Manhattan. Nilai jarak ini kemudian dikonversi menjadi similarity score dengan rumus similarity = 1 / (1 + distance).

Fungsi recommend_w2v_distance menerima judul film dan matriks similarity untuk memberikan rekomendasi 5 film teratas berdasarkan nilai similarity tertinggi.

Contoh 5 rekomendasi film teratas untuk film "Cars 2" dengan Euclidean Distance:

Rekomendasi Skor Similarity
Mulan 0.967
Sliding Doors 0.963
Shrek the Third 0.951
The Pink Panther 0.946
Barnyard 0.944

Contoh 5 rekomendasi film teratas untuk film "Cars 2" dengan Manhattan Distance:

Rekomendasi Skor Similarity
Mulan 0.781
Sliding Doors 0.766
Shrek the Third 0.702
The Pink Panther 0.689
Serial Mom 0.677

Kelebihan dan Kekurangan Pendekatan

Skema Kelebihan Kekurangan
TF-IDF + Cosine Similarity Mudah diterapkan, cepat, efektif untuk teks sparse Kurang menangkap konteks semantik kata
Word2Vec + Cosine Similarity Menangkap hubungan semantik antar kata, lebih kaya konteks Perlu pelatihan model embedding, butuh data cukup besar
Word2Vec + TF-IDF + Distance Menggabungkan bobot penting kata dan konteks semantik; jarak bisa lebih sensitif Lebih kompleks, perlu tuning metrik jarak, komputasi lebih berat

Evaluation

Pada bagian ini, sistem rekomendasi dievaluasi menggunakan dua metrik utama, yaitu Precision dan Recall, dengan K = 5. Kedua metrik ini umum digunakan dalam sistem rekomendasi karena mampu memberikan gambaran tentang relevansi hasil rekomendasi terhadap kebutuhan pengguna.

Metrik Evaluasi

  • Precision mengukur proporsi film relevan yang berhasil direkomendasikan dalam lima rekomendasi teratas. Cara menghitungnya adalah dengan membagi jumlah film yang relevan dalam daftar rekomendasi top-5 dengan jumlah total film yang direkomendasikan, yaitu lima.
  • Recall mengukur proporsi film relevan dari seluruh film relevan (ground truth) yang berhasil ditemukan oleh sistem dalam top-5. Cara menghitungnya adalah dengan membagi jumlah film relevan dalam daftar rekomendasi top-5 dengan jumlah total film relevan yang ada di ground truth.

Contoh Perhitungan: Cars 2

Sebagai contoh, berikut adalah proses evaluasi untuk film Cars 2, yang memiliki daftar ground truth sebanyak 15 film relevan:

Skema 1: TF-IDF + Cosine Similarity

Top-5 rekomendasi:

  1. Cars
  2. Witless Protection
  3. Toy Story
  4. Larry the Cable Guy: Health Inspector
  5. Cats Don't Dance

Dari daftar tersebut, dua film yaitu Cars dan Toy Story termasuk dalam ground truth. Maka:

  • Jumlah film relevan dalam top-5 = 2
  • Total film yang direkomendasikan = 5
  • Total film relevan (ground truth) = 15

Precision@5 adalah 2 dibagi 5, yaitu 0.400

Recall@5 adalah 2 dibagi 15, yaitu 0.133


Skema 2: Word2Vec + Cosine Similarity

Top-5 rekomendasi:

  1. The Ant Bully
  2. The Jungle Book 2
  3. The Road to El Dorado
  4. Ice Age: Continental Drift
  5. Penguins of Madagascar

Dari daftar tersebut, dua film yaitu The Ant Bully dan Penguins of Madagascar termasuk dalam ground truth.

  • Jumlah film relevan dalam top-5 = 2
  • Precision@5 = 2 dibagi 5 = 0.400
  • Recall@5 = 2 dibagi 15 = 0.133

Skema 3: Word2Vec + TF-IDF + Euclidean Distance

Dengan Euclidean Distance

Top-5 rekomendasi:

  1. Mulan
  2. Sliding Doors
  3. Shrek the Third
  4. The Pink Panther
  5. Barnyard

Tiga film, yaitu Shrek the Third, The Pink Panther, dan Barnyard, termasuk dalam ground truth.

  • Jumlah film relevan dalam top-5 = 3
  • Precision@5 = 3 dibagi 5 = 0.600
  • Recall@5 = 3 dibagi 15 = 0.200

Hasil Evaluasi

Evaluasi dilakukan terhadap tiga skema rekomendasi yang dikembangkan, dengan menggunakan 5 rekomendasi teratas (top-5) untuk setiap film pada ground truth "Cars 2". Berikut hasil evaluasi dari masing-masing skema:

Skema Precision Recall
1. TF-IDF + Cosine Similarity 0.400 0.133
2. Word2Vec + Cosine Similarity 0.400 0.133
3. Word2Vec + TF-IDF + Euclidean Distance 0.600 0.200

Interpretasi Hasil

  • Skema 1 dan 2 memiliki nilai precision yang sama yaitu 0.4, artinya dari 5 rekomendasi yang diberikan, rata-rata 2 film termasuk dalam daftar film relevan pada ground truth. Namun, recall-nya masih rendah, yaitu 0.133, yang mengindikasikan sebagian besar film relevan tidak tercover oleh rekomendasi.
  • Skema 3 menunjukkan peningkatan performa dengan precision 0.6 dan recall 0.2. Artinya, rekomendasi yang dihasilkan lebih tepat (3 dari 5 rekomendasi relevan) dan lebih banyak film relevan yang berhasil ditemukan dibanding skema sebelumnya.
  • Hasil ini menunjukkan bahwa kombinasi Word2Vec dengan bobot TF-IDF dan penggunaan metrik jarak seperti Euclidean dapat memberikan rekomendasi yang lebih relevan secara kontekstual dibanding hanya menggunakan TF-IDF atau Word2Vec secara terpisah.

About

Sistem rekomendasi film berbasis konten menggunakan dataset TMDB 5000. Menggunakan TF-IDF dan cosine similarity untuk merekomendasikan film berdasarkan sinopsis, genre, dan metadata lainnya.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors