Sistemas de Recomendação: Categorias de Algoritmos (Parte 2)
Este texto é a segunda parte de uma série de 3 textos sobre sistemas de recomendação. Se você não leu a primeira parte, eu recomendo fortemente que leia, pois ela dá uma introdução ao tema e explica alguns conceitos base e importantes para este texto.
Neste artigo vamos entrar em detalhes sobre as categorias dos algoritmos de recomendação, suas características, os tipos de dados para cada categoria de algoritmo, suas aplicações e seus prós e contras.
Como já apresentamos no texto parte 1 desta série, normalmente os algoritmos de recomendação são classificados em 4 categorias distintas: Collaborative Filtering, Content-Based Recommenders, Knowledge-Based Recommenders e os Hybrids Systems Recommenders.
Essa categorização é feita pois estes algoritmos normalmente trabalham de formas diferentes em relação aos dados disponíveis, ou seja, um dos grandes drivers de para escolher qual categoria você pode utilizar, é entender quais dados estão disponíveis para treino dos modelos.
Como citado também no texto parte 1 de introdução, os sistemas de recomendação funcionam com base em avaliações dos usuários sobre itens, e podem ser avaliações explícitas (notas aplicadas ao item pelo usuário) ou implícitas (cliques, buscas, visualizações etc.) e neste último as avaliações geralmente são binárias (curtiu ou não curtiu).
Outros dados que podem ser utilizados nos sistemas de recomendação são os dados de características, tanto dos usuários, quanto dos itens. Estes dados podem ser utilizados para cálculo de similaridade entre os itens de interesse do usuário e os itens que o sistema deseja recomendar.
Vale ressaltar é que apesar de categorizarmos os tipos de algoritmos em apenas quatro categorias, dentro de cada uma delas existem diversas variações e complexidades, e algoritmos da mesma categoria podem ter abordagens muito diferentes.
Collaborative Filtering
Vamos começar pela categoria mais amplamente usada a Collaborative Filtering, ou, Filtragem Colaborativa.
Esta abordagem é a categoria de sistemas de recomendação mais adotada pelas grandes empresas pelos seus ótimos resultados, porém, para seu funcionamento é necessário a existência de uma matriz de avaliações robusta com um volume significativo de dados.
A intuição deste algoritmo é que usuários que avaliam itens de forma similar, possuem interesses similares. E aqui algo sutil, mas muito importante, que o diferencia das outras categorias: nestes algoritmos não são utilizados dados característicos de perfis de usuários ou de itens, apenas as avaliações dos usuários x itens.
Para entender como estes algoritmos de filtragem colaborativa funcionam, vamos imaginar que temos uma matriz de avaliação de usuários (m) x itens (n), onde os usuários avaliam os itens com notas que variam de 1 a 5.
Os algoritmos de filtragem colaborativa funcionam como algoritmos preditivos supervisionados, ou seja, vão utilizar os dados pré-existentes para “prever” a possível avaliação de um usuário sobre um item que ele ainda não avaliou com base em avaliações pré-existentes (dados de treino).
Para prever estas avaliações, podem ser adotadas duas abordagens distintas: algoritmos baseados em vizinhança (Neighborhood-Based) e algoritmos baseados em modelos (Model-Based). Estas duas abordagens utilizam estratégias diferentes para prever as avaliações dos itens considerando as avaliações passadas.
As abordagens de vizinhança (Neighborhood-Based, que também podem ser chamadas de Memory-Based) irão encontrar os top-k usuários mais similares em comportamentos de avaliação.
Esta similaridade será encontrada comparando as avaliações dos usuários com avaliações de outros usuários utilizando alguma medida de similaridade (como coeficiente de Pearson ou similaridade de cosseno).
Ao encontrar os top-k usuários mais similares, o próximo passo é gerar as avaliações para os itens não avaliados (ratings previstos). Neste caso pode-se adotar a estratégia de calcular a média entre os top-k usuários para aquele item, vale ressaltar que diversos ajustes e adaptações podem ser realizados.
Por exemplo: ao invés de simplesmente calcularmos a média dos top-k usuários, podemos descontar itens com muitas ou poucas avaliações, podemos normalizar as avaliações dos usuários para minimizar vieses (usuários muito bonzinhos ou usuários mais críticos), podem ser adotados cálculos de desvio padrão (Z-Score) entre outros, não vamos nos entender para não deixar o texto muito longo, mas se quiserem mais detalhes aconselho a leitura do livro Recommender Systems que foi referência para este texto.
Outro ponto importante é que o cálculo de similaridade pode ser feito para encontrar itens vizinhos e não somente usuários vizinhos, utilizando a mesma abordagem de matriz de ratings, porém aplicando-se a colunas e não as linhas, calculando os top-k itens similares ao que o usuário avalia e propondo a média de avaliação para outros itens.
Um desafio comum nestas abordagens é que geralmente a matriz de avaliação é uma matriz esparsa, ou seja, os usuários não avaliam todos os itens, apenas alguns itens, o que torna o processamento desta matriz mais desafiador.
Algumas etapas podem ser feitas para minimizar este impacto como utilizar média de avaliação dos usuários dentro de categorias dos itens, ou utilizar técnicas de redução de dimensionalidade como PCA ou SVD.
Estes métodos de vizinhança normalmente são mais fáceis de implementar e interpretar, e são mais estáveis ao se adicionar novos itens e usuários na base. A grande desvantagem é que podem ser muito demandantes computacionalmente, principalmente em sua etapa “off-line” que é a etapa em que o algoritmo calcula os ratings de usuários x itens e tem que fazer para várias combinações e se a base de usuários for muito grande pode ser inviável pois a complexidade do algoritmo é da ordem de O(m²).
A outra abordagem comum dentro da categoria de Collaborative Filtering são os algoritmos Mode-Based que utilizam uma estratégia diferente para predizer a matriz de rating com base nos ratings passados dos usuários.
Esta abordagem é muito similar aos algoritmos de machine learning tradicionais, onde um modelo é com parâmetros e variáveis é calculado com base nas avaliações dos usuários utilizando a matriz de ratings.
Algoritmos com arvore de decisão, regressão linear, regras de associação, naive-bayes e até mesmo redes neurais podem ser utilizados nesta abordagem, onde a ideia é criar um “modelo” de previsão por usuário de maneira off-line e posteriormente utilizá-lo para a previsão de avaliações e sugestão de itens.
Estes modelos podem ser treinados e avaliados de maneira similar aos modelos de machine learning tradicionais, utilizando técnicas de regularização, métricas tradicionais de erro, entre outros.
A grande diferença (e o desafio) é que a variável target que queremos prever aqui pode estar em qualquer feature (coluna). Se pensarmos em um modelo de machine learning tradicional, onde os dados de treinamento estão dispostos em uma matriz de m (observações) por n (features) e a última feature é a variável target, em sistemas de recomendação a variável target pode estar em qualquer coluna.
No desenho abaixo esta diferença fica bem clara:
Outra variação importante dentro desta mesma abordagem, é utilizar algumas técnicas redução de dimensionalidade e fatoração de matrizes para estimar as avaliações dos usuários dentro da matriz de avaliação.
A intuição desta abordagem é que existe uma correlação entre linhas e colunas na matriz de avaliação, e ao realizar a redução de dimensionalidade e depois voltar a matriz original as “células” não preenchidas serão preenchidas com valores dos ratings previstos.
Dentro desta abordagem de fatoração de matrizes, algoritmos de otimização (e.g. gradiente descendente) podem ser aplicados, pois o erro da matriz original pode ser avaliado se confrontado os valores originais com os da matriz prevista, e o ajuste aos parâmetros dos algoritmos de redução de dimensionalidades podem ser aplicados.
Estas técnicas são complexas e hoje são consideradas o estado-da-arte para alguns sistemas de recomendação de filtragem colaborativa. Novamente, não pretendemos entrar em detalhes, mas no livro “Recommender Systems”, no capítulo 2 o autor explica com detalhes estas técnicas, suas variações, inclusive entrando em detalhes de fórmulas e algoritmos.
As técnicas de filtragem colaborativa são as técnicas mais utilizadas pelas grandes empresas pois elas possuem uma base de dados de avaliações significativa disponíveis, porém estas técnicas são as que mais sofrem do problema mais comum em algoritmos de recomendação, o cold-start problem.
Este problema está relacionado ao fato de os algoritmos só conseguirem recomendar itens se já houver recomendações (avaliações) realizadas, portanto, é difícil começar (daí o nome “cold-start”).
Vou explorar bastante este problema na parte 3 dos textos desta série portanto não vou entrar em muitos detalhes, mas imagine a seguinte situação. A empresa começou a vender um item novo para usuários novos, em que nunca houve se quer uma avaliação, este é o problema que afeta diretamente os algoritmos de filtragem colaborativa.
Content-Based
A segunda grande categoria dos algoritmos de recomendação é a categoria “Content-Based” e como o nome já diz, é baseada em conteúdo. Mas o que isso significa? Neste caso conteúdo é em relação ao conteúdo dos itens, ou seja, suas características específicas.
A intuição básica por trás desta abordagem é: usuários que avaliam itens com características similares, possuem interesses similares. Veja que há uma diferença sutil entre os algoritmos baseado em conteúdos e os algoritmos de filtragem colaborativa que é a similaridade aqui neste caso é calculada com base nas características dos itens e não em suas avaliações (como é feita na abordagem filtragem colaborativa).
Imagine que eu tenha itens com diversas características (que podem ser físicas ou não), e cada característica desta pode variar de acordo com sua própria dimensão (peso, sabor, tamanho, cor etc.).
Estes algoritmos encontram itens similares com medidas de similaridade entre estes vetores de características dos itens.
Um ponto importante é que os top-k itens mais similares são calculados com base nos itens que o próprio usuário avaliou, ou seja, primeiro consolida-se o gosto do usuário com base em suas avaliações e depois o algoritmo procura os itens mais similares a este usuário para indicá-lo.
Normalmente estes algoritmos possuem duas etapas onde o perfil do usuário é traçado e posteriormente uma lista de itens similares é apresentada em forma de ranking, com o mais similar no topo.
Estas abordagens sofrem menos do problema “cold-start” no caso de novos itens (ainda sofrem no caso de novos usuários), porém podem comprometer algumas métricas de novidade e diversidade de recomendações (também falaremos um pouco disso no próximo texto).
As características dos itens podem ser extraídas de diversas formas: Como em uma lista de atributos (cor, tamanho, sabor, gênero etc.), mas também podem ser extraídas com base em técnicas de processamento de linguagem natural sobre reviews e textos dos itens.
Nestas abordagens geralmente antes da etapa “off-line” onde as preferências serão calculadas, há uma etapa de pré-processamento e feature extraction para enriquecer o espaço de features dos itens. Aqui técnicas tradicionais de feature engineering podem ser aplicadas.
Uma vez que as features dos itens são definidas, as avaliações de itens históricos são utilizadas como dados de treinamento, portanto esta abordagem se torna uma abordagem de machine learning tradicional, onde diversos tipos de algoritmos e otimizações podem ser aplicados, para prever o rating do item com base nos ratings do próprio usuário para itens similares.
Em comparação aos algoritmos de filtragem colaborativa estes algoritmos de content-based possuem algumas vantagens como: sofrem menos com o problema cold-start podendo recomendar novos itens sem a necessidade de histórico pré-existente deste item, são mais interpretáveis do ponto de vista de algoritmos, e acompanham a evolução dos algoritmos de machine learning. Suas desvantagens são a personalização profunda ao usuário, dificultando a diversidade na recomendação de itens para aquele usuário e sofrem bastante do problema cold-start em novos usuários.
Apesar destas desvantagens, muitos modelos content-based são utilizados em conjunto com os modelos de collaborative-filtering, mas discutiremos estes detalhes quando falarmos dos modelos híbridos.
Knowledge-Based
Os algoritmos knowledge-based, ou baseados em conhecimento, são exclusivamente baseados nas características dos itens e não utilizam avaliações dos usuários como ponto de partida para a recomendação de novos itens aos usuários.
Esta abordagem é uma ótima alternativa quando não há base de avaliações existentes e se pertente realizar recomendações aos usuários, porém existe um aspecto negativo: o próprio usuário deve passar parâmetros para que os algoritmos possam encontrar itens similares.
Estes parâmetros podem ser passados em forma de filtros ou restrições, onde o usuário informa quais são os valores das características desejadas para o algoritmo e o algoritmo irá encontrar itens dentro daquelas características (Constraint-based), ou o usuário informa um item de exemplo e o algoritmo irá interpretar as características deste item de exemplo para recomendar outros itens similares (Case-based).
Normalmente estes algoritmos são mais aplicados em casos em que o item possui um alto valor agregado, uma alta possibilidade de personalização (Imóveis, Carros etc.) e pouco histórico de avaliações (são comprados com baixa frequência).
A princípio estes algoritmos se parecem muito com sistemas de busca e recuperação de informação, porém, alguns aspectos podem os tornar tão complexos quando as demais categorias de sistemas de recomendação.
Um destes aspectos é a possibilidade o usuário não conhecer (ou não querer) definir todas as características necessárias para a busca, e, portanto, o sistema de recomendação deverá interpretar estas características com base em escolhas iniciais.
Exemplo: O usuário busca uma casa térrea com mais de 3 quartos em localidades mais tranquilas perto de escolas. O sistema pode interpretar que a busca é uma família e indicar casas mais relevantes para famílias do que para casais que buscam casas com 3 quartos, mas que querem mais perto do centro e não restringem a apenas imóveis térreos.
Esta interpretação dos atributos pode ser feita de diversas formas, como regras rígidas de filtro (como em uma busca tradicional), com a geração de features adicionais com base nas características existentes (Carros com alto torque = “Carros Esportivos”), entre outros, inclusive com a possibilidade de um refinamento interativo com os usuários.
Nesta abordagem baseada em conteúdo, a interatividade com os usuários é um ponto chave, e pode ser feita de algumas maneiras: Sistemas de filtros combinados por características (buscas tradicionais), Sistemas baseada em navegações (catálogos e arvore de itens) e sistemas conversacionais que estão ganhando espaço com a evolução dos LLMs.
Dentro desta categoria de métodos content-based a abordagem por exemplo, case-based, também é muito utilizada. Ela se baseia na similaridade do item que o usuário deu como exemplo para trazer itens recomendados que se parecem com o item de exemplo, mas que não seja 100% igual.
Esta similaridade pode ser calculada com base na similaridade das características, utilizando-se algoritmos de similaridade comuns, porém um desafio nestas métricas de similaridade é que os atributos dos itens podem ter pesos diferentes para usuários diferentes. No exemplo da casa, citado anteriormente, pode ser que para o usuário é mais importante que a casa seja perto das escolas do que tenha exatamente 3 quartos, enquanto outro dê mais peso aos números dos quartos.
Por isso alguns pesos a características mais importantes podem ser derivados ou questionados aos usuários no momento destas interações.
A interação com os usuários para este tipo de sistema de recomendação geralmente acontece em 3 etapas: Usuário define os critérios iniciais (ou exemplos), O sistema de recomendação apresenta uma lista de itens já rankeada de acordo com os critérios e, por fim, o usuário refina a busca de acordo com ajuste dos critérios.
Nestas etapas algumas situações podem ocorrer como o retorno vazio (o sistema não encontrou nenhum item similar) ou muitos itens. Neste caso regras de refinamento adicionais podem ser sugeridas ao usuário.
Como vocês podem notar, esta categoria de algoritmo é muito dependente de conhecimentos da área de domínio onde está sendo aplicada, portanto o envolvimento de especialistas é muito bem-vindo quando se está desenhando um sistema de recomendação baseado em conhecimento.
Um dos problemas desta abordagem é a baixa diversidade na recomendação, uma vez que ele se baseia em itens similares. Para minimizar isso, pode-se calcular um índice de diversidade onde é medida a similaridade dos itens com o item de exemplo, incluindo novos itens não tão similares na lista de recomendação final.
O problema do “cold-start” é praticamente inexistente dentro destas abordagens de Knowledge-Based, porém a interatividade com o usuário é extremamente necessária o que torna o processo complexo e mais difícil de avaliar os resultados de antemão.
Geralmente estes sistemas são avaliados de forma “on-line” onde as recomendações são apresentadas aos usuários e ações como cliques e “descartes” podem ser interpretadas com as avaliações positivas ou negativas, respectivamente.
Hybrid Recommender e Ensemble-Based
Como você já pode imaginar os sistemas híbridos são algoritmos que combinam diferentes métodos de diferentes maneiras. Se você tem a disposição diversos dados em diversos formatos (matriz de avaliações, características dos itens e usuários, formas de interação avançada etc.) pode ser interessante combinar estes métodos em um único sistema de recomendação.
Para estruturar um modelo híbrido existem algumas maneiras. O Ensemble Design, que combina diferentes algoritmos sem muitas alterações em apenas uma saída de recomendação. Exemplo: Utilizar diversos algoritmos processando a matriz de ratings e combinar seus resultados no final para realizar o rankeamento dos itens.
Outra maneira é criando um Monolith Design onde diferentes modelos são modificados para que funcionem de forma integrada resultado na recomendação final. Um exemplo é utilizar modelos de filtragem colaborativa para realizar a predição da matriz de ratings considerado características dos itens como vetores adicionais dentro da dimensão de itens (hypercubo).
Por fim, a maneira mais simples que é chamada de Mixed Systems, onde os algoritmos funcionam de forma paralela e as recomendações são apresentadas lado-a-lado para que o usuário possa validar. Normalmente esta técnica é mais utilizada em sistemas interativos.
Vale ressaltar que dentro dos métodos híbridos diversas técnicas de combinação ainda podem ser aplicadas como técnicas ponderadas (onde cada algoritmo recebe um peso diferente que é levado em consideração na consolidação final dos resultados), ou alternados (onde o algoritmo é alterando dependendo dos dados disponíveis no momento), entre muitos outros. Novamente, caso o leitor queira se aprofundar recomendamos o livro Recommender Systems referenciado no final do artigo.
Estas foram as 4 categorias de algoritmos de recomendação, e como citado anteriormente, existem diversos aspectos técnicos e detalhes em cada uma delas que caso o leitor queira se aprofundar existem diversos materiais. Recomendamos os materiais referências ao final deste artigo.
Referências
Recommender Systems The Text Book — Aggarwal, Charu C. — 2016
Recent Developments in Recommender Systems: A Survey — Li et al — 2023
Coursera: Machine Learning Specialization — Recommenders — 2023
Divisões do texto
Como este tema é extenso, e acredito que vale comentar vários pontos interessantes, vou quebrar o texto em 3 partes: