Advertise

Cara Membuat Sistem Rekomendasi Sederhana dengan Python (Untuk Pemula)

 


Kalau selama ini kamu hanya tahu sistem rekomendasi dari Netflix, Tokopedia, atau Spotify, sekarang saatnya coba bikin sendiri versi sederhananya! Jangan khawatir, kita tidak perlu jadi ahli machine learning dulu. Dengan Python dan beberapa pustaka dasar, kita bisa membuat sistem rekomendasi mini yang cukup keren.

Bagi yang belum membaca artikel sebelumnya, alangkah baiknya membacanya terlebih dahulu dengan mengklik link berikut :

Etika dan Privasi dalam Sistem Rekomendasi – Apakah Algoritma Terlalu Dalam Mengenal Kita?

Masalah Cold Start dalam Sistem Rekomendasi – dan Cara Mengatasinya

Perbandingan: Content-Based vs Collaborative Filtering – Mana yang Lebih Baik?

Mengenal Sistem Rekomendasi: Cara Netflix dan Tokopedia Menebak Selera Kita


🔍 Dataset yang Digunakan

Untuk belajar, kita bisa pakai MovieLens Dataset — dataset film yang berisi rating dari pengguna terhadap berbagai film. Dataset ini sangat populer untuk eksperimen sistem rekomendasi.

Kamu bisa unduh versi kecilnya (100k data) di: https://grouplens.org/datasets/movielens

📦 Persiapan Tools

Sebelum mulai, pastikan kamu punya Python (versi 3.x) dan beberapa library berikut:

pip install pandas scikit-learn

🧑‍💻 Membuat Content-Based Recommendation

Di pendekatan content-based, kita akan merekomendasikan film yang mirip dengan film yang sudah dipilih pengguna berdasarkan genre.

Contoh kode sederhana:

import pandas as pd from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.metrics.pairwise import cosine_similarity # 1. Baca dataset film movies = pd.read_csv("movies.csv") # dataset MovieLens movies['genres'] = movies['genres'].fillna('') # 2. Ubah teks genre menjadi vektor (TF-IDF) tfidf = TfidfVectorizer(stop_words='english') tfidf_matrix = tfidf.fit_transform(movies['genres']) # 3. Hitung kesamaan antar film cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix) # 4. Fungsi rekomendasi def recommend(title, cosine_sim=cosine_sim): idx = movies[movies['title'] == title].index[0] sim_scores = list(enumerate(cosine_sim[idx])) sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True) sim_scores = sim_scores[1:6] # ambil 5 teratas movie_indices = [i[0] for i in sim_scores] return movies['title'].iloc[movie_indices] # Coba rekomendasi print(recommend("Toy Story (1995)"))

👉 Outputnya akan memberikan daftar film yang mirip dengan Toy Story (1995) berdasarkan genre.

🤝 Membuat Collaborative Filtering

Collaborative filtering menggunakan rating pengguna lain. Kita akan mencari film yang mirip berdasarkan pola rating.

Contoh sederhana dengan pivot dan cosine similarity:

# 1. Baca dataset rating ratings = pd.read_csv("ratings.csv") # 2. Buat matriks user-item user_item_matrix = ratings.pivot_table(index='userId', columns='movieId', values='rating') # 3. Ganti NaN dengan 0 user_item_matrix = user_item_matrix.fillna(0) # 4. Hitung kesamaan antar film cosine_sim = cosine_similarity(user_item_matrix.T) cosine_sim_df = pd.DataFrame(cosine_sim, index=user_item_matrix.columns, columns=user_item_matrix.columns) # 5. Fungsi rekomendasi def recommend_movie(movie_id, num_recommendations=5): similar_movies = cosine_sim_df[movie_id].sort_values(ascending=False)[1:num_recommendations+1] return similar_movies # Coba rekomendasi (gunakan ID film) print(recommend_movie(1)) # movieId 1 = Toy Story

👉 Outputnya berupa daftar movieId film yang mirip berdasarkan rating pengguna.

⚖️ Content-Based vs Collaborative Filtering

  • Content-Based: cocok untuk pengguna baru, karena cukup analisis metadata (genre, kategori, dll).
  • Collaborative Filtering: lebih akurat di platform besar, tapi butuh banyak data rating dari pengguna.

✍️ Penutup

Kita baru saja membuat dua sistem rekomendasi sederhana:

  1. Content-Based → berdasarkan kemiripan konten (genre film).

  2. Collaborative Filtering → berdasarkan perilaku pengguna lain.

Meskipun sederhana, ini adalah fondasi dari sistem rekomendasi canggih yang digunakan raksasa teknologi.



                                                  



Post a Comment

0 Comments