Algoritmos clássicos utilizados nos Sistemas de Recomendação

Vitor Rodrigues Tonon
SiDi NLP
Published in
7 min readNov 29, 2022

Esse artigo é mais um da série sobre sistemas de recomendação que estamos desenvolvendo. Neste segundo artigo, mostraremos que existem diferentes categorias de sistemas de recomendação, como a filtragem baseada em conteúdo e a filtragem colaborativa. Além disso, mostraremos como funcionam os algoritmos mais clássicos de cada uma dessas abordagens.

Introdução:

Como apresentamos no artigo anterior, os sistemas de recomendação têm como objetivo identificar um pequeno conjunto de itens relevantes para um determinado usuário, a partir de uma infinidade de itens disponíveis. O sistema de recomendação utilizado pela Netflix, por exemplo, busca encontrar alguns poucos filmes e séries que o usuário deve gostar, a partir de um catálogo de dezenas de milhares de itens. Por isso, dizemos que os sistemas de recomendação consistem em uma tecnologia de filtragem de informação.

Existem dois principais tipos de sistemas de recomendação, a filtragem baseada em conteúdo e a filtragem colaborativa, e eles se diferenciam na forma como essa filtragem de informação é realizada. A seguir, explicaremos os principais conceitos de cada uma dessas abordagens, utilizando um algoritmo clássico como exemplo para cada uma delas.

Filtragem baseada em conteúdo:

Nesse tipo de filtragem, a principal ideia é identificar itens similares em conteúdo a outros que o usuário já consumiu no passado. Intuitivamente, se o usuário gosta de filmes de super-heróis, os algoritmos com filtragem baseada em conteúdo vão recomendar outros filmes de super-herói. De maneira similar, se o usuário já comprou muitos livros de terror, esse algoritmo irá recomendar outros livros de terror. E assim por diante.

Para exemplificar o funcionamento de um algoritmo clássico baseado em conteúdo, considere os seguintes dados históricos de consumo de filmes, em que é apresentada a avaliação que um conjunto de usuários atribuiu a alguns filmes:

Considere também que temos à nossa disposição alguns atributos descritivos de cada um dos filmes:

O algoritmo de recomendação baseado em conteúdo mais simples é inspirado no algoritmo dos K Vizinhos Mais Próximos (KNN). Seu funcionamento pode ser descrito pelo seguinte conjunto de passos:

  • 1º Passo: Calcular a similaridade entre o item-alvo da recomendação (item para o qual desejamos calcular a avaliação) e todos os outros itens do sistema, utilizando alguma métrica de similaridade
  • 2º Passo: Selecionar os K itens mais similares para os quais o usuário já fez avaliações
  • 3º Passo: Calcular a média das avaliações feitas pelo usuário aos K itens mais similares, e usar o resultado como predição final

Para exemplificar seu funcionamento, imagine que desejamos predizer a avaliação que a Maria daria ao filme Harry Potter 1. Para isso, utilizaremos a seguinte métrica de similaridade, cuja ideia é somar 1 sempre que houver correspondência entre os atributos (quanto mais valores iguais os itens tiverem, mais similares eles serão):

Com isso, seguimos as etapas do algoritmo apresentadas anteriormente:

  • 1ª Passo: Calcular a similaridade entre Harry Potter 1 (item-alvo) e todos os outros filmes:
  • 2º Passo: Selecionar os K itens mais similares. Nesse caso, vamos adotar K = 1 para simplificar os cálculos. Dessa forma, selecionamos o filme Harry Potter 2, visto que é o filme mais similar que Maria já avaliou.
  • 3º Passo: Calcular a média das avaliações feitas por Maria nos itens similares. Como escolhemos K = 1, temos apenas um item similar. Portanto, predizemos que Maria daria nota 2 ao filme Harry Potter 1:

Com esse algoritmo, é possível calcular uma predição para todos os itens do sistema ainda não consumidos. Fazendo isso, conseguimos recomendar ao usuário os itens com maior avaliação predita.

A seguir, veremos uma outra abordagem para geração das recomendações, que é a filtragem colaborativa.

Filtragem colaborativa:

Antes da era da Internet, as recomendações funciovam de forma diferente, mas ainda assim bastante efetivas. Nesse tempo, era comum vermos as pessoas pedindo a opinião de amigos e familiares sobre produtos ou serviços. Com base nessas opiniões, essas pessoas decidiam por consumir ou não os produtos em questão. Isso é o que conhecemos por “recomendação boca-a-boca”, que ainda hoje se faz bastante presente nas vidas das pessoas.

A filtragem colaborativa busca exatamente mimetizar essa “recomendação boca-a-boca”. A ideia principal dessa abordagem é que se nós de alguma forma conseguimos identificar que um usuário A tem gostos parecidos com um usuário B, então podemos usar os itens que esse usuário B já consumiu para gerar as recomendações para o usuário A.

Para ilustrar, tomemos um exemplo. Se nós sabemos que João tem gostos parecidos com Maria, e sabemos que Maria gosta de Harry Potter, então é bastante provável que João goste de Harry Potter também. Dessa forma, podemos recomendar Harry Potter a João.

Com isso, um algoritmo bastante simples baseado na filtragem colaborativa é dado pelos seguintes passos:

  • 1º Passo: Calcular a similaridade entre o usuário-alvo (usuário para o qual desejamos recomendar algo) e todos os outros usuários do sistema. Para isso, consideramos os itens em comum que os usuários avaliaram, e alguma métrica de similaridade
  • 2º Passo: Selecionar os K usuários mais similares
  • 3º Passo: Calcular a média das avaliações que os usuários similares deram para o item em questão, e usar como predição final

Para exemplificar o funcionamento do algoritmo, consideremos os dados de avaliações a seguir. Da mesma forma como antes, desejamos predizer a avaliação de Maria pelo filme Harry Potter 1.

Como métrica de similaridade, podemos usar a correlação de Pearson, que é dada pela seguinte equação:

Com isso, temos o seguinte:

  • 1º Passo: Calculamos a similaridade entre Maria e cada um dos outros usuários. Para isso, vamos considerar apenas os itens em comum (que foram avaliados tanto por Maria quanto pelos outros usuários). Entre Maria e João, por exemplo, vamos calcular a similaridade com base apenas em Animais Fantásticos. Entre Maria e Flávia, por sua vez, com base em Animais Fantásticos e Harry Potter 2.
  • 2º Passo: Selecionamos os K usuários mais similares. Por simplicidade, vamos adotar K=1 novamente. Dessa forma, o usuário mais similar a Maria é Flávia.
  • 3º Passo: Calculamos a média das avaliações que os usuários similares deram para o item em questão. Nesse caso, como temos apenas um usuário similar, a própria nota de Flávia ao item (Harry Potter 1) será a predição final:

Da mesma forma como antes, a ideia é repetir os cálculos das predições para todos os itens do sistema ainda não vistos pelo usuário. Com isso, é possível elencar os itens com maior nota prevista, e recomedá-los ao usuário.

Algumas considerações:

Nesse artigo, adotamos várias simplificações para facilitar o entendimento, como as métricas de similaridade adotadas e os algoritmos escolhidos. Existem métricas mais robustas, como a similaridade cosseno e a correlação de Pearson, e algoritmos muito mais completos, como os baseados em fatoração de matrizes e baseados em Deep Learning, a serem utilizados na prática.

Ainda assim, o nosso foco neste texto foi apresentar os principais conceitos sobre filtragem baseada em conteúdo e filtragem colaborativa. Enquanto a primeira é baseada na similaridade de conteúdo entre os itens e tem como foco a recomendação de itens similares aos consumidos no passado pelo usuário, a segunda busca identificar outros usuários com comportamento parecido e fazer recomendações com base no que esses outros usuários gostaram, seguindo o a ideia da recomendação boca-a-boca.

Ambas as abordagens são válidas, e possuem as suas vantagens e desvantagens. O principal ponto é avaliar os requisitos do projeto que se está desenvolvendo, e utilizar a abordagem que vai melhor atender aos seus objetivos.

E por hoje é só! No próximo artigo, apresentaremos algumas técnicas mais complexas para sistemas de recomendação; em especial, como podemos utilizar textos para melhorar a qualidade das recomendações geradas.

--

--

Vitor Rodrigues Tonon
SiDi NLP
Writer for

Bacharel e Mestre em Ciências da Computação pelo ICMC/USP. Atualmente trabalha como desenvolvedor NLP no SiDi Campinas.