Créez votre propre système de recommandation de films à l'aide de Python

Publié: 2021-03-09

Vous demandez-vous comment Netflix propose des films qui correspondent autant à vos intérêts ? Ou peut-être souhaitez-vous créer un système qui puisse également faire de telles suggestions à ses utilisateurs ?

Si votre réponse était oui, alors vous êtes au bon endroit car cet article vous apprendra comment créer un système de recommandation de films en utilisant Python.

Cependant, avant de commencer à discuter du « comment », nous devons nous familiariser avec le « quoi ».

Table des matières

Système de recommandation : qu'est-ce que c'est ?

Les systèmes de recommandation font désormais partie intégrante de notre vie quotidienne. Des détaillants en ligne comme Amazon et Flipkart aux plateformes de médias sociaux comme YouTube et Facebook, chaque grande entreprise numérique utilise des systèmes de recommandation pour offrir une expérience utilisateur personnalisée à ses clients.

Voici quelques exemples de systèmes de recommandation dans votre vie quotidienne :

  • Les suggestions que vous recevez d'Amazon lorsque vous achetez des produits sont le résultat d'un système de recommandation.
  • YouTube utilise un système de recommandation pour suggérer des vidéos adaptées à vos goûts.
  • Netflix dispose d'un célèbre système de recommandation pour suggérer des émissions et des films en fonction de vos intérêts.

Un système de recommandation suggère des produits aux utilisateurs en utilisant des données. Ces données peuvent concerner les intérêts, l'historique, etc. saisis par l'utilisateur. Si vous étudiez l'apprentissage automatique et l'IA, il est indispensable d'étudier les systèmes de recommandation car ils deviennent de plus en plus populaires et avancés.

Types de systèmes de recommandation

Il existe deux types de systèmes de recommandation :

1. Systèmes de recommandation collaboratifs

Un système de recommandation collaboratif suggère des articles en fonction de la ressemblance d'utilisateurs similaires pour cet article. Il regroupe les utilisateurs ayant des intérêts et des goûts similaires et suggère leurs produits en conséquence.

Par exemple, supposons que vous et un autre utilisateur aimiez Sholay. Maintenant, après avoir regardé Sholay et l'avoir aimé, l'autre utilisateur a aimé Golmaal. Parce que vous et l'autre utilisateur avez des intérêts similaires, le système de recommandation vous suggère de regarder Golmaal sur la base de ces données. C'est le filtrage collaboratif.

2. Systèmes de recommandation basés sur le contenu

Un système de recommandation basé sur le contenu suggère des éléments sur la base des données qu'il reçoit d'un utilisateur. Il peut être basé sur des données explicites ("J'aime", "Partages", etc.) ou implicites (historique des vidéos regardées). Le système de recommandation utiliserait ces données pour créer un profil spécifique à l'utilisateur et suggérerait des éléments basés sur ce profil.

Construire un système de recommandation de films de base

Maintenant que nous avons couvert les bases des systèmes de recommandation, commençons à créer un système de recommandation de films.

Nous pouvons commencer à créer un système de recommandation de films basé sur Python en utilisant l'ensemble de données MovieLens complet . Cet ensemble de données contient plus de 26 millions d'évaluations, 750 000 applications de balises appliquées à plus de 45 000 films. Les données du génome des balises présentes dans cet ensemble de données avec plus de 12 millions de scores de pertinence.

Nous utilisons l'ensemble de données complet pour créer un système de recommandation de films de base. Cependant, vous êtes libre d'utiliser un jeu de données plus petit pour ce projet. Tout d'abord, nous devrons importer toutes les bibliothèques requises :

Un système de recommandation de films de base basé sur Python suggérerait des films en fonction de la popularité et du genre du film. Ce système fonctionne sur la base de la notion que les films populaires acclamés par la critique auront une forte probabilité d'être appréciés par le grand public. Gardez à l'esprit qu'un tel système de recommandation de films ne donne pas de suggestions personnalisées.

Pour l'implémenter, nous allons trier les films en fonction de leur popularité et de leur classement et passer un argument de genre pour obtenir les meilleurs films d'un genre :

Contribution

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

md.head()

Sortir

adulte appartient_à_collection budget genres vidéo identifiant imdb_id titre original Aperçu revenu Titre
Faux ('id'L 10194, 'nom' : 'Collection Toy Story') 30000000 [{'id': 16, 'name': 'Animation'}… Faux 862 tt0114709 Histoire de jouet Menés par Woody, les jouets d'Andy vivent heureux... 373554033 Histoire de jouet
1 Faux NaN 65000000 {{'id' : 12, 'name' : 'Aventure'}… Faux 8844 tt0113497 Jumanji Quand les frères Judy et Peter… 262797249 Jumanji
2 Faux ('id' : 119050, 'nom' : 'Grumpy Old Men) 0 {{'id': 10749, 'name': 'Romantique'}… Faux 15602 tt0113228 Vieillards grincheux Un mariage familial ravive l'ancien… 0 Des vieillards plus grincheux
3 Faux NaN 16000000 {{'id' : 35, 'name' : 'Comédie'}… Faux 31357 tt0114885 Attendre pour expirer Trompé, maltraité et piétiné… 81452156 Attendre pour expirer

Contribution

md['genres'] = md['genres'].fillna('[]').apply(literal_eval).apply(lambda x: [i['name'] for i in x] if isinstance(x, list ) autre [])

La formule de notre graphique

Pour créer notre tableau des meilleurs films, nous avons utilisé les classements TMDB. Nous utiliserons la formule de notation pondérée d'IMDB pour créer notre graphique, qui est le suivant :

Notation pondérée (WR) = (iaouaouaouaouaou)

Ici, v représente le nombre de votes qu'un film a obtenus, m est le nombre minimum de votes qu'un film devrait avoir sur le graphique, R représente la note moyenne du film et C est le vote moyen pour l'ensemble du rapport .

Construire les graphiques

Maintenant que nous avons l'ensemble de données et la formule en place, nous pouvons commencer à créer le graphique. Nous n'ajouterons à nos classements que les films qui ont un minimum de 95 % de votes. Nous allons commencer par créer un top 250 graphique.

Contribution

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

Sortir

5.244896612406511

Contribution

m = vote_counts.quantile(0.95)

m

Sortir

434.0

Contribution

md['année'] = pd.to_datetime(md['release_date'], errors='coerce').apply(lambda x: str(x).split('-')[0] if x != np. nan autre np.nan)

Contribution

qualifié = md[(md['vote_count'] >= m) & (md['vote_count'].notnull()) & (md['vote_average'].notnull())][['title', 'year ', 'vote_count', 'vote_average', 'popularité', 'genres']]

qualifié['vote_count'] = qualifié['vote_count'].astype('int')

qualifié['vote_average'] = qualifié['vote_average'].astype('int')

forme qualifiée

Sortir

(2274, 6)

Comme vous pouvez le voir, pour obtenir une place dans notre palmarès, un film doit avoir un minimum de 434 votes. Vous avez peut-être remarqué que la note moyenne qu'un film doit avoir pour entrer dans notre classement est de 5,24.

Contribution

def weighted_rating(x):

v = x['vote_count']

R = x['vote_average']

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

Contribution

qualifié['wr'] = qualifié.appliquer(évaluation_pondérée, axe=1)

Contribution

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

Avec tout cela en place, construisons le graphique :

Meilleurs films dans l'ensemble

Contribution

chef.qualifié(15)

Sortir

Titre an vote_count vote_average popularité genres wr
15480 Création 2010 14075 8 29.1081 [Action, Thriller, Science-Fiction, Mystère, A… 7.917588
12481 Le Chevalier Noir 2008 12269 8 123.167 [Drame, Action, Policier, Thriller] 7.905871
22879 Interstellaire 2014 11187 8 32.2135 [Aventure, Drame, Science-Fiction] 7.897107
2843 Club de combat 1999 9678 8 63.8696 [Drame] 7.881753
4863 Le Seigneur des Anneaux : La Communauté de l'Anneau 2001 8892 8 32.0707 [Aventure, Fantaisie, Action] 7.871787
292 Pulp Fiction 1994 8670 8 140,95 [Thriller, Policier] 7.868660
314 Le rachat de Shawshank 1994 8358 8 51.6454 [Drame, Policier] 7.864000
7000 Le Seigneur des Anneaux : Le Retour du Roi 2003 8226 8 29.3244 [Aventure, Fantaisie, Action] 7.861927
351 Forrest Gump 1994 8147 8 48.3072 [Comédie, Drame, Romance] 7.860656
5814 Le Seigneur des Anneaux : Les Deux Tours 2002 7641 8 29.4235 [Aventure, Fantaisie, Action] 7.851924
256 Guerres des étoiles 1977 6778 8 42.1497 [Aventure, Action, Science-Fiction] 7.834205
1225 Retour vers le futur 1985 6239 8 25,7785 [Aventure, Comédie, Science-Fiction, Famille] 7.820813
834 Le parrain 1972 6024 8 41.1093 [Drame, Policier] 7.814847
1154 L'empire contre-attaque 1980 5998 8 19.471 [Aventure, Action, Science-Fiction] 7.814099
46 Se7fr 1995 5915 8 18.4574 [Crime, Mystère, Thriller]

Voilà, vous avez créé un système de recommandation de films de base basé sur Python !

Nous allons maintenant limiter les suggestions de notre système de recommandation aux genres afin qu'ils soient plus précis. Après tout, il n'est pas nécessaire que tout le monde aime Le Parrain de la même manière.

Réduire le genre

Nous allons donc maintenant modifier notre système de recommandation pour qu'il soit plus spécifique au genre :

Contribution

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', axe=1).join(s)

Contribution

def build_chart(genre, percentile=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(percentile)

qualifié = df[(df['vote_count'] >= m) & (df['vote_count'].notnull()) & (df['vote_average'].notnull())][['title', 'year ', 'vote_count', 'vote_average', 'popularité']]

qualifié['vote_count'] = qualifié['vote_count'].astype('int')

qualifié['vote_average'] = qualifié['vote_average'].astype('int')

qualifié['wr'] = qualifié.apply(lambda x : (x['vote_count']/(x['vote_count']+m) * x['vote_average']) + (m/(m+x[' vote_count']) * C), axe=1)

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

retour qualifié

Nous avons maintenant créé un système de recommandation qui trie les films du genre romance et recommande les meilleurs. Nous avons choisi le genre romance parce qu'il n'apparaissait pas beaucoup dans notre tableau précédent.

Meilleurs films d'amour

Contribution

build_chart('Amour').head(15)

Sortir

Titre an vote_count vote_average popularité wr
10309 Dilwale Dulhania Le Jayenge 1995 661 9 34.457 8.565285
351 Forrest Gump 1994 8147 8 48.3072 7.971357
876 vertige 1958 1162 8 18.2082 7.811667
40251 Votre nom. 2016 1030 8 34.461252 7.789489
883 Certains l'aiment chaud 1959 835 8 11.8451 7.745154
1132 Cinéma Paradiso 1988 834 8 14.177 7.744878
19901 Paperman 2012 734 8 7.19863 7.713951
37863 rue chanter 2016 669 8 10.672862 7.689483
882 L'appartement 1960 498 8 11.9943 7.599317
38718 La servante 2016 453 8 16.727405 7.566166
3189 Lumières de la ville 1931 444 8 10.8915 7.558867
24886 La façon dont il a l'air 2014 262 8 5.71127 7.331363
45437 En un battement de coeur 2017 146 8 20.82178 7.003959
1639 Titanesque 1997 7770 7 26.8891 6.981546
19731 Livre de jeu Silver Linings 2012 4840 7 14.4881 6.970581

Maintenant, vous avez un système de recommandation de films qui suggère les meilleurs films selon un genre choisi. Nous vous recommandons de tester ce système de recommandation avec d'autres genres tels que l'action, le drame, le suspense, etc. Partagez les trois meilleurs films de votre genre préféré que le système de recommandation suggère dans la section des commentaires ci-dessous

En savoir plus sur un système de recommandation de films

Comme vous avez dû le remarquer, créer un système de recommandation de films basé sur Python est assez simple. Tout ce dont vous avez besoin est une petite connaissance de la science des données et un petit effort pour créer un système de recommandation entièrement fonctionnel.

Cependant, que se passe-t-il si vous souhaitez créer des systèmes de recommandation plus avancés ? Que faire si vous souhaitez créer un système de recommandation qu'une grande entreprise pourrait envisager d'utiliser ?

Si vous souhaitez en savoir plus sur les systèmes de recommandation et la science des données, nous vous recommandons de suivre un cours de science des données. Avec un cours, vous apprendrez tous les concepts fondamentaux et avancés de la science des données et de l'apprentissage automatique. De plus, vous étudierez auprès d'experts de l'industrie qui vous guideront tout au long du cours pour vous aider à éviter les doutes et la confusion.

Chez upGrad, nous proposons plusieurs cours de science des données et d'apprentissage automatique. Vous pouvez choisir n'importe qui parmi les suivants en fonction de vos intérêts :

  • Diplôme PG en science des données
  • Master of Science en science des données
  • Certification PG en science des données
  • Diplôme PG en apprentissage automatique et IA
  • Master of Science en apprentissage automatique et IA

En dehors de ces cours, nous proposons de nombreux autres cours en science des données et en apprentissage automatique. Assurez-vous de les vérifier!

Dernières pensées

Vous savez maintenant comment créer un système de recommandation de films. Après avoir créé le système, assurez-vous de le partager avec d'autres et de leur montrer vos progrès. Les systèmes de recommandation ont une gamme variée d'applications, donc apprendre à les connaître vous donnera sûrement un avantage dans l'industrie.

Qu'est-ce que le filtrage collaboratif et quels sont ses types ?

Le filtrage collaboratif est un type de système de recommandation qui aborde la construction d'un modèle basé sur les préférences de l'utilisateur. L'historique des utilisateurs sert de jeu de données pour le filtrage collaboratif. Le filtrage collaboratif est de 2 types qui sont mentionnés ci-dessous :

1. Filtrage collaboratif basé sur l'utilisateur : L'idée derrière ce type de filtrage collaboratif est que nous prenons un utilisateur pour la préférence, disons "A" et trouvons d'autres utilisateurs ayant des préférences similaires, puis fournissons "A" les préférences de ces utilisateurs qu'il n'a pas encore rencontré.
Filtrage collaboratif basé sur les éléments : Ici, au lieu de rechercher les utilisateurs ayant des préférences similaires, nous trouvons des films similaires au goût de "A" et recommandons les films qu'il n'a pas encore regardés.

Quels sont les avantages et les inconvénients du filtrage basé sur le contenu ?

Le filtrage basé sur le contenu collecte les données de l'utilisateur et suggère les éléments en conséquence. Certains de ses avantages, ainsi que ses inconvénients, sont mentionnés ci-dessous :
Avantages
1. Contrairement au filtrage collaboratif, le modèle n'a pas besoin de collecter des données sur d'autres utilisateurs ayant des préférences similaires car il prend les suggestions de l'utilisateur principal lui-même.
2. Le modèle peut vous recommander certains des meilleurs films selon vos préférences que seuls quelques autres ont regardés.
Désavantages
1. Cette technique nécessite beaucoup d'informations sur un certain domaine, de sorte que la qualité des fonctionnalités qu'elle fournit est plus ou moins la même que celle des fonctionnalités conçues à la main.
2. Sa capacité à recommander des films est limitée car elle ne fonctionne qu'en fonction des intérêts existants des utilisateurs.

Quelles applications populaires utilisent des algorithmes de filtrage collaboratif ?

L'algorithme de filtrage collaboratif devient le principal algorithme de pilotage pour de nombreuses applications populaires. De plus en plus d'entreprises se concentrent sur la fourniture d'un contenu riche et personnalisé. Par exemple, vous avez probablement vu ce message sur de nombreux sites de commerce électronique. Les clients qui achètent ceci ont également acheté.
Voici quelques-unes des applications ayant une base d'utilisateurs populaire dans le monde :
1. YouTube utilise cet algorithme avec d'autres algorithmes puissants pour fournir des recommandations vidéo sur la page d'accueil.
2. Les sites Web de commerce électronique tels qu'Amazon, Flipkart et Myntra utilisent également cet algorithme pour fournir des recommandations de produits.
3. Les plates-formes de streaming vidéo sont le plus grand exemple ici qui utilise la note des utilisateurs, la note moyenne et le contenu connexe pour fournir des suggestions personnalisées.