추천 시스템 Basic 2
추천 시스템의 알고리즘을 알아보고, 고전적인 방법 연관 규칙 분석과 컨텐츠 기반 추천에 대해 알아보자.
추천 시스템 2
연관 규칙 분석(Association Rule Analysis, Association Rule Mining)
- 흔히 장바구니 분석 혹은 서열 분석이라고도 불림
- 주어진 데이터에 대해서, 하나의 상품이 등장했을때 다른 상품이 같이 등장하는 규칙을 찾는 것.
연관 규칙과 Itemset
- 규칙 : IF (condition) THEN (result)
- {condition} -> {result}의 형식으로 표현
- 연관 규칙 : IF (antecedent) THEN (consequent)
- 특정 사건이 발생했을 때 함께 빈번하게 발생하는 또 다른 사건의 규칙을 의미
- Itemset : antecedent와 consequent 각각을 구성하는 상품들의 집합
- antecedent와 consequent는 disjoint(서로소)를 만족한다.
반발 집합(Frequent Itemset)
- Itemset
- 1개 이상의 item의 집합
- K-itemset : k개의 item으로 이루어진 itemset
- support count(\(\sigma\))
- 전체 transaction data에서 itemset이 등장하는 횟수
- \[\sigma({빵,우유}) = 3\]
- support
- itemset이 전체 transaction data에서 등장하는 비율
- support({빵, 우유}) = 3/5 = 0.6
- frequent itemset
- 유저가 지정한 minimum support 값 이상의 itemset을 의미
- frequent itemset은 반대로 유저가 지정한 minimum support보다 작은 itemset을 의미
연관 규칙 척도
- frequent itemset들 사이의 연관규칙을 만들기 위해서는 measurement가 필요!
- X -> Y 가 존재할 때, (X, Y : itemset, N : 전체 transaction 수)
support
- 두 itemset X,Y 를 모두 포함하는 transaction의 비율. 즉, 전체 transaction에 대한 itemset의 확률값
- 좋은(빈도가 높거나, 구성 비율이 좋은)규칙을 찾거나, 불필요한 연산을 줄일 때 사용됨.
- \(s(X) = \frac{n(X)}{N} = P(X)\), \(s(X\to Y) = \frac{n(X\cup Y)}{N} = P(X\cap Y)\)
confidence
- X가 포함된 transaction 가운데 Y도 포함하는 transaction 비율(Y의 X에 대한 조건부 확률) confidence가 높을수록 유용한 규칙을 뜻함
- \[c(X\to Y) = \frac{n(X\cup Y)}{n(X)} = \frac{s(X\to Y)}{s(X)} = \frac{P(X\cap Y)}{P(X)} = P(Y|X)\]
lift
- [X가 포함된 transaction 가운데 Y가 등장할 확률] / [Y가 등장할 확률]
- lift = 1 -> X,Y는 독립
- lift > 1 -> X,Y가 양의 상관관계를 가짐, lift < 1 ->X,Y가 음의 상관관계를 가짐
- \[l(X\to Y) = \frac{P(Y|X)}{P(Y)} = \frac{P(X\cup Y)}{P(X)P(Y)} = \frac{s(X\to Y)}{s(X)s(Y)} = \frac{x(X\to Y)}{s(Y)}\]
예시
사용방법
- Item의 수가 많아질수록, 가능한 itemset에 대한 rule의 수가 기하급수적으로 많아진다.
- 이 중 유의미한 Rule만 사용해야 함
-
<사용법>
사용법>
- minimum support, minimum confidence로 의미없는 rule을 screen out
- 전체 transaction중 너무 적게 등장하거나, 조건부 확률이 아주 낮은 rule을 필터링하기 위함
- lift값으로 내림차순 정렬을 하여 의미 있는 rule을 평가함.
- lift가 크다는 것은 rule을 구성하는 antecedent와 consequent가 연관성이 높고 유의미하다는 뜻.
- minimum support, minimum confidence로 의미없는 rule을 screen out
연관 규칙의 탐색
Mining Association Rules
- 주어진 트랜잭션 가운, 아래 조건을 만족하는 가능한 모든 연관 규칙을 찾는다.
- support >= minimum support
- confidence >= minimum confidence
Brute-force approach
- 가능한 모든 연관 규칙을 나열한다.
- 모든 연관 규칙에 대해서 개별 support와 confidence를 계산한다.
- minimum support, confidence를 만족하는 rule만 남기고 모두 Pruning한다.
- -> 모든 연관 규칙을 찾으려면 엄청난 계산량이 요구된다.
- Complexity ~ O(NWM), \(M = 2^d\)(d: number of unique items)
- exponential하게 증가하기 때문에 거의 불가능한 일이다.
효율적인 Association Rule Mining
- Frequent Itemset Generation
- minimum support 이상의 모든 itemset을 생성한다.
- Rule Generation
- minimum confidence 이상의 association rule을 생성한다.
- 이때 rule을 이루는 antecedent와 consequent는 서로소를 만족해야한다.
1번 task의 computation cost가 가장 크다
Frequent Itemset Generation Strategies
- Apriori 알고리즘 - 가능한 후보 itemset의 개수를 줄인다(M을 줄임)
- DHP 알고리즘 - 탐색하는 transaction의 숫자를 줄인다.(N을 줄임)
- FP-Growth 알고리즘 - 탐색 횟수를 줄인다. (NM을 줄임)
TF-IDF를 활용한 컨텐츠 기반 추천
컨텐츠 기반 추천(Content-based Recommendation)
- 유저 x가 과거에 선호한 아이템과 비슷한 아이템을 유저 x에게 추천.
by boostcamp
유저가 좋아하는 아이템을 분석해 User Profile을 만들고(위 그림에서 빨강, 삼각형, 원을) 관련된 아이템을 유저에게 추천해준다.
- 장점
- 유저에게 추천할 때 다른 유저의 데이터가 필요하지 않는다.
- 새로운 아이템 혹은 인기도가 낮은 아이템을 추천할 수 있음
- 추천 아이템에 대한 설명이 가능하다.
- 단점
- 아이템의 적합한 피쳐를 찾는 것이 어렵다
- 한 분야/장르의 추천 결과만 계속 나온다(ocerspecialization)
- 다른 유저의 데이터를 활용할 수 없다.
Item Profile
- 추천 대상이 되는 아이템의 feature들로 구성된 item profile을 만들어야 함
- ex) 영화 : 작가, 제목, 배우, 장르, 감독 등
- 아이템이 가진 다양한 속성(feature)를 어떻게 표현하면 가장 편할까? -> Vector 형태
- 하나의 feature가 1개 이상의 vector dimension에 표현됨
- vector는 이진값(0또는 1) 혹은 실수값을 구성됨.
TF-IDF for Text feature
- 문서의 경우, 중요한 단어들의 집합으로 표현할 수 있음.
- 중요한 단어를 선정하는 방법
- 단어에 대한 중요도를 나타내는 스코어가 필요 -> 가장 많이 쓰는 기본적인 방법 TF-IDF
- TF-IDF(Term Frequency - Inverse Document Frequency)
- 단어 d에 등장하는 단어 w에 대해서,
- 단어 w가 문서 d에 많이 등장하면서(Term Frequency, TF)
- 단어 w가 전체 문서(D)에서는 적게 등장하는 단어라면(Inverse Document Frequency, IDF)
- 단어 w는 문서 d를 설명하는 중요한 feature로, TF-IDF 값이 높음!
TF-IDF Formula
TF-IDF(w,d) = TF(w,d)*IDF(w)
- TF : 단어 w가 문서 d에 등장하는 횟수
- TF(w,d) = \(freq_{w,d}\)
- TF(w,d) = \(\frac{freq_{w,d}}{\max_k(freq_{k,d})}\)
- IDF : 전체 문서 가운데 단어 w가 등장한 비율의 역수
- IDF(w) = \(\log\frac{N}{n_w}\) (N: 전체 문서 개수, \(n_w\) : w가 등장한 문서의 개수)
- IDF 값의 변화가 크기 때문에 smoothing을 위해 로그 사용.
- 예시
by boostcamp
- 각 word에 대한 IDF를 구하여 TF값을 곱해 TF-IDF를 구하여 채워 놓은 것.
- 단어의 개수가 6개인 경우 vector는 6차원 값이 된다.
Build User Profile
- Item Profile을 모두 구축 했으니 User Profile을 구축이 필요
User Profile
- 유저가 과거에 선호했던 Item List가 있고 개별 Item은 TF-IDF를 통해 벡터로 표현됨
- 각 유저의 Item List 안에 있는 Item의 Vector들을 통합하면 User Profile이 됨.
- 앞선 그림에서 유저가 d1,d3를 선호했다면 유저의 프로파일 벡터는 \(\frac{V_{d1}+V_{d3}}{2}\)로 간단하게 나타낼 수 있으며, 문서에 가중치가 주어진다면 vector는 \(\frac{r_{d1}V_{d1}+r_{d1}V_{d3}}{r_{d1}+r_{d2}}\)로 나타낼 수 있다.
Cosine Similarity
주어진 두 벡터 X,Y에 대하여,
- \[\cos(\theta) = \cos(X,Y) = \frac{X\cdot Y}{\left| X \right|\left| Y \right|} = \frac{\sum_{i=1}^{N}X_i Y_i}{\sqrt{\sum_{i=1}^{N}X_i^2}\sum_{i=1}^{N}Y_i^2}\]
- 두 차원이 같아야 한다.
- 직관적으로 두 벡터가 가리키는 방향이 얼마나 유사한지를 의미한다.
- 비슷할수록 1, 반대일수록 -1에 가깝다.
유저와 아이템 사이의 거리 계산하기
유저 벡터 u와 아이템 벡터 i에 대해서 아래와 같은 거리를 계산
-
\[score(u,i) = cos(u,i) = \frac{u \cdot i}{\left| u \right| \cdot \left| i \right|}\]
- 둘의 유사도가 클수록 해당 아이템이 유저에게 관련성이 높다
- score(u,i)가 가장 높은 아이템부터 유저에게 추천함
-> 만약 유저 u가 i에 대해 가질 선호도를 정확하게 예측하고 싶다면.
Rating 예측하기
유저가 선호하는 아이템의 Vector를 활용하여 정확한 평점 예측하기
- 유저 u가 선호하는 아이템 N개의 벡터와, N개의 item vector가 있을 때 평점이 \(r_{u,i}\)일 때, 새로운 아이템\(i^{\prime}\)에 대하여 평점을 예측해보자.
- \(i^{\prime}\)와 i의 유사도 :
- \[sim(i, i^{\prime}) = \cos(v_i, v_i^{\prime})\]
- \(sim(i, i^{\prime})\) 를 가중치로 사용하여 \(i^{\prime}\)의 평점을 추론:
- \[prediction(i^{\prime}) = \frac{\sum_{i=1}^{N}sim(i, i^{\prime})\cdot r_{u,i}}{\sum_{i=1}^{N}sim(i, i^{\prime})}\]
- 예시 by boostcamp
Comments