구매 의사결정에 중요한 역할을 하는 리뷰에 신뢰성 문제가 있는데 원인은 다음 네가지로 정의.
본 프로젝트를 통해 허위리뷰와 관련 없는 리뷰 제거, 악성리뷰을 판정하여 분리 및 제거, 긍부정이 혼재된 경우에는 맛집을 평가하는 요소를 판별하여 어떤 유형인지 맛집을 분류하고 그에 맞게 리뷰를 파악하는 감성분석 및 키워드 추출을 목표로 하여 소비자가 신뢰할 수 있는 리뷰를 만드는 것이 본 프로젝트의 목표
네이버 플레이스 리뷰, 블로그 리뷰 크롤링을 통해 원본 데이터 수집
블로그 리뷰 3382개, 방문자 리뷰 14011개 수집
대부분의 허위리뷰는 블로그 리뷰에서 발생하므로 블로그 리뷰를 대상으로 한 허위리뷰 필터링 실시
Y값만 있는 상황이기 때문에 크롤링시 아래 변수들을 추가로 크롤링
포스트 작성 날짜, 포스트 본문에 사용된 이미지 개수, 포스트 제목 길이, 포스트 공감 개수, 포스트 댓글 개수, 블로그 이웃 수, 블로그 최신 게시물 날짜 등의 정보
허위리뷰에 해당하는 데이터가 너무 적었기 때문에 어떤 모델을 써도 제대로 된 성능이 나오지 않음
기존 Spam 데이터를 이용해 Spam 데이터 생성 및 삽입
이후 Random Forest, Decision Tree, Logisitic Regression, XGBOOST 등의 모델 평가
1. 성능 평가 지표
분석결과
성능이 가장 좋은 XGBOOST의 변수 중요도 결과
결론
결과적으로 XGBOOST를 사용해 2861개의 데이터 중 67개의 허위리뷰 제거했다. 다만, 적은 양의 데이터, 불균형적인 데이터로 인해 모델의 성능보다 실질적인 성능이 미비할 가능성이 있다. 향후 추가적인 크롤링을 통해서 데이터를 충분히 수집한 뒤에 데이터 부족 문제와 데이터 불균형 문제를 해결한다면 더 좋은 모델을 만들 수 있을 것이다.
블로그 리뷰에는 식당에 대한 리뷰와 관련이 없는 일상적인 내용이 많기 때문에 식당과 관련이 없는 내용을 제거하고 리뷰 데이터만 뽑을 필요가 있음
블로그 리뷰 중 식당에 대한 내용만 있는 리뷰(기준문장)와 다른 리뷰들의 유사도를 계산해서 유사도가 일정 수치보다 낮은 단어를 제거하면 식당 리뷰가 아닌 내용들을 제거할 수 있지 않을까?
유사도 특정치 결정
유사도가 특정치보다 낮은 단어를 제거해야 하기 때문에 기준 문장과 다른 리뷰들 사이의 유사도를 구해서 평균을 구함
① 리뷰에 있는 토큰과 기준 문장에 있는 모든 토큰들 사이의 유사도 계산 후 평균 계산
② ①번의 값이 위의 표에 있는 유사도 평균 값보다 낮다면 그 단어 제거
리뷰 필터링
방문자 리뷰에는 식당에 대한 리뷰나 식당의 개선을 기대하는 비판 리뷰 외에도 감정적이거나 악의적인 내용을 담은 악성리뷰가 존재한다. 이를 라벨링 처리를 한 뒤 머신러닝을 통해 악성리뷰를 분류하고 예측해 활용
1. 변수 설명
visitor review - X
label - Y
데이터가 너무 적고 불균형이 심해 어떤 모델을 써도 성능이 낮은 문제가 허위리뷰와 동일하게 발생하였다. 그래서 악성 리뷰 데이터만 추가로 수집하였고, 데이터의 복제도 수행하였다.
2. 모델링
Decision Tree, XGBOOST, Light GBM 모델 사용
성능 평가 지표는 허위리뷰와 동일하고, Light GBM이 가장 성능이 좋았다.
3. 결론
13892개의 데이터 중 132개의 악성리뷰 제거하였다. 다만 허위리뷰와 마찬가지로 적고 불균형적인 데이터가 발목을 잡았다. 추가적인 크롤링이나 데이터 수집을 통해 문제를 해결한다면 더 좋은 모델을 만들 수 있을 것이다.