Python Kullanarak Kendi Film Öneri Sisteminizi Oluşturun
Yayınlanan: 2021-03-09Netflix'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.
İş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: İç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: İş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.Ortak filtreleme nedir ve türleri nelerdir?
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?
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?
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.