Crie seu próprio sistema de recomendação de filmes usando Python

Publicados: 2021-03-09

Você 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.

O que é filtragem colaborativa e quais são seus tipos?

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:

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?

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:
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?

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.
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.