Sistemas de recomendação estão no centro de gigantes de e-commerce e plataformas de streaming. Estimativas sugerem que uma grande parte da audiência da Netflix e das vendas da Amazon derivam diretamente de seus algoritmos de recomendação. É claro que esses sistemas não são apenas um bom recurso, mas uma pedra angular de sucesso fenomenal em diversas indústrias.
Por que os sistemas de recomendação são cruciais?
A principal vantagem dos sistemas de recomendação é atender às preferências individuais dos usuários. Ao analisar comportamentos e padrões passados, eles preveem o que um usuário pode gostar no futuro. Essa personalização aumenta a satisfação e fidelização. Quando os usuários se sentem compreendidos por recomendações personalizadas, eles são muito mais propensos a permanecer.
Os sistemas de recomendação também ajudam clientes a descobrir novos conteúdos/produtos. As recomendações destacam itens que um usuário pode não encontrar de outra forma. Isso leva a mais vendas ou tempos de visualização mais longos.
Como as recomendações costumam ser relevantes e atraentes, os usuários passam mais tempo interagindo com sugestões ou adicionando produtos ao carrinho. Esse envolvimento mais profundo é vital para o sucesso dos negócios.
Mas os sistemas de recomendação não são apenas para os usuários. Por meio de análises do comportamento de seus clientes, as empresas obtêm um conhecimento aprofundado sobre seus comportamentos e tendências populares. Esses dados auxiliam as empresas na tomada de decisões e na otimização de inventários.
Sistemas de recomendação são cheios de IA
Técnicas de inteligência artificial (IA) são muito presentes em sistemas de recomendação. Os sistemas alimentados por IA fornecem sugestões mais relevantes e personalizadas do que os métodos tradicionais baseados em regras. Várias características da IA colaboram para essa diferença.
Os modelos de IA podem processar rapidamente quantidades impressionantes de dados. Esse volume de dados seria impossível de ser analisado por humanos eficazmente. A IA permite que as empresas forneçam recomendações personalizadas, mesmo com enormes bases de usuários e vastos catálogos.
As ferramentas de IA também se destacam em encontrar padrões complexos e correlações sutis nos dados. Elas podem identificar interesses de nicho, descobrir conexões inesperadas entre itens e se adaptar às tendências em constante mudança. Tudo isso é fundamental para sistemas capazes de realizar recomendações com nuances.
Além disso, os modelos de IA não permanecem estáticos. A cada nova interação do usuário (uma classificação, uma compra), os algoritmos aprendem e refinam seus conhecimentos. A capacidade da IA de aprender e melhorar constantemente mantém as recomendações atualizadas e relevantes.
As principais técnicas de IA presentes em sistemas de recomendação
A maioria dos sistemas de recomendação modernos usa técnicas de machine learning. As mais comuns são filtragem colaborativa e filtragem baseada em conteúdo. A filtragem colaborativa analisa as interações de um usuário com itens para encontrar outras pessoas com gostos semelhantes. Já a filtragem baseada em conteúdo analisa atributos de itens e histórico do usuário para recomendar conteúdo semelhante. Ambos os tipos de filtragem podem também ser combinados em estratégias hibridas.
Outra área da IA que é bastante usada para fazer recomendações é o processamento de linguagem natural. Suas técnicas são extremamente úteis para analisar avaliações, descrições, sentimentos, etc. Com isso, elas auxiliam na extração de preferências matizadas e na melhora da compreensão sobre a preferência dos clientes.
Todas essas técnicas são facilmente implementadas em Python, principalmente através do auxílio de bibliotecas como NumPy, scikit-learn, pandas, entre várias outras.
Filtragem Colaborativa
Para ilustrar como criar um sistema de recomendação com Python, nos concentraremos na filtragem colaborativa. Em sua essência, a filtragem colaborativa consiste em aproveitar a “sabedoria coletiva”. Ela funciona pesquisando um grande grupo de pessoas e encontrando um conjunto menor de usuários com gostos semelhantes a um usuário específico. Ele analisa os itens de que eles gostam e os combina para criar uma lista classificada de sugestões. Há muitas maneiras de decidir quais usuários são semelhantes e combinar suas escolhas para criar uma lista de recomendações. Uma delas consiste em usar algoritmos inspirados no kNN.
A implementação da filtragem colaborativa envolve geralmente a criação de uma matriz com dados das interações de usuários com itens e as classificações atribuídas. Em seguida, o algoritmo realiza cálculos de similaridade. Ou seja, ele localiza usuários com padrões de classificação semelhantes. Medidas comuns de similaridade incluem similaridade por cosseno e correlação de Pearson. Com a similaridade calculada, o algoritmo é então usado para fazer recomendações. Para isso, ele identifica que itens foram bem classificados por usuários semelhantes a um usuário-alvo, mas que esse usuário não conhece ainda. O algoritmo prevê a classificação que o usuário-alvo fará para recomentar itens que ele irá gostar.
Filtragem Colaborativa com Python e Surprise
Para implementações de filtragem colaborativa em Python, a melhor alternativa é usar a biblioteca surprise (Simple Python RecommendatIon System Engine). Segundo a descrição oficial, surprise é um scikit Python para construir e analisar sistemas de recomendação que lidam com dados de classificação explícitos. Ou seja, dados com avaliações diretas de usuários como números de estrelas.
Para explorar como usar a biblioteca, é preciso instalá-la.
pip install scikit-surprise
Também usaremos pandas para essa implementação.
pip install pandas
O código é super simples e está inteiro abaixo.
import pandas as pd
from surprise import Reader, Dataset, SVD
# Dados ilustrativos
ratings = pd.DataFrame({'user_id': [1,1,2,2,3,3], # users
'item_id': [1,2,2,3,1,3], # itens
'rating': [5,3,4,2,5,4]}) # classificação
# Define intervalo da classificação
reader = Reader(rating_scale=(1, 5))
# Carrega dados
data = Dataset.load_from_df(ratings, reader)
# Treina modelo: algoritmo SVD
# leia mais sobre o algoritmo aqui: https://surprise.readthedocs.io/en/stable/matrix_factorization.html#surprise.prediction_algorithms.matrix_factorization.SVD
algo = SVD()
trainset = data.build_full_trainset()
algo.fit(trainset)
# Prevê a classificação que um usuário fará para um item que ele nao conhece ainda
user_id = 1 # user
item_id = 3 # item
predict = algo.predict(user_id, item_id)
print(f'Classificação prevista: {round(predict[3], 2)}')
Classificação prevista: 3.72
O código mostrado acima é simples, mas eficaz. Ele consiste em carregar os dados no formato correto, treinar o modelo escolhido (algoritmo SVD, mas existem várias outras opções aqui) e fazer predições para produtos que um usuário-alvo ainda não conhece. Só isso!!!
Problemas para Manter no Radar e Algumas Dicas
Existem alguns problemas que podem limitar a eficácia de sistemas de filtragem colaborativa. Os três mais comuns são: dados esparsos, cold start e escalabilidade. Dados esparsos se referem a matrizes de itens de usuários com muitas classificações ausentes. Isso dificulta os cálculos de similaridade. Técnicas de fatoração de matrizes ajudam a reduzir esse problema. O algoritmo SVG usado acima é uma dessas técnicas.
Cold start consiste no desafio de fazer recomendações para novos usuários ou itens sem histórico. Uma das estratégias para usar filtragem colaborativa nesses cenários envolve o uso de informações auxiliares, como descrições de produtos ou informações demográficas.
Os cálculos de filtragem colaborativa podem ficar computacionalmente caros com conjuntos de dados massivos. Para lidar com esses problemas de escalabilidade, bibliotecas otimizadas, computação distribuída e algoritmos de aproximação podem ser necessários.
Para quem gostou dessa implementação de filtragem colaborativa, vale a pena conhecer melhor a biblioteca surprise. Também existem bons tutoriais detalhados sobre filtragem colaborativa aqui e aqui. Tratamos do kNN aqui e aqui. Para quem quer testar implementações com dados mais realistas, uma dica é usar esse conjunto de dados aqui.