Sistemas de Recomendação

Laboratório de Estatística Aplicada - 2026/1

Victor Coscrato

Motivação

  • Vivemos na era da informação ou era da abundância.
  • Independente do contexto, existem milhares ou até milhões de itens disponíveis e acessíveis:
    • Músicas
    • Filmes
    • Produtos
    • Notícias
    • Conteúdos digitais
    • etc…

Motivação

  • Pergunta central: como ajudar o usuário a encontrar o que é relevante para ele?

Motivação

Motivação

Motivação

First page of the article by Smith et al. First page of the article by Jones et al. First page of the article by Williams et al.

Casos de Uso

  • E-commerce (Amazon, Mercadolivre)
    • “Clientes que compraram este produto também compraram…”
    • Criação de “Landing pages” com maior conversão de vendas
  • Entretenimento (Netflix, Spotify, YouTube)
    • Vídeos, filmes ou músicas personalizadas
    • Novos conteúdos na plataforma que você pode gostar
  • Redes sociais (Instagram, Linkedin, Twitter/X)
    • Feed personalizado
    • Novas conexões
  • Notícias
    • Seleção de notícias mais adequadas e contemporâneas

Casos de Uso

  • Ciência e pesquisa
    • Artigos recomendados (Google Scholar, ResearchGate)
  • Turismo e Viagens (Booking.com, Airbnb)
    • Recomendações de destinos, hotéis e passeios
  • Publicidade Online (Google Ads, Meta Ads)
    • Anúncios direcionados com base no comportamento do usuário
  • Recrutamento e RH (LinkedIn Jobs)
    • Recomendar vagas para candidatos e candidatos para vagas

Exemplo: Linkedin

Exemplo: Linkedin

Problema Central

  • Como recomendar os itens que sejam mais adequados para cada usuário?
  • Várias considerações:
    • Eu conheço o usuário, ele é recorrente?
    • Eu tenho um histórico de consumo dos meus usuários arquivado?
    • Eu tenho meta-dados (descrições) dos meu itens?
    • Existem outros fatores contextuais importantes?
      • Exemplo: horário, dia da semana, estação do ano

O caso clássico

  • Usuários consomem e avaliam itens (e.g. de 1 a 5 \(\star\))
  • Organizamos as avaliações na matriz Usuário × Item:

\[ R = \left( \begin{array}{l|cccc} & \text{Item 1} & \text{Item 2} & \cdots & \text{Item #I} \\ \hline \text{Usuário 1} & 4 & ? & \cdots & ? \\ \text{Usuário 2} & ? & 5 & \cdots & 3 \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ \text{Usuário #U} & 1 & ? & \cdots & 4 \\ \end{array} \right) \]

Dica

  • Podemos estimar a avaliação do usuário para itens não consumidos.
  • Em outras palavras, podemos tratar recomendações como um problema de imputação de dados ausentes.

Desafios

  • Esparsidade: muitos dados ausentes (\(>99\%\))
  • Cold-start: novos usuários e itens sem histórico de consumo
  • Escalabilidade para grandes sistemas

Aviso

Essa é só a ponta do iceberg!

Tipos de feedback

  • Explícitos:
    • Avaliações: Exemplos (e.g. notas 1–5 \(\star\))

Feedback explícito

Mais informativos, mais difíceis ou caros de se obter. Estão sujeitos a variações devido a fatores comportamentais e psicológicos.

  • Implícitos:
    • Binários: Clicado ou Visto, Adicionado ao carrinho, Comprado
    • Tempo de visualização, Número de vezes que foi consumido

Feedback implícito

Abundantes e fáceis de coletar, acreditava-se que não eram tão informativos quanto o feedback explícito. Hoje sabemos que não é bem assim.

Outras considerações

  • Dependência temporal (a ordem importa)
  • Mudanças de gosto dos usuários ao longo do tempo
  • Existência ou não de consumo repetido

Aviso

De novo, essa é só a ponta do iceberg!

Tipos de Sistemas de Recomendação

Dois grandes blocos: Filtragem por conteúdo e filtragem colaborativa.

Filtragem por conteúdo

  • Cada item é descrito por um conjunto de atributos ou “features” (ex: para um filme, seria gênero, diretor, atores, sinopse).
  • Recomenda-se ao usuário itens de características similares a outros já consumidos.

Nota

  • Nesse caso, cada usuário é independente. Isto é, as recomendações para um usuário são baseadas apenas em suas próprias escolhas prévias.

Tipos de Sistemas de Recomendação

Dois grandes blocos: Filtragem por conteúdo e filtragem colaborativa.

Filtragem colaborativa

  • Extrapolamos as preferências entre os usuários, analisando conjuntamente suas preferências e recomendando itens com base em padrões aprendidos.
  • A ideia geral é: usuários similares consomem itens similares e itens similares são consumidos por usuários similares.
  • Se divide em dois blocos:
    • Métodos baseados em memória
    • Métodos baseados em modelos

Tipos de Sistemas de Recomendação

Dois grandes blocos: Filtragem por conteúdo e filtragem colaborativa.

Nota

Na prática, é comum que grandes sistemas de recomendação sejam híbridos. Ou seja, uma combinação entre métodos de filtragem por conteúdo e filtragem colaborativa.

Métodos baseados em memória

  • Baseados em usuário: usuários similares consomem itens similares
  • Baseado em itens: itens similares são consumidos por usuários similares

Definimos uma medida de similaridade, como por exemplo a similaridade cosseno: \[ \text{sim}(u,v) = \frac{R_u \cdot R_v}{\|R_u\| \|R_v\|} \] Em que \(R_k\) é a k-ésima linha da matriz de avaliações.

KNN Baseado em usuários

Obtemos uma estimativa para uma determinada avaliação desconhecida através de:

\[ \hat{r}_{ui} = \frac{\sum_{v \in N(u)} \text{sim}(u,v) \, r_{vi}}{\sum_{v \in N(u)} |\text{sim}(u,v)|} \]

Onde \(N(u)\) é o conjunto de vizinhos mais próximos do usuário \(u\).

Dica

  • Na prática, esse método pode ser entendido como o uso do KNN para a imputação das linhas da matriz de avaliações.

KNN Baseado em itens

O estimador é:

\[ \hat{r}_{ui} = \frac{\sum_{j \in N(i)} \text{sim}(i,j) \, r_{uj}}{\sum_{j \in N(i)} |\text{sim}(i,j)|} \]

Onde \(N(i)\) é o conjunto de vizinhos mais próximos do item \(i\).

Dica

  • Na prática, esse método pode ser entendido como o uso do KNN para a imputação das colunas da matriz de avaliações.

Fatorização matricial

  • O método mais clássico de filtragem colaborativa
  • Ideia: decompor matriz \(R\) em fatores latentes de baixa dimensão \(k\)
  • \(U \in \mathbb{R}^{m \times k}\): fatores de usuários, \(V \in \mathbb{R}^{n \times k}\): fatores de itens

\[ \begin{align*} \hat{r}_{ui} &= U_u^T V_i \\ &= \sum_{k=1}^K U_{uk} V_{ik} \end{align*} \]

Fatorização matricial

Ajustamos os fatores de usuários e itens através da minimização da função de perda: \[ \min_{U,V} \sum_{(u,i) \in K} (r_{ui} - U_u^T V_i)^2 + \lambda (\|U_u\|^2 + \|V_i\|^2) \]

Os métodos de otimização são vários. Entre eles se destacam o método da descida do gradiente e o método de mínimos quadrados alternados.

Learning to Rank

E se quisermos apenas ordenar?

A minimização do erro quadrático no slide anterior foca em adivinhar o valor exato da avaliação (pointwise). No entanto, na vida real (especialmente com feedback implícito), o objetivo principal é ordenar corretamente os itens!

  • Em vez de prever uma nota isolada, queremos garantir que a pontuação de itens interessantes seja sistematicamente maior do que a de itens desinteressantes.

BPR (Bayesian Personalized Ranking)

O BPR otimiza a lista comparando pares de itens (pairwise).

  • Se o usuário \(u\) interagiu com o item \(i\) (ex: clicou) mas não com o item \(j\) (não clicado), queremos que a recomendação garanta no modelo \(\hat{x}_{ui} > \hat{x}_{uj}\).
  • Podemos maximizar essa diferença de preferências através de: \[ \max_{\Theta} \sum_{(u,i,j) \in D} \ln \sigma(\hat{x}_{ui} - \hat{x}_{uj}) - \lambda_{\Theta} \|\Theta\|^2 \]
  • Onde \(D\) é o conjunto de trios \((u,i,j)\) gerados das interações e \(\sigma\) é a função sigmoide.

Métricas de Avaliação

Como saber se nosso sistema de recomendação é bom?

  • A resposta depende do objetivo do sistema.
  • Estamos tentando prever a avaliação que um usuário daria a um item?
  • Ou estamos tentando recomendar uma lista de itens que o usuário irá gostar?

Métricas de Avaliação

Predição de Avaliações (Ratings)

  • Objetivo: Prever o valor da avaliação que um usuário \(u\) daria a um item \(i\).
  • Métricas: Comparam o valor predito \(\hat{r}_{ui}\) com o valor real \(r_{ui}\).
    • RMSE (Root Mean Squared Error): \(\sqrt{\frac{1}{N} \sum(r_{ui} - \hat{r}_{ui})^2}\)
    • MAE (Mean Absolute Error): \(\frac{1}{N} \sum|r_{ui} - \hat{r}_{ui}|\)
  • São métricas clássicas de erro de predição de modelos de regressão.

Métricas de Avaliação

Recomendação de Top-N Itens

  • Objetivo: Recomendar uma lista de N itens para o usuário. A ordem importa!
  • Métricas: Avaliam a qualidade da lista de itens recomendados.
    • Precision@k: De k itens recomendados, qual a proporção de itens relevantes?
    • Recall@k: Dos itens relevantes, qual a proporção que conseguimos recomendar?
    • nDCG (normalized Discounted Cumulative Gain): Leva em conta a posição do item na lista. Recomendações corretas no topo são mais importantes.

Sendo \(R_u\) o conjunto de itens recomendados para um usuário \(u\) e \(T_u\) o conjunto de itens relevantes (i.e. que ele de fato consumiu/gostou), a precisão no top-k é:

\[ \text{Precision@k} = \frac{|R_u \cap T_u|}{k} \]

Métricas de Avaliação

MRR (Mean Reciprocal Rank)

  • Objetivo: Avaliar o quão rápido o sistema encontra o primeiro item relevante.
  • É muito útil para cenários em que o usuário busca apenas “uma resposta certa” e queiramos penalizar modelos que escondam essa resposta nos últimos resultados.

A métrica reflete o inverso da posição do primeiro acerto:

\[ \text{MRR} = \frac{1}{|U|} \sum_{u=1}^{|U|} \frac{1}{\text{rank}_u} \]

Onde \(\text{rank}_u\) é a posição (rank) do primeiro item relevante na lista recomendada para o usuário \(u\).

Métricas de Avaliação

A acurácia é apenas a ponta do iceberg!

Um bom sistema de recomendação não é apenas preciso, mas também útil e interessante para o usuário. Outros critérios importantes são:

  • Diversidade: As recomendações são muito parecidas entre si? Um usuário não quer ver apenas filmes de um mesmo gênero ou ator.
  • Novidade: O sistema está recomendando itens que o usuário já conhece? É importante para o usuário descobrir novos itens.
  • Serendipidade: O sistema consegue surpreender o usuário com recomendações inesperadas, mas que ele acaba gostando?

Recapitulando

  • Filtragem por conteúdo: recomenda itens similares aos já consumidos, com base em atributos dos itens.
  • Filtragem colaborativa: explora padrões entre usuários e itens.
    • KNN: imputação por vizinhança (por usuários ou por itens).
    • Fatorização Matricial: decomposição em fatores latentes (\(R \approx UV^T\)).
  • Métricas: RMSE/MAE para predição de ratings; Precision@k, Recall@k, nDCG para ranking.
  • Além de acurácia, considerar diversidade, novidade e serendipidade.

Tarefa: Recomendação de filmes

Hora de colocar a mão na massa com um dos datasets mais clássicos da área. O MovieLens 100k é um conjunto de dados famoso para pesquisa em sistemas de recomendação.

  • Conteúdo:
    • 100.000 avaliações (de 1 a 5 estrelas)
    • 943 usuários
    • 1682 filmes
  • Meta-dados:
    • Usuários: idade, gênero, ocupação
    • Itens (filmes): título, ano de lançamento, gêneros (e.g., Ação, Comédia, Romance)

Tarefa: Recomendação de filmes

O que podemos fazer com esses dados?

  • Análise Exploratória:
    • Quais os filmes mais populares? E os mais bem avaliados?
    • Qual o perfil dos usuários?
  • Modelagem:
    • Implementar e comparar diferentes algoritmos:
      • Filtragem Colaborativa (KNN, Fatorização Matricial)
      • Filtragem por Conteúdo (usando os gêneros dos filmes)

Ferramentas e Bibliotecas

Python

  • Surprise: Ótima para começar. Focada em algoritmos clássicos (SVD, KNN) e avaliação de modelos para feedback explícito.
  • LightFM: Implementa modelos híbridos (colaborativos + conteúdo) de forma eficiente. Funciona bem com dados implícitos.
  • Implicit: Especializada em algoritmos para feedback implícito (e.g., cliques, visualizações), como o ALS.

R

  • recommenderlab: Um framework completo para testar e comparar diversos algoritmos de recomendação.
  • recosystem: Uma interface para a biblioteca LIBMF, muito rápida para fatorização matricial em dados esparsos.

Ou então…

  • Faça você mesmo: O PyTorch pode ser uma boa alternativa para implementar modelos de recomendação mais complexos.

Tarefa: Recomendação de filmes

  1. Análise Exploratória: Faça uma breve análise exploratória do dataset MovieLens 100k. Investigue a distribuição das avaliações, o número de avaliações por usuário e por filme.
  2. Treinamento de Modelos:
    • Treine um modelo de Fatorização Matricial (SVD).
    • Treine um modelo User-Based KNN.
  3. Avaliação:
    • Calcule o RMSE para ambos os modelos usando validação cruzada.
    • Calcule a Precisão@10 para ambos os modelos.
  4. Comparação: Compare os resultados e discuta qual modelo parece ser mais adequado para este problema.