Crie seu próprio sistema de recomendação de filmes usando Python
Publicados: 2021-03-09Você se pergunta como a Netflix sugere filmes que alinham tanto seus interesses? Ou talvez você queira construir um sistema que possa fazer essas sugestões para seus usuários também?
Se sua resposta foi sim, então você veio ao lugar certo, pois este artigo vai te ensinar como construir um sistema de recomendação de filmes usando Python.
No entanto, antes de começarmos a discutir o 'como' devemos estar familiarizados com o 'o quê'.
Índice
Sistema de recomendação: o que é?
Os sistemas de recomendação tornaram-se parte integrante de nossas vidas diárias. De varejistas on-line como Amazon e Flipkart a plataformas de mídia social como YouTube e Facebook, todas as grandes empresas digitais usam sistemas de recomendação para fornecer uma experiência de usuário personalizada a seus clientes.
Alguns exemplos de sistemas de recomendação em sua vida cotidiana incluem:
- As sugestões que você recebe da Amazon quando compra produtos são resultado de um sistema de recomendação.
- O YouTube usa um sistema de recomendação para sugerir vídeos adequados ao seu gosto.
- A Netflix tem um famoso sistema de recomendação para sugerir programas e filmes de acordo com seus interesses.
Um sistema de recomendação sugere produtos de usuários usando dados. Esses dados podem ser sobre os interesses inseridos do usuário, histórico etc. Se você estiver estudando aprendizado de máquina e IA, é obrigatório estudar os sistemas de recomendação, pois eles estão se tornando cada vez mais populares e avançados.
Tipos de Sistemas de Recomendação
Existem dois tipos de sistemas de recomendação:
1. Sistemas de Recomendação Colaborativa
Um sistema de recomendação colaborativo sugere itens de acordo com a semelhança de usuários semelhantes para aquele item. Ele agrupa usuários com interesses e gostos semelhantes e sugere seus produtos de acordo.
Por exemplo, suponha que você e outro usuário tenham gostado do Sholay. Agora, depois de assistir Sholay e gostar, o outro usuário gostou de Golmaal. Como você e o outro usuário têm interesses semelhantes, o sistema de recomendação sugere que você assista ao Golmaal com base nesses dados. Isso é filtragem colaborativa.
2. Sistemas de recomendação baseados em conteúdo
Um sistema de recomendação baseado em conteúdo sugere itens com base nos dados que recebe de um usuário. Pode ser baseado em dados explícitos ('Curtidas', 'Compartilhamentos', etc.) ou dados implícitos (histórico de exibição). O sistema de recomendação usaria esses dados para criar um perfil específico do usuário e sugeriria itens com base nesse perfil.
Construindo um sistema básico de recomendação de filmes
Agora que abordamos o básico dos sistemas de recomendação, vamos começar a construir um sistema de recomendação de filmes.
Podemos começar a construir um sistema de recomendação de filmes baseado em Python usando o conjunto de dados completo do MovieLens . Esse conjunto de dados contém mais de 26 milhões de classificações, 750.000 aplicativos de tags que são aplicados a mais de 45.000 filmes. Os dados do genoma da tag estão presentes neste conjunto de dados com mais de 12 milhões de pontuações de relevância.
Estamos usando o conjunto de dados completo para criar um sistema básico de recomendação de filmes. No entanto, você pode usar um conjunto de dados menor para este projeto. Primeiro, teremos que importar todas as bibliotecas necessárias:
Um sistema básico de recomendação de filmes baseado em Python sugeriria filmes de acordo com a popularidade e o gênero do filme. Esse sistema funciona com base na noção de que filmes populares com aclamação da crítica terão alta probabilidade de serem apreciados pelo público em geral. Lembre-se de que esse sistema de recomendação de filmes não oferece sugestões personalizadas.
Para implementá-lo, classificaremos os filmes de acordo com sua popularidade e classificação e passaremos um argumento de gênero para obter os melhores filmes de um gênero:
Entrada
md = pd. read_csv('../input/movies_metadata.csv')
md.head()
Saída
adulto | pertence_à_coleção | orçamento | gêneros | vídeo | identificação | imdb_id | título original | Visão geral | receita | título | |||||||
Falso | ('id'L 10194, 'nome': 'Coleção Toy Story') | 30000000 | [{'id': 16, 'name': 'Animvation'}… | Falso | 862 | tt0114709 | História de brinquedos | Liderados por Woody, os brinquedos de Andy vivem felizes… | 373554033 | História de brinquedos | |||||||
1 | Falso | NaN | 65000000 | {{'id': 12, 'nome': 'Aventura'}… | Falso | 8844 | tt0113497 | Jumanji | Quando os irmãos Judy e Peter… | 262797249 | Jumanji | ||||||
2 | Falso | ('id': 119050, 'name': 'Velhos mal-humorados) | 0 | {{'id': 10749, 'name': 'Romance'}… | Falso | 15602 | tt0113228 | Velhos mal-humorados | Um casamento em família reacende o antigo… | 0 | Velhos mais rabugentos | ||||||
3 | Falso | NaN | 16000000 | {{'id': 35, 'name': 'Comédia'}… | Falso | 31357 | tt0114885 | Esperando para expirar | Traído, maltratado e pisado… | 81452156 | Esperando para expirar |
Entrada
md['genres'] = md['genres'].fillna('[]').apply(literal_eval).apply(lambda x: [i['name'] for i in x] if isinstance(x, list ) outro [])
A Fórmula do Nosso Gráfico
Para criar nosso gráfico dos melhores filmes, usamos as classificações do TMDB. Usaremos a fórmula de classificação ponderada do IMDB para criar nosso gráfico, que é o seguinte:
Avaliação Ponderada (WR) = (iaouaouaouaouaou)
Aqui, v representa o número de votos que um filme obteve, m é o número mínimo de votos que um filme deve ter para obter no gráfico, R representa a classificação média do filme e C é a votação média para todo o relatório .
Construindo os gráficos
Agora que temos o conjunto de dados e a fórmula em vigor, podemos começar a construir o gráfico. Só adicionaremos aos nossos gráficos os filmes que tiverem um mínimo de 95% de votos. Começaremos com a criação de um gráfico dos 250 principais.
Entrada
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
Saída
5.244896612406511
Entrada
m = vote_counts.quantile(0,95)
m
Saída
434,0
Entrada
md['year'] = pd.to_datetime(md['release_date'], errors='coerce').apply(lambda x: str(x).split('-')[0] if x != np. nan else np.nan)
Entrada
qualificado = md[(md['vote_count'] >= m) & (md['vote_count'].notnull()) & (md['vote_average'].notnull())][['title', 'year ', 'vote_count', 'vote_average', 'popularity', 'genres']]
qualificado['vote_count'] = qualificado['vote_count'].astype('int')
qualificado['vote_average'] = qualificado['vote_average'].astype('int')
forma.qualificada
Saída
(2274, 6)
Como você pode ver, para conseguir um lugar no nosso gráfico um filme deve ter um mínimo de 434 votos. Você deve ter notado que a classificação média que um filme deve ter para entrar no nosso gráfico é 5,24.
Entrada
def ponderado_rating(x):
v = x['vote_count']
R = x['vote_average']
return (v/(v+m) * R) + (m/(m+v) * C)
Entrada
qualificado['wr'] = qualificado.apply(weighted_rating, axis=1)
Entrada
qualificado = qualificado.sort_values('wr', ascendente=Falso).head(250)
Com tudo isso no lugar, vamos construir o gráfico:
Principais filmes em geral
Entrada
qualificado.head(15)
Saída
título | ano | contagem_votos | vote_average | popularidade | gêneros | wr | |
15480 | Começo | 2010 | 14075 | 8 | 29.1081 | [Ação, Suspense, Ficção Científica, Mistério, A… | 7.917588 |
12481 | O Cavaleiro das Trevas | 2008 | 12269 | 8 | 123.167 | [Drama, Ação, Crime, Suspense] | 7.905871 |
22879 | Interestelar | 2014 | 11187 | 8 | 32.2135 | [Aventura, Drama, Ficção Científica] | 7.897107 |
2843 | Clube de luta | 1999 | 9678 | 8 | 63,8696 | [Drama] | 7.881753 |
4863 | O Senhor dos Anéis: A Sociedade do Anel | 2001 | 8892 | 8 | 32.0707 | [Aventura, Fantasia, Ação] | 7,871787 |
292 | Pulp Fiction | 1994 | 8670 | 8 | 140,95 | [Thriller, Crime] | 7.868660 |
314 | A redenção de Shawshank | 1994 | 8358 | 8 | 51,6454 | [Drama, Crime] | 7.864000 |
7.000 | O Senhor dos Anéis: O Retorno do Rei | 2003 | 8226 | 8 | 29.3244 | [Aventura, Fantasia, Ação] | 7.861927 |
351 | Forrest Gump | 1994 | 8147 | 8 | 48.3072 | [Comédia, Drama, Romance] | 7.860656 |
5814 | O Senhor dos Anéis: As Duas Torres | 2002 | 7641 | 8 | 29.4235 | [Aventura, Fantasia, Ação] | 7.851924 |
256 | Guerra das Estrelas | 1977 | 6778 | 8 | 42.1497 | [Aventura, Ação, Ficção Científica] | 7.834205 |
1225 | De volta para o Futuro | 1985 | 6239 | 8 | 25,7785 | [Aventura, Comédia, Ficção Científica, Família] | 7.820813 |
834 | O padrinho | 1972 | 6024 | 8 | 41.1093 | [Drama, Crime] | 7.814847 |
1154 | O império Contra-Ataca | 1980 | 5998 | 8 | 19.471 | [Aventura, Ação, Ficção Científica] | 7.814099 |
46 | Se7en | 1995 | 5915 | 8 | 18.4574 | [Crime, Mistério, Suspense] |
Voila, você criou um sistema básico de recomendação de filmes baseado em Python!
Agora, restringiremos as sugestões do nosso sistema de recomendação para baseadas em gênero para que possam ser mais precisas. Afinal, não é necessário que todos gostem de O Poderoso Chefão igualmente.
Reduzindo o gênero
Então, agora vamos modificar nosso sistema de recomendação para ser mais específico do gênero:
Entrada
s = md.apply(lambda x: pd.Series(x['genres']),axis=1).stack().reset_index(level=1, drop=True)
s.name = 'gênero'
gen_md = md.drop('genres', axis=1).join(s)
Entrada
def build_chart(gênero, percentil=0,85):
df = gen_md[gen_md['gênero'] == gênero]
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(percentil)
qualificado = df[(df['vote_count'] >= m) & (df['vote_count'].notnull()) & (df['vote_average'].notnull())][['title', 'year ', 'vote_count', 'vote_average', 'popularity']]
qualificado['vote_count'] = qualificado['vote_count'].astype('int')
qualificado['vote_average'] = qualificado['vote_average'].astype('int')
qualificado['wr'] = qualificado.apply(lambda x: (x['vote_count']/(x['vote_count']+m) * x['vote_average']) + (m/(m+x[' vote_count']) * C), eixo=1)
qualificado = qualificado.sort_values('wr', ascendente=Falso).head(250)
retorno qualificado
Criamos agora um sistema de recomendação que classifica os filmes do gênero romance e recomenda os melhores. Escolhemos o gênero romance porque não apareceu muito em nosso gráfico anterior.
Principais filmes de romance
Entrada
build_chart('Romance').head(15)
Saída
título | ano | contagem_votos | vote_average | popularidade | wr | |
10309 | Dilwale Dulhania Le Jayenge | 1995 | 661 | 9 | 34.457 | 8.565285 |
351 | Forrest Gump | 1994 | 8147 | 8 | 48.3072 | 7.971357 |
876 | Vertigem | 1958 | 1162 | 8 | 18.2082 | 7.811667 |
40251 | Seu nome. | 2016 | 1030 | 8 | 34.461252 | 7.789489 |
883 | Alguns gostam de calor | 1959 | 835 | 8 | 11.8451 | 7.745154 |
1132 | Cinema Paraíso | 1988 | 834 | 8 | 14.177 | 7.744878 |
19901 | Paperman | 2012 | 734 | 8 | 7.19863 | 7.713951 |
37863 | Sing Street | 2016 | 669 | 8 | 10.672862 | 7.689483 |
882 | O apartamento | 1960 | 498 | 8 | 11.9943 | 7.599317 |
38718 | A serva | 2016 | 453 | 8 | 16.727405 | 7.566166 |
3189 | Luzes da cidade | 1931 | 444 | 8 | 10,8915 | 7.558867 |
24886 | A maneira como ele parece | 2014 | 262 | 8 | 5,71127 | 7.331363 |
45437 | Num piscar de olhos | 2017 | 146 | 8 | 20.82178 | 7.003959 |
1639 | Titânico | 1997 | 7770 | 7 | 26.8891 | 6.981546 |
19731 | O lado bom das coisas | 2012 | 4840 | 7 | 14.4881 | 6.970581 |
Agora, você tem um sistema de recomendação de filmes que sugere os melhores filmes de acordo com o gênero escolhido. Recomendamos testar este sistema de recomendação com outros gêneros também, como Ação, Drama, Suspense, etc. Compartilhe os três melhores filmes do seu gênero favorito que o sistema de recomendação sugere na seção de comentários abaixo
Saiba mais sobre um sistema de recomendação de filmes
Como você já deve ter notado, construir um sistema de recomendação de filmes baseado em Python é bem simples. Tudo o que você precisa é de um pouco de conhecimento de ciência de dados e um pouco de esforço para criar um sistema de recomendação totalmente funcional.
No entanto, e se você quiser construir sistemas de recomendação mais avançados? E se você quiser criar um sistema de recomendação que uma grande empresa possa considerar usar?
Se você estiver interessado em aprender mais sobre sistemas de recomendação e ciência de dados, recomendamos fazer um curso de ciência de dados. Com um curso, você aprenderá todos os conceitos fundamentais e avançados de ciência de dados e aprendizado de máquina. Além disso, você estudará com especialistas do setor que o guiarão ao longo do curso para ajudá-lo a evitar dúvidas e confusões.
Na upGrad, oferecemos vários cursos de ciência de dados e aprendizado de máquina. Você pode escolher qualquer um dos seguintes, dependendo de seus interesses:
- PG Diploma em Ciência de Dados
- Mestrado em Ciência de Dados
- Certificação PG em Ciência de Dados
- Diploma PG em Aprendizado de Máquina e IA
- Mestrado em Machine Learning e IA
Além desses cursos, oferecemos muitos outros cursos em ciência de dados e aprendizado de máquina. Certifique-se de vê-los!
Pensamentos finais
Agora você sabe como construir um sistema de recomendação de filmes. Depois de criar o sistema, compartilhe-o com outras pessoas e mostre a elas seu progresso. Os sistemas de recomendação têm uma gama diversificada de aplicações, portanto, aprender sobre eles certamente lhe dará uma vantagem no setor.
A filtragem colaborativa é um tipo de sistema de recomendação que aborda a construção de um modelo baseado nas preferências do usuário. O histórico dos usuários atua como o conjunto de dados para filtragem colaborativa. A filtragem colaborativa é de 2 tipos mencionados abaixo: A filtragem baseada em conteúdo coleta os dados do usuário e sugere os itens de acordo. Algumas de suas vantagens, bem como desvantagens, são mencionadas abaixo: O algoritmo de filtragem colaborativa está se tornando o principal algoritmo de condução para muitas aplicações populares. Mais e mais empresas estão se concentrando em fornecer conteúdo rico e personalizado. Por exemplo, você provavelmente já viu essa mensagem em muitos sites de comércio eletrônico. Os clientes que compraram também compraram.O que é filtragem colaborativa e quais são seus tipos?
1. Filtragem colaborativa baseada no usuário : A ideia por trás desse tipo de filtragem colaborativa é que tomamos um usuário como preferência, digamos "A" e encontramos outros usuários com preferências semelhantes e, em seguida, fornecendo "A" as preferências desses usuários que ele ainda não encontrou.
Filtragem colaborativa baseada em itens : Aqui, em vez de encontrar os usuários com preferências semelhantes, encontramos filmes semelhantes ao gosto de “A” e recomendamos os filmes que ainda não assistiu. Quais são as vantagens e desvantagens da filtragem baseada em conteúdo?
Vantagens
1. Ao contrário da filtragem colaborativa, o modelo não precisa coletar dados sobre outros usuários com preferências semelhantes, pois recebe as sugestões do próprio usuário principal.
2. O modelo pode recomendar alguns dos melhores filmes para você de acordo com suas preferências que apenas alguns outros assistiram.
Desvantagens
1. Essa técnica requer muitas informações sobre um determinado domínio, de modo que a qualidade dos recursos que ela fornece é mais ou menos a mesma dos recursos projetados à mão.
2. Sua capacidade de recomendar filmes é limitada, pois só funciona de acordo com os interesses existentes dos usuários. Quais aplicativos populares usam algoritmos de filtragem colaborativa?
A seguir estão alguns dos aplicativos que têm uma base de usuários popular em todo o mundo:
1. O YouTube usa esse algoritmo junto com alguns outros algoritmos poderosos para fornecer recomendações de vídeo na página inicial.
2. Sites de comércio eletrônico como Amazon, Flipkart e Myntra também usam esse algoritmo para fornecer recomendações de produtos.
3. As plataformas de streaming de vídeo são o maior exemplo aqui que usam a classificação do usuário, classificação média e conteúdo relacionado para fornecer sugestões personalizadas.