일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- aws자격증
- 클라우드
- 언어모델
- 자연어처리
- COFIBA
- 머신러닝 파이프라인
- 네트워크
- chatGPT
- Collaborative Filtering Bandit
- HTTP
- RecSys
- MLOps
- 머신러닝
- AWS
- 플랫폼
- MSCS
- docker
- 미국석사
- llm
- BERT이해
- 중국플랫폼
- nlp
- MAB
- transformer
- TFX
- 메타버스
- 추천시스템
- BERT
- BANDiT
- 클라우드자격증
- Today
- Total
Julie의 Tech 블로그
추천시스템 - (1) 개요 본문
본 시리즈는 추천 시스템에 대해, 특히 Collaborative Filteirng 방식에 대해 좀 더 깊이 있게 다뤄볼 것이다.
이번 글은 첫 편인 만큼 추천 시스템과 그와 관련된 기본적인 개념/툴들에 대해 개괄적으로 훑어볼 것이다.
데이터 마이닝 (요즈음은 데이터 사이언스라고 더 불리는 듯 함) 은 데이터를 모아 분석한 이후 정보를 추출하는 기술이다.
정보란 좀 더 유의미(useful)하고 일반적이지 않은(non-trivial) 데이터를 의미한다.
데이터 마이닝 기술에는 여러 가지 토픽들이 있다.
- 분류(Classification)
- 군집화(Clustering)
- 이상탐지(Outlier Detection)
- 연관분석(Association Rules)
이러한 데이터 마이닝 기술은 추천 시스템을 개발할 때 사용되곤 한다.
추천 시스템이란 선택지가 다양할 때 어떤 선택이 최적의 선택인지를 파악할 때 사용하는 기술이다.
Target User에게 User가 좋아할 것 같은 아이템을 골라 추천해주게 되는 것이다.
이 사람의 선호를 알기 위해서 과거에 어떤 상품을 구매했는지/평가했는지/찾아보았는지/찜해두었는지 등을 수집한다.
추천 시스템 접근 방식
추천 시스템의 접근 방식으로는 아래와 같이 나뉜다.
- Content-based approach : 유저 프로파일과 아이템 프로파일의 유사도가 높은 사람들을 클러스터링
- Collaborative Filtering approach : 유사한 선호를 가진 사람들이 선호했던 아이템을 추천
- Trust-based approach : 유저들 사이에서 신뢰가 형성되어있는 관계 내의 추천
- Hybrid-approach : 위 접근방식들의 결합본
우리는 Collaborative-Filtering Approach 접근 방식에 좀 더 집중할 예정이다.
CF는 앞서 말했듯 유사한 선호를 지닌 다른 사용자들이 높은 rating을 준 아이템을 유저에게도 추천을 진행하는 것인데,
유사한 선호를 계산하는 방식이 어떠느냐에 따라 여러 가지 알고리즘들로 나뉜다.
CF계열 모델 알고리즘들
가장 간단한 방법은 Heuristic-based Method이다.
연산도를 집계하는 방식이 있는데, 아이템별 사용자별 rating 점수를 사용한다.
연산도 알고리즘은 Pearson Correlation coefficient(PCC), 혹은 Cosine 유사도를 사용하기도 한다.
혹은 유사관계를 ML기반으로 추출해볼 수도 있다. 그 예로 Matrix Factorization, Social Network, DL방식을 이용하기도 한다.
Matrix Factorization는 사용자와 아이템을 두 dimension 으로 두고, 사용자의 아이템 rating을 그 값으로 두게 된다.
m명의 사용자와 n개의 아이템이라고 한다면, m x n 행렬을 구성한다. 이를 기반으로 사용자 벡터와 아이템 벡터 두 벡터를 추정해야한다.
사용자 벡터와 아이템 벡터를 추정하는 방식은, 실제 사용자의 아이템 rating값을 예측값과의 차이를 줄이는 방식으로 학습할 것이다.
다른 방식으로는 Random Walk with Restart인데, Social Network 방식을 이용하는 알고리즘이다.
사용자와 아이템을 network graph 형태로 표현하고, Random walk와 Restart 두 방식을 섞는 것이다.
Random walk는 연결된 링크를 따라 랜덤하게 선택해서 따라가고, 임의의 확률만큼 랜덤하게 점프를 하여 임의성을 추가하는 것이다.
추천시스템 평가 지표
추천 시스템의 성능을 평가하는 방식도 여러 가지로 나뉘는데, 그 중 대표적으로 두 가지만 먼저 살펴보자면.
- 5-fold CV (Cross Validation) : 데이터 셋을 랜덤하게 5개 fold로 나눈 후, 각 fold가 최소 한 번 이상 테스트셋으로 사용되어 평가됨
- LOOCV (Leave-one-out CV) : 임의의 유저-아이템 데이터 쌍 하나를 테스트 셋으로 두고, 나머지를 학습 데이터로 사용한 뒤 모든 유저-아이템 쌍이 한 번 이상의 테스트셋이 되었을 때 평가를 종료
이 두 가지 방식 모두 랜덤하게 데이터를 사용하여 최대한 실제 모델 성능에 가까운 평가를 할 수 있도록 해주는 방식이다.
평가지표는 머신러닝 모델 평가지표와 유사하게 Precision, Recall, F1 스코어 등이 사용될 수 있다.
NDCG(Normalized discounted cumulative gain) 지표도 사용될 수 있는데, 아이템의 추천 순위를 평가 방식에 반영하는 로직이다.
즉 전체 6개 상품을 추천했다고 했을 때, TOP 1~3에서 추천된 상품을 맞춘 것이 TOP 4~6위 추천 상품의 정확도보다 더 높은 점수를 주는 것이다.
MRR (Mean Reciprocal rank) 지표도 있는데, 마찬가지로 순위를 고려한 지표로서,
TOP N 개 아이템들 중에서 정답으로 인정된 추천 결과의 아이템 순위를 역산하여 (예를 들어 3위 아이템이 정답 > 1/3) 평균하는 지표이다.
Challenge : Data Sparsity Problem
CF계열 알고리즘은 유저의 아이템별 평가 점수가 어떠한지에 대해 굉장히 집중되어있다. 이로 인해 주로 아이템이 굉장히 많거나 유저가 rating을 하는 것에 대한 진입장벽(깐깐하게 평가 / 평가가 필수적이지 않아서)이 있기 때문에 data sparsity 문제가 발생한다.
대부분 실제 데이터의 density가 0.04%보다 낮은 편이라 개발한 모델의 정확도가 낮거나 coverage가 낮다는 문제가 생긴다.
이와 관련해서 아래 논문을 바탕으로 어떻게 해결할 수 있는지 간략하게 정리하였다 :
Told you I didn't like it : Exploiting Unintersting Items for Effective Collaborative Filtering
IEEE ICDE, 2016
논문의 취지는 sparsity가 높은 데이터에 대해서, 사용하지 못한 아이템(평가가 없는 아이템)의 데이터를 활용해보자는 것이다.
논문에서는 Unrated Item의 이유가 두 가지가 있을 거라고 얘기한다 : 아이템의 존재유무조차 몰랐거나, 관심이 없어서(싫어서/필요없어서)이다
Uninteresting(관심없는) Item은 유저가 부정적인 선호를 가지고 있다고도 볼 수 있다.
이 두 가지 경우가 섞여서 데이터에 녹아있기 때문에, 선호를 좀 더 구분해보면 데이터를 다르게 활용해볼 수 있다는 것이다.
논문의 메인 개념이라고 할 수 있는 유저의 선호는 두 가지로 나누어져있다 :
- 사용 전(Pre-use) 선호 : 유저가 아이템을 사용하거나 구매하기 전에 느꼈던 평가
- 사용 후(Post-use) 선호 : 유저가 아이템을 사용하거나 구매한 이후 느꼈던 평가
사용 전 선호가 있는 아이템은 사실상 관심이 있는 아이템이라고도 볼 수 있다.
결국 우리가 관찰 가능한 데이터는 "관심있는 데이터 & 평가한 데이터" 인 것이다.
따라서 Unrated 아이템 중에서도 관심없는 아이템에 대해서도 우리가 파악이 가능하다면, 데이터를 좀 더 활용해볼 수 있다는 게 논문의 취지이다.
이에 대한 해결책으로 Rated 아이템과 유사한 Unrated 아이템을 추출하여 Rating 점수를 추정해보자고 제안한다.
즉, 두 가지 전략으로 추천을 진행하는 것이다.
- Unintersting 아이템을 최종 추천 결과에서 제외한다.
- Uninteresting 아이템과 rated 아이템 데이터 모두를 활용한다.
논문의 메인 방법론은 Zero-Injection 이라는 로직인데, 아래와 같은 step으로 구성된다.
1. Pre-use Preference Matrix을 구성한다.
이 때 Rated 아이템에 대해서는 사용전 선호는 max 라고 생각한다(0~1 스케일이면 1으로 매김, 직접 구매/지불하고 사용하였기 때문)
Unrated 아이템에 대해서 pre-use preference를 예측한다.
2. Pre-use Preference matrix에서 사용자별 하위 p% rank 를 기록한 아이템은 Unintersting 아이템이라고 정의한다.
3. Post-use Preference Matrix에서 Uninteresting Item에 대해 0점을 채워넣는다. Rated 아이템의 rating은 그대로 사용한다.
4. Post-use Preference Matrix로 CF계열 알고리즘을 수행한다. (Heuristic-based 알고리즘, Model-based 알고리즘 등을 사용)
논문에서 제안하는 p%의 수준은 90%로 보인다. 10%의 Uninteresting Item 점수만을 사용하는 것이다 (0초과인 아이템들)
Pytorch : 분석 프레임워크
일반적으로 딥러닝 관련한 프레임워크를 pytorch를 사용하는 경우도 있는데, 간단하게 pytorch와 tensorflow의 차이를 보자.
Pytorch 역시 Tensorflow와 마찬가지로 tensor 구조를 지원하고 GPU 연산을 지원한다.
Tensorflow와 Pytorch 의 가장 큰 차이점은 run 하는 방식의 차이인데,
Tensorflow는 "Define and Run", 즉 연산 그래프를 미리 구성해두고 Run할 때 값을 전달하여 결과를 얻게 되고
Pytorch는 "Define by Run", 연산 그래프를 미리 만들지 않고 Run할 때 그래프를 구성하고 값을 전달하게 된다.
Pytorch는 동적 방식이기 때문에 Tensorflow보다 빠른 것으로 알려져있다.
이번 글은 이만 여기서 정리하고, 다음 글에서는 단일 클래스 분류 문제 (One-class Classification) 에 대해 좀 더 살펴보도록 하겠다.
MF 알고리즘에 관련하여 이전에 작성했던 블로그도 함께 보면 좋을 것 같다.
https://blog.naver.com/ilovelatale/222355119175
'Tech > RecSys' 카테고리의 다른 글
추천시스템 - (4) 이커머스 추천 문제 (0) | 2022.01.02 |
---|---|
추천시스템 - (2) One-class Collaborative Filtering (1) | 2021.09.20 |
Contextual Bandit - 이커머스몰 최적 추천시스템, CAMARS (0) | 2021.07.30 |
MAB기반 추천시스템 : Stochastic Bandits, MCRS (0) | 2021.07.09 |
Neural Collaborative Filtering, NCF - 코드리뷰, python3.x 버전 (0) | 2021.07.05 |