◈ Context-aware 추천
추천 시스템의 정확도와 만족도는 다양항 상황에 영향을 받는다. 같은 아이템이라도 같이 있는 사람, 날씨, 시간, 검색 도메인에 따라서 선호도가 바뀔 수 있다. 따라서 추천 과정에서 상황을 반영하는 것은 중요하다.
✅ 상황변수를 반영하는 방법
✔ 상황변수를 직접 반영하는 방법
• 상황변수를 개별 추천엔진의 입력변수로 사용 → 모든 사용자들에게 동일한 영향을 주기 때문에 큰 효과가 없다.
ex) 목요일을 변수로 사용하면, 목요일에 추천을 실시할 경우 모든 사용자들에게 같은 값을 더하거나 빼면 의미가 없어진다.
✔ 상황변수를 개별 추천엔진을 결합하는데에 사용
여러 알고리즘을 결합할 때 상황변수를 가중치로 사용할 수 있다. 예를 들어, 월요일에는 추천엔진 1의 비중이 크게, 토요일은 추천엔진 2의 비중이 크게 할 수 있다. 이 과정을 마찬가지로 딥러닝 학습을 통해서 구한다.
◈ Sparse Matrix 처리
대부분의 데이터는 아이템에 대해서 사용자가 rating을 한 값이 0.1% 미만이다. 따라서 이 데이터를 그대로 사용할 경우 연산량과 시간이 증가한다. 이러한 문제를 해결하기 위해서 해당 인덱스와 값을 따로 저장해서 처리한다. 이 방식은 데이터를 압축해서 처리하기 때문에 메모리 소비가 적다. 또한 일반적인 행렬 연산(사칙연산, 내적, 역행렬) 등도 numpy와 동일하게 사용할 수 있다. 데이터를 인덱스-값 형태로 처리하는데에 추가적인 비용이 들어가지만 element수가 적기 때문에 효율성이 높다.
python 에서는 SciPy 라이브러리를 사용할 수 있다.
✔ Sparse Matrix의 종류
✅ Sparse 매트릭스 예제
import numpy as np
import pandas as pd
from scipy.sparse import csr_matrix
#예제 데이터 생성
ratings = {'user_id': [1,2,4],
'movie_id': [2,3,7],
'rating': [4,3,1]}
ratings = pd.DataFrame(ratings)
필요한 라이브러리를 불러오고 예제 데이터를 생성한다. sparse matrix 생성에는 scipy 라이브러리의 csr_matrix 클래스를 사용한다.
# 판다스를 사용해서 full matrix로 변환
rating_matrix = ratings.pivot(index = 'user_id', columns ='movie_id', values = 'rating').fillna(0)
np.array(rating_matrix)
판다스를 이용해서 매트릭스 형태로 변경할 수도 있지만, 원래 데이터이 인덱스가 사라지는
# Sparse matrix를 이용해서 full matrix로 변환하는 경우
data = np.array(ratings['rating'])
row_indices = np.array(ratings['user_id'])
col_indices = np.array(ratings['movie_id'])
rating_matrix = csr_matrix((data, (row_indices, col_indices)), dtype=int)
print(rating_matrix)
index-value 형태로 저장된 것을 확인할 수 있다. 이 형태에서도 원래 numpy array와 같이 인덱싱이나 연산 기능을 수행할 수 있다. 예를 들어, 사용자 1의 2번 아이템에 대한 rating 을 인덱싱 하기 위해서는 rating_matrix[1,2]
넘파이와 동일하게 사용할 수 있기 때문에 기존 알고리즘들을 그대로 적용할 수 있다.
◈ Reference
'추천시스템' 카테고리의 다른 글
추천시스템 공부 자료 정리 (0) | 2022.02.07 |
---|---|
추천시스템 연구 아이디어 정리 (0) | 2022.02.05 |
하이브리드 추천시스템 (0) | 2022.01.24 |
Matrix Factorization : 텐서플로우, 케라스로 구현 (0) | 2022.01.23 |
추천 알고리즘 - Factorization Machines (0) | 2022.01.23 |
댓글