[추천시스템] 전체 핵심 복습
[1. 개요]
추천시스템은 사용자에게 아이템을 추천하는 것이다.
당근마켓, 카카오, 네이버 등 대기업이 추천시스템을 활용하고 있다.
당근마켓의 경우에는 지역 기반의 user based collaborative filtering을 사용한다.
카카오의 경우에는 읽은 글과 비슷한 내용의 글을 추천해줍니다. 이러한 방식을 item based collaborative filtering라고 합니다.
초창기에는 룰 기반의 모델로 상품과 상품사이에 어떤 연관이 있는지 찾아내는 방법을 사용했습니다.
현재에는 cf, cbf, deep learning model 등등 다양한 모델이 나왔습니다.
[2.contents based model]
사용자가 구매한 상품과 유사한 상품을 추천하는 방법입니다.
아이템을 벡터로 변환하여 벡터끼리 유사도를 계산하고 그 유사도를 기반으로 유사한 상품을 추천해줍니다.
아이템을 텍스트나 이미지라고 할 수 있는데요.
텍스트의 경우에는 TF-IDF, WORD2VEC 등과 같은 기법을 사용하여 벡터로 변환하여 줍니다.
이미지의 경우에는 CNN 모델을 사용하여 벡터로 변환하여 줍니다.
카카오 페이지의 소설책 경우에는 1)이미지는 CNN모델을 사용하고 2)내용물은 자연어 처리 모델을 사용하여 결합합니다.
(1. 유사도 함수)
유사도 함수에는 유클리디안, 코사인, 피어슨, 자카드가 있습니다.
유클리디안은 거리를 기준으로 멀면 유사도가 떨어지고, 가까우면 유사도가 높아집니다.
코사인은 벡터의 크기와 상관없이 각도를 기준으로 유사도를 측정합니다.
피어슨은...
자카드는...
(2. 평가함수)
모든 상품을 추천해주면 정확도는 무조건 1이 나오기때문에 상위 n개의 상품만 추천한다고 했을때 판단해야한다.
accuracy는 내가 추천해준 영화를 고객이 봤나? 안봤나?
rmse는 추천한 평점이 얼마나 다를지?
밑에는 순서를 고려한 평가함수입니다.
map는 순서를 고려한 평가함수로 ap는 precision의 average 그리고 map는 사람들의 ap를 average한 것 입니다.
ndcg는 검색 엔진에 자주 쓰이는 평가함수로 cg는 relabance의 합, dcg는 순서에 따른 가중치를 부여한 것이고 ndcg는 dcg/ ideal dcg를 구한 값 입니다. 이때 ideal dcg를 통해서 normalize하는 이유는 사람마다 추천해주는 개수가 다를 수 있기때문입니다.
(3. 텍스트를 벡터로 변환하는 기법)
TF-IDF는 TF(CounterVectorizer)는 단어 빈도로 특정 문서에서 특정 단어가 얼마나 등장하는 지를 나타냅니다. DF는 모든 문서에서 특정 단어가 얼마나 자주 등장하는 지를 의미합니다. IDF는 이를 역수 취한 값으로 the, I, is 처럼 의미없이 자주 등장하는 단어(조사, 관사...)를 억제할 수 있습니다. 따라서, TF * IDF를 통해 TF-IDF를 구할 수 있습니다. 이를 통해서 문서의 중요한 핵심어를 추출하여 문서들을 벡터로 바꿀 수 있습니다.
WORD2VEC은 TF-IDF의 메모리 상의 문제를 보완합니다. 딥러닝을 사용하여 주변 단어들을 보고 중심 단어를 추측하는 CBOW모델과 중심 단어를 보고 주변 단어들을 추측하는 SKIP-GRAM모델이 있습니다. 일반적으로 SKIP-GRAM모델의 성능이 더 좋습니다. 주변의 단어와 중심 단어를 유사하게 만들어서 단어들을 벡터로 변환시켜줍니다.
[3.collaborative filtering]
사용자의 구매 패턴이나 평점을 보고 다른 사람들의 구매 패턴이나 평점을 통해서 추천하는 방법입니다.
아이템의 정보 없이 추천할 수 있는 게 큰 장점이지만 cold start problem이 문제가 됩니다.
크게 neighborhood collaborative filtering과 latent factor collaborative filtering으로 나뉘는데, neighborhood cf는 또 사용자 중심 cf와 아이템 중심 cf로 나뉩니다. 사용자 중심은 특정 사용자와 비슷한 구매 이력을 가진 사용자에게 아이템을 추천하는 방식이고, 아이템 중심은 사용자들이 특정 아이템에 대해 평가한 것을 보고 비슷한 평가를 받은 아이템을 사용자에게 추천해주는 방법입니다.
사용자 중심에 대해서 좀 더 자세히 설명하자면 사용자들끼리 코사인, 피어슨 유사도를 구해서 구매 이력이 유사한 사용자를 알아내고 그 사용자들의 ?에 해당하는 평점을 사용하여 ?를 구합니다. 이때, 점수를 후하게 주는 경향과 같은 편향이 있을 수 있어 주의해야합니다.
아이템도 같은 방식을 따릅니다.
이와 같은 방법을 통해서 직관적인 접근할 수 있습니다.
latent factor collaborative filtering은 sgd를 이용한 방법과 als를 이용한 방법으로 나뉩니다.
가장 기본적으로는 사용자의 잠재요인 matrix와 아이템의 잠재요인 matrix를 내적해서 평점 matrix를 계산하는 방식을 사용합니다. 내적했을 때 실제의 평점 matrix와 같도록 잠재요인의 prameter를 갱신해줘야 합니다.
[4.딥러닝을 이용한 추천시스템]
deep neural networks for youtube recommendations
training deep autoencoders for collaborative filtering
wide & deep learning for recommender systems
factorization machine
learning to rank