Sistemas de Recomendação
Laboratório de Estatística Aplicada - 2026/1
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
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)
\]
- 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
Essa é só a ponta do iceberg!
Tipos de feedback
- Explícitos:
- Avaliações: Exemplos (e.g. notas 1–5 \(\star\))
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
- …
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
De novo, essa é só a ponta do iceberg!
Tipos de Sistemas de Recomendação
Dois grandes blocos: Filtragem por conteúdo e filtragem colaborativa.
- 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.
- 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.
- 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.
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\).
- 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\).
- 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
- 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.
- 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.
- Faça você mesmo: O PyTorch pode ser uma boa alternativa para implementar modelos de recomendação mais complexos.
Tarefa: Recomendação de filmes
- 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.
- Treinamento de Modelos:
- Treine um modelo de Fatorização Matricial (SVD).
- Treine um modelo User-Based KNN.
- Avaliação:
- Calcule o RMSE para ambos os modelos usando validação cruzada.
- Calcule a Precisão@10 para ambos os modelos.
- Comparação: Compare os resultados e discuta qual modelo parece ser mais adequado para este problema.