🚦 이번 포스팅에서는 〰️
📌 협업 필터링 (Collaborative Filtering)이란?
📌 협업 필터링 종류
1️⃣ Memory Based Approach
➡️ User-based Filtering
➡️ Item-based Filtering
2️⃣ Model Based Approach
➡️ Item-based Filtering
📌 협업 필터링의 한계점
우리가 영화를 추천받고 싶을 때 어떻게 할까?
- 나랑 성향이 비슷한 친구들이 본 영화를 찾아본다.
- 내가 좋아하는 감독, 장르, 키워드의 영화를 찾아본다.
이게 바로
- 협업 필터링 (Collaborative Filtering)
- Content Based Filtering
이다!
이번 포스팅에서는 추천 시스템 알고리즘의 기본 중 첫번째 방법인 협업 필터링 (Collaborative Filtering) 에 대해서 알아보고자 한다!
📌 협업 필터링 (Collaborative Filtering)이란?
: "많은 사용자들로부터 얻은 기호정보"에 따라 사용자의 관심사들을 예측하게 해주는 방법으로,
사용자의 과거의 경향이 미래에서도 그대로 유지 될 것이라는 전제를 가지고 간다.
즉, 축적된 집단지성을 기반으로 사용자의 기호를 예측하는 것이다.
📌 협업 필터링 종류
협업 필터링의 대표적인 접근법에는 두가지가 있다.
- Memory-Based Approach : 유사한 사용자나 아이템 이용
- 특징 : 최적화 방법이나 매개변수를 학습하지않고 단순한 산술 연산만 사용
- 방법 : Cosine Similarity나 Pearson Correlation(피어슨 상관계수), KNN을 사용
- 장점
- 쉽게 만들 수 있다.
- 결과의 설명력이 좋다.
- 도메인에 의존적이지 않다.
- 단점
- 데이터가 축적되지 않는다.
- 데이터가 Sparse한 경우(희소데이터) 성능이 낮다.
- 확장 가능성이 낮다 ➡️ 데이터가 너무 많아지면 속도가 저하된다.
- Model-Based Approach : 기계학습 이용
- 특징 : 최적화 방법이나 매개변수를 학습
- 방법 : 행렬분해, SVD, NN
- 장점 : Sparse한 데이터도 처리 가능하다.
- 단점 : 결과의 설명력이 낮다.
1️⃣ Memory-Based Approach 협업 필터링
대표 방법론으로는 1) User-based Filtering
2) Item-based Filtering 이 있다.
💡 User-based Filtering
: 특정 사용자 (User)를 선택한다. ex] sns 친구추천 서비스
- 평점 유사도를 기반으로 유사한 사용자들을 찾는다.
- 유사한 사용자가 좋아한 Item을 추천한다.
💡 Item-based Filtering
: 특정 아이템 (Item)를 선택한다. ex] 함께 구매한 경우가 많은 상품 - '사이다'&'콜라'
- 특정 Item을 좋아한 사용자들을 찾는다.
- 그 사용자들이 공통적으로 좋아했던 다른 Item을 찾는다.
이 두가지 방법론 모두 유사도(거리)를 측정하여 사용한다.
거리 측정방법은 다양한데, 여기서 사용자(row)-아이템(col) 행렬이 사용된다.
그럼 이제 일반적인 거리 측정방법 3가지에 대해 알아보자!
이번에 알아볼 3가지는 Cosine Similarity, Pearson Similarity, Euclidean Distance 이다.
✅ 유사도 측정 방법
Cosine Similarity
- 사용자 u와 사용자 u'가 같은 방향성을 보는지 평가한다.
- 일반적으로 사용되는 유사도이다.
Pearson Correlation Similarity
- 평균적인 경향성에서 얼마나 차이 나는지를 평가한다.
- 평균을 빼기 때문에, 사용자 u와 u'가 함께 사용한 아이템이 꽤 있어야 한다.
- Centered Cosine Similarity라고도 한다.
Euclidean Distance
- 두 점 사이의 거리를 계산하는 방법
위 방법으로 유사도를 계산했다면 이걸 어떻게 추천방법에 녹일 수 있을까에 대해 알아보자!
User-Based Filtering 방법으로 알아보겠다. (Item-Based Filtering과 유사도 구하는 법만 다르지 방법은 동일하다!!)
✅ 유사도를 활용한 추천 방법
1. User-Item 행렬을 만든다.
➡️ 목표 : 4번째 사용자에게 영화 추천을 위해 아직 보지않은 (물음표) 영화의 평점 예상
2. User 간의 유사도 계산
3. 예상 아이템의 평점 추론
1) 4번째 사용자가 보지 않은 영화들을 본 사용자의 평점 추출
2) 4번째 사용자와 유사도 계산
3) 각 사용자 별 "유사도 x 평점" 계산
4) 유사도가 반영된 "가중치 평점" 합산
5) 가중치 평점을 나눠 "평균 평점"을 계산 ➡️ 4번째 사용자의 보지않은 영화 평점 예상
2️⃣ Model-Based Approach 협업 필터링
: 사용자의 선호도는 소수의 Hidden Factor로 결정될 수 있다는 기본 아이디어에서 출발
- Hidden Factor를 Embedding 이라고도 부른다.
- 행렬 분해 (Matrix Factorization : MF) 등을 사용한다.
- 비모수적 (Non-Parametric) 방법
- 행렬 분해 알고리즘
- 딥러닝 (Deep Learning) 기반 방법
- 행렬분해는 Loss Function과 Constraints 조건이 있는 최적화 문제로 공식화 되었다.
- ex) Non-Negative Matrix (NMF) 분해 방법은 음수가 아닌 요소 (Element)가 결과로 나와야 함
💡 행렬 분해 (Matrix Factorization : MF) 란?
- 행렬 분해는 여러 방법으로 수행 가능하다.
- Orthogonal Factorization(Singular Vector Decomposition : SVD) 특이값 분해
특이값 분해? 직교(Orthogonal)하는 벡터 집합에 대한 선형 변환 - Non-Negative Matrix Factorization (NMF)
- Probabilistic Factorization (PMF) 등
- Orthogonal Factorization(Singular Vector Decomposition : SVD) 특이값 분해
- 각각의 User-X Embedding과 Movie-A Embedding은 여러 요약적 특성을 나타낼 수 있다.
- Latent Sementic Analysis 라고도 함 (Latent : 잠재적인, 의미론적인)
- 실제로는 각 Factor가 무엇을 의미하는지 정확히 알 수 없음
- Movie-A Embedding 예시 - 공상과학과 관련된 요소, 최근 영화인지에 대한 요소 등
- User-X Embedding 예시 - 공상과학 영화를 얼마나 좋아하는지, 최근 영화를 얼마나 선호하는지 등
- User-X Embedding과 Movie-A Embedding 내적값이 높을수록 User-X에게 Movie-A가 더 좋은 추천임을 의미한다.
💡 비모수(Non-Parametric)적 접근법
- Memory-based 추천 시스템 아이디어와 유사하다. (Memory-based : 사용자와 아이템의 유사도 사용)
- 가중치 평균을 사용하여 사용자의 아이템의 평가를 예측
- Pearson Correlation이나 Cosine SImilarity를 사용하는 Memory-based와 달리 Unsupervised Learning 모델을 사용함 (like KNN)
💡 딥러닝(Deep Learning)적 접근법
- 행렬 분해의 확장으로 생각할 수 있다 ➡️ 행렬 분해 결과를 input으로 사용
- SVD나 PCA는 희소(Sparse) 행렬을 2개의 낮은 레벨의 직교 행렬 (User-X, Item-A)로 분해한다.
- Deep Learning은 이 Embedding을 직교할 필요 없이, 자체적으로 학습하길 원한다.
- User-Item의 조합으로부터 Look-up(조회)이 된다.
- 비선형(ReLU)나 선형(Linear), Sigmoid Layer 사용한다.
- 최적화 알고리즘(SGD, Adam)을 사용하여 가중치를 학습한다.
📌 협업 필터링의 한계점 및 보완 방향
[ 한계점 ]
- 콜드 스타트 (Cold Start)
- 새로 시작할 때의 곤란함
- User-Item 행렬이 충분히 구축되어야 하기 때문에 데이터가 중요하다.
- User-based Approach - 신규 사용자의 행동이 기록되지 않으면 어떤 아이템도 추천 불가
- Item-based Approach - 신규 상품이 출시되더라도 시스템이 충분한 정보를 모으지 않으면 추천 불가
- 계산 효율성 저하
- 협업 필터링은 계산량이 많은 알고리즘이다.
- 따라서, 사용자가 많아질수록 계산 시간이 증가한다.
- 사용자가 많아야 정확한 추천 결과를 내지만, 동시에 계산 시간도 증가된다.
- 롱테일 (Long-Tail)문제
- 파레토 법칙 : 전체 결과의 80%가 전체 인원의 20%에서 발생되는 현상
- 사용자들이 관심을 많이 보이는 소수의 인기 있는 콘텐츠를 주로 추천하게 된다.
- 품질 좋은 Long-Tail 아이템은 추천이 안돼서 추천 다양성이 떨어진다.
[ 보완 방향 ]
- 콘텐츠 기반 필터링 (Contents-Based Filtering)
- 콘텐츠에 대한 분석을 기반으로 추천하는 방식
ex) 영화 - 감독, 장르, 등장인물 등 / 상품 - 상품설명, 종류 등 - 태거(Tagger)에 의해 사람이 직접 콘텐츠의 태그를 달아서 기계학습(텍스트 마이닝)으로 분석
- 장점 : 많은 사용자의 행동 정보를 필요로 하지 않음 ➡️ 콜드 스타트 문제 해결 가능!
- 단점
- 메타 정보의 한정성 : 상품의 프로파일을 모두 함축하는데 한계가 있음 ➡️ 정밀성 떨어짐
- 세부적인 개인의 성향 파악이 어려움
- 콘텐츠에 대한 분석을 기반으로 추천하는 방식
- 하이브리드 (Hybrid) 추천 시스템
- "협업 필터링" + "콘텐츠 기반 필터링"
- 데이터가 쌓이기 전 : 콘텐츠 기반 필터링으로 콜드 스타트 문제 해결
- 데이터가 쌓인 후 : 협업 필터링으로 추천 정확성 향상시킴
- "협업 필터링" + "콘텐츠 기반 필터링"
- 머신러닝 추천 시스템
- 사용자의 조회, 클릭 등의 사소한 행동까지 학습
- 사용자에게 추천 후보군 제안 ➡️ 사용자의 반응 학습 ➡️ 점점 더 정교한 결과 도출
[참고]
https://ko.wikipedia.org/wiki/%ED%98%91%EC%97%85_%ED%95%84%ED%84%B0%EB%A7%81
'ML > Recommendation' 카테고리의 다른 글
[Recommendation] 추천 시스템 - 콘텐츠 기반 필터링 (Contents-based Filtering) (0) | 2024.01.20 |
---|---|
[Recommendation] 추천시스템에 대해서 (2) | 2024.01.18 |