메모리 기반 협업 필터링은 추천 시스템 분야에서 사용자들의 상호작용 정보를 바탕으로 실시간 또는 준실시간으로 개인 맞춤형 추천을 제공하는 대표적인 기법이다. 이 장문의 글에서는 해당 알고리즘의 작동 구조, 수식, 실제 응용 상황, 그리고 한계와 현대적 대안을 실제 예시와 함께 체계적으로 정리하고자 한다.
협업 필터링(Collaborative Filtering, CF) 기법은 대중적으로 영화, 쇼핑, 음악 등 다양한 서비스에서 활용되는 추천 알고리즘의 뼈대를 이룬다. 크게 메모리 기반과 모델 기반으로 양분할 수 있는데, 본고에서는 가장 고전적이면서도 직관적으로 이해하기 쉬운 메모리 기반 협업 필터링에 집중한다. 이 접근법은 데이터가 모델에 '기억'되어 있다는 점과, 실시간 계산을 통해 가까운 이웃(즉, 유사한 사용자나 아이템)을 탐색함으로써 추천을 만들 수 있다는 점에서 명명되었다[1][2][3].
핵심 원리:
이러한 집단 지성의 개념을 수학적 행렬로 일반화하여 효율적으로 추천 결과를 도출한다는 점에서, 메모리 기반 방식은 데이터 과학의 기본 실무 능력을 함양하는 데에도 중요하게 다뤄진다.
핵심 데이터 구조는 사용자-아이템 행렬이다.
이 행렬은 행은 개별 사용자, 열은 상품이나 영화와 같은 아이템으로 구성되며, 각 셀의 값은 명시적 평점(예: 1~5점), 클릭 여부, 구매, 시청 등의 상호작용(암시적 피드백)이 들어간다.
아래 시각화는 대표적인 사용자-아이템 평점 희소행렬의 예시이다.
메모리 기반 협업 필터링의 사용자-아이템 희소행렬 예시
실제 업무에서는 대부분 값이 비어 있는 희소 행렬(Sparse Matrix)의 형태로 나타난다.
프로세스는 다음과 같이 나눌 수 있다.
대표적인 사용자 기반 협업 필터링의 예측 평점 공식은 다음과 같다:
아이템 기반도 유사 구조로 식이 구성되며, 그 차이점은 '유사도'와 '평점' 계산 주체가 행(사용자)에서 열(아이템)로 바뀐다[5][6].
다음은 유사도 계산의 과정 중 하나인 코사인 유사도로 구한 사용자 간(4명 예시) 유사도 행렬을 시각화한 예제다.
코사인 유사도를 활용한 사용자 간 유사도 행렬 예시
다음은 사용자-아이템 평점 행렬을 통한 영화를 추천하는 상황이다.
| 아이언맨 | 노팅힐 | 토이 스토리 | 올드보이 | |
|---|---|---|---|---|
| 김철수 | 5 | – | 2 | – |
| 이영희 | – | 3 | – | 1 |
| 박영수 | 4 | – | – | 5 |
| 최수정 | – | 2 | 4 | – |
김철수는 '노팅힐'과 '올드보이'에 대한 평점을 내리지 않았다. 이때, 김철수와 유사도가 가장 높은 이의 평점(또는 이웃 여러 명의 가중 평균 평점)을 예측값으로 활용, 미시청 작품을 추천하게 된다.
"박영수"가 '토이 스토리'를 높게 평가했다면, '올드보이' 등 유사도 높은 아이템(영화)을 추천.
넷플릭스와 같은 서비스에서 사용자의 시청 이력(파란색 블록)과 다른 사용자의 추천 영화가 어떻게 최종 추천 리스트로 연결되는지 한눈에 보여주는 인포그래픽이 실제 업무에서 자주 활용된다.
예시와 함께 넷플릭스 추천엔진 이해하기 : 사용자 기반 필터링 인포그래픽
이러한 한계 해결을 위해 모델 기반(행렬 분해, 딥러닝 등), 콘텐츠 기반, 하이브리드(혼합형) 방식이 등장했다. 콜드 스타트 문제에 대해서는 인구통계 정보를 병합하여 유사사용자 추정, 신규 사용자에게 최소한의 피드백을 유도(별점 몇 개 강제 입력)하는 디자인이 일반적이다[3][7].
메모리 기반 협업 필터링은 추천 시스템의 기본이자 대표적인 “탐색적” 접근법으로, 기계학습 모델 구축 전 단계 혹은 베이스라인 알고리즘으로 널리 쓰인다. 단순성과 직관성, 그리고 데이터 확장성, 설명 용이성 등의 장점 덕분에 여전히 추천 시스템 구성 필수요소로 자리 잡고 있다. 그러나 희소성, 콜드 스타트, 대규모 스케일의 한계 등 실무적 과제에 대해선 하이브리드, 모델 기반 방법, 최신 딥러닝 기법 등과 병행이 필요하다. 추천 시스템을 설계할 때 데이터 구조(희소 및 결측치)와 비즈니스에 따라 가장 적합한 방식을 융합적으로 선택하는 것이 전문가적 설계의 핵심이다.
출처
[1] R4TINGS Workbook 5.1 메모리 기반 협업 필터링 https://r4tings.com/recommender/docs/workbook/latest/ch-05-sec-01
[2] 협업 필터링(Collaborative Filtering) https://openads.co.kr/content/contentDetail?contsId=15951
[3] 메모리 기반 CF 추천시스템의 문제점 - 데하 - 티스토리 https://data-science-hi.tistory.com/133
[4] 𒀭R4TINGS 🢖 Workbook 🢖 5. 이웃 기반 협업 필터링 추천 https://r4tings.com/recommender/docs/workbook/latest/ch-05
[5] 추천 시스템 기본 - 협업 필터링(Collaborative Filtering) - ① https://kmhana.tistory.com/31
[6][Spark] Spark 로 Memory-Based Collaborative Filtering 구현하기 https://westlife0615.tistory.com/1047
[7][이론정리]Collaborative Filtering https://www.blossominkyung.com/recommendersystem/collaborative-filtering
[8] Apache Spark: 인메모리 데이터 처리 엔진 활용 🚀 https://www.jaenung.net/tree/3120
[9] 알고리즘 추천 시스템을 위한 '협업 필터링'이란? https://www.elancer.co.kr/blog/detail/291
[10] #추천시스템 : 콘텐츠 기반 필터링(Contents-based-filtering), 협업필터링(Collaborate Filtering) https://blog.naver.com/th9231/221984972779
[11] Memory-based Collaborative Filtering - Studying data - 티스토리 https://my-mindpalace.tistory.com/7
[12] Practical Spark – Memory (10) - 1ambda https://1ambda.blog/2021/12/27/practical-spark-10/
[13] 추천 알고리즘의 이해와 활용: 콘텐츠 기반 필터링과 협업 필터링 - F-Lab https://f-lab.kr/insight/understanding-recommendation-algorithms-20250207