Buat Sistem Rekomendasi Film Anda Sendiri Menggunakan Python
Diterbitkan: 2021-03-09Apakah Anda bertanya-tanya bagaimana Netflix menyarankan film yang sangat sesuai dengan minat Anda? Atau mungkin Anda ingin membangun sistem yang dapat memberikan saran seperti itu kepada penggunanya juga?
Jika jawaban Anda adalah ya, maka Anda datang ke tempat yang tepat karena artikel ini akan mengajari Anda cara membangun sistem rekomendasi film dengan menggunakan Python.
Namun, sebelum kita mulai membahas 'Bagaimana' kita harus terbiasa dengan 'Apa.'
Daftar isi
Sistem Rekomendasi: Apa Itu?
Sistem rekomendasi telah menjadi bagian yang sangat integral dari kehidupan kita sehari-hari. Dari pengecer online seperti Amazon dan Flipkart hingga platform media sosial seperti YouTube dan Facebook, setiap perusahaan digital besar menggunakan sistem rekomendasi untuk memberikan pengalaman pengguna yang dipersonalisasi kepada klien mereka.
Beberapa contoh sistem rekomendasi dalam kehidupan sehari-hari Anda antara lain:
- Saran yang Anda dapatkan dari Amazon saat membeli produk adalah hasil dari sistem rekomendasi.
- YouTube menggunakan sistem pemberi rekomendasi untuk menyarankan video yang sesuai dengan selera Anda.
- Netflix memiliki sistem rekomendasi terkenal untuk menyarankan acara dan film sesuai minat Anda.
Sistem rekomendasi menyarankan produk pengguna dengan menggunakan data. Data ini dapat berupa minat yang dimasukkan pengguna, riwayat, dll. Jika Anda mempelajari pembelajaran mesin dan AI, maka Anda harus mempelajari sistem rekomendasi karena sistem tersebut menjadi semakin populer dan canggih.
Jenis Sistem Rekomendasi
Ada dua jenis sistem rekomendasi:
1. Sistem Rekomendasi Kolaboratif
Sistem rekomendasi kolaboratif menyarankan item sesuai dengan kemiripan pengguna serupa untuk item tersebut. Ini mengelompokkan pengguna dengan minat dan selera yang sama dan menyarankan produk mereka sesuai dengan itu.
Misalnya, Anda dan satu pengguna lain menyukai Sholay. Sekarang, setelah menonton Sholay dan menyukainya, pengguna lain menyukai Golmaal. Karena Anda dan pengguna lain memiliki minat yang sama, sistem pemberi rekomendasi akan menyarankan Anda menonton Golmaal berdasarkan data ini. Ini adalah penyaringan kolaboratif.
2. Sistem Rekomendasi Berbasis Konten
Sistem pemberi rekomendasi berbasis konten menyarankan item berdasarkan data yang diterimanya dari pengguna. Itu bisa didasarkan pada data eksplisit ('Suka', 'Bagikan', dll.) atau data implisit (riwayat tontonan). Sistem rekomendasi akan menggunakan data ini untuk membuat profil khusus pengguna dan akan menyarankan item berdasarkan profil tersebut.
Membangun Sistem Rekomendasi Film Dasar
Sekarang kita telah membahas dasar-dasar sistem pemberi rekomendasi, mari kita mulai membangun sistem rekomendasi film.
Kita dapat mulai membangun sistem rekomendasi film berbasis Python dengan menggunakan dataset MovieLens lengkap. Dataset ini berisi lebih dari 26 juta peringkat, 750.000 aplikasi tag yang diterapkan ke lebih dari 45.000 film. Data genom tag hadir dalam kumpulan data ini dengan lebih dari 12 juta skor relevansi.
Kami menggunakan kumpulan data lengkap untuk membuat sistem rekomendasi film dasar. Namun, Anda bebas menggunakan kumpulan data yang lebih kecil untuk proyek ini. Pertama, kita harus mengimpor semua perpustakaan yang diperlukan:
Sistem rekomendasi film dasar berbasis Python akan menyarankan film sesuai dengan popularitas dan genre film. Sistem ini bekerja berdasarkan anggapan bahwa film populer dengan aklamasi kritis akan memiliki kemungkinan besar untuk disukai oleh khalayak umum. Ingatlah bahwa sistem rekomendasi film seperti itu tidak memberikan saran yang dipersonalisasi.
Untuk menerapkannya, kami akan mengurutkan film berdasarkan popularitas dan peringkatnya dan memberikan argumen genre untuk mendapatkan film bergenre teratas:
Memasukkan
md = pd. read_csv('../input/movies_metadata.csv')
md.head()
Keluaran
dewasa | milik_ke_koleksi | anggaran | genre | video | pengenal | imdb_id | original_title | gambaran | pendapatan | judul | |||||||
Palsu | ('id'L 10194, 'nama': 'Koleksi Cerita Mainan') | 30000000 | [{'id': 16, 'name': 'Animasi'}… | Palsu | 862 | tt0114709 | Cerita mainan | Dipimpin oleh Woody, mainan Andy hidup bahagia… | 373554033 | Cerita mainan | |||||||
1 | Palsu | NaN | 65000000 | {{'id': 12, 'name': 'Petualangan'}… | Palsu | 8844 | tt0113497 | Jumanji | Ketika saudara kandung Judy dan Peter… | 262797249 | Jumanji | ||||||
2 | Palsu | ('id': 119050, 'name': 'Orang Tua Pemarah) | 0 | {{'id': 10749, 'name': 'Romance'}… | Palsu | 15602 | tt0113228 | Pria tua pemarah | Pernikahan keluarga menghidupkan kembali… | 0 | Pria tua pemarah | ||||||
3 | Palsu | NaN | 16000000 | {{'id': 35, 'name': 'Komedi'}… | Palsu | 31357 | tt0114885 | Menunggu untuk menghembuskan nafas | Ditipu, dianiaya, dan diinjak… | 81452156 | Menunggu untuk menghembuskan nafas |
Memasukkan
md['genres'] = md['genres'].fillna('[]').apply(literal_eval).apply(lambda x: [i['name'] for i in x] if isinstance(x, list ) lain [])
Rumus untuk Bagan Kami
Untuk membuat bagan film teratas kami, kami menggunakan peringkat TMDB. Kami akan menggunakan rumus peringkat tertimbang IMDB untuk membuat grafik kami, yaitu sebagai berikut:
Peringkat Tertimbang (WR) = (iaouaouaouaouaou)
Di sini, v adalah singkatan dari jumlah suara yang didapat sebuah film, m adalah jumlah suara minimum yang harus didapatkan sebuah film di tangga lagu, R adalah peringkat rata-rata film, dan C adalah suara rata-rata untuk keseluruhan laporan .
Membangun Bagan
Sekarang setelah kita memiliki kumpulan data dan rumus, kita dapat mulai membuat bagan. Kami hanya akan menambahkan film tersebut ke grafik kami yang memiliki minimal 95% suara. Kita akan mulai dengan membuat grafik 250 teratas.
Memasukkan
vote_counts = md[md['vote_count'].notnull()]['vote_count'].astype('int')
vote_averages = md[md['vote_average'].notnull()]['vote_average'].astype('int')
C = vote_averages.mean()
C
Keluaran
5.244896612406511
Memasukkan
m = vote_counts.quantile(0.95)
M
Keluaran
434.0
Memasukkan
md['tahun'] = pd.to_datetime(md['release_date'], errors='coerce').apply(lambda x: str(x).split('-')[0] if x != np. nan lain np.nan)
Memasukkan
memenuhi syarat = md[(md['vote_count'] >= m) & (md['vote_count'].notnull()) & (md['vote_average'].notnull())][['title', 'year ', 'jumlah_suara', 'suara_rata-rata', 'popularitas', 'genre']]
memenuhi syarat['vote_count'] = memenuhi syarat['vote_count'].astype('int')
memenuhi syarat['vote_average'] = memenuhi syarat['vote_average'].astype('int')
memenuhi syarat.shape
Keluaran
(2274, 6)
Seperti yang Anda lihat, untuk mendapatkan tempat di chart kami, sebuah film harus memiliki minimal 434 suara. Anda mungkin telah memperhatikan bahwa peringkat rata-rata yang harus dimiliki sebuah film untuk masuk ke grafik kami adalah 5,24.
Memasukkan
def weighted_rating(x):
v = x['jumlah_suara']
R = x['suara_rata-rata']
kembali (v/(v+m) * R) + (m/(m+v) * C)
Memasukkan
memenuhi syarat['wr'] = memenuhi syarat.apply(weighted_rating, axis=1)
Memasukkan
memenuhi syarat = memenuhi syarat.sort_values('wr', ascending=False).head(250)
Dengan semua ini di tempat, mari buat bagan:
Film Teratas Secara Keseluruhan
Memasukkan
memenuhi syarat.head(15)
Keluaran
judul | tahun | suara_hitung | suara_rata-rata | kepopuleran | genre | wr | |
15480 | Lahirnya | 2010 | 14075 | 8 | 29.1081 | [Aksi, Thriller, Fiksi Ilmiah, Misteri, A… | 7.917588 |
12481 | Kesatria Kegelapan | 2008 | 12269 | 8 | 123.167 | [Drama, Aksi, Kejahatan, Thriller] | 7.905871 |
22879 | Antar bintang | 2014 | 11187 | 8 | 32.2135 | [Petualangan, Drama, Fiksi Ilmiah] | 7.897107 |
2843 | Klub Pertarungan | 1999 | 9678 | 8 | 63.8696 | [Drama] | 7.881753 |
4863 | Penguasa Cincin: Persekutuan Cincin | 2001 | 8892 | 8 | 32.0707 | [Petualangan, Fantasi, Aksi] | 7.871787 |
292 | Fiksi Pulp | 1994 | 8670 | 8 | 140.95 | [Thriller, Kejahatan] | 7.868660 |
314 | Penebusan Shawshank | 1994 | 8358 | 8 | 51.6454 | [Drama, Kejahatan] | 7.864000 |
7000 | The Lord of the Rings: Kembalinya Sang Raja | 2003 | 8226 | 8 | 29.3244 | [Petualangan, Fantasi, Aksi] | 7.861927 |
351 | Forrest Gump | 1994 | 8147 | 8 | 48.3072 | [Komedi, Drama, Romansa] | 7.860656 |
5814 | Penguasa Cincin: Dua Menara | 2002 | 7641 | 8 | 29.4235 | [Petualangan, Fantasi, Aksi] | 7.851924 |
256 | Perang Bintang | 1977 | 6778 | 8 | 42.1497 | [Petualangan, Aksi, Fiksi Ilmiah] | 7.834205 |
1225 | Kembali ke masa depan | 1985 | 6239 | 8 | 25.7785 | [Petualangan, Komedi, Fiksi Ilmiah, Keluarga] | 7.820813 |
834 | Ayah baptis | 1972 | 6024 | 8 | 41.1093 | [Drama, Kejahatan] | 7.814847 |
1154 | Kerajaan menyerang kembali | 1980 | 5998 | 8 | 19.471 | [Petualangan, Aksi, Fiksi Ilmiah] | 7.814099 |
46 | Se7en | 1995 | 5915 | 8 | 18.4574 | [Kejahatan, Misteri, Thriller] |
Voila, Anda telah membuat sistem rekomendasi film dasar berbasis Python!
Kami sekarang akan mempersempit saran sistem rekomendasi kami menjadi berbasis genre sehingga bisa lebih tepat. Lagi pula, tidak semua orang harus menyukai The Godfather secara setara.
Mempersempit Genre
Jadi, sekarang kami akan memodifikasi sistem rekomendasi kami menjadi lebih spesifik genre:
Memasukkan
s = md.apply(lambda x: pd.Series(x['genres']),axis=1).stack().reset_index(level=1, drop=True)
s.name = 'genre'
gen_md = md.drop('genres', axis=1).join(s)
Memasukkan
def build_chart(genre, persentil=0.85):
df = gen_md[gen_md['genre'] == genre]
vote_counts = df[df['vote_count'].notnull()]['vote_count'].astype('int')
vote_averages = df[df['vote_average'].notnull()]['vote_average'].astype('int')
C = vote_averages.mean()
m = vote_counts.quantile(persentil)
memenuhi syarat = df[(df['vote_count'] >= m) & (df['vote_count'].notnull()) & (df['vote_average'].notnull())][['title', 'year ', 'jumlah_suara', 'suara_rata-rata', 'popularitas']]
memenuhi syarat['vote_count'] = memenuhi syarat['vote_count'].astype('int')
memenuhi syarat['vote_average'] = memenuhi syarat['vote_average'].astype('int')
memenuhi syarat['wr'] = memenuhi syarat.mendaftar(lambda x: (x['vote_count']/(x['vote_count']+m) * x['vote_average']) + (m/(m+x[' vote_count']) * C), axis=1)
memenuhi syarat = memenuhi syarat.sort_values('wr', ascending=False).head(250)
kembali memenuhi syarat
Kami sekarang telah membuat sistem rekomendasi yang mengurutkan film dalam genre roman dan merekomendasikan yang teratas. Kami memilih genre roman karena tidak banyak muncul di chart kami sebelumnya.
Film Romantis Teratas
Memasukkan
build_chart('Romantis').head(15)
Keluaran
judul | tahun | suara_hitung | suara_rata-rata | kepopuleran | wr | |
10309 | Dilwale Dulhania Le Jayenge | 1995 | 661 | 9 | 34.457 | 8.565285 |
351 | Forrest Gump | 1994 | 8147 | 8 | 48.3072 | 7.971357 |
876 | Vertigo | 1958 | 1162 | 8 | 18.2082 | 7.811667 |
40251 | Namamu. | 2016 | 1030 | 8 | 34.461252 | 7.789489 |
883 | Ada yang Suka Panas | 1959 | 835 | 8 | 11.8451 | 7.745154 |
1132 | Paradiso bioskop | 1988 | 834 | 8 | 14.177 | 7.744878 |
19901 | Tukang kertas | 2012 | 734 | 8 | 7.19863 | 7.713951 |
37863 | Jalan Bernyanyi | 2016 | 669 | 8 | 10.672862 | 7.689483 |
882 | Apartemen | 1960 | 498 | 8 | 11.9943 | 7.599317 |
38718 | Pelayan wanita | 2016 | 453 | 8 | 16.727405 | 7.566166 |
3189 | Lampu Kota | 1931 | 444 | 8 | 10.8915 | 7.558867 |
24886 | Penampilannya | 2014 | 262 | 8 | 5.71127 | 7.331363 |
45437 | Dalam Detak Jantung | 2017 | 146 | 8 | 20.82178 | 7.003959 |
1639 | Raksasa | 1997 | 7770 | 7 | 26.8891 | 6.981546 |
19731 | Buku pedoman dengan garis perak | 2012 | 4840 | 7 | 14.4881 | 6.970581 |
Sekarang, Anda memiliki sistem rekomendasi film yang menyarankan film teratas menurut genre yang dipilih. Kami merekomendasikan untuk menguji sistem rekomendasi ini dengan genre lain juga seperti Action, Drama, Suspense, dll. Bagikan tiga film teratas dalam genre favorit Anda yang disarankan oleh sistem rekomendasi di bagian komentar di bawah
Pelajari Lebih Lanjut Tentang Sistem Rekomendasi Film
Seperti yang harus Anda perhatikan sekarang, membangun sistem rekomendasi film berbasis Python, cukup sederhana. Yang Anda butuhkan hanyalah sedikit pengetahuan tentang ilmu data dan sedikit upaya untuk membuat sistem rekomendasi yang berfungsi penuh.
Namun, bagaimana jika Anda ingin membangun sistem rekomendasi yang lebih canggih? Bagaimana jika Anda ingin membuat sistem rekomendasi yang mungkin dipertimbangkan untuk digunakan oleh perusahaan besar?
Jika Anda tertarik untuk mempelajari lebih lanjut tentang sistem rekomendasi dan ilmu data, maka kami sarankan untuk mengambil kursus ilmu data. Dengan kursus, Anda akan mempelajari semua konsep dasar dan lanjutan dari ilmu data dan pembelajaran mesin. Selain itu, Anda akan belajar dari pakar industri yang akan memandu Anda selama kursus untuk membantu Anda menghindari keraguan dan kebingungan.
Di upGrad, kami menawarkan beberapa kursus ilmu data dan pembelajaran mesin. Anda dapat memilih siapa saja dari berikut ini tergantung pada minat Anda:
- Diploma PG dalam Ilmu Data
- Master of Science dalam Ilmu Data
- Sertifikasi PG dalam Ilmu Data
- Diploma PG dalam Pembelajaran Mesin dan AI
- Master of Science dalam Pembelajaran Mesin dan AI
Terlepas dari kursus ini, kami menawarkan banyak kursus lain dalam ilmu data dan pembelajaran mesin. Pastikan untuk memeriksanya!
Pikiran Akhir
Anda sekarang tahu bagaimana membangun sistem rekomendasi film. Setelah Anda membuat sistem, pastikan untuk membagikannya dengan orang lain dan tunjukkan kemajuan Anda kepada mereka. Sistem rekomendasi memiliki beragam aplikasi sehingga mempelajarinya pasti akan memberi Anda keunggulan dalam industri ini.
Pemfilteran kolaboratif adalah jenis sistem rekomendasi yang mendekati membangun model berdasarkan preferensi pengguna. Riwayat pengguna bertindak sebagai kumpulan data untuk pemfilteran kolaboratif. Pemfilteran kolaboratif terdiri dari 2 jenis yang disebutkan di bawah ini: Pemfilteran berbasis konten mengumpulkan data dari pengguna dan menyarankan item yang sesuai. Beberapa kelebihannya, serta kekurangannya, disebutkan di bawah ini: Algoritma penyaringan kolaboratif menjadi algoritma penggerak utama untuk banyak aplikasi populer. Semakin banyak bisnis yang berfokus pada penyampaian konten pribadi yang kaya. Misalnya, Anda mungkin telah melihat pesan ini di banyak situs web e-niaga . Pelanggan yang membeli ini juga membeli.Apa itu pemfilteran kolaboratif dan apa jenisnya?
1. Pemfilteran kolaboratif berbasis pengguna : Gagasan di balik jenis pemfilteran kolaboratif ini adalah bahwa kami mengambil pengguna untuk preferensi, katakanlah "A" dan temukan pengguna lain yang memiliki preferensi serupa dan kemudian berikan "A" preferensi pengguna ini yang diinginkannya. belum ditemui.
Pemfilteran kolaboratif berbasis item : Di sini, alih-alih menemukan pengguna dengan preferensi serupa, kami menemukan film yang mirip dengan selera "A" dan merekomendasikan film yang belum ditonton. Apa kelebihan dan kekurangan pemfilteran berbasis konten?
Keuntungan
1. Tidak seperti pemfilteran kolaboratif, model tidak perlu mengumpulkan data tentang pengguna lain dengan preferensi yang sama karena model ini mengambil saran dari pengguna utama itu sendiri.
2. Model dapat merekomendasikan beberapa film terbaik kepada Anda sesuai dengan preferensi Anda yang hanya beberapa orang lain yang telah menontonnya.
Kekurangan
1. Teknik ini membutuhkan banyak informasi tentang domain tertentu sehingga kualitas fitur yang diberikannya kurang lebih sama dengan fitur buatan tangan.
2. Kemampuannya untuk merekomendasikan film terbatas karena hanya berfungsi sesuai dengan minat pengguna yang ada. Aplikasi populer mana yang menggunakan algoritma penyaringan kolaboratif?
Berikut ini adalah beberapa aplikasi yang memiliki basis pengguna populer di seluruh dunia:
1. YouTube menggunakan algoritme ini bersama dengan beberapa algoritme kuat lainnya untuk memberikan rekomendasi video di beranda.
2. Website e-commerce seperti Amazon, Flipkart, dan Myntra juga menggunakan algoritma ini untuk memberikan rekomendasi produk.
3. Platform streaming video adalah contoh terbesar di sini yang menggunakan peringkat pengguna, peringkat rata-rata, dan konten terkait untuk memberikan saran yang dipersonalisasi.