Open syleeie2310 opened 3 months ago
우선 복잡도를 줄이려고 같은 날짜인 co-review만 고려하도록 바꿔주세요. 월욜에 구두로 이야기 드릴게요
-동일한 날짜의 co-review 한 상품은 관련성(relavnce) 하다고 가정한다. -대신 많은 사용자 (n>=k) k는 정해야 하는 값, co-review 했을 때 관련성 있다고 가정한다 -날짜 기반으로 훈련, 평가 데이터를 구분한다.
%sql
select *
from(
select a.date_column, a.asin as asin1, b.asin as asin2
, count(distinct a.reviewerID) review_cnts
, count(distinct case when a.overall = 5 and b.overall = 5 then a.reviewerID else null end) review_5_cnts
, count(distinct case when a.overall >= 4 and b.overall >= 4 then a.reviewerID else null end) review_4more_cnts
from default.all_amazon_data as a
inner join default.all_amazon_data as b
on 1=1
and a.reviewerID = b.reviewerID
and a.date_column = b.date_column
where 1=1
and a.asin = 'B00201ER88'
--- and a.cat_1 = 'AMAZON FASHION'
--- and b.cat_1 = 'AMAZON FASHION'
group by a.date_column, a.asin, b.asin
) as t
where 1=1
and t.asin1 != t.asin2
꼭 sql로 할 필요는 없는데 예시로 보내드렸구요. 데이터(default.all_amazon_data)는 바꾸셔야 되요.
저것을 python으로 개발한다고 하면 특정 조건만 계산하도록 카디시안 프로덕트를 만들어서 짜면 되요.
데이터 탐색은 카테고리 별로 나눠서 해주시고
co-review feature 별(3점 이상, 4점 이상, 5점 이상, 점수 상관없이 co-review) 로 1건, 2건, 3건..n건까지의 pair 갯수 분포
-> 평점을 고려한다. (4점 이상만 쓸지 말지)
-> 날짜를 고려한다. (날짜란 동일한 날에만 리뷰를 매기지 않기 때문에 다른 날짜에 리뷰를 매기니깐, 날짜를 어느정도로 고려할지 모르겠다)
예를 들자면 a 상품을 리뷰를 남기고 180일이 지나고 b 리뷰를 남겼는데 과연 a,b가 유사하다고 할수 있냐? 그럼 그게 180일이 아니고 30일이냐? 60일이냐? 90일이냐? 날짜 간격을 고려해서 가중치를 계산할 수 있지 않겠냐
예를 들자면 같은 날짜에 매겼으면 1 날짜 하루 차이 나면 0.9 (함수 날짜 간격을 고려해서) 날짜 7일 차이 나면 0.5 가정