추천시스템(Recommendation System)이란? - 추천시스템 개요부터 실습까지
추천시스템(Recommendation System)
- 사용자의 취향을 파악하여 관심을 가질만한 상품 등을 추천해주는 시스템
- 현재 대부분의 플랫폼에서 추천시스템을 적용한 개인 맞춤형 서비스 제공
추천시스템 종류
- 콘텐츠 기반 필터링(content based filtering)
- 사용자가 특정 아이템을 선호하면 그 아이템과 비슷한 콘텐츠를 가진 다른 아이템을 추천
- ex) 사용자가 A 영화에 높은 평점을 줌 -> A영화와 비슷한 스릴러, 봉준호 감독의 다른 영화를 추천
- 협업 필터링(collaborative filtering)
- 사용자와 아이템간의 rating을 활용하여 사용자끼리의 유사도를 찾는 방식
- 특정 사용자와 비슷한 사용자를 찾은 후, 구매 이력 등의 행동 로그를 기반으로 예측하여 추천
- ex) 사용자와 유사도가 높은 집단에서 각 사용자들이 남긴 평점을 가중치 합을 계산
-> 사용자가 해당 영화를 얼마나 좋아할지 수치적으로 예측
추천시스템의 데이터 형태
명시적 피드백(Explicit Feedback) | 암시적 피드백(Implicit Feedback) | |
특징 | - 사용자의 긍/부정을 수치로 나타낸 데이터 - 아이템에 대한 사용자의 선호도를 직접적으로 알 수 있음 - 데이터가 직관적 - 사용자가 직접 평가해야 하므로 데이터 수급이 어렵고 크기가 작음 |
- 사용자가 아이템을 얼마나 소비했는지를 기록한 데이터 - 직관적으로 알 수 없는 경우 사용 - 긍/부정에 대한 구분이 없음 - 데이터 수급이 쉬움 - 부정적인 피드백이 없고, 노이즈가 있음 - 최근 추천 알고리즘들은 암시적 피드백을 사용하여 구현 |
예시 | - 영화, 음식점 평점 - 리뷰 및 설문조사 - 좋아요/싫어요 |
- 사용자 행동정보 로그 ( 클릭 수, 검색 기록, 페이지 체류 시간, 구매 내역 등 ) |
코드 실습
1. 사용자가 다음에 볼 영화 추천하기
2. 사용자 로그 기반의 구매 행동 예측하기
모델 선정 이유 - SASRec(Self-Attentive Sequential Recommendation)
고밀도, 희소한 데이터 셋에서의 실험을 통해 좋은 결과를 보임
로그 데이터 분석 결과, 사용자의 이전 행동만 가지고 다음 행동을 예측하는 순차적 모델을 사용하는 것이 적합하다고 생각
https://github.com/kang205/SASRec
GitHub - kang205/SASRec: SASRec: Self-Attentive Sequential Recommendation
SASRec: Self-Attentive Sequential Recommendation. Contribute to kang205/SASRec development by creating an account on GitHub.
github.com
Intriduction
- 해당 논문은 기존의 추천 시스템인 Markov Chains(MC) 와 RNN 계열 모델의 단점을 동시에 보완
- 제안된 모델은 기존의 추천시스템에서 좋은 성능을 보여주던 MC/CNN/RNN based model을 뛰어넘는 실험 결과를 보여줌
기존 sequential recommender
- Markov Chains (MCs)
유저의 다음 행동이 바로 이전의 과거 혹은 몇 개 이전의 행동에 영향을 받을 것이라는 가정으로 시작
이러한 가정은 너무 over-simplfy하고 매우 희소한(sparse) 데이터에만 잘 작동한다는 단점이 있음
따라서, 복잡한 관계를 학습하는 것은 힘듦
- Recurrent Neural Networks (RNN)
RNN 기반의 모델(대표적으로 GRU recommender)의 경우는 과거의 모든 행동을 모델의 입력값으로 넣어,
이를 요약한 정보를 가지고 다음 행동을 예측하는 모델
상대적으로 복잡한 모델을 학습하기 위해 많은 양의 데이터를 요구하기 때문에 희소한 데이터에서는 좋은 성능을 보여주기 힘듦
SASRec 기반 추천 시스템 실습
- 데이터셋
- json 파일로 구성된 사용자 구매 로그 데이터 (공개 불가)
- MovieLens 데이터
- 약 3,900편의 영화에 대한 1,000,209개의 평점이 저장된 데이터
- user_id , movide_id 속성만 사용
- 암시적 피드백(Implicit information)인 유저의 관람 영화 시퀀스만을 필요로 함
- 목적에 맞는 데이터 처리 (txt 변환)
- train : 후반 2개의 영화를 제외한 모든 데이터
- 한 사용자의 시청 시퀀스 리스트에서 후반 2개의 영화는 각각 valid와 test set을 구성하는데 활용
- maxlen 값을 적절히 설정하기 위한 분석
- 학습
- 테스트(성능 평가)
- 영화 시청 로그 데이터 -> NDCG@10: 0.6019, Hit@10: 0.8245
- 사용자 로그 데이터 -> NDCG@10: 0.8324, Hit@10: 0.9216
1. NDCG@K (Normalized Discounted Cumulative Gain)
NDCG는 원래 검색 분야에서 등장한 지표이나 추천 시스템에도 많이 사용
- Top K개 아이템을 추천하는 경우, Top K 추천 리스트와 유저가 선호하는 아이템을 비교
- 추천의 순서에 가중치를 더 많이 두어 성능을 평가하는 방법
- 1에 가까울수록 좋은 성능
2. Hit Rate@K
전체 사용자 수 대비 적중한 사용자 수를 의미함 : 적중률
1) 사용자가 선호한 아이템 중 1개를 제외한다.
2) 나머지 아이템들로 추천 시스템을 학습한다.
3) 사용자별로 K개의 아이템을 추천하고, 앞서 제외한 아이템이 포함되면 Hit이다.
4) 전체 사용자 수 대비 Hit한 사용자 수 비율을 구하면 Hit Rate가 된다.
출처 - https://sungkee-book.tistory.com/11