추천시스템이란
아마존, 이베이 등 유수의 전자상거래 업체가 추천 시스템 도입 후 큰 매출 향상을 경험했다.
하나의 콘텐츠를 선택했을 때 선택된 콘텐츠와 연관된 추천 콘텐츠가 얼마나 사용자의 관심을 끌고 개인에게 맞춘 콘텐츠를 추천했는지는 그 사이트의 평판을 좌우하는 매우 중요한 요소이다.
추천시스템의 진정한 묘미는 사용자 자신도 좋아하는지 몰랐던 취향을 시스템이 발견하고 그에 맞는 콘텐츠를 추천해주는 것이다.
이러한 추천 시스템을 접한 사용자는 해당 사이트를 더 강하게신뢰하게 되어 더 많은 추천 콘텐츠를 선택하게 된다.
결국 더많은 데이터가 추천 시스템에 축척되면서 추천이 더욱 정확해지고 다양한 결과를 얻을 수 있는 좋은 선순환 시스템을 구축 할 수 있게 된다.
추천시스템은 특히 온라인에서 그 진가를 발휘한다.
온라인 스토어는 많은 양의 고객과 상품 관련 데이터를 가지고 있다. 이 모든 데이터가 사용자가 흥미를 가질 만한 상품을 즉각적으로 추천하는 데 사용 된다. 예를 들어 다음과 같은 데이터가 추천 시스템을 구성하는데 사용될 수 있다.
- 사용자가 어떤 상품을 구매했는가 ?
- 사용자가 어떤 상품을 둘러보거나 장바구니에 넣었는가 ?
- 사용자가 평가한 영화 평점은 ? 제품 평가능 ?
- 사용자가 스스로 작성한 자신의 취향은 ?
- 사용자가 무엇을 클릭 했는가 ?
- 이러한 데이터를 기반으로 추천 시스템은 '당신만을 위한 최신상품' 같은 문구로 사용자가 상품을 구매하도록 유혹한다.
추천시스템의 유형
추천 시스템은 크게 콘튼체 기반 필터링 방식과 협업 필터링 방식으로 나뉜다. 그리고 협업 필터링 방식은 다시 최근접 이웃 협업 필터링과 잠재요인 협업 필터링으로 나뉜다.
추천 시스템의 초창기에는 콘텐츠 기반 필터링 이나 최근접 이웃 기반 협업 필터링이 주로 사용됐지만,
넷플릭스 추천 시스템 경연 대회에서 행렬 분해 기법을 이용한 잠재요인 협업 필터링 방식이 우승하면서 대부분의 온라인 스토어에서 잠재 요인 협업 필터링 기반의 추천 시스템을 적용하고 있다.
하지만 서비스 하는 아이템의 특성에 따라 콘텐츠 기반 필터링이나 최근접 이웃 기반 협업 필터링 방식을 유지하는 사이트도 많으며,
특히 아마존의 경우는 아직도 아이템 기반의 최근접 이웃 협업 필터링 방식을 추천 엔진으로 사용한다.
콘텐츠 기반 필터링 추천 시스템
콘텐츠 기반 필터링 방식은 사용자가 특정한 아이템을 매우 선호하는 경우, 그 아이템과 비슷한 콘텐츠를 가진 다른 아이템을 추천하는 방식이다.
예를 들어 사용자가 특정 영화에 높은 평정을 줬다면 그 영화의 장르, 출연 배우, 감독, 영화 키워드 등의 콘텐츠와 유사한 다른 영화를 추천해주는방식이다.
최근접 이웃 협업 필터링
새로운 영화를 추천받을때, 출연진 이나 영화 감독등을 보고 영화를 고르는 것 보다는 가장 친한 친구한테 물어보는 것이 더 나을 수 도 있다.
친구들에게 물어보는 것과 유사한 방식으로, 사용자가 아이템에 매긴 평점 정보나 상품 구매 이력과 같은 사용자 행동 약식만을 기반으로 추천을 수행하는 것이 협업 필터링 방식이다.
협업 필터링의 주요 목표는 사용자-아이템 평점 매트릭스와 같은 축적된 사용자 행동 데이터를 기반으로 사용자가 아직 평가하지 않은 아이템을 예측 평가 하는 것이다.
아래 그림에서 User 1 은 Item 4 에 대한 평점이 없다. 협업 필터링은 사용자가 평가한 다른아이템을 기반으로 사용자가 평가하지 않은 아이템의 예측평가를 도출 하는 방식이다.
협업 필터링 기반의 추천 시스템은 최근접 이웃 방식과 잠재 요인 방식으로 나뉘며, 두 방식 모두 사용자-아이템 평점 행렬 데이터에만 의지해 추천을 수행한다.
협업 필터링 알고리즘에 사용되는 사용자-아이템 평점 행렬에서 행(Row)은 개별 사용자, 열(Column)은 개별 아이템으로 구성되며, 사용자 아이디 행, 아이템 아이디 열 위치에 해당하는 값이 평점을 나타내는 형태가 돼야한다.
만약 데이터가 다음 그림의 왼쪽과 같이 레코드 레벨 혀태인 사용자-아이템 평점 데이터라면 판다스의 pivot_tabel() 과 같은 함수를 이용해 그림의 오른쪽과 같은 형태인 사용자-아이템 평점 행렬 형태로 변경 해야 한다.
일반적으로 이러한 사용자-아이템 평점 행렬은 많은 아이템을 열로 가지는 다차원 행렬이며, 사용자가 아이템에 대한 평점을 매기는 경우가 많지 않기 때문에 희소 행렬(Spares Matrix)특성을 가지고 있다.
최근접 이웃 협업 필터링은 메모리 협업 필터링이라고도 하며, 일반적으로 사용자 기반 아이템 기반으로 나뉠 수 있다.
- 사용자 기반 : 나와 비슷한 고객들이 다음 상품도 구매함.
- 아이템 기반 : 이 상품을 선택한 다른 고객 들은 다음 상품도 구매함
사용자 기반 최근접 이웃 방식은 특정 사용자와 유사한 다른 사용자를 TOP-N으로 선정해 이 TOP-N 사용자가 좋아하는 아이템을 추천하는 방식이다.
즉, 특정 사용자와 타 사용자 간의 유사도를 측정한 뒤 유사도가 높은 TOP-N 사용자를 추출해 그들이 선호하는 아이템을 추천하는 것이다.
다음 그림은 사용자별 영화 평점 정보를 나타낸다.
아이템 기반 최근접 이웃 방식은 그 명칭이 주는 이미지 때문에 ' 아이템 간의 속성' 이 얼마나 비슷한지를 기반으로 추천한다고 착각할 수 있다.
하지만 아이템 기반 최근접 이웃 방식은 아이템이 가지는 속성과는 상관없이 사용자들이 그 아이텡을
좋아하는지/ 싫어하는지의 평가 척도가 유사한 아이템을 추천하는 기준이 되는 알고리즘 이다.
다음 그림은 아이템 기반 최근접 이웃 방식의 기반 데이터 셋이다.
위의 사용자 기반 최근접 이웃 데이터 셋과 행과 열이 서로 반대이다.
해바라기와 신세계이 유사도가 높으므로 사용자 D 에게는 극한직업 보다 신세계를 추천하는 것이 아이템 기반 최근접 이웃 방식이다.
사용자들이 평점을 매긴 영화의 개수가 많지 않은 경우가 일반적이라 다른사람과 유사도 비교가 어렵다.
따라서 최근접 이웃 협업 필터링은 대부분 아이템 기반의 알고리즘이다.
추천 시스템에 사용되는 데이터는 피처 벡터화된 텍스트 데이터와 동일하게 다차원 희소 행렬이라는 특징이 있으므로 유사도 측정을 위해 주로 코사인 유사도를 이용한다.
잠재요인 협업 필터링
잠재 요인 협업 필터링은 사용자-아이템 평점 매트릭스 속에 숨어 있는 잠재 요인을 추출해 추천 예측을 할 수 있게 하는 기법이다. 대규모 다차원 행렬을 SVD와 같은 차원 축소 기법으로 분해하는 과정에서 잠재요인을 추출하는데, 이러한 기법을 행렬 분해라고 한다.
잠재 요인 협업 필터링은 사용자 – 아이템 평점 행렬 데이터만을 이용해 말 그대로 ‘잠재 요인’을 끄집어 내는 것을 의미한다. ‘잠재 요인’ 이 어떤 것인지는 명확히 정의할 수 없다.
하지만 이러한 ‘잠재 요인’을 기반으로 다차원 희소 행렬인 사용자-아이템 행렬 데이터를 저차원 밀집 행렬의 사용자-잠재 요인 행렬과 아이템-잠재 요인 행렬의 전치행렬 (즉, 잠재요인-아이템 행렬)로 분해할 수 있으며,
이렇게 분해된 두 행렬의 내적을 통해 새로운 예측 사용자-아이템 평점 행렬데이터를 만들어서 사용자가 아직 평점을 부여하지 않는 아이템에 대한 예측 평점을 생성하는 것이 잠재 요인 협력 필터링 알고리즘 핵심이다.
다음 그림은 이러한 행렬 분해 기법을 이용해 사용자-잠재 요인 행렬과 아이템—잠재 요인 행렬의 전치행렬(즉, 잠재 요인 –아이템 행렬)로 분해된 데이터 셋을
다시 내적 곱으로 결합하면서 사용자가 예측하지 않은 아이템에 대한 평점을 도출하는 방식을 개략적으로 나타낸 것이다.
행렬 분해에 의해 추출되는 ‘잠재 요인’이 정확히 어떤 것인지는 알 수 없지만 ,가령 영화 평점 기반의 사용자 – 아이템 평점 행렬 데이터라면 영화가 가지는 장르별 특성 선호도로 가정할 수 있다.
즉, 사용자-잠재 요인 행렬은 사용자의 영화 장르에 대한 선호도로, 아이템 – 잠재 요인 행렬은 영화의 장르별 특성값으로 정의할 수 있다.
평점이란 사용자의 특정 영화 장르에 대한 선호도와 개별 영화의 그 장르적 특성값을 반영해 결정된다고 생각할 수 있다.
예를 들어 사용자가 액션 영화를 매우 좋아하고, 특정 영화가 액션 영화의 특성이 매우 크다면 사용자가 해당 영화에 높은 평점을 줄 것이다.
따라서 평점은 사용자의 장르별 선호도 벡터와 영화의 장르별 특성 벡터를 서로 곱해서 만들 수 있다.
즉, User 1 의 Item 1의 평점인 R(1,1)의 4점은 P 매트릭스의 User 1 벡터와 Q.T 매트릭스의 Item 1 벡터를 곱한 값이다.
마찬가지 방법으로 아직 User 1이 평점을 매기지 못한 Item 2에 대해 예측 평점을 수행해 보자.
R(1, 2)는 행렬 분해된 P 매트릭스의 User1 벡터와 Q.T 매트릭스의 Item 2 벡터의 내적 결괏값인 2.56으로 예측 할 수 있다.
이처럼 잠재 요인 협업 필터링은 숨겨져 있는 ‘잠재 요인’ 을 기반으로 분해된 매트릭스를 이용해 사용자가 아직 평가하지 않은 아이템에 대한 예측 평가를 수행하는 것이다.
사용자-아이템 평점 행렬과 같이 다차원의 매트릭스를 저차원의 매트릭스로 분해하는 기법을 행렬 분해(Matrix Factorization) 라고 한다.
행렬 분해
행렬 분해는 다차원의 행렬을 저차원 행렬로 분해하는 기법으로서 대표적으로 SVD(Singular Vector Decomposition), NMF(Non-Negative Matrix Factorization) 등이 있다.
M개의 사용자(User)행과 N개의 아이템 열을 가진 평점 행렬 R은 M X N차원으로 구성되며, 행렬 분해를 통해서 사용자-K 차원 잠재 요인 행렬 P(P는 M X K차원) K 차원 잠재 요인- 아이템 행렬 Q.T(Q.T는 K X N 차원) 로 분해될 수있다. (Q는 아이템 – 잠재요인 행렬이며, Q.T는 Q의 전치 행렬인 잠재 요인 –아이템 행렬이다.)
즉 R = P*Q.T이며 각 기호에 대한 설명은 다음과 같다.
- M은 총사용자 수
- N은 총 아이템 수
- K는 잠재 요인의 차원 수
- R은 M X N 차원의 사용자 – 아이템 평점 행렬
- P는 사용자와 잠재요인과의 관계 값을 가지는 M X K 차원의 사용자 – 잠재 요인 행렬
- Q는 아이템과 잠재 요인간의 관계 값을 가지는 N X K 차원의 아이템 – 잠재 요인 행렬
- Q.T는 Q 매트릭스의 행과 열 값을 교환한 전치 행렬
예를 들어, 행렬 내에서 널(NaN) 값을 많이 가지는 고차원 희소 행렬인 R 행렬은 다음 그림과 같이 저 차원의 밀집 행렬인 P 행렬과 Q 행렬로 분해될 수 있다.
사용자-아이템 평점 행렬의 미정 값을 포함한 모든 평점 값은 행렬 분해를 통해 얻어진 P 행렬과 Q.T행렬의 내적을 통해 예측 평점으로 다시 계산할 수 있다.
행렬 분해는 주로 SVD방식을 이용한다. 하지만 SVD는 널 값이 없는 행렬에만 적용할 수 있다. R 행렬에는 아직 평점이 되지 않은 많은 널 값이 있기 때문에 P와 Q행렬을 일반적인 SVD 방식으로는 분해할 수 가 없다.
이러한 경우에는 확률적 경사 하강법이나 ALS(Alternating Least Squares) 방식을 이용해 SVD를 수행한다.
본문 내용은 파이썬 머신러닝 완벽 가이드 (권철민 저)을 요약정리한 내용입니다.
'머신러닝' 카테고리의 다른 글
컨텐츠 기반 필터링 실습 (0) | 2020.08.25 |
---|---|
경사하강법을 이용한 행렬 분해 (0) | 2020.08.24 |
DBSCAN (0) | 2020.08.24 |
GNM(Gaussian Mixture Model) (0) | 2020.08.24 |
평균이동(Mean Shift) (0) | 2020.08.24 |