개인맞춤 패션 쇼핑몰 상품 추천 시스템
기간: 2016.12 ~ 2016.12
 프로젝트의 필요성
국내의 수많은 온라인 패션 쇼핑몰들은 소비자에게 상품을 추천하기 위해 ‘이 상품을 구매한
다른 회원들이 구매한 상품’을 활용하거나 ‘베스트 상품’을 활용하고 있다. 하지만 그 정확도는 많
이 떨어지며, 소비자의 과거 이력과 상품의 feature를 활용한 contents based filtering 또한 정확
도가 많이 떨어진다. 이러한 문제점을 해결하기 위해 회원들의 상품별 평점을 데이터로 활용하여
collaborative filtering 하여 새로운 상품을 추천해주고자 한다.
 추천시스템 개요
 개인맞춤(personalized) 상품 추천 과정
새로운 회원 가입했을 경우 새로운 상품 출시했을 경우
기존 상품
에 대한
평점 입력
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 이상의 상품 추천)
: 가능, : 불가능
- Collaborative filtering은 기존 상품 혹은 기존 회원들의 평점 데이터가 필요
- 평점 데이터가 없는 경우 Cold Start 문제 발생
 데이터
 데이터 분석 과정
• Similarity 분석
- Similarity between items 의 값이 매우 작게 나옴. 상품 수에 비해 회원 수가 30배 가량
많아 값이 작아진 것으로 보임.
- Similarity를 구하기 위해 Cosine, Jaccard, Pearson 을 활용하였으나 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를 적용
• 평가 및 결론 (sample data: 상품 수(170), 참여회원 수(862), 평점 수(7,413), Cosine, Jaccard similarity)
(전체 data는 similarity 계산 중. 데이터의 양이 많아 십여일 소요 예상)
- Recall: 실제로 사용자가 좋아하는 상품을 추천한 비율
- Precision: 추천한 상품 중 사용자가 실제로 좋아하는 비율
Train / Test
(95% / 5%)
Popularity
based
User based Item based (Jaccard)
Threshold = Threshold = 0 Threshold = 0.1 Threshold = 0
Recall (≤ 1) 1.0 Calculating Calculating 0.6552 0.9655
Precision (≤ 1) 0.0749 Calculating Calculating 0..3654 0.0743
* 모든 상품을 추천하면 Recall 은 올라가지만 Precision 이 낮아진다. Recall 과 Precision 값 모두 커야 추천의 의미가 있다.
- Popularity-based CF는 거의 모든 상품을 추천해주고 있기 때문에 Recall이 1이 나온
반면 Precision이 매우 낮음.
- Jaccard Similarity에 Threshold를 적용한 Item-based CF를 사용하여 기존의 Popularity-
based CF보다 Recall은 낮아졌지만 Precision이 매우 높아져 추천의 정확도가 높아짐.
 한계점
- 모든 사용자가 모든 상품에 후기를 작성하지 않으며(0.45% is filled) CF의 특성상 공백
데이터는 모두 0점으로 간주하여 공백 데이터가 추천의 정확도를 떨어뜨림.
- 사용자 ID의 뒤 네 글자가 *로 표시(ex. a****)되어 크롤링 시 소수의 중복 데이터 발생 가능.
- 실제 사용자의 구매이력을 데이터로 활용한다면 정확도가 매우 높아질 것으로 예상.
• 20대 여성 쇼핑몰 1위(지그재그 기준) 임블리
(imvely.com)에서 데이터 수집.
• Request와 BeautifulSoup을 이용하여 크롤링
• 상품 수: 1,030 개 (오래된 상품 자동 삭제)
• 평점참여 회원 수: 32,569 명
• 평점리뷰 수: 153,803 개 (약 0.45% 작성 됨)
• Python, MySQL, MongoDB 활용

[패스트캠퍼스]개인맞춤 패션 쇼핑몰 상품 추천 시스템

  • 1.
    개인맞춤 패션 쇼핑몰상품 추천 시스템 기간: 2016.12 ~ 2016.12  프로젝트의 필요성 국내의 수많은 온라인 패션 쇼핑몰들은 소비자에게 상품을 추천하기 위해 ‘이 상품을 구매한 다른 회원들이 구매한 상품’을 활용하거나 ‘베스트 상품’을 활용하고 있다. 하지만 그 정확도는 많 이 떨어지며, 소비자의 과거 이력과 상품의 feature를 활용한 contents based filtering 또한 정확 도가 많이 떨어진다. 이러한 문제점을 해결하기 위해 회원들의 상품별 평점을 데이터로 활용하여 collaborative filtering 하여 새로운 상품을 추천해주고자 한다.  추천시스템 개요  개인맞춤(personalized) 상품 추천 과정 새로운 회원 가입했을 경우 새로운 상품 출시했을 경우 기존 상품 에 대한 평점 입력 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 이상의 상품 추천) : 가능, : 불가능 - Collaborative filtering은 기존 상품 혹은 기존 회원들의 평점 데이터가 필요 - 평점 데이터가 없는 경우 Cold Start 문제 발생
  • 2.
     데이터  데이터분석 과정 • Similarity 분석 - Similarity between items 의 값이 매우 작게 나옴. 상품 수에 비해 회원 수가 30배 가량 많아 값이 작아진 것으로 보임. - Similarity를 구하기 위해 Cosine, Jaccard, Pearson 을 활용하였으나 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를 적용 • 평가 및 결론 (sample data: 상품 수(170), 참여회원 수(862), 평점 수(7,413), Cosine, Jaccard similarity) (전체 data는 similarity 계산 중. 데이터의 양이 많아 십여일 소요 예상) - Recall: 실제로 사용자가 좋아하는 상품을 추천한 비율 - Precision: 추천한 상품 중 사용자가 실제로 좋아하는 비율 Train / Test (95% / 5%) Popularity based User based Item based (Jaccard) Threshold = Threshold = 0 Threshold = 0.1 Threshold = 0 Recall (≤ 1) 1.0 Calculating Calculating 0.6552 0.9655 Precision (≤ 1) 0.0749 Calculating Calculating 0..3654 0.0743 * 모든 상품을 추천하면 Recall 은 올라가지만 Precision 이 낮아진다. Recall 과 Precision 값 모두 커야 추천의 의미가 있다. - Popularity-based CF는 거의 모든 상품을 추천해주고 있기 때문에 Recall이 1이 나온 반면 Precision이 매우 낮음. - Jaccard Similarity에 Threshold를 적용한 Item-based CF를 사용하여 기존의 Popularity- based CF보다 Recall은 낮아졌지만 Precision이 매우 높아져 추천의 정확도가 높아짐.  한계점 - 모든 사용자가 모든 상품에 후기를 작성하지 않으며(0.45% is filled) CF의 특성상 공백 데이터는 모두 0점으로 간주하여 공백 데이터가 추천의 정확도를 떨어뜨림. - 사용자 ID의 뒤 네 글자가 *로 표시(ex. a****)되어 크롤링 시 소수의 중복 데이터 발생 가능. - 실제 사용자의 구매이력을 데이터로 활용한다면 정확도가 매우 높아질 것으로 예상. • 20대 여성 쇼핑몰 1위(지그재그 기준) 임블리 (imvely.com)에서 데이터 수집. • Request와 BeautifulSoup을 이용하여 크롤링 • 상품 수: 1,030 개 (오래된 상품 자동 삭제) • 평점참여 회원 수: 32,569 명 • 평점리뷰 수: 153,803 개 (약 0.45% 작성 됨) • Python, MySQL, MongoDB 활용