티스토리 뷰

- 컨텐츠 기반 필터링

- 협업 필터링

- 하이브리드 필터링

협업 필터링 vs 컨텐츠 필터링

"너가 좋아했던 그거, 그거 찾던 애들은 이것도 찾던데? " vs "너 그거 좋아했으니, 그거랑 비슷한 이것도 좋아할 거야!"

 

컨텐츠 기반 필터링(Contents - Based Filtering)

"너 그거 좋아했으니, 그거랑 비슷한 이것 도 좋아할 거야!"

컨텐츠 필터링 구현 절차

출처 : 파이썬 머신러닝 완벽 가이드

1) 피처 추출

- 아이템의 유사성을 계산하기 위해, 아이템의 특성을 추출

- 상품의 특징을 담은 tabular feature 사용하거나, 텍스트의 경우 TF-IDF 기법 적용

 

2) 사용자 프로필 정보 생성

- 유저의 선호도를 나타내는 역할 수행

- 유저가 상호작용한 아이템의 특징을 집계하여 생성

 

3) 유사도 계산

- 아이템과 사용자 프로필 벡터 사이의 유사도를 계산

- 코사인 유사도, 유클리드 거리, 피어슨 상관계수 등을 활용

 

4) 랭킹

- 유사도 스코어에 다라 순위를 매기며, 상위의 아이템을 사용자에게 추천 

 

컨텐츠를 피처로 표현하는 방법

1) 수치 형태로 표현하기

- 각 아이템의 특성을 feature로 표현

- 연속형 변수 : 정규화 후 수치 형태로 사용

- 범주형 변수 : one-hot encoding등의 가공 방식 사용

 

2) BoW (Bag of Words) 방식

- 단어마다 feature로! 문장을 벡터로 만드는 방식, 문장 내 Words를 토큰으로 만들어 Bag 안에 넣자!

https://slideplayer.com/slide/7073400/
Creating Bag of Words Model from Scratch in python - AskPython

- 문장 내 단어가 늘어감에 따라 feature의 수 지나치게 크게 증가

- 연산 효율 문제 발생

- 단어간의 의미 관계 포착 불가! 단순히 독립된 벡터 공간 내에서 하나의 feature로 간주하므로!

- 불용어(stop words) 문제

 

3) TF - IDF (Term Frequency - Inverse Document Frequency) 방식

- 자주 나오는 단어 중요하나, 어디서나 자주 등장하는 단어는 제외한다!

- 문장 내 단어는 문서별로 다른 중요도를 가진다!

- TF(Term Frequency) : 문서 y 내 x라는 단어의 등장 빈도, 문장 내 자주 등장하는 단어는 더 중요하다

IDF(Inverse Document Frequency) : 전체 문서의 수 / x라는 문장을 포함하고 있는 문서의 수 → 많이 등장하면 패널티!

많이 등장하는 여러 문장에 걸쳐 자주 등장하는 단어는 별로 안 중요함! like 불용어(stopwords)..

 

유사도 계산

- 유사도를 계산하는 방식에는 다양한 방법들이 존재

 

(1) 코사인 유사도 ( Cosine Similarity) ⭐

(2) 유클리드 거리 (Euclidean Distance)

(3) 피어슨 상관계수 (Pearson Correlation Coefficient)

 

콘텐츠 필터링의 장단점

[장점]

- 적은 상호작용 데이터에도 사용가능, cold - start 상황에 적합

- 아이템 cold start에 강점 : 상호작용이 전혀 없어도 추천 가능

- 추천 해석 가능 : 어떤 피처가 추천에 도움이 되었는지 근거를 찾을 수 있음

 

[단점]

- 아이템 피처의 한계 : 피처 정보로만 유사도를 계산하므로, 피처 품질에 영향 받음

- 신규 유저 cold start : 아무런 아이템도 클릭한 적 없는 유저에겐 추천 어려움

 

협업 필터링 (Collaborative - Based Filtering)

"너가 좋아했던 그거, 그거 찾던 애들  은 이것도 찾던데?"

협업 필터링 종류

출처 : IT 위키

- User - Based Collaborative Filtering : 유사한 취향을 가진 이웃을 사용자 관점에서 찾는다

- Item - Based Collaborative Filtering : 유사한 취향을 가진 이웃을 상품 관점에서 찾는다

 

협업 필터링 구현 절차

1) 유저 - 아이템 상호작용 행렬 생성

- 유저를 행에, 아이템을 열에 두어 행렬을 생성

- 각 유저- 아이템이 평가/클릭/구매 등 상호작용한 정보를 기반으로 원소 채움

 

2) 유사도 계산

- 유저 기반 협업 필터링의 경우 평가한 아이템의 index를 feature로 간주

- 아이템 기반 협업 필터링의 경우, 각 아이템을 평가한 유저들의 index를 feature로 간주

- 각 유저별/ 아이템별 유사도 계산

 

3) 이웃 지정

- 추천 대상의 스코어를 생성할 이웃 유저/아이템을 지정

- 높은 유사도의 유저 n명을 사용

 

4) 랭킹

- 이웃들의 상호작용 정보를 토대로 추천 스코어 계산

 

💡 유사도를 계산하는 방법은 앞선 컨텐츠 필터링과 마찬가지로 코사인 유사도와 같은 방식 활용!

💡 유사도 계산시, 사용자 특성으로 계산하는게 아니라 item 선호도를 기반으로 계산됨!

 

콘텐츠 필터링의 장단점

[장점]

- 사용자의 과거 행동을 기반으로 유사한 집단을 찾아 개인화된 추천 재공

- 잠재적 특징 활용 : item/ user feature로 명시적으로 드러나지 않은 선호정보도 반응정보로 부터 추출하여 사용하므로 폭 넓은 추천 가능

- interaction 데이터가 쌓일수록 더 정교하고 풍성한 추천 가능

 

[단점]

- 아이템 cold start : 한번도 추천되지 않은 아이템은 추천될 수 없음

- 유저 cold start : 과거 상호작용 데이터에 의존

- 낮은 확장 가능성 : 아이템/유저 수가 늘어남에 따라 연산량 급격히 증가

 

하이브리드 필터링

협업필터링 + 컨텐츠 기반 필터링

  • Combining Separate Recommenders
    - 단순하게 여러 모델의 결과값을 평균 내어 사용 or 성능을 기준으로 더 좋은 성능에 가중치
    - 더 좋은 모델 선택하기
  • Feature Combination
    - 앞선 모델의 추천 결과(주로 협업 필터링)를, 이후 등장하는 메인 모델의 피처로 사용

      - 협업 필터링 추천 결과를 고려해 콘텐츠 필터링을 적용함으로써 두 모델의 장점 적절히 조합 가능

      - ex) 협업 필터링으로 알아낸 user들의 공포 영화 선호도를 feature로 사용해서 contents 필터링 진행

   

  • Switching
    - 그때 그때 적절한 모델 사용!
    - cold user 상대로는 item 기반 추천, 활동 기록이 쌓이면 협업 필터링 적용

 

하이브리드 필터링 장단점

[장점]

- 성능 향상, 두 모델을 조합함으로써 각 모델의 강점 활용, 약점 상쇄
- 전반적인 추천 성능의 증대 가능

- 추천 범위, 다양성의 증가, cold start 문제 개선
→ 피처 기반 추천함으로써 cold item 추천 가능 / 협업 기반 추천함으로써 다양한 상품 추천 가능

 

[단점]

- 복잡도의 증가, 확장성 감소

- 하이퍼 파라미터, 모델 가중치 등 추가적인 튜닝 필요

 

 

 

 

 

[ 참고 문헌 ]