프로젝트 이름 : Bookitoki
팀 이름 : Bookitoki
프로젝트 개요 : 다양한 사용자들에게 취향에 맞게 책 추천을 해주어 책에 대한 접근성을 높혀 활발한 독서 문화 형성에 기여하는 것.
- 잘파(Z+alpha) 세대의 저조한 문해력, 책 읽는 인구 감소 등. 독서를 경시하는 실태
- 텍스트 힙의 출현으로 등장한 팬덤 구매 현상 등 독서 소비의 형태 변화
독자들이 자연스럽게 책에 흥미를 느낄 수 있도록 접근성을 높이면서, 독서 문화의 토대를 만들어 나아가고자 '사용자 기반 책 추천 시스템 개발'
- 프로젝트 기간 : 2024.11.5 ~ 11.11
- 팀원 : 김혜영, 유영준, 최수빈, 허채연
- 목적 : 사용자 맞춤형 책 추천 시스템 구현
데이터셋 : https://www.kaggle.com/datasets/ruchi798/bookcrossing-dataset/data
-
사용자별 추천 기능 - 사용자가 읽은 책의 평점을 기반으로 평점 유사도가 높은 책 10권 추천
- 평점 유사도 산출
- 가중평점 예측
- 가중평점 기반 상위 평점 도서들 조회
-
작가별 추천 기능 - 사용자가 읽은 책의 작가에 대한 평가를 기반으로, 작가 평점 유사도가 높은 책 10권 추천
- 사용자 아이디 입력 받기.
- 입력받은 사용자 아이디 기반으로 그 사람이 가장 높은 평점을 준 작가 탐색
- 그 작가와 유사도가 높은 책들 추천
-
연령대별 추천 기능 - 사용자의 연령대별 상위 카테고리의 평점 높은 5권 추천, 다른 카테고리의 평점 높은 책 5권 추천 => 사용자게에 다양성 제공
- 연령대 범주화
- 범주화된 연령대에 맞춰, 유저의 연령대 확인
- 유저의 연령대에 맞춰 해당 연령대가 높은 평점을 준 책 추천
-
카테고리별 추천 기능 - 사용자가 읽은 책의 카테고리에 해당하는 상위 10권의 책 추천
- 사용자별 상위 카테고리 찾기
- 선택된 상위 카테고리에서 상위 책 10권 추천
- 최종 추천 테이블 생성(입력값:user_id)
- 독서 접근성 향상
- 독서 문화 촉진
- 차별화된 독서 경험 제공
혜영
- 정제되지 않은 데이터를 만나면서 데이터 수집에서부터 전처리 과정의 중요성
- 단어 임베딩을 사용해 유사한 의미를 가진 단어를 찾아 추천 시스템으로 디벨롭
영준
- 좌절을 통해서 해야하는 계기를 가지게 되었습니다.
수빈
- 이번 과정을 통해 여러 플랫폼에서 어떤 식으로 추천을 해주는 지 알 수 있어서 좋았다.
채연
연령 별 선호하는 책의 유사도를 구하고 사용자가 선호하는 카테고리를 고려해 책 추천을 진행함
-
해당 csv file은 뚜렷하게 구분지을 수 있을만한 category가 없어서 10개의 category로 나누어 summary 내용에 따라 L_category를 할당해줌
- count기반 카테고리 별 추천시스템을 구현할 수 있었음
- 연령별 유사도에 카테고리를 더해 좀더 다양한 추천을 진행할 수 있었음
-
user가 가장 섢호하는 카테고리의 책 5권과, 그렇지 않은 카테고리의 책 5권씩을 추천해줌
- 카테고리에 유사도를 부여하게 되면 같은 카테고리에 대해서만 추천이 이루어지기 때문에 이렇게 진행함
- 가중치를 두어서 카테고리와 유사도를 함께 반영해 추천해주는 시스템을 구축했으면 더 좋았을 것
- 카테고리에 유사도를 부여하게 되면 같은 카테고리에 대해서만 추천이 이루어지기 때문에 이렇게 진행함
-
책에 대한 평점이 없는 데이터가 많고, 1~10점으로 점수의 편차가 커서 평점 유사도 면에서 아쉬움이 있음
- 최소 평가 개수의 조건을 좀 수정해서 유사도를 높이는 작업을 진행함
- 점수의 range를 줄이는 작업을 진행하면 좋았을 것
- 최소 평가 개수의 조건을 좀 수정해서 유사도를 높이는 작업을 진행함
-
리뷰나 카테고리에 대해서 CountVectorize, TF-IDF를 진행했더니 단순 빈도만 파악해서 summary나 category column에 대해 유의미한 결과를 도출하지 못함
- ‘마틸다’라는 책은 학교에서 일어나는 일에 대한 sf 내용이였지만 , ‘study’라는 단어의 빈도수만 파악해서 연구와 관련된 책이 추천되는 사례가 있었음
- summary를 기반으로 k-means clustering을 하는 것이 무의미했음
-
국내 서점에 대한 데이터를 사용하려면 scraping을 진행해야하는데 시간 상의 문제로 진행하지 못한 점이 아쉬움으로 남음