1. 추천시스템이란게 먼가요?
- 협업 필터링(Collaborative Filtering)방식 : 다수의 사용자가 아이템을 구매한 이력 정보만으로 사용자간 유사성 및 아이템 간 유사성을 파악한다.
- 콘텐츠 기반 필터링(Contents-based Filtering)방식 : 아이템의 고유의 정보를 바탕으로 아이템 간 유사성을 파악한다.
- 즉, 협업 필터링은 아이템과 사용자 간의 행동 또는 관계에만 주목하고, 콘텐츠 기반 필터링은 아이템 자체의 속성에 주목한다.
- 협업 필터링의 단점
1) 시스템이 충분한 정보를 모으지 못한 사용자나 아이템에 대한 추론을 할 수 없는 상태인 콜드 스타트(Cold Start)상황을 겪는다.
2) 계산량이 너무 많아 추천의 효율이 떨어지는 상황이 발생한다.
3) 롱테일의 꼬리 부분, 즉 사용자의 관심이 저조한 항목의 정보가 부족하여 추천에서 배제되는 상황이 발생한다.
- 추천시스템은 아이템은 매우 많고, 유저의 취향은 다양할 때 유저가 소비할만한 아이템을 예측하는 모델이다.
2. 데이터 탐색하기와 전처리
- 이번에도 Pandas를 이용할 것이다.
- pd.read_csv를 이용하여 데이터를 불러온다
- head, lower, loc, nunique, groupby, sort_value, count, describe, DataFrame, any, isin 등을 이용한다.
3. 사용자의 명시적 / 암묵적 평가
- 명시적 평가에는 "좋아요", "별점" 등이 있고, 암묵적 평가에는 "플레이 횟수", "플레이 시간" 등이 있다.
- 그럼 몇 번 플레이 해야 좋아한다고 말할 수 있을까 -> 명확한 정답이 존재하지 않는다.
- 때문에 좋아한다고 가정을 할 수 있는 기준을 세울 필요가 있다.
4. Matrix Factorization(MF, 행렬분해)
- 협업 필터링이란 결국 평가행렬을 전제로 하는 것이다.
- 그러므로 우리는 m명의 사용자들이 n개의 아이템에 대해 평가한 데이터를 포함한 (m, n) 사이즈의 평가행렬을 만든다.
- (m, n) 사이즈의 행렬 R을 (m, k) 사이즈의 행렬 P와 (k, n) 사이즈의 행렬 Q로 분해한다면 R이란 그저 P와 Q의 행렬곱으로 표현 가능할 수 있다는 아이디어이다.
- 대체로 k는 m이나 n보다 훨씬 작은 값이기 때문에 계산량 측면으로도 훨씬 유리하다.
- 이렇게 되면 P는 사용자 특성벡터가 되고, Q는 아이팀의 특성 벡터가 될 것이다.
5. CSR(Compressed Sparse Row) Matrix
- CSR Matrix는 Sparse한 matrix에서 0이 아닌 유효한 데이터로 채워지는 데이터의 값과 좌표 정보만으로 구성하여 메모리 사용량을 최소화하면서도 Sparse한 matrix와 동일한 행렬을 표현할 수 있도록 하는 데이터 구조이다.
6. MF 모델 학습하기
- implicit 패키지를 이용할 것이다.
- 이 패키지는 암묵적 dataset을 사용하는 다양한 모델을 굉장히 빠르게 학습할 수 있는 패키지이다.
- Matrix Factorization에서 쪼개진 두 Feature Matrix를 한꺼번에 훈련하는 것은 잘 수렴하지 않기 때문에, 한쪽을 고정시키고 다른 쪽을 학습하는 방식을 번갈아 수행하는 AlternatingLeastSquares방식이 효과적인 것으로 알려져 있다.
- 그래서 이 패키지에 구현된 als(AlternatingLeastSquares) 모델을 사용한다.
- AlternatingLeastSquares클래스의 __init__ 파라미터를 살펴보면
1) factors : 유저와 아이템의 벡터를 몇 차원으로 할 것인지
2) regularization : 과적합을 방지하기 위해 정규화 값을 얼마나 사용할 것인지
3) ues_gpu : GPU를 사용할 것인지
4) iterations : epochs와 같은 의미로, 데이터를 몇 번 반복해서 학습할 것인지
* 1)과 4)를 늘릴수록 학습데이터를 잘 학습하게 되지만 과적합의 우려가 있으니 좋은 값을 찾아야 한다.
7. 비슷한 아티스트 찾기 + 유저에게 추천하기
- AlternatingLeastSquares 클래스에 구현되어 있는 similar_items 메서드를 통해 비슷한 아이템을 찾을 수 있다.
- 위 메서드는 (아이템의 id, 유사도) Tuple로 반환한다.
- AlternatingLeastSquares 클래스에 구현되어 있는 recommend 메서드를 통해 좋아할 만한 아이템을 추천받을 수 있다.
- AlternatingLeastSquares 클래스에 구현되어 있는 explain 메서드를 통해 기록을 남긴 데이터 중 추천에 기여한 정도를 확인할 수 있다.
8. 프로젝트 - Movielens 영화 추천 실습
'공부 > AIFFEL' 카테고리의 다른 글
Exploration 9 : 나의 첫 번째 캐글 경진대회, 무작정 따라해보기 (0) | 2021.02.05 |
---|---|
FUNDAMENTAL 16. 컴퓨터 파워 UP (0) | 2021.02.03 |
풀잎스쿨 - DeepML(CS231N) Lec. 06 (0) | 2021.02.01 |
FUNDAMENTAL 15. 선형 회귀와 로지스틱 회귀 (0) | 2021.02.01 |
FUNDAMENTAL 14. 다양한 데이터 전처리 기법 (0) | 2021.01.29 |