이번에는 크롤링 한 데이터들 전처리를 해보겠습니다.
content-based filtering 에 쓰일 book data 입니다
전처리 순서입니다.
중복된 책 포함 14만권에서 5000권 으로 줄이려고 목표했습니다.
1. 제목이 없는 데이터 ('no_title')는 제거
2. 저자가 없는 데이터 ('no_writer') 는 제거
3. 정가 30000원 이하만 남기기
- 현재 판매가가 아닌 정가기준(판매가는 변동이 있습니다) , 이상치제거 , 시리즈(ex : 해리포터 1~4권 패키지)제거
4. 한줄평갯수가 5개 이상인 데이터 만 남기기
- 리뷰보다 접근성이 좋은 한줄평리뷰 갯수가 5개 미만인 책은 인기가 없는 책으로 판단, 추천 우선순위에서 밀린다고 생각하였습니다, 후에 7개 or 10개로 조정을 고려하였습니다.
5. 리뷰갯수가 3개 이상만 남기기
- 리뷰는 한줄평보다 정성이 많이 들어가므로 기준을 비교적 낮게 정해서 전처리해야겠다고 생각하였습니다.
6. ISBN13 을 기준으로 중복된 책 데이터 제거, ISBN 10 은 컬럼은 제거하기로 결정
- ISBN은 국제표준도서 번호로 국제적으로 책에 붙이는 고유한 식별자입니다. 원래 ISBN은 10자리였지만 2007년부 터 13자리로 변경되었습니다.
- ISBN13 이 똑같다는 것은 책제목부터, 출판사 까지 같은 것이므로 중복으로 크롤링 된 것입니다. 모델의 정확도를 위해 인과관계나, 선형관계가 아닌 같은 의미를 지닌 컬럼은 제거하기로 하였습니다
7. 책 제목이 같은(출판사가 다른) 데이터 중복 제거
- 유명하거나 고전소설은 많은 출판사에서 출간하기도 하고, 같은 출판사에서도 업데이트(?)를 해서 새로 출간하기도 합니다. 그 중 리뷰와, 한줄평갯수가 많은 순으로 정렬하여 같은 책 중에서도 인기 많은 책을 남겼습니다.
8. 2017년 이전 출간 & 리뷰갯수 20개 미만 & 리뷰평점 8.7 미만 제거
- 인기있는 책 추천을 위해 비교적 최근에 출간된 책을 추천대상으로 정하였습니다. 하지만 스테디셀러도 있고 출간 된 지 꽤 오래 되었지만 인기있는 책들도 다수 있습니다. 그래서 2017년 이전출간된 책 중에서 인기가 없고(작성된 리뷰갯수가 적고 평점도 낮은) 책들을 제거 하였습니다. 리뷰평점 8.7 은 전체 데이터의 리뷰평점 mean 값입니다.
9. 한줄평과 관련된 한줄평 갯수, 한줄평 평점 , 한줄평평점 비율(5점비율~1점비율) -> 1개의 값으로 변환
- 가중평균을 이용하여 연관성 있는 컬럼들을 한개의 컬럼으로 변환하였습니다
- 편차가 심해서 log로 편차를 줄이려고 했습니다.
10. 리뷰와 관련된 리뷰평점,리뷰갯수를 -> 한개의 컬럼으로 변환하였습니다
11. 정가를 5개의 그룹으로 분류('가격5000','가격10000','가격13000','가격17000','가격25000')
- 중요도가 낮은 feature라고 판단해서 범주형으로 변환하였습니다
- 결과에 대한 해석은 사람이 이해하기 쉽도록 문자열로 변환하였습니다.
- 고가,중가,저가 등으로 하면 직관적으로 가격대를 알기 어려우니 8000~12000원 사이면 가격10000 으 로 범위의 mean값으로 러프하게 설정하였습니다
12. page도 정가와 같은 방법으로 전처리
13. Category 와 Tag ,keyword(교보문고 데이터) 를 전처리해서 한개의 컬럼으로 변환
이렇게 해놓고 알고리즘마다 사용할 feature들을 골라서 모델을 학습했습니다.
다음으로 CF 에 사용될 review(rating) data 입니다.
전처리 하기 전의 크롤링 데이터 입니다. link는 책고유id 라고 생각하시면 되겠습니다. IDcount_y 컬럼은 유저별로 작성한 리뷰갯수입니다.
필요한 컬럼만 골라서 정리하였습니다. 판타지소설이 다수 보입니다.
리뷰갯수는 9.5만개 정도입니다.
앞의 포스팅에서 말씀드렸다시피 대부분의 rating 들은 이처럼 편향된 결과가 많습니다.
인기소설 '나미야 잡화점의 기적' 의 평가분포도 편향되어있습니다. Item이 별로 만족스럽지 않은 사람들은 대체로 평가를 하는 수고를 하지 않기 때문입니다.
book X user 꼴의 rating 값으로 바꿨습니다
다음포스팅에서는 실제로 CF 와 contents-based filtering 을 해보겠습니다
'빅데이터 > 추천시스템' 카테고리의 다른 글
Item-based 를 들어가기전에 (np.corrcoef, .corr 연습)- 추천시스템(5) (0) | 2020.03.18 |
---|---|
Content-based-filtering(컨텐츠기반 필터링) - 추천시스템(4) (0) | 2020.03.11 |
추천시스템에 대한 이해 - 추천시스템(2) (0) | 2020.03.04 |
데이터크롤링(crawling) - 추천시스템(1) (0) | 2020.03.04 |
추천시스템 구현 방향 (0) | 2020.03.04 |