Os sistemas de recomendação são ferramentas essenciais para orientar os usuários a produtos, músicas, filmes e muito mais, alinhados com suas preferências e histórico. Neste guia abrangente, mergulharemos fundo na construção de sistemas de recomendação utilizando o pacote Surprise em Python. Exploraremos técnicas avançadas de filtragem colaborativa, amplamente aplicadas para a criação desses sistemas inteligentes.
Desvendando a Filtragem Colaborativa
A filtragem colaborativa representa uma abordagem líder em sistemas de recomendação. Sua base está na premissa de que usuários com comportamentos passados semelhantes tendem a compartilhar gostos e preferências futuras. No cerne dessa abordagem, encontramos o pacote Surprise, uma biblioteca de código aberto dedicada à construção de sistemas de recomendação.
Carregando Dados e Configurando Algoritmos
Nossa jornada começa com a aquisição e formatação dos dados. Vamos considerar o cenário de avaliações de filmes por diversos usuários, empregando o conjunto de dados clássico MovieLens 100k como nosso ponto de partida.
import pandas as pd
from surprise import Dataset, Reader
# Dados de avaliação
dados_avaliacao = {
"item": [1, 2, 1, 2, 1, 2, 1, 2, 1],
"usuário": ['A', 'A', 'B', 'B', 'C', 'C', 'D', 'D', 'E'],
"avaliação": [1, 2, 2, 4, 2.5, 4, 4.5, 5, 3],
}
# Criando um DataFrame Pandas
df = pd.DataFrame(dados_avaliacao)
# Configurando o leitor
leitor = Reader(scale=(1, 5))
# Carregando os dados
dados = Dataset.load_from_df(df[["usuário", "item", "avaliação"]], leitor)
# Carregando o conjunto de dados MovieLens-100k
movielens = Dataset.load_builtin('ml-100k')
Algoritmos de Vizinhos Mais Próximos (k-NN)
A seleção de algoritmos dependerá da estratégia escolhida. A otimização da precisão pode ser alcançada ajustando os parâmetros dos algoritmos, uma tarefa simplificada com a classe GridSearchCV disponível no Surprise, semelhante à abordagem do GridSearchCV no scikit-learn.
Por exemplo, a busca da melhor métrica de similaridade para abordagens baseadas em memória é realizada da seguinte forma:
from surprise import KNNWithMeans
from surprise.model_selection import GridSearchCV
# Carregando o conjunto de dados
dados = Dataset.load_builtin("ml-100k")
# Configurando as opções de similaridade
opções_similaridade = {
"nome": ["msd", "cosine"],
"suporte_mínimo": [3, 4, 5],
"baseado_em_usuário": [False, True],
}
grade_parâmetros = {"opções_similaridade": opções_similaridade}
# Executando a busca em grade
gs = GridSearchCV(KNNWithMeans, grade_parâmetros, medidas=["rmse", "mae"], cv=3)
gs.fit(dados)
# Exibindo os resultados
print(gs.best_score["rmse"])
print(gs.best_params["rmse"])
Algoritmo SVD para Decomposição de Matrizes
O algoritmo de Decomposição em Valores Singulares (SVD) é uma escolha popular para a fatoração de matrizes em sistemas de recomendação. Mais uma vez, utilizamos o GridSearchCV para encontrar os melhores valores de hiperparâmetros para o algoritmo SVD:
from surprise import SVD
from surprise.model_selection import GridSearchCV
# Carregando o conjunto de dados
dados = Dataset.load_builtin("ml-100k")
# Definindo os valores de hiperparâmetros
grade_parâmetros = {
"n_épocas": [5, 10],
"lr_todos": [0.002, 0.005],
"reg_todos": [0.4, 0.6],
}
# Realizando a busca em grade
gs = GridSearchCV(SVD, grade_parâmetros, medidas=["rmse", "mae"], cv=3)
gs.fit(dados)
# Exibindo os resultados
print(gs.best_score["rm
se"])
print(gs.best_params["rmse"])
Conclusão
A construção de sistemas de recomendação é um desafio empolgante e significativo. Neste guia, exploramos profundamente as técnicas de filtragem colaborativa e sua implementação prática usando o pacote Surprise em Python. Através de exemplos detalhados, você aprendeu a preparar seus dados, configurar algoritmos e ajustar hiperparâmetros para oferecer as melhores recomendações possíveis.
Se você deseja aprofundar ainda mais seu conhecimento, existem diversos recursos à sua disposição, incluindo bibliotecas como LightFM e Python-recsys, bem como livros e pesquisas acadêmicas abordando o tema.
Lembre-se de que os sistemas de recomendação impactam diversas áreas, desde serviços de streaming até comércio eletrônico. Ao dominar essas técnicas, você estará preparado para criar sistemas inteligentes que proporcionem experiências personalizadas e envolventes aos usuários.
Referências Adicionais
Link para a biblioteca Surprise: https://pypi.org/project/scikit-surprise/