221017

AIVILLAIN·2022년 10월 17일
0

오공완

목록 보기
20/25

추천 시스템의 유형

콘텐츠 기반 필터링, 협업 필터링 방식으로 나뉨
협업 필터링 방식은 최근접 이웃 협업 필터링과 잠재 요인 협업 필터링으로 나뉨

콘텐츠 기반 필터링 추천 시스템

사용자가 특정 아이템을 선호하는 경우, 그 아이템과 비슷한 콘텐츠를 가진 다른 아이템 추천
특정 영화에 높은 평점을 줬다면 해당 영화와 장르, 출연 배우, 감독, 영화 키워드 등의 콘텐츠와 유사한 다른 영화를 추천해주는 방식

협업 필터링

사용자가 아이템에 매긴 평점 정보나 상품 구매 이력과 같은 사용자 행동 양식만을 기반으로 추천을 수행
사용자-아이템 평점 매트릭스와 같이 축적된 사용자 행동 데이터를 기반으로 사용자가 아직 평가하지 않은 아이템을 예측 평가하는 것

최근접 이웃 협업 필터링 (메모리 협업 필터링)

  • 사용자 기반
    특정 사용자와 유사한 다른 사용자를 선정하여 이 사용자들이 좋아하는 아이템을 추천해주는 방식
    특정 사용자와 타 사용자 간 유사도를 측정, 가장 유사도가 높은 사용자들을 추출하여 그들이 선호하는 아이템 추천
  • 아이템 기반
    아이템이 가지는 속성과 상관없이 사용자들이 그 아이템을 좋아하는지/싫어하는지의 평가 척도가 유사한 아이템 추천

일반적으로 사용자 기반보다는 아이템 기반 협업 필터링이 정확도가 더 높음

잠재 요인 협업 필터링

사용자-아이템 평점 행렬 데이터만을 이용해 잠재 요인을 끄집어 내는 것
다차원 희소 행렬을 저차원 밀집 행렬인 사용자-잠재요인 행렬과 아이템-잠재요인 행렬의 전치 행렬로 분해, 분해된 두 행렬의 내적을 통해 새로운 예측 사용자-아이템 평점 행렬 데이터를 만들어 사용자가 아직 평점을 부여하지 않은 아이템에 대한 예측 평점을 생성

행렬 분해

다차원 행렬을 저차원으로 분해하는 기법, 대표적으로 SVD, NMF 등이 있음
M개의 사용자 행과 N개의 아이템 열을 가진 평점 행렬 R은 MxN차원으로 구성
행렬 분해를 통해 사용자-K차원 잠재 요인 행렬 P(MxK차원)와 K차원 잠재 요인 - 아이템 행렬 Q,T(KxN차원)로 분해될 수 있음
(Q는 아이템-잠재요인 행렬, T는 Q의 전치 행렬인 잠재요인 - 아이템 행렬)

SVD는 NaN 값이 없는 행렬에만 적용할 수 있음
확률적 경사 하강법(SGD)나 ALS 방식을 이용하여 SVD 수행

확률적 경사 하강법을 이용한 행렬 분해

P와 Q행렬로 계산된 예측 R 행렬 값이 실제 R 행렬 값과 가장 최소의 오류를 가질 수 있도록 반복적인 비용 함수 최적화를 통해 P와 Q 유추

TMDB 5000 데이터세트

실습 코드

ast 모듈의 literal_eval 함수를 이용하면 json 형태의 문자열을 객체로 만들 수 있음

장르 콘텐츠 유사도 측정

문자열로 변환된 장르를 Count 기반으로 피처 벡터화
해당 벡터 데이터 세트를 사용하여 코사인 유사도 비교
장르 유사도가 높은 영화 중 폄점이 높은 순으로 영화 추천

장르 콘텐츠 필터링을 이용한 추천

장르 유사도에 따라 영화를 추천
여러 관객의 평점 평균이 일부 소수 관객만의 평점을 토대로 왜곡될 수 있기에 가중 평점이라는 방식 사용

아이템 기반 최근접 이웃 협업 필터링

실습 코드

최근접 이웃 협업 필터링은 사용자 기반, 아이템 기반으로 구분됨
아이템 기반 협업 필터링이 일반적으로 추천 정확도가 뛰어남

협업 필터링 기반 추천을 위해서는 사용자-아이템 평점 행렬 데이터 세트 필요

MovieLens 데이터 세트 사용 실습

영화 간 유사도 산출

cosine_similarity() 메소드는 행을 기준으로 서로 다른 행을 비교하여 유사도 산출

사용자의 평점 정보를 취합하여 영화에 따라 유사한 다른 영화 추천

아이템 기반 최근접 이웃 협업 필터링으로 개인화 추천

위 예시는 모든 사용자의 평점을 기준으로 영화의 유사도를 생성(개인 취향이 아님)
개인이 아직 관람하지 않은 영화를 추천
아직 관람하지 않은 영화에 대해 아이템 유사도, 기존 관람 영화 평점 데이터를 기반으로 새로운 모든 영화의 평점 계산 후 높은 예측 평점을 가진 영화를 추천

Surprise 패키지

실습 코드

파이썬 기반에서 사이킷런과 유사한 API와 프레임워크 제공

pip install scikit-surprise
  • 사용자 또는 아이템 기반 최근접 이웃 협업 필터링, SVD, SVD++, NMF 기반 잠재 요인 협업 필터링 등 다양한 추천 시스템 구축 가능

Suprise 패키지의 Prediction 객체는 추천 예측 평점 데이터와 입력 데이터를 튜플 형태로 가지고 있음
detail 속성은 내부 처리 시 추천 예측을 할 수 없는 경우 로그용으로 데이터를 남김
was_impossible이 True이면 예측값을 생성할 수 없는 데이터

추천 알고리즘 클래스

  • SVD
    행렬 분해를 통한 잠재 요인 협업 필터링을 위한 알고리즘
  • KNNBasic
    최근접 이웃 협업 필터링을 위한 알고리즘
  • BaselineOnly
    사용자 Bias, 아이템 Bias를 감안한 SGD 베이스라인 알고리즘

SVD++ 알고리즘의 RMSE, MAE가 가장 좋으나 상대적으로 시간이 너무 오래 걸림

베이스라인 평점

영화나 상품의 평가는 각 개인의 성향에 따라 같은 아이템이더라도 평가가 달라질 수 있음
개인 성향 반영해 아이템 평가에 편항성 요소를 반영하여 평점을 부과하는 것

보편적으로 전체 평균 평점 + 사용자 편향 점수 + 아이템 편향 점수로 계산됨

교차 검증 및 하이퍼파라미터 튜닝

cross_validate()와 GridSearchCV 클래스 제공

데이터 세트 전체를 학습 데이터로 사용하려면 DatasetAutoFolds의 build_full_trainset() 메서드 호출

profile
소신있는 오픈마인드

0개의 댓글