Python Kullanarak Kendi Film Öneri Sisteminizi Oluşturun

Yayınlanan: 2021-03-09

Netflix'in ilgi alanlarınıza bu kadar uygun filmleri nasıl önerdiğini merak ediyor musunuz? Ya da belki kullanıcılarına da bu tür önerilerde bulunabilecek bir sistem mi kurmak istiyorsunuz?

Cevabınız evet ise, bu makale size Python kullanarak bir film öneri sistemi oluşturmayı öğreteceği için doğru yere geldiniz.

Ancak, 'Nasıl'ı tartışmaya başlamadan önce, 'Ne'ye aşina olmalıyız.

İçindekiler

Öneri Sistemi: Nedir?

Öneri sistemleri günlük hayatımızın çok ayrılmaz bir parçası haline geldi. Amazon ve Flipkart gibi çevrimiçi perakendecilerden YouTube ve Facebook gibi sosyal medya platformlarına kadar her büyük dijital şirket, müşterilerine kişiselleştirilmiş bir kullanıcı deneyimi sağlamak için öneri sistemlerini kullanır.

Günlük yaşamınızdaki bazı öneri sistemleri örnekleri şunları içerir:

  • Ürün satın aldığınızda Amazon'dan aldığınız öneriler bir öneri sisteminin sonucudur.
  • YouTube, zevkinize uygun videolar önermek için bir öneri sistemi kullanır.
  • Netflix, ilgi alanlarınıza göre dizi ve film önermek için ünlü bir öneri sistemine sahiptir.

Bir öneri sistemi, verileri kullanarak kullanıcılara ürünler önerir. Bu veriler, kullanıcının girdiği ilgi alanları, geçmişi vb. ile ilgili olabilir. Makine öğrenimi ve yapay zeka üzerinde çalışıyorsanız, giderek daha popüler ve gelişmiş hale geldikleri için öneri sistemlerini incelemek bir zorunluluktur.

Öneri Sistemleri Türleri

İki tür öneri sistemi vardır:

1. İşbirlikçi Öneri Sistemleri

İşbirlikçi bir öneri sistemi, o öğe için benzer kullanıcıların benzerliğine göre öğeler önerir. Benzer ilgi ve zevklere sahip kullanıcıları gruplandırır ve buna göre ürünlerini önerir.

Örneğin, sizin ve başka bir kullanıcının Sholay'i beğendiğini varsayalım. Şimdi Sholay izleyip beğendikten sonra diğer kullanıcı Golmaal'ı beğendi. Siz ve diğer kullanıcı benzer ilgi alanlarına sahip olduğunuz için, öneri sistemi bu verilere dayanarak Golmaal'ı izlemenizi önerecektir. Bu işbirlikçi filtrelemedir.

2. İçerik Tabanlı Öneri Sistemleri

İçerik tabanlı bir öneri sistemi, bir kullanıcıdan aldığı verilere dayalı olarak öğeler önerir. Açık verilere ("Beğeniler", "Paylaşımlar" vb.) veya örtük verilere (izleme geçmişi) dayalı olabilir. Öneri sistemi, kullanıcıya özel bir profil oluşturmak için bu verileri kullanır ve bu profile dayalı olarak öğeler önerir.

Temel Bir Film Öneri Sistemi Oluşturma

Öneri sistemlerinin temellerini ele aldığımıza göre, şimdi bir film öneri sistemi oluşturmaya başlayalım.

MovieLens veri setinin tamamını kullanarak Python tabanlı bir film öneri sistemi oluşturmaya başlayabiliriz . Bu veri kümesi, 45.000'den fazla filme uygulanan 26 milyondan fazla derecelendirme, 750.000 etiket uygulaması içerir. Bu veri kümesinde bulunan etiket genomu verileri, 12 milyondan fazla alaka düzeyi puanına sahiptir.

Temel bir film öneri sistemi oluşturmak için tüm veri setini kullanıyoruz. Ancak, bu proje için daha küçük bir veri kümesi kullanmakta özgürsünüz. İlk olarak, gerekli tüm kitaplıkları içe aktarmamız gerekecek:

Python tabanlı temel bir film öneri sistemi, filmin popülerliğine ve türüne göre filmler önerir. Bu sistem, eleştirel beğeni toplayan popüler filmlerin genel izleyici tarafından beğenilme olasılığının yüksek olacağı düşüncesiyle çalışır. Böyle bir film tavsiye sisteminin kişiselleştirilmiş önerilerde bulunmadığını unutmayın.

Bunu uygulamak için filmleri popülerliklerine ve derecelendirmelerine göre sıralayacağız ve bir türün en iyi filmlerini elde etmek için bir tür argümanı ileteceğiz:

Giriş

md = pd. read_csv('../input/movies_metadata.csv')

md.head()

Çıktı

yetişkin ait_to_collection bütçe türler video İD imdb_id orjinal başlık genel bakış gelir Başlık
YANLIŞ ('id'L 10194, 'isim': 'Oyuncak Hikayesi Koleksiyonu') 30000000 [{'id': 16, 'name': 'Animvation'}… YANLIŞ 862 tt0114709 Oyuncak Hikayesi Woody liderliğindeki Andy'nin oyuncakları mutlu bir şekilde yaşıyor… 373554033 Oyuncak Hikayesi
1 YANLIŞ NaN 65000000 {{'id': 12, 'isim': 'Macera'}… YANLIŞ 8844 tt0113497 Jumanji Kardeşler Judy ve Peter… 262797249 Jumanji
2 YANLIŞ ('kimlik': 119050, 'ad': 'Huysuz Yaşlı Adamlar) 0 {{'id': 10749, 'isim': 'Romantik'}… YANLIŞ 15602 tt0113228 huysuz yaşlı adamlar Bir aile düğünü antik çağı yeniden canlandırıyor… 0 Huysuz Yaşlı Adamlar
3 YANLIŞ NaN 16000000 {{'id': 35, 'isim': 'Komedi'}… YANLIŞ 31357 tt0114885 Rahatlamak için bekliyor Aldatıldı, kötü muamele gördü ve adım attı… 81452156 Rahatlamak için bekliyor

Giriş

md['türler'] = md['türler'].fillna('[]').apply(literal_eval).apply(lambda x: [i['ad'] for i in x] if isinstance(x, list ) Başka [])

Grafiğimizin Formülü

En iyi filmler listemizi oluşturmak için TMDB derecelendirmelerini kullandık. Aşağıdaki gibi grafiğimizi oluşturmak için IMDB'nin ağırlıklı derecelendirme formülünü kullanacağız:

Ağırlıklı Derecelendirme (WR) = (iaouaouaouaouaou)

Burada v, bir filmin aldığı oy sayısını, m, bir filmin listede alması gereken minimum oy sayısını, R, filmin ortalama derecelendirmesini ve C, tüm rapor için ortalama oy anlamına gelir. .

Grafikleri Oluşturma

Artık veri kümesine ve formüle sahip olduğumuza göre, grafiği oluşturmaya başlayabiliriz. Listelerimize yalnızca en az %95 oyu alan filmleri ekleyeceğiz. İlk 250 grafiğini oluşturarak başlayacağız.

Giriş

oy_sayısı = md[md['vote_count'].notnull()]['vote_count'].astype('int')

oy_averages = md[md['vote_average'].notnull()]['vote_average'].astype('int')

C = oy_averages.mean()

C

Çıktı

5.244896612406511

Giriş

m = oy_sayısı. nicelik(0.95)

m

Çıktı

434.0

Giriş

md['year'] = pd.to_datetime(md['release_date'], error='coerce').apply(lambda x: str(x).split('-')[0] if x != np. nan başka np.nan)

Giriş

nitelikli = md[(md['vote_count'] >= m) & (md['vote_count'].notnull()) & (md['vote_average'].notnull())][['title', 'year ', 'oy_sayısı', 'oy_ortalama', 'popülerlik', 'türler']]

nitelikli['vote_count'] = nitelikli['vote_count'].astype('int')

nitelikli['vote_average'] = nitelikli['vote_average'].astype('int')

nitelikli.şekil

Çıktı

(2274, 6)

Gördüğünüz gibi, bir filmin listemizde yer alabilmesi için en az 434 oy alması gerekiyor. Bir filmin grafiğimize girmek için sahip olması gereken ortalama derecelendirmenin 5,24 olduğunu fark etmiş olabilirsiniz.

Giriş

def ağırlıklı_rating(x):

v = x['oy_sayısı']

R = x['oy_ortalama']

dönüş (v/(v+m) * R) + (m/(m+v) * C)

Giriş

nitelikli['wr'] = nitelikli.apply(ağırlıklı_rating, eksen=1)

Giriş

nitelikli = nitelikli.sort_values('wr', artan=Yanlış).head(250)

Tüm bunları yerine getirdikten sonra grafiği oluşturalım:

Genel Olarak En İyi Filmler

Giriş

kalifiye.kafa(15)

Çıktı

Başlık yıl oy_sayısı oy_average popülerlik türler wr
15480 Başlangıç 2010 14075 8 29.1081 [Aksiyon, Gerilim, Bilim Kurgu, Gizem, Bir… 7.917588
12481 Kara şövalye 2008 12269 8 123.167 [Drama, Aksiyon, Suç, Gerilim] 7.905871
22879 yıldızlararası 2014 11187 8 32.2135 [Macera, Dram, Bilim Kurgu] 7.897107
2843 Dövüş Kulübü 1999 9678 8 63.8696 [Drama] 7.881753
4863 Yüzüklerin Efendisi: Yüzük Kardeşliği 2001 8892 8 32.0707 [Macera, Fantezi, Aksiyon] 7.871787
292 Pulp Fiction 1994 8670 8 140.95 [Gerilim, Suç] 7.868660
314 Esaretin Bedeli 1994 8358 8 51.6454 [Drama, Suç] 7.864000
7000 Yüzüklerin Efendisi: Kralın Dönüşü 2003 8226 8 29.3244 [Macera, Fantezi, Aksiyon] 7.861927
351 Forrest Gump 1994 8147 8 48.3072 [Komedi, Dram, Romantik] 7.860656
5814 Yüzüklerin Efendisi: İki Kule 2002 7641 8 29.4235 [Macera, Fantezi, Aksiyon] 7.851924
256 Yıldız Savaşları 1977 6778 8 42.1497 [Macera, Aksiyon, Bilim Kurgu] 7.834205
1225 Geleceğe Dönüş 1985 6239 8 25.7785 [Macera, Komedi, Bilim Kurgu, Aile] 7.820813
834 vaftiz babası 1972 6024 8 41.1093 [Drama, Suç] 7.814847
1154 İmparatorluk Geri Dönüyor 1980 5998 8 19.471 [Macera, Aksiyon, Bilim Kurgu] 7.814099
46 Se7en 1995 5915 8 18.4574 [Suç, Gizem, Gerilim]

Voila, Python tabanlı temel bir film öneri sistemi oluşturdunuz!

Öneri sistemimizin önerilerini artık türe dayalı olarak daraltacağız, böylece daha kesin olabilir. Sonuçta, herkesin The Godfather'ı eşit derecede sevmesi gerekmiyor.

Türü Daraltma

Bu nedenle, şimdi öneri sistemimizi daha türe özgü olacak şekilde değiştireceğiz:

Giriş

s = md.apply(lambda x: pd.Series(x['türler']),axis=1).stack().reset_index(level=1, drop=True)

s.name = 'tür'

gen_md = md.drop('türler', eksen=1).join(ler)

Giriş

def build_chart(tür, yüzdelik = 0,85):

df = gen_md[gen_md['tür'] == tür]

oy_sayısı = df[df['vote_count'].notnull()]['vote_count'].astype('int')

oy_averages = df[df['vote_average'].notnull()]['vote_average'].astype('int')

C = oy_averages.mean()

m = oy_sayısı. nicelik(yüzdelik)

nitelikli = df[(df['vote_count'] >= m) & (df['vote_count'].notnull()) & (df['vote_average'].notnull())][['title', 'year ', 'oy_sayısı', 'oy_ortalama', 'popülerlik']]

nitelikli['vote_count'] = nitelikli['vote_count'].astype('int')

nitelikli['vote_average'] = nitelikli['vote_average'].astype('int')

nitelikli['wr'] = nitelikli.apply(lambda x: (x['vote_count']/(x['vote_count']+m) * x['vote_average']) + (m/(m+x[' oy_sayısı']) * C), eksen=1)

nitelikli = nitelikli.sort_values('wr', artan=Yanlış).head(250)

iade nitelikli

Şimdi, romantizm türündeki filmleri sıralayan ve en iyilerini öneren bir öneri sistemi oluşturduk. Romantizm türünü seçtik çünkü önceki listemizde pek görünmedi.

En İyi Romantik Filmler

Giriş

build_chart('Romantik').kafa(15)

Çıktı

Başlık yıl oy_sayısı oy_average popülerlik wr
10309 Dilwale Dulhania Le Jayenge 1995 661 9 34.457 8.565285
351 Forrest Gump 1994 8147 8 48.3072 7.971357
876 baş dönmesi 1958 1162 8 18.2082 7.811667
40251 Adınız. 2016 1030 8 34.461252 7.789489
883 Bazıları Sıcak Sever 1959 835 8 11.8451 7.745154
1132 sinema cenneti 1988 834 8 14.177 7.744878
19901 gazeteci 2012 734 8 7.19863 7.713951
37863 Şarkı Sokağı 2016 669 8 10.672862 7.689483
882 Apartman 1960 498 8 11.9943 7.599317
38718 cariye 2016 453 8 16.727405 7.566166
3189 Şehir Işıkları 1931 444 8 10.8915 7.558867
24886 Göründüğü Yol 2014 262 8 5.71127 7.331363
45437 kalp atışı 2017 146 8 20.82178 7.003959
1639 Titanik 1997 7770 7 26.8891 6.981546
19731 Umut ışığı 2012 4840 7 14.4881 6.970581

Artık, seçilen bir türe göre en iyi filmleri öneren bir film tavsiye sisteminiz var. Bu öneri sistemini Aksiyon, Drama, Gerilim vb. gibi diğer türlerle de test etmenizi öneririz. Öneri sisteminin önerdiği en sevdiğiniz türdeki ilk üç filmi aşağıdaki yorum bölümünde paylaşın

Film Öneri Sistemi Hakkında Daha Fazla Bilgi Edinin

Şimdiye kadar fark etmiş olmanız gerektiği gibi, Python tabanlı bir film öneri sistemi oluşturmak oldukça basittir. Tek ihtiyacınız olan biraz veri bilimi bilgisi ve tam işlevli bir öneri sistemi oluşturmak için biraz çaba.

Ancak, daha gelişmiş öneri sistemleri oluşturmak isterseniz ne olur? Ya büyük bir şirketin kullanmayı düşünebileceği bir tavsiye sistemi oluşturmak istiyorsanız?

Öneri sistemleri ve veri bilimi hakkında daha fazla bilgi edinmek istiyorsanız, bir veri bilimi kursu almanızı öneririz. Bir kursla, veri bilimi ve makine öğreniminin tüm temel ve gelişmiş kavramlarını öğreneceksiniz. Ayrıca, şüphe ve kafa karışıklığından kaçınmanıza yardımcı olmak için kurs boyunca size rehberlik edecek sektör uzmanlarından eğitim alacaksınız.

upGrad'da birden fazla veri bilimi ve makine öğrenimi kursu sunuyoruz. İlgi alanlarınıza bağlı olarak aşağıdakilerden birini seçebilirsiniz:

  • Veri Biliminde PG Diploması
  • Veri Biliminde Bilim Ustası
  • Veri Biliminde PG Sertifikasyonu
  • Makine Öğrenimi ve Yapay Zekada PG Diploması
  • Makine Öğrenimi ve Yapay Zekada Bilim Ustası

Bu kursların dışında, veri bilimi ve makine öğrenimi alanında birçok başka kurs sunuyoruz. Onları kontrol ettiğinizden emin olun!

Son düşünceler

Artık bir film tavsiye sisteminin nasıl oluşturulacağını biliyorsunuz. Sistemi oluşturduktan sonra mutlaka başkalarıyla paylaşın ve ilerlemenizi onlara gösterin. Öneri sistemleri çok çeşitli uygulamalara sahiptir, bu nedenle bunları öğrenmek kesinlikle size sektörde bir üstünlük sağlayacaktır.

Ortak filtreleme nedir ve türleri nelerdir?

İşbirlikçi filtreleme, kullanıcının tercihlerine göre bir model oluşturmaya yaklaşan bir tür öneri sistemidir. Kullanıcıların geçmişi, işbirlikçi filtreleme için veri kümesi görevi görür. İşbirliğine dayalı filtreleme, aşağıda belirtilen 2 türdendir:

1. Kullanıcı tabanlı ortak filtreleme : Bu tür ortak filtrelemenin arkasındaki fikir, "A" diyelim bir kullanıcıyı tercih etmemiz ve benzer tercihlere sahip diğer kullanıcıları bulmamız ve ardından bu kullanıcıların tercihlerini "A" olarak sağlamamızdır. henüz karşılaşmadı.
Öğe bazlı işbirlikçi filtreleme : Burada benzer tercihlere sahip kullanıcıları bulmak yerine “A”nın beğenisine benzer filmler buluyor ve henüz izlemediği filmleri tavsiye ediyoruz.

İçerik tabanlı filtrelemenin avantajları ve dezavantajları nelerdir?

İçerik tabanlı filtreleme, kullanıcıdan verileri toplar ve buna göre öğeleri önerir. Avantajlarından bazıları ve dezavantajları aşağıda belirtilmiştir:
Avantajlar
1. İşbirliğine dayalı filtrelemeden farklı olarak, modelin önerileri birincil kullanıcının kendisinden aldığı için benzer tercihlere sahip diğer kullanıcılar hakkında veri toplamasına gerek yoktur.
2. Model, yalnızca birkaç kişinin izlediği tercihlerinize göre size en iyi filmlerden bazılarını önerebilir.
Dezavantajları
1. Bu teknik, belirli bir alan hakkında çok fazla bilgi gerektirir, bu nedenle sağladığı özelliklerin kalitesi, elle tasarlanmış özelliklerle aşağı yukarı aynıdır.
2. Yalnızca kullanıcıların mevcut ilgi alanlarına göre çalıştığı için film önerme yeteneği sınırlıdır.

Hangi popüler uygulamalar ortak filtreleme algoritmalarını kullanır?

İşbirlikçi filtreleme algoritması, birçok popüler uygulama için birincil sürüş algoritması haline geliyor. Giderek daha fazla işletme, zengin kişiselleştirilmiş içerik sunmaya odaklanıyor. Örneğin, muhtemelen bu mesajı birçok e-ticaret sitesinde görmüşsünüzdür. Bunu satın alan müşteriler de satın almıştır.
Aşağıdakiler, dünya çapında popüler bir kullanıcı tabanına sahip uygulamalardan bazılarıdır:
1. YouTube, ana sayfada video önerileri sağlamak için bu algoritmayı diğer bazı güçlü algoritmalarla birlikte kullanır.
2. Amazon, Flipkart ve Myntra gibi e-ticaret siteleri de ürün önerileri sağlamak için bu algoritmayı kullanır.
3. Video akışı platformları, kişiselleştirilmiş öneriler sağlamak için kullanıcı derecelendirmesini, ortalama derecelendirmeyi ve ilgili içeriği kullanan en büyük örnektir.