본문 바로가기

빅데이터/추천시스템

데이터 전처리 - 추천시스템(3)

이번에는 크롤링 한 데이터들 전처리를 해보겠습니다.

content-based filtering 에 쓰일 book data 입니다

컬럼수가 많아 .T 하였습니다.

전처리 순서입니다.

중복된 책 포함 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 을 해보겠습니다