본문 바로가기
추천시스템

추천시스템 기술 요약

by 볼록티 2022. 11. 13.
728x90
반응형

 추천시스템을 적용하는 일에 뛰어들기에 앞서 팀원들과 함께 추천시스템 관련 서적~ 강의~ 컴퍼티션 등에 참가해 적극적으로 공부중이다! 지금은 전체적으로 한번 아우르는 좋은 강의를 공유받아 강의를 듣고 짧게만 요약을 해보았다! 강의 설명이 너무 친절하고 코드가 간결해서 입문으로 정말 추천하고 싶은 강의다! 👍👍👍👍 

 

연관분석

- 상품사이에 어떤 연관이 있는지 찾는 알고리즘. 장바구니에 동시에 담긴 아이템들의 연관성을 본다하여 장바구니 분석이라고 표현한다.

연관분석은 얼마나 자주 같이 구매되는가? A를 구매한 사람이 B를 구매하는가? 에 초점을 맞춘다.

- 가능한 모든 경우의 수를 탐색해 지지도, 신뢰도, 향상도(연관규칙 평가지표)가 높은 규칙을 찾아내는 방식으로 규칙을 생성한다.

- 단점은 아이템이 증가하면 경우의 수가 기하급수적으로 증가한다.


Apriori 알고리즘

 - 연관분석의 단점을 보완하기 위해 아이템셋의 증가를 줄이기 위한 방법으로 빈번하지 않은 아이템셋은 하위의 경우의 수도 빈번하지 않는다는 가정으로 아이템셋을 줄일 수 있다.

 - k 개의 단일항목집단을 생성  >>  최소 지지도 이상의 항목만 선택  >>  선택된 항목에서 최소 지지도를 기준으로 2개의 항목집단을 생성  >>  동시 구매를 기준으로 최소 지지도를 구함  >>  이를 k 에 대해 반복

장바구니 경우의 수

 - 장점 이해가 쉽고 구매패턴을 알 수 있다.

 - 데이터가 크면 연산량이 많다. 실제 연관상품들이 많이 나타나는 경우가 있다.


FP-Growth

 - 최소 지지도 이상의 아이템 만을 선택(Apriori와 동일)  >>  모든 거래에서 빈도가 높은 아이템 순서대로 순서를 정렬  >>  부모 노드를 중심으로 자식노드로 거래를 추가해주면서 트리를 생성  >>  새로운 아이템이 나오면 부모노드로부터 시작하고, 아니면 기존 노드에서 확장 시킴  >>  모든 아이템에 대해서 반복  >>  조건부 확률 계산

 - 장점: Aprior에 비해 상대적으로 빠르고, 후보 아이템집단을 생성할 필요가 없음

 - 단점: 대용량의 데이터셋에 대해서는 메모리를 효율적으로 사용하지 않음, Apriori에 비해 설계가 어려움. 지지도 계산은 FP-Tree가 만들어지고 나서 가능


컨텐츠 기반 모델

 - 이전에 구매한 컨텐츠와 유사한 컨텐츠를 추천한다. 이를 위한 컨텐츠를 벡터형태로 바꿔줘야한다.

 - 벡터형태로 바꾸기 위한 방법(text 데이터에 대한 임베딩): TF-IDF

 - 벡터들 간의 유사도를 계산하는 것이 핵심이다.

 - 유사도는 상황에 맞게 찾아서 사용하도록 하는 것이 좋다.

 - 장점: 다른 사용자들의 피드백이 필요하지 않음. 추천 아이템에 대한 설명이 용이함. 사용자 피드백이 없는 새로운 아이템이 들어와도 추천이 가능함.

 - 단점: feature를 제대로 추출하지 않으면 정확도가 낮음. 새로운 장르의 item을 추천하기 어려움. 새로운 사용자에 대해 충분한 평점이 쌓기 전까지는 추천하기 힘듬.


협업필터링(Nearest Neighbor)

 - 다른 사람의 피드백을 가지고 추천을 하는 방법으로 NN기반, Latent Factor기반으로 크게 나뉨.

 - KNN의 경우 user bases/item based로 나뉘는데, user 기반은 유사한 사용자를 찾는 것이고, item 기반은 유사한 아이템을 찾는다.

 - 장점: 간단하고 직관적임. 추천리스트에 새로운 item, user가 추가되어도 상대적으로 안정적.

 - 단점: 희소성에 의해 제한되는 경우가 발생(빈익빈부익부 현상으로 많이 보는게 추천이 많이 되는 현상, 피드백 없는 아이템은 추천이 불가함. 콘텐츠기반모델과 함께 사용하자.). 메모리 문제 발생.


협업필터링(Latent Factor)

 - item, user 벡터의 곱을 가지고 Rating matrix의 빈공간을 채우기 위한 latent factor를 찾는 방법.

 - 장점: 도메인 지식이 필요하지 않음. 사용자의 새로운 흥미를 발견하기 좋음. 시작단계의 모델로 선택하기 좋음.

 - 단점: 새로운 아이템에 대해 다루기가 힘듬. 추가정보(side features: 고객의 개인정보)를 포함시키기 어려움


SGD

 - 고윳값 분해와 같은 행렬을 대각화 하는 방법

 - Rating Matrix의 값과 내적 간의 차이를 줄이도록 학습이 진행함.

 - User, Item Latent 초기화  >>  두 Latent 의 곱과 실제 존재하는 Rating을 비교해 Latent를 업데이트

 - t-sne 으로 

 - loss functino 다양하게 사용가능, 병렬처리가 가능함

 - 수렴속도가 느리다.


ALS

 - 기존 SGD는 Gradient Descent할때 , 사용자행렬을 고정하고 아이템 행렬을 최적화 혹은 그 반대로 진행 기존 최적화 문제가 convex 형태로 바뀌기 때문에 수렴된 행렬을 찾을 수 있는 장점이 있다. 하나를 고정하고 먼저 학습하고 다른 하나를 마저 학습하는 것이 큰 차이점이다.

 - 모르는 Rating은 0으로 처리함.

 - SGD 보다는 빠르고, 병렬처리가 가능함.

 - Loss Squares만 사용이 가능함.


평가함수

 - 다양하게 알아야한다. 도메인이나 목적에 따라서 추천이 잘 되는지 평가하는게 중요하기 때문이다. 

 - '고객이 구매를 했다' vs '평점을 높게 줬다' 와 같이 어느 것이 더 추천시스템을 평가할 때 중요한지 고려해야한다.  

 - Accuracy: (구매를 했냐? vs 구매를 안했냐?) --> 편향된 결과를 얻을 수 있음. 모든 상품을 추천하면 정확도가 100%이기 때문.

 - MAP: k개까지의 Precision을 구해나가며 집계함. 추천 순서에 따라 차이가 난다. 상위 k개의 추천에 대해서만 평가하기에 k를 바꿔가면서 상위 몇 개를 추천할지 결정할 수 있음.

 - NDCG: MAP를 보완. 검색에서 활용되던 평가지표. 내가 추천한 Recommendations Order와 Ideal Order를 비교해서 추천성능을 평가


실습

 - 굳이 평점이 낮은 콘텐츠를 추천해줄 필요가 있을까?

 - 베스트셀러, 스테디셀러는 콜드스타트 유저에게 추천하기 좋다!

 - 도메인, 사용자 상황에 맞는 아이템을 추천해주자!

 - 콘텐츠의 feature는 메타데이터를 많이 활용해서 잘 뽑아주자!

 - 콘텐츠의 feature를 뽑아내기 힘들면 협업필터링 기반이나 룰 기반의 추천 모델을 고려해보자!

 - 시리즈물과 같은 아이템은 추천이 될 수 있도록 모델링하자.

 - train/test 절반으로도 평가하는구나!

 - baseline은 조회수, 평점 높은 순으로 구축된 모델을 사용!

 - 전처리, 후처리는 매우 중요하다!

 - 콘텐츠 이용이 순서대로 이루어지는 경우에는 w2v 같은 모델이 좋음.


기술동향

추천시스템 춘추전국시대


유투브 추천 알고리즘: Deep Neural Networks for YouTube Recommendations(링크)

VAE 기반 추천: Variational Autoencoders for Collaborative Filtering(링크)

FM 모델: A Factorization-Machine based Neural Network for CTR Prediction(링크)

강화학습: DRN(A Deep Reinforcement Learning Framework for News Recommendation)

 

 

 

 

 

 

참조 강의)

토크ON세미나 강의 유투브 링크: https://www.youtube.com/watch?v=43gb7WK56Sk&list=PL9mhQYIlKEhdkOVTZWJJIy8rv6rQaZNNc 

Latent Factor: https://towardsdatascience.com/recsys-series-part-4-the-7-variants-of-matrix-factorization-for-collaborative-filtering-368754e4fab5

 

 

728x90
반응형

'추천시스템' 카테고리의 다른 글

LightGCN  (0) 2023.02.12
추천시스템. 염두에 둘 것.  (0) 2022.11.20
딥러닝과 추천시스템  (0) 2021.03.18
Model based Collaborative Filtering  (0) 2021.02.04
Collaborative Filtering 에서의 유사도 지표 제안 논문(2).  (0) 2020.11.09

댓글