Stwórz własny system rekomendacji filmów za pomocą Pythona
Opublikowany: 2021-03-09Zastanawiasz 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.
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: 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: 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.Co to jest filtrowanie grupowe i jakie są jego rodzaje?
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?
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?
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.