Erstellen Sie Ihr eigenes Filmempfehlungssystem mit Python
Veröffentlicht: 2021-03-09Fragen Sie sich, wie Netflix Filme vorschlägt, die so sehr zu Ihren Interessen passen? Oder möchten Sie vielleicht ein System bauen, das seinen Benutzern auch solche Vorschläge machen kann?
Wenn Ihre Antwort ja war, dann sind Sie hier genau richtig, denn in diesem Artikel erfahren Sie, wie Sie mit Python ein Filmempfehlungssystem erstellen.
Bevor wir jedoch beginnen, das „Wie“ zu diskutieren, müssen wir mit dem „Was“ vertraut sein.
Inhaltsverzeichnis
Empfehlungssystem: Was ist das?
Empfehlungssysteme sind aus unserem Alltag nicht mehr wegzudenken. Von Online-Händlern wie Amazon und Flipkart bis hin zu Social-Media-Plattformen wie YouTube und Facebook nutzt jedes große digitale Unternehmen Empfehlungssysteme, um seinen Kunden ein personalisiertes Benutzererlebnis zu bieten.
Einige Beispiele für Empfehlungssysteme in Ihrem Alltag sind:
- Die Vorschläge, die Sie beim Kauf von Produkten von Amazon erhalten, sind das Ergebnis eines Empfehlungssystems.
- YouTube verwendet ein Empfehlungssystem, um Videos vorzuschlagen, die Ihrem Geschmack entsprechen.
- Netflix hat ein berühmtes Empfehlungssystem, um Shows und Filme entsprechend Ihren Interessen vorzuschlagen.
Ein Empfehlungssystem schlägt Benutzern Produkte anhand von Daten vor. Bei diesen Daten kann es sich um die eingegebenen Interessen, den Verlauf usw. des Benutzers handeln. Wenn Sie sich mit maschinellem Lernen und KI befassen, müssen Sie Empfehlungssysteme studieren, da sie immer beliebter und fortschrittlicher werden.
Arten von Empfehlungssystemen
Es gibt zwei Arten von Empfehlungssystemen:
1. Kollaborative Empfehlungssysteme
Ein kollaboratives Empfehlungssystem schlägt Artikel entsprechend der Ähnlichkeit ähnlicher Benutzer für diesen Artikel vor. Es gruppiert Benutzer mit ähnlichen Interessen und Vorlieben und schlägt ihre Produkte entsprechend vor.
Angenommen, Sie und ein anderer Benutzer mochten Sholay. Jetzt, nachdem er Sholay gesehen und gemocht hatte, mochte der andere Benutzer Golmaal. Da Sie und der andere Benutzer ähnliche Interessen haben, würde das Empfehlungssystem Ihnen basierend auf diesen Daten vorschlagen, Golmaal anzusehen. Dies ist kollaboratives Filtern.
2. Inhaltsbasierte Empfehlungssysteme
Ein inhaltsbasiertes Empfehlungssystem schlägt Artikel basierend auf den Daten vor, die es von einem Benutzer erhält. Es könnte auf expliziten Daten ('Likes', 'Shares' usw.) oder impliziten Daten (Watch History) basieren. Das Empfehlungssystem würde diese Daten verwenden, um ein benutzerspezifisches Profil zu erstellen, und würde Artikel basierend auf diesem Profil vorschlagen.
Aufbau eines grundlegenden Filmempfehlungssystems
Nachdem wir nun die Grundlagen von Empfehlungssystemen behandelt haben, beginnen wir mit dem Aufbau eines Filmempfehlungssystems.
Wir können mit dem Aufbau eines Filmempfehlungssystems auf Python-Basis beginnen, indem wir den vollständigen MovieLens - Datensatz verwenden. Dieser Datensatz enthält mehr als 26 Millionen Bewertungen, 750.000 Tag-Anwendungen, die auf über 45.000 Filme angewendet werden. Die in diesem Datensatz enthaltenen Tag-Genomdaten mit mehr als 12 Millionen Relevanzwerten.
Wir verwenden den vollständigen Datensatz, um ein grundlegendes Filmempfehlungssystem zu erstellen. Es steht Ihnen jedoch frei, für dieses Projekt ein kleineres Dataset zu verwenden. Zuerst müssen wir alle erforderlichen Bibliotheken importieren:
Ein grundlegendes Filmempfehlungssystem auf Python-Basis würde Filme nach Popularität und Genre des Films vorschlagen. Dieses System basiert auf der Vorstellung, dass populäre Filme mit kritischem Beifall eine hohe Wahrscheinlichkeit haben, vom allgemeinen Publikum gemocht zu werden. Denken Sie daran, dass ein solches Filmempfehlungssystem keine personalisierten Vorschläge macht.
Um es zu implementieren, sortieren wir die Filme nach ihrer Popularität und Bewertung und übergeben ein Genre-Argument, um die Top-Filme eines Genres zu erhalten:
Eingang
md = pd. read_csv('../input/movies_metadata.csv')
md.head()
Ausgabe
Erwachsene | gehört_zur_Sammlung | Budget | Genres | Video | Ich würde | imdb_id | originaler Titel | Überblick | Einnahmen | Titel | |||||||
Falsch | ('id'L 10194, 'name': 'Toy Story Collection') | 30000000 | [{'id': 16, 'name': 'Animation'}… | Falsch | 862 | tt0114709 | Spielzeuggeschichte | Angeführt von Woody leben Andys Spielzeuge glücklich… | 373554033 | Spielzeuggeschichte | |||||||
1 | Falsch | NaN | 65000000 | {{'id': 12, 'name': 'Abenteuer'}… | Falsch | 8844 | tt0113497 | Jumanji | Als die Geschwister Judy und Peter… | 262797249 | Jumanji | ||||||
2 | Falsch | ('id': 119050, 'name': 'Grumpy Old Men) | 0 | {{'id': 10749, 'name': 'Romanze'}… | Falsch | 15602 | tt0113228 | Mürrische alte Männer | Eine Hochzeit in der Familie lässt die alten… | 0 | Mürrischere alte Männer | ||||||
3 | Falsch | NaN | 16000000 | {{'id': 35, 'name': 'Komödie'}… | Falsch | 31357 | tt0114885 | Warten aufs Ausatmen | Betrogen, misshandelt und getreten… | 81452156 | Warten aufs Ausatmen |
Eingang
md['genres'] = md['genres'].fillna('[]').apply(literal_eval).apply(lambda x: [i['name'] for i in x] if isinstance(x, list ) anders [])
Die Formel für unser Diagramm
Für die Erstellung unserer Tabelle der Top-Filme haben wir die TMDB-Bewertungen verwendet. Wir werden die gewichtete Bewertungsformel von IMDB verwenden, um unser Diagramm zu erstellen, das wie folgt aussieht:
Gewichtete Bewertung (WR) = (iaouaouaouaouaou)
Hier steht v für die Anzahl der Stimmen, die ein Film erhalten hat, m ist die Mindestanzahl an Stimmen, die ein Film in der Tabelle haben sollte, R steht für die durchschnittliche Bewertung des Films und C ist die durchschnittliche Bewertung für den gesamten Bericht .
Erstellen der Diagramme
Nachdem wir nun den Datensatz und die Formel erstellt haben, können wir mit dem Erstellen des Diagramms beginnen. Wir nehmen nur die Filme in unsere Charts auf, die mindestens 95 % Stimmen haben. Wir beginnen mit der Erstellung eines Top-250-Diagramms.
Eingang
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
Ausgabe
5.244896612406511
Eingang
m = vote_counts.quantile(0.95)
m
Ausgabe
434,0
Eingang
md['year'] = pd.to_datetime(md['release_date'], errors='coerce').apply(lambda x: str(x).split('-')[0] if x != np. nan sonst np.nan)
Eingang
qualifiziert = md[(md['vote_count'] >= m) & (md['vote_count'].notnull()) & (md['vote_average'].notnull())][['title', 'year ', 'vote_count', 'vote_average', 'popularity', 'genres']]
qualifiziert['vote_count'] = qualifiziert['vote_count'].astype('int')
Qualified['vote_average'] = Qualified['vote_average'].astype('int')
qualifizierte.Form
Ausgabe
(2274, 6)
Wie Sie sehen können, muss ein Film mindestens 434 Stimmen haben, um einen Platz in unseren Charts zu bekommen. Sie haben vielleicht bemerkt, dass die durchschnittliche Bewertung, die ein Film haben muss, um in unsere Tabelle aufgenommen zu werden, 5,24 beträgt.
Eingang
def gewichtete_Bewertung(x):
v = x['vote_count']
R = x['vote_average']
Rückgabe (v/(v+m) * R) + (m/(m+v) * C)
Eingang
Qualified['wr'] = Qualified.Apply(weighted_rating, axis=1)
Eingang
Qualified = Qualified.sort_values('wr', ascending=False).head(250)
Wenn all dies vorhanden ist, erstellen wir das Diagramm:
Top-Filme insgesamt
Eingang
qualifiziert.head(15)
Ausgabe
Titel | Jahr | vote_count | vote_average | Popularität | Genres | wr | |
15480 | Beginn | 2010 | 14075 | 8 | 29.1081 | [Action, Thriller, Science Fiction, Mystery, A… | 7.917588 |
12481 | Der dunkle Ritter | 2008 | 12269 | 8 | 123.167 | [Drama, Action, Krimi, Thriller] | 7.905871 |
22879 | Interstellar | 2014 | 11187 | 8 | 32.2135 | [Abenteuer, Drama, Science-Fiction] | 7.897107 |
2843 | Fight Club | 1999 | 9678 | 8 | 63.8696 | [Theater] | 7.881753 |
4863 | Der Herr der Ringe: Die Gefährten des Rings | 2001 | 8892 | 8 | 32.0707 | [Abenteuer, Fantasy, Action] | 7.871787 |
292 | Schundliteratur | 1994 | 8670 | 8 | 140,95 | [Thriller, Krimi] | 7,868660 |
314 | Die Shawshank-Erlösung | 1994 | 8358 | 8 | 51.6454 | [Drama, Krimi] | 7.864000 |
7000 | Der Herr der Ringe: Die Rückkehr des Königs | 2003 | 8226 | 8 | 29.3244 | [Abenteuer, Fantasy, Action] | 7.861927 |
351 | Forrest Gump | 1994 | 8147 | 8 | 48.3072 | [Komödie, Drama, Romanze] | 7.860656 |
5814 | Der Herr der Ringe: Die zwei Türme | 2002 | 7641 | 8 | 29.4235 | [Abenteuer, Fantasy, Action] | 7,851924 |
256 | Krieg der Sterne | 1977 | 6778 | 8 | 42.1497 | [Abenteuer, Action, Science-Fiction] | 7.834205 |
1225 | Zurück in die Zukunft | 1985 | 6239 | 8 | 25.7785 | [Abenteuer, Komödie, Science Fiction, Familie] | 7.820813 |
834 | Der Pate | 1972 | 6024 | 8 | 41.1093 | [Drama, Krimi] | 7.814847 |
1154 | Das Imperium schlägt zurück | 1980 | 5998 | 8 | 19.471 | [Abenteuer, Action, Science-Fiction] | 7.814099 |
46 | Se7en | 1995 | 5915 | 8 | 18.4574 | [Kriminalität, Mystery, Thriller] |
Voila, Sie haben ein grundlegendes Filmempfehlungssystem auf Python-Basis erstellt!
Wir werden die Vorschläge unseres Empfehlungssystems jetzt auf Genre-basiert eingrenzen, damit es präziser ist. Schließlich muss The Godfather nicht jedem gleich gut gefallen.
Eingrenzung des Genres
Also modifizieren wir jetzt unser Empfehlungssystem, um genrespezifischer zu sein:
Eingang
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)
Eingang
def build_chart(Genre, Perzentil=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(Perzentil)
qualifiziert = df[(df['vote_count'] >= m) & (df['vote_count'].notnull()) & (df['vote_average'].notnull())][['title', 'year ', 'vote_count', 'vote_average', 'popularity']]
qualifiziert['vote_count'] = qualifiziert['vote_count'].astype('int')
Qualified['vote_average'] = Qualified['vote_average'].astype('int')
Qualified['wr'] = Qualified.apply(lambda x: (x['vote_count']/(x['vote_count']+m) * x['vote_average']) + (m/(m+x[' vote_count']) * C), Achse=1)
Qualified = Qualified.sort_values('wr', ascending=False).head(250)
Rückkehr qualifiziert
Wir haben jetzt ein Empfehlungssystem erstellt, das Filme im Romantik-Genre sortiert und die besten empfiehlt. Wir haben uns für das Romantik-Genre entschieden, weil es in unserer vorherigen Tabelle nicht oft auftauchte.
Top Filme in Romantik
Eingang
build_chart('Romanze').head(15)
Ausgabe
Titel | Jahr | vote_count | vote_average | Popularität | wr | |
10309 | Dilwale Dulhania Le Jayenge | 1995 | 661 | 9 | 34.457 | 8.565285 |
351 | Forrest Gump | 1994 | 8147 | 8 | 48.3072 | 7,971357 |
876 | Schwindel | 1958 | 1162 | 8 | 18.2082 | 7.811667 |
40251 | Dein Name. | 2016 | 1030 | 8 | 34.461252 | 7.789489 |
883 | Manche mögen es heiß | 1959 | 835 | 8 | 11.8451 | 7.745154 |
1132 | Kinoparadies | 1988 | 834 | 8 | 14.177 | 7.744878 |
19901 | Papiermann | 2012 | 734 | 8 | 7.19863 | 7.713951 |
37863 | Singen Sie Straße | 2016 | 669 | 8 | 10.672862 | 7.689483 |
882 | Das Apartment | 1960 | 498 | 8 | 11.9943 | 7,599317 |
38718 | Die Magd | 2016 | 453 | 8 | 16.727405 | 7.566166 |
3189 | Lichter der Stadt | 1931 | 444 | 8 | 10.8915 | 7.558867 |
24886 | Die Art, wie er aussieht | 2014 | 262 | 8 | 5.71127 | 7.331363 |
45437 | In einem Herzschlag | 2017 | 146 | 8 | 20.82178 | 7.003959 |
1639 | Titanic | 1997 | 7770 | 7 | 26.8891 | 6,981546 |
19731 | Silver Linings Playbook | 2012 | 4840 | 7 | 14.4881 | 6.970581 |
Jetzt haben Sie ein Filmempfehlungssystem, das Top-Filme nach einem ausgewählten Genre vorschlägt. Wir empfehlen, dieses Empfehlungssystem auch mit anderen Genres wie Action, Drama, Suspense usw. zu testen. Teilen Sie die drei besten Filme in Ihrem Lieblingsgenre, das das Empfehlungssystem im Kommentarbereich unten vorschlägt
Erfahren Sie mehr über ein Filmempfehlungssystem
Wie Sie bestimmt schon bemerkt haben, ist der Aufbau eines auf Python basierenden Filmempfehlungssystems ziemlich einfach. Alles, was Sie brauchen, ist ein wenig Wissen über Data Science und ein wenig Aufwand, um ein voll funktionsfähiges Empfehlungssystem zu erstellen.
Was aber, wenn Sie fortschrittlichere Empfehlungssysteme erstellen möchten? Was ist, wenn Sie ein Empfehlungssystem erstellen möchten, das ein großes Unternehmen verwenden könnte?
Wenn Sie mehr über Empfehlungssysteme und Data Science erfahren möchten, empfehlen wir Ihnen, einen Data Science-Kurs zu belegen. Mit einem Kurs lernen Sie alle grundlegenden und fortgeschrittenen Konzepte der Datenwissenschaft und des maschinellen Lernens kennen. Darüber hinaus lernen Sie von Branchenexperten, die Sie durch den gesamten Kurs führen, um Ihnen dabei zu helfen, Zweifel und Verwirrung zu vermeiden.
Bei upGrad bieten wir mehrere Data Science- und Machine Learning-Kurse an. Sie können je nach Ihren Interessen jemanden aus den folgenden auswählen:
- PG Diplom in Data Science
- Master of Science in Datenwissenschaft
- PG-Zertifizierung in Data Science
- PG-Diplom in maschinellem Lernen und KI
- Master of Science in Maschinellem Lernen und KI
Neben diesen Kursen bieten wir viele weitere Kurse in Data Science und Machine Learning an. Schauen Sie sie sich unbedingt an!
Abschließende Gedanken
Jetzt wissen Sie, wie Sie ein Filmempfehlungssystem aufbauen. Nachdem Sie das System erstellt haben, stellen Sie sicher, dass Sie es mit anderen teilen und ihnen Ihren Fortschritt zeigen. Recommender-Systeme haben ein vielfältiges Anwendungsspektrum, sodass Sie sich in der Branche sicher durchsetzen können, wenn Sie sich mit ihnen vertraut machen.
Kollaboratives Filtern ist eine Art Empfehlungssystem, bei dem ein Modell basierend auf den Präferenzen des Benutzers erstellt wird. Die Historie der Benutzer dient als Datensatz für das kollaborative Filtern. Es gibt zwei Arten von kollaborativer Filterung, die unten aufgeführt sind: Die inhaltsbasierte Filterung sammelt die Daten des Benutzers und schlägt die Artikel entsprechend vor. Einige seiner Vor- und Nachteile sind im Folgenden aufgeführt: Der kollaborative Filteralgorithmus wird zum primären Treiberalgorithmus für viele populäre Anwendungen. Immer mehr Unternehmen konzentrieren sich auf die Bereitstellung umfassender personalisierter Inhalte. Zum Beispiel haben Sie diese Nachricht wahrscheinlich auf vielen E-Commerce-Websites gesehen . Kunden, die dies kaufen, haben auch gekauft.Was ist kollaboratives Filtern und welche Typen gibt es?
1. Benutzerbasiertes kollaboratives Filtern: Die Idee hinter dieser Art des kollaborativen Filterns ist, dass wir einen Benutzer als Präferenz nehmen, sagen wir „A“, und andere Benutzer mit ähnlichen Präferenzen finden und dann „A“ diese Präferenzen dieser Benutzer bereitstellen ist noch nicht begegnet.
Artikelbasiertes kollaboratives Filtern: Anstatt die Benutzer mit ähnlichen Vorlieben zu finden, finden wir Filme, die dem Geschmack von „A“ ähneln, und empfehlen die Filme, die er noch nicht gesehen hat. Was sind die Vor- und Nachteile der inhaltsbasierten Filterung?
Vorteile
1. Anders als beim kollaborativen Filtern muss das Modell keine Daten über andere Benutzer mit ähnlichen Präferenzen sammeln, da es die Vorschläge des Hauptbenutzers selbst entgegennimmt.
2. Das Model kann Ihnen nach Ihren Vorlieben einige der besten Filme empfehlen, die nur wenige andere gesehen haben.
Nachteile
1. Diese Technik erfordert viele Informationen über eine bestimmte Domäne, sodass die Qualität der bereitgestellten Funktionen mehr oder weniger der von Hand erstellten Funktionen entspricht.
2. Seine Fähigkeit, Filme zu empfehlen, ist begrenzt, da er nur nach den bestehenden Interessen der Benutzer arbeitet. Welche gängigen Anwendungen verwenden kollaborative Filteralgorithmen?
Im Folgenden sind einige der Anwendungen aufgeführt, die weltweit eine beliebte Benutzerbasis haben:
1. YouTube verwendet diesen Algorithmus zusammen mit einigen anderen leistungsstarken Algorithmen, um Videoempfehlungen auf der Startseite bereitzustellen.
2. E-Commerce-Websites wie Amazon, Flipkart und Myntra verwenden diesen Algorithmus auch, um Produktempfehlungen bereitzustellen.
3. Video-Streaming-Plattformen sind hier das größte Beispiel, die Benutzerbewertungen, Durchschnittsbewertungen und verwandte Inhalte verwenden, um personalisierte Vorschläge zu machen.