◈ 오류 정정 및 피드백 환영
대표적인 추천 알고리즘인
Collaborative Filtering의 A부터 Z까지 낱낱이 파헤쳐 보자.
Recommendation = Filtering
특정 유저에게 특정 아이템을 추천해주려면 여러 아이템 중에서 유저가 만족할만한 아이템을 선택해야 한다.
따라서 추천이란 필터링과 유사한 개념이다.
Collaborative Filtering vs Contents Based Filtering
흔히 CF(Collaborative Filtering)를 설명할 때 CB(Contents Based Filtering)와 비교를 한다. 하지만 개념을 제대로 이해하지 않으면 유저의 취향에 따라 추천하면 CF, 아이템의 종류에 따라 추천하면 CB로 오해할 수 있다.
예컨대 아래 그림만 봐도 오해의 소지가 다분하다.
CB는 유저가 이미 본 영화와 비슷한 영화라서 추천을 해 주는 것 같고, CF는 여성과 남성의 성향이 비슷하기 때문에 여성이 이미 본 영화를 남성에게 추천을 해 주는 것 같다. 하지만 이는 정확한 설명이 아니다. 두 알고리즘의 차이를 제대로 이해하려면 데이터를 기준으로 설명해야 한다.
일반적으로 추천을 위해 필요한 데이터는 다음과 같다.
- Attribute information - 유저(User)와 아이템(Item) 자체에 대한 데이터
- User-item interactions - 아이템에 대한 유저의 반응(Feedback)에 대한 데이터
그리고 이에 따라 CB와 CF를 구분할 수 있다.
- CB - Attribute information만으로 추천 가능
- CF - User-item interactions만으로 추천 가능
고로 위 그림을 제대로 설명하자면 CF는 이전에 시청했던 영화들에 대한 남성의 반응이 여성과 비슷했기 때문에 이를 고려해 추천을 해 주는 것이며, CB는 남성이 본 영화 자체와 비슷한 영화이기 때문에 추천을 해 주는 것이다.
Collaborative Filtering
결국 CF의 핵심 아이디어는 단순하다.
취향이 비슷하면 평가도 비슷하지 않을까?
물론 앞서 언급했다시피 CF를 단순히 유저 기반 필터링과 동일시해서는 안 된다.
그 말인즉슨 아이템 기반 CF도 존재한다는 뜻인데 이를 아이템 기반 CB와 비교해 설명해보겠다. 영화 추천을 예시로 들자면 우선 스릴러와 SF/판타지는 유사한 장르라고 보기 어렵다. 하지만 유저들의 별점 분포를 분석했을 때 두 장르를 함께 좋아하는 패턴이 발견된다면 SF/판타지 영화를 좋아하는 유저에게 스릴러 영화를 추천할 수 있다. 이렇듯 아이템 자체가 아닌 아이템에 대한 반응에 주목한다는 점에서 CB와 명확한 차이가 있다.
CF의 가장 큰 장점은 User-item interactions만을 사용할 뿐 Attribute information은 전혀 사용하지 않는다는 것이다. 이 덕분에 데이터 수집이 용이하다. 또한 도메인 지식에 대한 부담을 덜 수 있다. 예컨대 영화 추천의 경우 유저의 과거 별점 기록만으로 추천을 하기 때문에 영화 자체에 대한 정보나 유저의 개인 정보가 굳이 필요하지 않다.
추천의 객관성도 보장된다. 만약 CB로 추천을 하려면 영화 백과사전에 맞먹는 데이터베이스를 구축해야 하는데 일일이 영화 정보를 수집해 분류하는 데 드는 시간과 비용을 생각하면 상당히 부담스럽다. 그리고 무엇보다 이 과정에서 주관이 개입될 수 있다. 예컨대 다음 중 불필요한 주관성을 배제한 쪽은 2번째인 CF이다.
- 호러 요소가 포함된 로맨스코미디 영화들을 단순히 로맨스 코미디로 분류한 아이템 데이터를 사용해 추천(CB)
- 비슷한 류의 영화들에 대한 유저의 평가 데이터를 사용해 추천(CF)
전자의 경우 호러물을 극도로 싫어하는 유저에게 로맨스코미디라는 이유만으로 추천할 위험이 있기 때문에 불필요한 주관성이 개입되었다. 하지만 후자의 경우 이 유저의 반응에 초점을 맞추기에 호러 요소가 아예 없는 로맨스 코미디 영화만을 추천할 가능성이 높다. 즉, 불필요한 주관성을 배제한 셈이다.
CF 특성상 User-item interactions에 의존하기에 평가 이력이 전혀 없는 유저에게 추천을 하는 것은 도박에 가깝다. 이로 인해 기존 데이터와의 연결고리가 없는 새로운 유저에게 추천을 해 주는 것이 어려운 Cold Start와 같은 문제가 발생하기도 한다. 즉, 어느 정도 데이터가 수집되어야 한다는 전제가 필요하다. 이와 달리 CB는 유저 자체에 대한 분석이 가능하므로 평점 데이터가 없더라도 이 유저와 비슷한 성향의 유저들이 좋아하는 아이템을 추천해 줄 수 있다.
결국 각각의 장단점이 있기에 상황에 따라 적절히 섞어 사용하면 된다(Hybrid Filtering).
Memory-based CF
Neighborhood-based CF이라고도 부르는 유사도 기반 알고리즘이다.
- User-based CF - 특정 유저의 평가 양상이 유사한 유저가 높게 평가한 아이템을 추천
- Item-based CF - 특정 유저가 높게 평가한 아이템과 유사한 아이템을 추천
예컨대 4명의 유저들의 6개 영화에 대한 별점 데이터가 있다고 해 보자. 유저 4에게 어떤 영화를 추천해야 할까?
User-based CF
유저 4가 평가한 아이템 A, C, E에 대해 가장 비슷한 별점을 준 사람은 유저 1이며, 이 유저는 아이템 F를 좋아하고 B와 D를 싫어하는 편이므로 아이템 F를 추천할 수 있다.
Item A | Item B | Item C | Item D | Item E | Item F | |
User 1 | 5 | 1 | 3 | 2 | 2 | 5 |
User 2 | 1 | 1 | 2 | 4 | 5 | 2 |
User 3 | 4 | ? | 5 | 4 | 4 | 3 |
User 4 | 5 | ? | 3 | ? | 2 | ? |
Item-based CF
유저 4가 평가한 아이템 A, C, E에 대해 비슷한 별점 분포를 보이는 영화는 각각 아이템 F(A와 C와 유사)와 D(E와 유사)이다. 유저 4는 아이템 A와 C를 좋아하고 E를 싫어하므로 아이템 A와 유사한 아이템 F를 추천할 수 있다.
Item A | Item B | Item C | Item D | Item E | Item F | |
User 1 | 5 | 1 | 3 | 2 | 2 | 5 |
User 2 | 1 | 1 | 2 | 4 | 5 | 2 |
User 3 | 4 | ? | 5 | 4 | 4 | 3 |
User 4 | 5 | ? | 3 | ? | 2 | ? |
이 경우 두 방식 모두 유저 4에게 아이템 F를 추천하게 되지만 데이터에 따라 결과가 달라질 수도 있으며, 일반적으로는 Item-based CF가 더 잘 작동하는 편이다.
유저 기반이건 아이템 기반이건 CF의 핵심은 주어진 평점 데이터만으로 아직 평점을 남기지 않은 아이템들에 대한 평점을 예측하고, 예측한 평점이 높은 아이템을 유저에게 추천해주는 것이다.
User-Item Matrix
Memory-based CF는 기존에 우리가 알고 있는 데이터 형식과는 사뭇 다른 형태의 데이터를 사용한다.
Collaborative Filtering에서는 예측변수(predictor)와 타겟변수(target) 개념이 없으며, 데이터는 유저(User)와 아이템(Item), 그리고 평점(Rating)으로 구성된 User-Item 행렬로 표현된다.
예컨대 아래 두 행렬은 동일한 n×p 행렬 같아 보이지만 자세히 살펴보면 데이터 형식이 완전히 다르다.
- Classification - 5개의 예측변수 X들과 1개의 종속변수 Y로 구성된 9개의 데이터
- Memory-based CF - 9명의 유저들의 6개의 아이템에 대한 n×p개의 평가 데이터
물론 이로 인해 Data Sparsity에서 벗어나기 어렵다는 단점이 있다.
현실적으로 모든 유저가 모든 아이템에 대해 평가를 하는 것은 불가능하기 때문이다. 차원의 저주처럼 유저와 아이템이 늘어날수록 행렬의 빈 공간도 커지기에 추천할 수 있는 아이템이 한정적이다.
또한 평가 데이터가 쌓이더라도 특정 아이템에만 편향되는 Long Tail 문제가 발생한다.
수백만 편의 영화가 있더라도 유저의 관심을 많이 받는 영화는 극히 일부이기 때문이다.
Model-based CF
머신러닝, 딥러닝 알고리즘을 활용해 파라미터를 학습시키는 예측 모델 기반 알고리즘이다.
- Latent Factor Model-based CF
- Tree-based CF
- Rule-Based CF Ex.) AR(Association Rule)
- Bayesian method CF Ex.) Naive Bayes
Memory-based CF가 모든 유저와 아이템에 대한 User-item interactions를 메모리에 저장해두었다가 추천을 할 때마다 가져와야 했다. 하지만 Model-based CF는 모델만 있으면 추천이 가능하다.
예컨대 Tree-based CF의 경우 User-item interactions를 타겟변수로 두고 학습한 Boosting 모델만 저장해두면 된다.
그렇기에 Data Sparsity에 비교적 자유롭고 비교적 많은 아이템을 추천할 수 있다(Large Coverage).
Memory-based CF와 Model-based CF의 차이가 애매하다고 느낄 수 있는데 이 둘을 엄격하게 구분할 필요는 없다.
예를 들어 Item-based CF에 SGNS를 결합한 Item2Vec의 경우 Word2Vec과 다름없기 때문에 Model-based CF라고 할 수 있고, Hybrid Filtering 개념으로 이 둘을 적절히 합쳐 성능을 높인 논문도 있다.
Latent Factor Model-based CF
유저와 아이템을 보다 잘 설명하는 특징(feature)인 잠재요인(latent factor)를 활용하는 알고리즘이다.
잠재요인은 데이터를 설명하는 차원 개념으로 받아들이면 이해가 쉽다. 예컨대 시청 가능 연령이라는 잠재요인으로 유저와 데이터를 설명하면 다음과 같이 직선 위의 좌표들로 나타낼 수 있다.
여기서 상업성이라는 잠재요인을 추가하면 다음과 같이 2차원 축 위의 좌표들로 나타난다.
이렇게 잠재요인으로 표현한 공간에서 유저와 아이템이 가까이에 있을수록 유사하다고 판단하고 추천을 하면 된다.
이와 같은 잠재요인은 무수히 많을 수 밖에 없기 때문에 잠재요인 자체를 찾아내는 것은 모델의 역할일 뿐 우리는 잠재요인의 개수 정도만 설정하면 된다. 행렬 분해를 통해 잠재요인을 찾아낼 수도 있고, 딥러닝을 활용해 잠재요인을 찾아낼 수도 있다.
References
참고 문헌
- Recommender systems: The Text Book, Charu C. Aggarwal, Springer
참고한 블로그↓
갈아먹는 추천 알고리즘 [1] 추천 알고리즘의 종류
들어가며 우리는 알게 모르게 매일 추천 알고리즘 속에서 살고 있습니다. 다양한 서비스들은 용케도 내가 좋아할 만한 동영상을, 웹 툰을, 페이스북 친구를, 심지어 소개팅 상대까지 추천 해줍
yeomko.tistory.com
카카오 AI추천 : 협업 필터링 모델 선택 시의 기준에 대하여
안녕하세요. 카카오 추천팀의 hee.yoon입니다. 여기에서는 협업 필터링(Collaborative Filtering, CF)이 무엇인지를 먼저 살펴 본 다음, 협업 필터링을 활용해 추천 시스템을 개발할 때 중요하게 고려해야
tech.kakao.com
추천시스템 Recommender System 정리
코드만 짜고 하다보니 전체적인 그림이 자꾸 잊혀지는 것 같아 한 번 정리를 쭉 해보고자 한다. 참고 추천시스템이란? 사용자의 interest를 예측해서 흥미로워할 만한 상품을 추천해주는 것. 추천
simonezz.tistory.com
댓글