개인맞춤 패션 쇼핑몰 상품 추천 시스템
-
Upload
alex-moon -
Category
Data & Analytics
-
view
85 -
download
3
Transcript of 개인맞춤 패션 쇼핑몰 상품 추천 시스템
Item 간 similarity를 이용하여 사용자의 평점을 예측 Item 당 평점이 많을수록 similarity 존재 확률 상승
𝐴 = (0.3 × 3 + 0.6 × 5) 0.3 + 0.6 = 4.33 𝐵 = (0.5 × 2 + 0.6 × 4) 0.5 + 0.6 = 3.09
𝐴 = (0 × 2 + 0.6 × 5) 0.6 = 5 𝐵 = (0 × 4 + 0 × 2 + 0.3 × 3) 0.3 = 3
User 간 similarity를 이용하여 사용자의 평점을 예측 User 당 평점이 많을수록 similarity 존재 확률 상승
5 2 3
2 4
A 3 5
B 2 4
3 1
0.5 0.3
0.6
• User based CF
0.6
5 2 3
2 4
A B 3 5
2 4
3 1
0
0
0.3
• Item based CF
새로운 회원 가입했을 경우 새로운 상품 출시했을 경우
기존 상품에 대한
평점 입력
X Popularity-based CF
(≒기존 인기 상품 추천 방식)
다른 회원들의 평점 입력
X Contents-based recommendation
(상품별 feature 추출 필요)
O User-based CF Item-based CF
(예측 평점 4 이상의 상품 추천) O
User-based CF Item-based CF
(예측 평점 4 이상의 상품 추천)
: 가능 : 불가능
5 3
2 4
5
4
1
평점 참여 회원 수 : 32,569 명
상품 수 : 1,030 개 (오래된 상품 자동 삭제)
평점 후기 수 : 153,803 개 (약 0.45 % 작성 됨)
상품과 회원의 각각 5%를 test set으로 설정
• Cosine
cos 𝜃 =𝑋 ∙ 𝑌
𝑋 𝑌 𝐽 𝑋, 𝑌 =
min(𝑥𝑖 , 𝑦𝑖)𝑖
max(𝑥𝑖 , 𝑦𝑖)𝑖
𝐼𝑓𝑋 = 𝑥1, 𝑥2, ⋯ , 𝑥𝑛 𝑎𝑛𝑑𝑌 = 𝑦1, 𝑦2, ⋯ , 𝑦𝑛 의𝑣𝑒𝑐𝑡𝑜𝑟라하면
𝑟 = (𝑥𝑖 − 𝑥 )(𝑦𝑖 − 𝑦 )𝑖
(𝑥𝑖 − 𝑥 )2𝑖 (𝑦𝑖 − 𝑦 )2𝑖
𝑥 , 𝑦 𝑖𝑠𝑠𝑎𝑚𝑝𝑙𝑒𝑚𝑒𝑎𝑛
• Jaccard • Pearson
Similarity between items 의 값이 매우 작게 나옴.
• 상품 수에 비해 회원 수가 30배 가량 많아 값이 작아진 것으로 보임.
Pearson은 대부분 음수가 나와 활용이 어려움.
• 데이터의 공백이 많아서 음수가 나온 것으로 보임.
AWS에서 Crawling시 간헐적으로 느려짐.
→ request 사이에 random timesleep 적용
Similarity between users 가 5억개 이상으로 RDB에 무리를 줄 수 있음.
→ NoSQL을 활용
Similarity between users 계산 시간이 오래 걸림.
→ tmux를 활용한 Multi-process 구현
개별 Data load후 작업할 시 오래 걸림
→ ORM을 최대 활용하여 DB에서 작업 후 load
Precision 값이 매우 떨어짐.
→ Similarity에 Threshold(임계값)를 적용
5 3
2 4
5
4
1
5 3
2 4
5
A
B
𝑀𝐴𝐸 = 𝑝𝑖 − 𝑞𝑖
𝑁𝑖=1
𝑁=
4 − 𝐴 + 1 − 𝐵
2
• 실제 값(p) • 예측 값(q)
• Popularity based CF에서 MAE의 값이 매우 낮게(좋게) 나옴.
회원이 실제로 구매한 상품
시스템이 추천한 상품
Recall
• 실제로 사용자가 좋아하는 상품을 추천한 비율
• Ex. 추천한 4개중 2개를 실제로 구매했으므로 2
4
Precision
• 추천한 상품 중 사용자가 실제로 좋아하는 비율
• Ex. 실제 구매한 5개 중 2개만 추천 받았으므로 2
5
결과표
모든 상품을 추천하면 Recall은 올라가지만 Precision이 낮아진다.
Recall과 Precision 값 모두 커야 추천의 의미가 있다.
Popularity-based CF는 거의 모든 상품을 추천해주고 있기 때문에 Recall이 1이
나온 반면 Precision이 매우 낮음.
Jaccard Similarity에 Threshold를 적용한 Item-based CF를 사용하여 기존의
Popularity-based CF보다 Recall은 낮아졌지만 Precision이 매우 높아져 추천의
정확도가 높아짐
Popularity
based
User based(cosine) Item based (Jaccard)
Threshold = 0.5 Threshold = 0 Threshold = 0.1 Threshold = 0
Recall (≤ 1) 1.0 0.7241 1.0 0.6552 0.9655
Precision (≤ 1) 0.0749 0.1680 0.0803 0..3654 0.0743
.
.
모든 사용자가 모든 상품에 후기를 작성하지 않으며(0.45% is filled) CF의 특성상
공백 데이터는 모두 0점으로 간주하여 공백 데이터가 추천의 정확도를 떨어뜨림.
사용자 ID의 뒤 네 글자가 *로 표시(ex. a****)되어 크롤링 시 소수의 중복 데이터
발생 가능.
실제 사용자의 구매이력을 데이터로 활용한다면 정확도가 매우 높아질 것으로 예상.