본문 바로가기
← 메인으로
추천

협업 필터링

게시 2024-09-30

협업 필터링 프로세스를 단계별로 나타낸 흐름도. 데이터 수집(사용자의 클릭/찜/장바구니 추가/구매/별점 평가 등 다양한 행동 데이터 수집), 데이터 전처리(평점 정규화 사용자 평균 기준, 클릭 수 로그 스케일로 변환, 각 행동 유형별 가중치 부여, 사용자-상품 행렬 구성), 유사도 계산(코사인 유사도를 이용한 사용자-사용자 또는 상품-상품 간 유사도 계산), 예측값 계산(유사한 사용자 선호도를 가중 평균으로 계산하여 아직 평가하지 않은 상품 점수 예측), 추천 리스트 생성(예측값 기반 상품 정렬 및 이미 구매/확인한 상품 필터링) 순으로 이어지는 구조.

  • 상품 속성보다 사용자 간의 관계와 행동 패턴을 중심으로 추천하는 방식
  • "나와 비슷한 취향의 사람들이 좋아한 상품을 나도 좋아할 것"이라는 가정에서 출발
  • 상품 메타데이터가 없어도 작동하는 게 장점이지만, 신규 사용자/상품에는 취약한 콜드 스타트 문제가 있음
  • 데이터가 축적될수록 추천 품질이 높아지는 구조. 넷플릭스, 아마존, 유튜브가 핵심 엔진으로 활용
  • 프로세스는 데이터 수집 → 데이터 전처리 → 유사도 계산 → 예측값 계산 → 추천 리스트 생성 순으로 이어짐

데이터 수집 : 클릭, 찜, 장바구니 추가, 구매, 별점 평가 등 사용자 행동 데이터를 수집해 "사용자-아이템 행렬"로 정리. 행은 사용자, 열은 상품, 각 셀에는 상호작용 수치가 입력됨. 강한 의도가 포함된 장바구니/구매 이벤트는 단순 클릭과 별도로 관리

데이터 전처리 : 평점은 사용자 평균 기준으로 정규화(4점을 주는 사람에게 4점은 평균, 2점을 주는 사람에게 4점은 높은 점수). 클릭 수는 로그 스케일로 변환. 장바구니/구매는 가중치를 부여해 점수

유사도 계산 : 코사인 유사도로 사용자-사용자 또는 상품-상품 간 유사도를 계산. 점수의 크기보다 선호 방향의 패턴이 유사한지를 판단하며 0~1 사이 값으로 표현. scikit-learn의 cosine_similarity로 구현

예측값 계산 및 추천 리스트 생성 : 사용자-상품 행렬의 빈칸(아직 경험하지 않은 상품)을 유사 사용자들의 평점 가중 평균으로 채움. 예측값 기반으로 상품을 정렬하고, 이미 구매/확인한 상품은 필터링 후 최종 추천 목록 제공. Python의 surprise 라이브러리로 구현(KNNBasic, KNNWithMeans, SVD, NMF 알고리즘 지원)