html
Construindo um Sistema de Recomendação Usando o Conjunto de Dados Book Crossing
Índice
- 1. Selecionando o Conjunto de Dados
- 2. Compreendendo a Estrutura do Conjunto de Dados
- 3. Preparação e Exploração dos Dados
- 4. Manipulação dos Dados de Avaliações
- 5. Visualizando a Distribuição das Avaliações
- 6. Preparando-se para o Sistema de Recomendação
- 7. Abordando Desafios dos Dados
- 8. Próximos Passos
- Conclusão
Bem-vindos de volta, amigos! Neste guia, vamos nos aprofundar na construção de um sistema de recomendação, delineando os passos essenciais envolvidos. Para agilizar nosso processo, alguns passos preliminares já estão cobertos, permitindo que nos concentremos nos aspectos principais da construção do sistema.
1. Selecionando o Conjunto de Dados
Para o nosso sistema de recomendação, utilizaremos o Conjunto de Dados Book Crossing, uma coleção abrangente adaptada para recomendações de livros. Enquanto o conjunto de dados Movie Lens é popular e fácil de usar—frequentemente apresentado em tutoriais em plataformas como o YouTube—escolhemos um conjunto de dados mais intrincado para proporcionar uma compreensão mais profunda dos sistemas de recomendação.
Acesso ao Conjunto de Dados:
- Conjunto de Dados Book Crossing: Link para o Conjunto de Dados *(Certifique-se de substituir este pelo link real)*
- Formato: Disponível como dump SQL ou arquivos CSV. Para nossos propósitos, usaremos o formato CSV.
Após baixar os arquivos CSV, você encontrará três arquivos principais:
- Books: Aproximadamente 75 MB
- Users: Aproximadamente 30 MB
- Ratings: Aproximadamente 12 MB
Dado o tamanho do conjunto de dados, manipulá-lo de forma eficiente é crucial, mas seus dados ricos o tornam inestimável para a construção de um sistema de recomendação robusto.
2. Compreendendo a Estrutura do Conjunto de Dados
Arquivo Books:
- Campos: ISBN, Título do Livro, Autor, Ano de Publicação, Editora, URLs de Imagem, etc.
- Identificador Principal: ISBN (Número Padrão Internacional de Livro) serve como o identificador único para cada livro, garantindo que não haja duplicatas.
Arquivo Users:
- Campos: ID do Usuário, Localização, Idade
- Identificador Principal: ID do Usuário identifica unicamente cada usuário.
Arquivo Ratings (BX Book Rating):
- Campos: ID do Usuário, ISBN, Avaliação do Livro
- Importância: Este arquivo vincula usuários aos livros que eles avaliaram, formando a espinha dorsal do nosso sistema de recomendação.
3. Preparação e Exploração dos Dados
Utilizaremos Pandas e NumPy para manipulação de dados e Matplotlib's Pyplot para visualização.
Carregando os Dados:
12345678
import numpy as npimport pandas as pdimport matplotlib.pyplot as plt # Lendo os conjuntos de dados com separadores e codificação apropriadosbooks = pd.read_csv('books.csv', sep=';', encoding='ISO-8859-1')users = pd.read_csv('users.csv', sep=';', encoding='ISO-8859-1')ratings = pd.read_csv('ratings.csv', sep=';', encoding='ISO-8859-1')
Explorando os Dados:
- Books: Contém informações detalhadas sobre cada livro, com ISBN como identificador único.
- Users: Contém dados demográficos dos usuários.
- Ratings: Mapeia usuários para os livros que eles avaliaram, juntamente com as pontuações de avaliação.
4. Manipulação dos Dados de Avaliações
O conjunto de dados Ratings é fundamental, pois conecta os usuários às suas preferências de livros. No entanto, tanto ID do Usuário quanto ISBN não são chaves únicas neste arquivo, o que significa:
- Um usuário pode avaliar vários livros.
- Um livro pode ser avaliado por múltiplos usuários.
Calculando Avaliações Médias:
Para entender a recepção geral de cada livro, vamos calcular a avaliação média.
12345678
# Agrupando por ISBN e calculando médias das avaliaçõesaverage_ratings = ratings.groupby('ISBN').mean().reset_index() # Contando o número de avaliações por livrorating_counts = ratings.groupby('ISBN').size().reset_index(name='RatingCount') # Mesclando avaliações médias com contagemaverage_ratings = average_ratings.merge(rating_counts, on='ISBN')
5. Visualizando a Distribuição das Avaliações
Compreender a distribuição das avaliações ajuda a identificar potenciais vieses ou problemas de esparsidade de dados.
123456
plt.figure(figsize=(10,6))plt.hist(average_ratings['RatingCount'], bins=500, color='skyblue')plt.title('Distribuição das Avaliações dos Livros')plt.xlabel('Número de Avaliações')plt.ylabel('Frequência')plt.show()
Insights:
- Assimetria dos Dados: Um grande número de livros foi avaliado por muito poucos usuários, enquanto alguns poucos acumularam milhares de avaliações.
- Implicações: Este desequilíbrio pode afetar o desempenho do sistema de recomendação, levando a recomendações que favorecem livros populares.
6. Preparando-se para o Sistema de Recomendação
Antes de construir o sistema de recomendação, é essencial criar uma tabela dinâmica que estrutura os dados de forma apropriada, tipicamente com usuários como linhas, livros como colunas e avaliações como valores.
Criando uma Tabela Dinâmica:
1
pivot_table = ratings.pivot(index='User ID', columns='ISBN', values='Book Rating').fillna(0)
7. Abordando Desafios dos Dados
- Esparsidade: Com muitos livros tendo poucas avaliações, é vital implementar técnicas que possam lidar ou mitigar a esparsidade, como a fatoração de matriz.
- Problema de Arranque Frio: Para novos usuários ou livros sem avaliações, estratégias como filtragem baseada em conteúdo ou aproveitamento de dados demográficos dos usuários podem ser benéficas.
8. Próximos Passos
Em tutoriais subsequentes, exploraremos a construção da tabela dinâmica em detalhe, aplicando técnicas de filtragem colaborativa e otimizando o sistema de recomendação para lidar efetivamente com as complexidades do conjunto de dados.
Conclusão
Construir um sistema de recomendação usando o Conjunto de Dados Book Crossing oferece uma experiência de aprendizado abrangente, destacando as complexidades de lidar com conjuntos de dados grandes e do mundo real. Ao compreender a estrutura dos dados, abordar desafios como a esparsidade e preparar os dados de forma metódica, você estabelece uma base sólida para criar um sistema de recomendação eficaz e confiável.
Feliz codificação!