Sistema de Recomendação de Filmes — 7 Days of Code — Dia 04

--

Photo by Thibault Penin on Unsplash

Entre no meu GitHub para acessar e baixar o Jupyter Notebook usado

No quarto dia do 7 Days of Code o objetivo era mexer em um novo dataset. Ao invés de analisar os gastos da CEAPS, o objetivo foi criar um sistema de recomendação de filmes com os dados do Movie Lens.

Abrir os arquivos foi o primeiro desafio. Eu estava acostumado a trabalhar com arquivos em formato csv e o dataset do Movie Lens era um arquivo zipado que, depois de extraído, se apresentava em um formato desconhecido para mim. A vantagem de ter outras pessoas participando do 7 Days of Code é que se pode consultar como alguém resolve um problema que te deixou empacado. Assim, achei o GitHub do Kalel L. Martinho (Obrigado!!!) e verifiquei como ele subiu os arquivos.

Ele usava duas bibliotecas para abrir o arquivo. A primeira era o Zipifile, para extrair e montar o arquivo e a segunda era a io, que conseguia trabalhar com urls. Como já tinha baixado os arquivos para o computador, não precisei dessa última.

Eram três DataSets (Filmes, Usuários e Notas) e o nome das colunas não estavam identificadas. Novamente, usei o trabalho do Kalel L. Martinho para facilitar a renomeação e saber qual é qual. No fim, montei um DataSet único, que continha o id do usuário, id do filme visto, o título do filme que ele viu e a nota que ele tinha atribuído e acrescentei a esse DataSet a opinião de um novo usuário, que avaliaria filmes sugeridos de maneira aleatória com a nota de 1 a 5.

Cinco primeiros cadastros do DataFrame

Depois disso, pivotei a lista de usuários com a de filmes. Isso significa que cruzei as informações dos usuários com as dos filmes, criando uma nova tabela que detalhava o perfil de filmes e notas. Assim, era possível ver que o usuário 1 tinha dado nota 3 para a versão de 20.000 Léguas Submarinas de 1954, nota 4 para o clássico 2001: Uma Odisseia no Espaço e que nunca viu 3 Ninjas — Aventura na Mega Mountain.

Tabela Pivotada

Assim, a partir da biblioteca sklearn.neighbors é possível importar o NearestNeighbors e aproximar os usuários com gosto para filmes similar. No exemplo do usuário 1, ele estaria mais próximo de quem deu nota 5 para 2001 e mais afastado de quem teria dado nota 1.

A partir disso fiz dois sistemas de recomendação.

Modelo 1: Vizinho Mais Próximo

Cena do Filme Janela Indiscreta, de Alfred Hitchcock, em que um fotógrafo com a perna quebrada bisbilhota os vizinhos e desconfia que um deles é um assassino

O primeiro modelo procura o usuário com o gosto mais próximo a quem vai recomendar o filme. Como exemplo eu cadastrei nove filmes e agora o modelo procuraria quem tivesse gosto parecido com o meu.

Pode-se ver que o usuário 453 gosta do primeiro Star Wars tanto quanto eu, apesar da gente diferir em Debi e Lóide, que eu gosto muito e ele acha mediano. Fora isso é tudo muito próximo.

O passo seguinte foi criar um DataSet apenas com as notas que eu havia dado e, em seguida, acrescentar o do vizinho mais próximo. A partir dai, só filtrar pelos filmes mais bem avaliados por ele e que eu não tenha cadastrado: Trainspotting (1996), O Balconista (Clerks (1994)), Fargo (1996), Despedida em Las Vegas (Leaving Las Vegas (1995)) e Doze Macacos (Twelve Monkeys (1995))

Dos que eu assisti (Trainspotting, Fargo e Despedida em Las Vegas) eu gosto de todos.

Nicolas Cage em Despedida em Las Vegas

Modelo 2: Filmes da minha Bolha

O segundo modelo recomenda filmes do grupo de pessoas que tem o gosto parecido com o meu.

E a lógica para desenvolver ele foi muito parecida. Cria se um DataSet com as minhas avaliações e, depois disso, vai se acrescentando as opiniões de todos os filmes dos que tem o gosto similar. No final, eu somo a nota dos cinco vizinhos mais próximos para todos os filmes e recomendo os melhores avaliados e mais vistos dentro dos usuários com o gosto parecido com o meu.

Nesse exemplo foi O Retorno de Jedi (Return of the Jedi (1983)) , Pulp Fiction (1994), O Império Contra Ataca (The Empire Strikes Back (1980)), Os Doze Macacos (Twelve Monkeys (1995)) e Cães De Aluguel (Reservoir Dogs (1992)).

O único que não assisti dessa lista foi Os Doze Macacos, que também aparece na primeira lista. Já vou fazer a pipoca.

--

--