Ch.8 데이터를 무기로 삼기 위한 분석 기술
WITH ratings AS (
SELECT user_id, product,
--상품 열람 수
SUM(CASE WHEN action='view' THEN 1 ELSE 0 END) AS view_count,
--상품 구매 수
SUM(CASE WHEN action='purchase' THEN 1 ELSE 0 END) AS purchase_count,
--열람 수와 구매 수에 3:7의 비율의 가중치 주어 평균 구하기
, (0.3 * SUM (CASE WHEN action = 'view' THEN 1 ELSE 0 END) + 0.7 * (SUM (CASE WHEN action ='purchase' THEN 1 ELSE 0) END ) AS score )
FROM action_log
GROUP BY user_id, product
)
SELECT r1.product AS target , r2.product as related,
-- 모든 아이템을 열람/구매한 사용자 수
COUNT (r1.user_id) AS users,
-- 스코어들을 곱하고 합계를 구해 유사도 계산하기
SUM (r1.score * r2.score ) AS score,
--상품의 유사도 순위 구하기
ROW NUMBER () OVER (PARTITION BY r1.product ORDER BY
SUM (r1.score * r2.score ) DESC) AS rank
-- 공통 사용자가 존재하는 상품의 페어 만들기
FROM ratings AS r1 JOIN ratings AS r2
ON r1.user_id = r2.user_id
-- 같은 아이템의 경우에는 페어 제외하기
WHERE r1.product <> r2.product
GROUP BY r1.product, r2.product
ORDER BY target, rank ;
Last updated