Stwórz własny system rekomendacji filmów za pomocą Pythona

Opublikowany: 2021-03-09

Zastanawiasz się, w jaki sposób Netflix proponuje filmy, które tak bardzo pasują do Twoich zainteresowań? A może chcesz zbudować system, który może podsuwać takie sugestie swoim użytkownikom?

Jeśli Twoja odpowiedź brzmiała tak, to trafiłeś we właściwe miejsce, ponieważ ten artykuł nauczy Cię, jak zbudować system rekomendacji filmów przy użyciu Pythona.

Jednak zanim zaczniemy dyskutować „Jak” musimy zapoznać się z „Co”.

Spis treści

System rekomendacji: co to jest?

Systemy rekomendacji stały się integralną częścią naszego codziennego życia. Od sprzedawców internetowych, takich jak Amazon i Flipkart, po platformy mediów społecznościowych, takie jak YouTube i Facebook, każda duża firma cyfrowa korzysta z systemów rekomendacji, aby zapewnić swoim klientom spersonalizowane wrażenia użytkownika.

Oto kilka przykładów systemów rekomendacji w Twoim codziennym życiu:

  • Sugestie, które otrzymujesz od Amazon przy zakupie produktów, są wynikiem systemu rekomendacji.
  • YouTube korzysta z systemu rekomendacji, aby sugerować filmy dostosowane do Twojego gustu.
  • Netflix ma słynny system rekomendacji do sugerowania programów i filmów zgodnie z Twoimi zainteresowaniami.

System rekomendacji sugeruje użytkownikom produkty na podstawie danych. Te dane mogą dotyczyć wprowadzonych zainteresowań, historii itp. Jeśli studiujesz uczenie maszynowe i sztuczną inteligencję, musisz przestudiować systemy rekomendujące, ponieważ stają się one coraz bardziej popularne i zaawansowane.

Rodzaje systemów rekomendacji

Istnieją dwa rodzaje systemów rekomendacji:

1. Systemy rekomendacji oparte na współpracy

Wspólny system rekomendacji sugeruje elementy według podobieństwa podobnych użytkowników dla tego elementu. Grupuje użytkowników o podobnych zainteresowaniach i gustach oraz odpowiednio sugeruje ich produkty.

Załóżmy na przykład, że ty i jeszcze jeden użytkownik lubiliście Sholay. Teraz, po obejrzeniu Sholay i polubieniu go, drugi użytkownik polubił Golmaala. Ponieważ Ty i inny użytkownik macie podobne zainteresowania, system rekomendacji sugerowałby oglądanie Golmaala na podstawie tych danych. To jest wspólne filtrowanie.

2. Systemy rekomendacji oparte na treści

System rekomendacji oparty na treści sugeruje elementy na podstawie danych otrzymanych od użytkownika. Może być oparty na danych jawnych („polubienia”, „udostępnienia” itp.) lub niejawnych (historia oglądania). System rekomendacji wykorzystałby te dane do stworzenia profilu specyficznego dla użytkownika i sugerował elementy oparte na tym profilu.

Budowanie podstawowego systemu rekomendacji filmów

Teraz, gdy omówiliśmy już podstawy systemów rekomendacji, zacznijmy budować system rekomendacji filmów.

Możemy zacząć budować system rekomendacji filmów oparty na Pythonie, korzystając z pełnego zestawu danych MovieLens . Ten zbiór danych zawiera ponad 26 milionów ocen, 750 000 aplikacji tagów, które są stosowane do ponad 45 000 filmów. Dane genomu znacznika obecne w tym zbiorze danych z ponad 12 milionami wyników trafności.

Używamy pełnego zestawu danych do stworzenia podstawowego systemu rekomendacji filmów. Możesz jednak użyć mniejszego zestawu danych w tym projekcie. Najpierw musimy zaimportować wszystkie wymagane biblioteki:

Podstawowy system rekomendacji filmów oparty na Pythonie sugerowałby filmy zgodnie z popularnością i gatunkiem filmu. Ten system działa w oparciu o założenie, że popularne filmy z aklamacją krytyczną będą miały duże prawdopodobieństwo, że spodobają się szerszej publiczności. Pamiętaj, że taki system rekomendacji filmów nie daje spersonalizowanych sugestii.

Aby to wdrożyć, posortujemy filmy według ich popularności i oceny, a następnie przekażemy argument gatunkowy, aby uzyskać najlepsze filmy w gatunku:

Wejście

śr = pd. read_csv('../input/movies_metadata.csv')

md.głowa()

Wyjście

dorosły należy_do_kolekcji budżet gatunki wideo ID imdb_id Oryginalny tytuł Przegląd przychód tytuł
Fałszywe ('id'L 10194, 'name': 'Kolekcja Toy Story') 30000000 [{'id': 16, 'name': 'Animation'}… Fałszywe 862 tt0114709 Zabawka Prowadzone przez Woody'ego zabawki Andy'ego żyją szczęśliwie… 373554033 Zabawka
1 Fałszywe NaN 65000000 {{'id': 12, 'name': 'Adventure'}… Fałszywe 8844 tt0113497 Jumanji Kiedy rodzeństwo Judy i Peter… 262797249 Jumanji
2 Fałszywe ('id': 119050, 'imię': 'zrzędliwy starcy) 0 {{'id': 10749, 'name': 'Romans'}… Fałszywe 15602 tt0113228 Zrzędliwi starcy Rodzinny ślub na nowo rozpala starożytne… 0 Zrzędliwi starcy
3 Fałszywe NaN 16000000 {{'id': 35, 'name': 'Komedia'}… Fałszywe 31357 tt0114885 Czekać na wydech Oszukany, źle potraktowany i nadepnięty… 81452156 Czekać na wydech

Wejście

md['genres'] = md['genres'].fillna('[]').apply(literal_eval).apply(lambda x: [i['name'] for i in x] if isinstance(x, lista ) w przeciwnym razie [])

Wzór na nasz wykres

Do stworzenia naszego zestawienia najlepszych filmów wykorzystaliśmy oceny TMDB. Do stworzenia naszego wykresu użyjemy formuły ważonej oceny IMDB, która wygląda następująco:

Ocena ważona (WR) = (iaouaouaouaouaou)

Tutaj v oznacza liczbę głosów, które otrzymał film, m to minimalna liczba głosów, jaką film powinien uzyskać na liście, R oznacza średnią ocenę filmu, a C to średni głos na cały raport .

Budowanie wykresów

Teraz, gdy mamy już zestaw danych i formułę, możemy rozpocząć tworzenie wykresu. Do naszych list przebojów dodamy tylko te filmy, które mają co najmniej 95% głosów. Zaczniemy od stworzenia wykresu top 250.

Wejście

liczba_głosów = md[md['liczba_głosów'].notnull()]['liczba_głosów'].astype('int')

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

C = głosowanie_średnie.średnia()

C

Wyjście

5,244896612406511

Wejście

m = liczba_głosów.kwantyl (0,95)

m

Wyjście

434,0

Wejście

md['rok'] = pd.to_datetime(md['data_wypuszczenia'], błędy='przymus').apply(lambda x: str(x).split('-')[0] jeśli x!= np. nan inny np. nan)

Wejście

kwalifikowana = md[(md['liczba_głosów'] >= m) & (md['liczba_głosów'].notnull()) & (md['średnia_głosów'].notnull())][['tytuł', 'rok ', 'vote_count', 'vote_average', 'popularity', 'gatres']]

kwalifikowana['liczba_głosów'] = kwalifikowana['liczba_głosów'].astype('int')

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

kwalifikowany.kształt

Wyjście

(2274, 6)

Jak widać, aby film znalazł się na naszej liście, musi mieć minimum 434 głosów. Być może zauważyłeś, że średnia ocena filmu, który musi znaleźć się na naszym wykresie, wynosi 5,24.

Wejście

def weighted_rating(x):

v = x['liczba_głosów']

R = x['średnia_głosu']

zwrot (v/(v+m) * R) + (m/(m+v) * C)

Wejście

kwalifikowany['wr'] = kwalifikowany.apply(weighted_rating, axis=1)

Wejście

kwalifikowane = kwalifikowane.sort_values('wr', ascending=False).head(250)

Mając to wszystko na swoim miejscu, zbudujmy wykres:

Najlepsze filmy ogółem

Wejście

wykwalifikowana.głowa(15)

Wyjście

tytuł rok liczba_głosów głosowanie_średnia popularność gatunki wr
15480 Początek 2010 14075 8 29.1081 [Akcja, thriller, science fiction, tajemnica,… 7.917588
12481 Mroczny rycerz 2008 12269 8 123,167 [Dramat, Akcja, Kryminał, Thriller] 7.905871
22879 Międzygwiezdny 2014 11187 8 32.2135 [Przygodowe, Dramat, Science Fiction] 7.897107
2843 Klub walki 1999 9678 8 63,8696 [Dramat] 7.881753
4863 Władca Pierścieni: Drużyna Pierścienia 2001 8892 8 32.0707 [Przygoda, Fantazja, Akcja] 7.871787
292 Pulp Fiction 1994 8670 8 140,95 [Thriller, zbrodnia] 7.868660
314 skazani na Shawshank 1994 8358 8 51,6454 [Dramat, Zbrodnia] 7,864000
7000 Władca Pierścieni: Powrót króla 2003 8226 8 29.3244 [Przygoda, Fantazja, Akcja] 7.861927
351 Forrest Gump 1994 8147 8 48.3072 [Komedia, Dramat, Romans] 7.860656
5814 Władca Pierścieni: Dwie Wieże 2002 7641 8 29.4235 [Przygoda, Fantazja, Akcja] 7.851924
256 Gwiezdne Wojny 1977 6778 8 42.1497 [Przygoda, Akcja, Science Fiction] 7.834205
1225 Powrót do przyszłości 1985 6239 8 25,7785 [Przygodowe, Komedia, Science Fiction, Rodzina] 7.820813
834 Ojciec chrzestny 1972 6024 8 41.1093 [Dramat, Zbrodnia] 7,814847
1154 Imperium kontratakuje 1980 5998 8 19,471 [Przygoda, Akcja, Science Fiction] 7,814099
46 Se7en 1995 5915 8 18.4574 [Zbrodnia, tajemnica, thriller]

Voila, stworzyłeś podstawowy system rekomendacji filmów oparty na Pythonie!

Zawęzimy teraz nasze sugestie systemu rekomendacji do gatunku, aby mógł być bardziej precyzyjny. W końcu nie jest konieczne, aby wszyscy jednakowo lubili Ojca Chrzestnego.

Zawężenie gatunku

Dlatego teraz zmodyfikujemy nasz system rekomendacji, aby był bardziej dostosowany do gatunku:

Wejście

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

s.name = 'gatunek'

gen_md = md.drop('gatunki', oś=1).join(s)

Wejście

def build_chart(gatunek, percentyl=0,85):

df = gen_md[gen_md['gatunek'] == gatunek]

liczba_głosów = df[df['liczba_głosów'].notnull()]['liczba_głosów'].astype('int')

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

C = głosowanie_średnie.średnia()

m = liczba_głosów.kwantyl(percentyl)

kwalifikowana = df[(df['liczba_głosów'] >= m) & (df['liczba_głosów'].notnull()) & (df['średnia_głosów'].notnull())][['tytuł', 'rok ', 'vote_count', 'vote_average', 'popularity']]

kwalifikowana['liczba_głosów'] = kwalifikowana['liczba_głosów'].astype('int')

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

kwalifikowana['wr'] = kwalifikowana.apply(lambda x: (x['liczba_głosów']/(x['liczba_głosów']+m) * x['średnia_głosów']) + (m/(m+x[' liczba_głosów']) * C), oś=1)

kwalifikowane = kwalifikowane.sort_values('wr', ascending=False).head(250)

zwrot kwalifikowany

Stworzyliśmy teraz system rekomendacji, który sortuje filmy z gatunku romansów i poleca najlepsze. Wybraliśmy gatunek romansów, ponieważ nie pojawiał się on zbyt często w naszym poprzednim zestawieniu.

Najlepsze filmy romantyczne

Wejście

build_chart('Romans').head(15)

Wyjście

tytuł rok liczba_głosów głosowanie_średnia popularność wr
10309 Dilwale Dulhania Le Jayenge 1995 661 9 34.457 8.565285
351 Forrest Gump 1994 8147 8 48.3072 7.971357
876 Zawrót głowy 1958 1162 8 18.2082 7.811667
40251 Twoje imię. 2016 1030 8 34.461252 7.789489
883 Niektórzy lubią gorąco 1959 835 8 11.8451 7,745154
1132 Kino Paradiso 1988 834 8 14.177 7,744878
19901 Papiernik 2012 734 8 7.19863 7.713951
37863 Śpiewaj ulica 2016 669 8 10.672862 7.689483
882 Apartament 1960 498 8 11.9943 7.599317
38718 Służebnica 2016 453 8 16.727405 7,566166
3189 Miejskie światła 1931 444 8 10.8915 7.558867
24886 sposób, w jaki on wygląda 2014 262 8 5.71127 7.331363
45437 W mgnieniu oka 2017 146 8 20,82178 7.003959
1639 Tytaniczny 1997 7770 7 26,8891 6.981546
19731 Poradnik dotyczący srebrnych podszewek 2012 4840 7 14.4881 6.970581

Teraz masz system rekomendacji filmów, który sugeruje najlepsze filmy według wybranego gatunku. Zalecamy przetestowanie tego systemu rekomendacji również z innymi gatunkami, takimi jak akcja, dramat, suspens itp. Podziel się trzema najlepszymi filmami ze swojego ulubionego gatunku, który sugeruje system rekomendacji w sekcji komentarzy poniżej

Dowiedz się więcej o systemie rekomendacji filmów

Jak już zapewne zauważyłeś, budowanie systemu rekomendacji filmów opartego na Pythonie jest dość proste. Wystarczy odrobina wiedzy z zakresu data science i trochę wysiłku, aby stworzyć w pełni funkcjonalny system rekomendacji.

Co jednak, jeśli chcesz budować bardziej zaawansowane systemy rekomendujące? Co zrobić, jeśli chcesz stworzyć system rekomendacji, którego użycie może rozważyć duża firma?

Jeśli chcesz dowiedzieć się więcej o systemach rekomendujących i nauce o danych, zalecamy wzięcie udziału w kursie nauki o danych. Podczas kursu poznasz wszystkie podstawowe i zaawansowane koncepcje nauki o danych i uczenia maszynowego. Ponadto będziesz uczyć się od ekspertów branżowych, którzy poprowadzą Cię przez cały kurs, aby pomóc Ci uniknąć wątpliwości i nieporozumień.

W upGrad oferujemy wiele kursów z zakresu nauki o danych i uczenia maszynowego. Możesz wybrać dowolny z poniższych, w zależności od Twoich zainteresowań:

  • Dyplom PG z nauki o danych
  • Master of Science in Data Science
  • Certyfikacja PG w dziedzinie nauki o danych
  • Dyplom PG z uczenia maszynowego i sztucznej inteligencji
  • Master of Science w Machine Learning i AI

Oprócz tych kursów oferujemy wiele innych kursów z zakresu data science i uczenia maszynowego. Koniecznie je sprawdź!

Końcowe przemyślenia

Wiesz już, jak zbudować system rekomendacji filmów. Po utworzeniu systemu, podziel się nim z innymi i pokaż im swoje postępy. Systemy rekomendowane mają różnorodny zakres zastosowań, więc poznanie ich z pewnością da Ci przewagę w branży.

Co to jest filtrowanie grupowe i jakie są jego rodzaje?

Collaborative filtering to rodzaj systemu rekomendacji, który zbliża się do budowania modelu w oparciu o preferencje użytkownika. Historia użytkowników działa jak zbiór danych do filtrowania grupowego. Filtrowanie grupowe ma 2 typy, które wymieniono poniżej:

1. Filtrowanie grupowe oparte na użytkownikach : Ideą tego typu filtrowania grupowego jest to, że bierzemy użytkownika za preferencję, powiedzmy „A” i znajdujemy innych użytkowników o podobnych preferencjach, a następnie dostarczamy „A” te preferencje tych użytkowników, które jeszcze się nie spotkał.
Filtrowanie zespołowe oparte na elementach : tutaj zamiast wyszukiwać użytkowników o podobnych preferencjach, znajdujemy filmy podobne do gustu „A” i polecamy filmy, których ta osoba jeszcze nie obejrzała.

Jakie są zalety i wady filtrowania opartego na treści?

Filtrowanie oparte na treści zbiera dane od użytkownika i odpowiednio sugeruje pozycje. Niektóre z jego zalet, a także wady, wymieniono poniżej:
Zalety
1. W przeciwieństwie do filtrowania grupowego model nie musi zbierać danych o innych użytkownikach o podobnych preferencjach, ponieważ pobiera sugestie od samego użytkownika głównego.
2. Modelka może polecić Ci jedne z najlepszych filmów zgodnie z Twoimi preferencjami, które oglądało tylko kilka innych osób.
Niedogodności
1. Ta technika wymaga dużej ilości informacji o określonej domenie, więc jakość dostarczanych przez nią funkcji jest mniej więcej taka sama, jak funkcji ręcznie zaprojektowanych.
2. Jego zdolność do polecania filmów jest ograniczona, ponieważ działa tylko zgodnie z istniejącymi zainteresowaniami użytkowników.

Które popularne aplikacje używają algorytmów filtrowania zespołowego?

Algorytm kolaboracyjnego filtrowania staje się głównym algorytmem napędowym wielu popularnych aplikacji. Coraz więcej firm koncentruje się na dostarczaniu bogatych, spersonalizowanych treści. Na przykład prawdopodobnie widziałeś tę wiadomość w wielu witrynach e-commerce Klienci, którzy to kupili, również kupili.
Oto niektóre z aplikacji, które mają popularną bazę użytkowników na całym świecie:
1. YouTube używa tego algorytmu wraz z kilkoma innymi potężnymi algorytmami do dostarczania rekomendacji wideo na stronie głównej.
2. Witryny e-commerce, takie jak Amazon, Flipkart i Myntra, również używają tego algorytmu do dostarczania rekomendacji produktów.
3. Największym przykładem są tu platformy do strumieniowego przesyłania wideo, które wykorzystują ocenę użytkowników, średnią ocenę i powiązane treści w celu dostarczania spersonalizowanych sugestii.