오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-10 00:03
관리 메뉴

우노

[추천시스템] 추천 시스템의 개념 및 알고리즘 본문

Data/Recommender System

[추천시스템] 추천 시스템의 개념 및 알고리즘

운호(Noah) 2020. 10. 16. 00:07

추천 시스템

  • 사용자가 아직 보지 않은 드라마에 대한 사용자의 예상 별점을 알 수 있다면?
  • 추천 시스템의 성능이 좋아진다.
  • 사용자에게 예상 별점이 높은 드라마를 추천 해주면 되기 때문이다.

별점 예측 방법

  • Collaborative Filtering
    • 고전적이지만 지금까지 잘 사용되고 있는 방법 중 하나이다.
    • 통계적인 방법이므로 연산이 빠른 대신 정확도는 조금 떨어진다.
    • 다음 두 가지 방법으로 사용된다.
      • Item-Item Collaborative Filtering
      • User-User Collaborative Filtering
  • Hyprid Methods
    • Collaborative Filtering의 단점을 보완하는 방법 중 하나이다.
  • Latent Factor Model
    • Matrix Factorization을 활용해 구현
    • 별점을 맞추는 성능 자체는 Collaborative Filtering보다 더 좋다.
    • 딥러닝과 같이 녹아들 수 있어서 잘 발전 되고 있다.

Collaborative Filtering

  • 내가 이 드라마를 본다면, 별점으로 몇점을 줄지 어떻게 예측할까?

  • Item-Item Collaborative Filtering

    • 즉, 내가 볼 item과 내가 평가한 item 들 중에서 성향이 비슷한 item의 평점을 이용하는 것이다.

    • 방법 1 : 내가 이미 본 비슷한 Item들의 평균 내기

      • 위 예제 계산
        • (4.5 + 5.0) / 2 = 4.75
    • 방법 2 : 내가 이미 본 비슷한 Item 중 더 유사한 Item에 가중치 줘서 평균 내기

      • 위 예제 계산
        • (4.5 x 0.7 + 5.0 x 0.4) / (0.7 + 0.4)
        • 분모가 유사도의 합인 이유는?
          • 식을 변환하면 4.5 x ( 7 / 7+4 ) + 5.0 x ( 4 / 7+4 ) 이다.
          • 즉, 각 유사도의 합이 1이 되도록 만들어주기 위해
          • 유사도 값으로 (유사도 / 전체유사도합)를 사용하는 것이다.
  • User-User Collaborative Filtering

    • Item-Item Collaborative Filtering은 내가 볼 item과 내가 평가한 item 들 중에서 성향이 비슷한 item의 평점을 이용하는 것이었다.

    • User-User Collaborative Filtering는 나와 성향이 비슷한 User들이 Item에 매긴 평점을 이용하는 것이다.

    • 방법 : 나와 성향이 비슷한 User들 중 더 비슷한 User에 가중치 줘서 Item 평균 내기

    • 예제

      • Item-Item과 User-User는 동일한 알고리즘이지만 사용하는 데이터의 축만 다르다.
      • 각각의 column은 User를 표현하는 벡터이다.
      • 먼저 User간 유사도를 구한다.
        • 위 문제에서는 사용자 H와의 유사도를 구해야한다.
        • N = 2 이므로 사용자 H와 가장 유사한 2명을 구해야하며
        • 드라마 a를 본사람이어야한다.
      • J와 D가 가장 유사도가 높은 두 사람이며 각각 유사도가 0.4, 0.3라고 가정하자.
      • 유사한 사람을 찾았으니 더 유사한 사람에게 가중치를 주어 Item 평점 평균 계산할 수 있다.
        • ( 3 x 0.4 + 5 x 0.3 ) / (0.4 + 0.3)
  • 이론상 User-User Collaborative Filtering 과 Item-Item Collaborative Filtering 은 동일한 정확도를 가진다.

  • 하지만 실제로는 Item-Item이 User-User보다 더 좋은 성능을 보인다. 왜 일까?

  • User의 평가 점수는 시간에 따라 바뀌기도 하며 여러가지 변수가 존재하기 때문이다.

  • Item-Item간 비교에는 한 User 내에서의 평가점수이므로 여러변수가 없기 때문에 더 측정이 잘 된다.

  • Collaborative Filtering 의 장점

    • 영화, 드라마, 도서 등등 추천 대상에 제한이 없다.
    • 평가 정보만 있으면 되기 때문이다.
  • Collaborative Filtering의 단점

    • Cold Start
      • 충분한 User와 평가 정보가 확보 되어야한다.
      • User와 평가 정보가 없다면 추천 해줄 수 없다.
    • Sparsity
      • 평가 데이터(User-Item Matrix)에 빈 곳이 많다.
        • 한 User가 평가할 수 있는 Item은 한정적이다.
        • 해당 Item이 인기 있지 않다면 같은 Item을 평가하는 사용자가 몇 명 없다.
    • First rater
      • 한 번도 평가 되지 않은 드라마는 절대 추천되지 않는다.
      • 예) 신작, 매니악한 드라마 등
    • Popularity Bias
      • 독특한 취향을 가지는 User에게는 적합한 추천이 어렵다.
        • 기본적으로 다른 평점의 평균을 매겨서 추천하기 때문이다.
      • 주로 인기 있는 드라마가 추천 되기 십상이다.
    • 이런 단점에도 굉장히 간단하게 적용할 수 있어서 많이 사용된다.

Hybrid Methods

  • 방법 1. 내용 기반 추천 방법과 collaborative filtering을 섞어서 사용한다.

    • 내용 기반 추천 방법(content-base method)
      • 드라마의 내용을 기반해서 추천하는 방법
    • collaborative filtering
      • 사용자의 평점을 이용하는 방법
    • 이 두 가지는 상호보완적이다.
    • 따라서 Hybrid Methods는 내용 기반 추천 방법과 collaborative filtering을 섞어 사용한다.
      • 새로운 아이템을 추천할 땐?
        • collaborative filtering은 새로운 아이템을 추천하지 못하기 때문에
        • content-base method의 줄거리, 출연진, 키워드 장르 등을 활용하여 추천한다.
      • 새로운 사용자에게 추천할 땐?
        • 전반적으로 인기가 좋은 item을 추천한다.
  • 방법 2. 둘 이상의 추천시스템을 구현하고, 통합하여 추천하자!

    • 예) 둘 이 상의 추천결과를 선형 결합
      • global baseline + collaborative filtering

Global Baseline Estimate (기본 평점 예측)

  • 이미 높은 평점을 받은 드라마에는 나도 높은 평점을 주지 않을까?

  • 사용자가 깐깐한 편이라면, 평균보다 조금 낮게 평점을 주지 않을까?

  • Global Baseline Estimate를 사용해 문제를 해결해보자

    • 문제
      • 진원이는 "이태원 클라쓰"와 비슷한 드라마를 본 적이 없다.
      • 진원이가 "이태원 클라쓰"를 보고 매길 평점을 예측해보자.
    • 해결
      • 존재하는 모든 드라마의 평점 평균 : 3.7점
      • 진원이의 드라마 평점 평균 : 3.5 점 (평균보다 0.2 점 낮음)
        • User Vector
      • "이태원 클라쓰"의 평점 평균 : 4.2점 (평균보다 0.5점 높음)
        • Item Vector
      • 결과
        • 기본 평점 (Global baseline) : 3.7 - 0.2 + 0.5 = 4.0
  • 여기에 Collaborative Filtering를 적용하면 좀 더 정확하게 예측하지 않을까?!

Global Baseline Estimate (기본 평점 예측) + Collaborative Filtering

  • 위 예제 사용

  • Bias == Global Baseline Estimate (기본 평점 예측)

    • Bias 값은 4.0 이다.
    • 즉, 진원이는 대략적으로 "이태원 클라쓰"에 4.0 점을 매길 것이다. 왜?
      • bxi = 3.7 - 0.2 + 0.5 = 4.0
      • 전체 평점 평균 + User의 bias(User는 Item에 평균적으로 점수를 얼마나 주는지) + Item의 bias(해당 Item은 평균적으로 몇 점을 받는지)
  • Collaborative Filtering

    • Collaborative Filtering 값은 -1.0 이라고 가정하자.
    • 기존의 Collaborative Filtering은 절대적인 평가 점수로 사용 됐기 때문에 양수였지만 여기선 상대적인 평가 점수로 사용 되기 때문에 음수값도 나온다.
    • 해당 Item과 비슷한 Item이 사용자의 기본 평점(global baseline) 대비 몇 점이 높고 낮냐를 의미하는 값
      • 구하고자 하는 Item의 평점을 기본 평점(global baseline)으로 잡아놨기 때문에
      • 해당 Item의 평점이 기본 평점에서 얼마나 높은지, 낮은지를 구해야한다.
      • 기본 평점(global estimate) 대비 몇 점이 높냐 낮냐를 학습해야
      • 기본 평점(global estimate)과 더 했을 때 예측되는 점수가 나온다.
    • rxj - bxj
      • 유사한 아이템 j의 점수 - 기본 평점(global baseline)
    • ex) 진원이는 "이태원 클라쓰"와 유사한 "사랑의 불시착"에 본인의 평점 평균보다 1.0을 낮게 줬다.
    • 따라서, 이태원 클라쓰의 평점 평균을 본인의 평점 평균보다 1.0 낮게 주면 된다!
  • 결과

    • 진원이는 "이태원 클라쓰"에 4.0 - 1.0 = 3.0 점을 매길 것이다.
Comments