Créez votre propre système de recommandation de films à l'aide de Python
Publié: 2021-03-09Vous 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.
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 : 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 : 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é.Qu'est-ce que le filtrage collaboratif et quels sont ses types ?
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 ?
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 ?
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.