- Project Overview
Pada proyek sistem rekomendasi, kita akan membuat sistem rekomendasi movie atau tv show di Netflix. Netflix adalah layanan streaming berbasis langganan yang memungkinkan anggota kami menonton acara TV dan film tanpa iklan di perangkat yang terhubung ke Internet[1]. Setiap hari Netflix dibanjiri oleh pengguna yang gemar movie atau tv show untuk menonton secara streaming movie atau tv show yang disukai. Namun terlalu banyaknya movie atau tv show yang mengakibatkan kebingungan yang dihadapi oleh pengguna. Oleh karena itu, diperlukan sistem rekomendasi yang digunakan untuk memberikan rekomendasi movie atau tv show berdasarkan pengalaman pengguna sebelumnya.
Berdasarkan latar belakang diatas, ada beberapa rincian masalah yang dapat diselesaikan pada proyek ini sebagai berikut.
- Sistem rekomendasi apa yang diterapkan pada proyek kali ini?
- Bagaimana cara membuat sistem rekomendasi movie atau tv show untuk pengguna di Netflix?
Tujuan dari dibuatnya proyek ini sebagai berikut.
- Membuat sistem rekomendasi movie atau tv show untuk pengguna di Netflix.
- Memberikan rekomendasi movie atau tv show yang kemungkinan disukai pengguna berdasarkan pengalaman pengguna sebelumnya.
Solusi yang dapat dilakukan untuk memenuhi tujuan dari proyek ini sebagai berikut.
Solusi yang dapat dilakukan untuk memenuhi proyek ini sebagai berikut.
-
Untuk bagian Data Preparation dilakukan beberapa teknik sebagai berikut.
- Features List berupa memilih fitur yang akan digunakan.
- Data Cleaning berupa mengisi data kosong pada kolom, membuang tanda baca, menyamakan ukuran huruf, dan ekstraksi kata kunci dengan RAKE (Rapid Automatic Keyword Extraction).
-
Untuk bagian Model Sistem Rekomendasi menggunakan content based filtering karena dataset tidak terdapat rating. Oleh karena itu, sistem rekomendasi dibuat untuk memberikan rekomendasi pada pengguna berdasarkan pengalaman pengguna sebelumnya.
-
Untuk bagian Evaluasi Sistem Rekomendasi menggunakan consine similiarity. Cosine similarity mengukur kesamaan antara dua vektor dan menentukan apakah kedua vektor tersebut menunjuk ke arah yang sama. Ia menghitung sudut cosinus antara dua vektor. Semakin kecil sudut cosinus, semakin besar nilai cosine similarity. Cosine similarity dirumuskan sebagai berikut.
Informasi dataset sebagai berikut.
Jenis | Keterangan |
---|---|
Sumber | Kaggle Dataset : Netflix Movies and TV Shows |
Lisensi | CC0: Public Domain |
Kategori | movies and tv shows |
Rating Penggunaan | 10.0 (Gold) |
Jenis dan Ukuran Berkas | CSV (3.4 MB) |
Pada berkas yang diunduh yakni netflix_titles.csv terdapat 8.807 baris (records atau jumlah pengamatan) dan 12 kolom dalam dataset. Berdasarkan informasi dari dataset, variabel pada Netflix Movies and TV Shows sebagai berikut.
Variabel | Deskripsi |
---|---|
show_id | id unik dari setiap pertunjukan |
type | Kategori acara, bisa berupa Film atau Acara TV |
title | Judul Film / Acara TV |
director | Nama sutradara |
cast | Nama aktor yang terlibat dalam film / pertunjukan |
country | Negara tempat film / acara itu diproduksi |
date_added | Tanggal saat acara ditambahkan di Netflix |
release_year | Tahun rilis pertunjukan |
rating | Tampilkan peringkat di Netflix |
duration | Durasi waktu pertunjukan dalam menit |
listed_in | Genre acaranya |
description | Deskripsi ringkasan |
Untuk mengetahui deskripsi variabel seperti tipe data, sample unik, dan jumlah sample unik sebagai berikut.
Visualisasi data numerik dari dataset yang digunakan sebagai berikut.
Word Cloud merupakan salah satu metode untuk menampilkan data teks secara visual. Grafik ini populer dalam text mining karena mudah dipahami. Dengan menggunakan word cloud, gambaran frekuensi kata-kata dapat ditampilkan dalam bentuk yang menarik namun tetap informatif. Semakin sering satu kata digunakan, maka semakin besar pula ukuran kata tersebut ditampilkan dalam word cloud. Word cloud dari dataset sebagai berikut.
- Variabel Title
- Variabel Director
- Variabel Cast
- Variabel Description
Persiapan Data (Data Preparation) adalah proses mengubah atau mentransformasi fitur-fitur data ke dalam bentuk yang mudah diinterpretasikan dan diproses oleh model machine learning.
Seperti yang sudah dijelaskan pada bagian Solution Statements, berikut adalah tahapan dalam melakukan data preparation.
-
Features List berupa memilih fitur yang akan digunakan.
Kami akan membuat daftar fitur yang akan kami gunakan. Kami hanya akan menggunakan fitur yang paling relevan bagi kami, mengingat masalah yang kami hadapi. Oleh karena itu, fitur yang kami pilih adalah title, type, director, cast, country, listed_in, description, dan rating.
-
Data Cleaning
Kami mengubah tipe data menjadi string dan melakukan sedikit preprocessing data dan mengganti setiap baris yang memiliki nilai NaN dengan spasi/string kosong, sehingga tidak menghasilkan kesalahan saat menjalankan kode. Kami menggunakan RAKE-NLTK. RAKE (Rapid Automatic Keyword Extraction) adalah algoritma ekstraksi kata kunci independen domain yang mencoba menentukan frasa kunci dalam tubuh teks dengan menganalisis frekuensi kemunculan kata dan kemunculannya bersama dengan kata lain dalam teks. Kemudian digabungkan fitur berupa type, director, cast, country, listed_in, description, dan rating menjadi satu yaitu key_notes dan title tetap menjadi fitur sendiri. Setelah itu, kami mengubah tipe data menjadi string dan membuang tanda baca seperti , & - . Dan menjadikan semua string menjadi huruf kecil dengan lower.
Setelah melakukan Persiapan Data (Data Preparation), maka tahap selanjutnya modeling. Modeling untuk sistem rekomendasi Content Based Filtering menggunakan CountVectorizer dan TF-IDF Vectorizer.
-
CountVectorizer
Count Vectorizer adalah cara untuk mengubah serangkaian string tertentu menjadi representasi frekuensi. Count Vectorizer dapat membantu dalam memahami jenis teks dengan frekuensi kata-kata di dalamnya. Namun mempunyai kelemahan sebagai berikut:
- Ketidakmampuan dalam mengidentifikasi kata-kata yang lebih penting dan kurang penting untuk dianalisis.
- Hanya mempertimbangkan kata-kata yang berlimpah di corpus sebagai kata yang paling signifikan secara statistik.
- Tidak mengindentifikasi hubungan antar kata seperti kesamaan linguistik antar kata. Pada tahap ini, saya menggunakan modul dari scikit-learn yaitu Count Vectorizer.
-
TF-IDF Vectorizer
TF-IDF Vectorizer (Term Frequency - Inverse Document Frequency) adalah statistik yang didasarkan pada frekuensi kata dalam korpus tetapi juga memberikan representasi numerik tentang betapa pentingnya sebuah kata untuk analisis statistik. TF-IDF lebih baik daripada Count Vectorizers karena tidak hanya berfokus pada frekuensi kata yang ada dalam korpus tetapi juga memberikan pentingnya kata tersebut. Kami kemudian dapat menghapus kata-kata yang kurang penting untuk analisis, sehingga membuat model bangunan kurang kompleks dengan mengurangi dimensi input. TF-IDF didasarkan pada logika bahwa kata-kata yang terlalu banyak dalam korpus dan kata-kata yang terlalu jarang keduanya tidak penting secara statistik untuk menemukan suatu pola. Faktor logaritma dalam TF-IDF secara matematis menghukum kata-kata yang terlalu banyak atau terlalu jarang dalam korpus dengan memberikan nilai TF-IDF yang rendah. Pada tahap ini, saya menggunakan modul dari scikit-learn yaitu TF-IDF Vectorizer.
Dari kedua Vectorizer tersebut kemudian akan dibuat sistem rekomendasi content based filtering dengan menggunakan consine similiarity. CountVectorizer dan TF-IDF Vectorizer dengan fungsi stop_words=’english’ berfungsi untuk menghilangkan kata semacam: i, you, the, a, this, is dan sejenisnya. Tujuannya sebelum menghitung cosine similarity, terlebih dahulu data diubah kedalam bentuk vektor.
-
Hasil Prediksi
Hasil rekomendasi yang diberikan, dibuat sebuah fungsi recomendation untuk memberikan rekomendasi terhadap suatu judul movie atau tv show yang diinputkan (pengalaman pengguna). Kemudian mengambil beberapa data yang memiliki kemiripan (similarity) dan selanjutnya dari bobot berupa tingkat kesamaan diurutkan dari terbesar ke terkecil dan dimasukkan ke variabel sim_scores. Kemudian ditampilkan rekomendasi berupa DataFrame yang berisikan Judul Movie atau TV Show dan consine similiarity. Input Movie atau TV Show adalah Story of Kale: When Someone's in Love.
Pada proyek ini, kami menggunakan evaluasi pada model sistem rekomendasi Content Based Filtering dengan metric Recommender System Precision.
Precision adalah rasio prediksi benar positif (True Positif) terhadap keseluruhan hasil yang diprediksi positif. Untuk formula Recommender System Precision dapat ditulis sebagai berikut[2].
Untuk penerapan pada kode dengan membuat fungsi precision yang terdapat 2 paramter yaitu banyak rekomendasi dan jumlah rekomendasi yang sesuai. Kemudian menggunakan consine similiarity > 0.05.
Dari precision yang dilihat bahwa precision pada CountVectorizer lebih baik daripada TF-IDF Vectorizer. Precision pada CountVectorizer 1.0 artinya 100% sedangkan precision pada TF-IDF Vectorizer 0.6 atau 60%.
[1] https://help.netflix.com/id/node/412
[2] https://towardsdatascience.com/recommendation-systems-models-and-evaluation-84944a84fb8e