사용자 : 서비스를 사용하는 사람
아이템 : 서비스에서 판매하는 물품
-> 다른 사용자가 물품이 될 수 있음
보통 서비스가 성장하면 사용자/아이템의 수도 같이 성장함
특히 사용자의 성장도가 훨씬 커짐
하지만 아이템의 수가 커지면서 아이템 디스커버리 문제가 대두됨
모든 사용자가 검색(능동적)을 하지 않으며 사람들이 점점더 추천(수동적)을 원함
트위터의 알파 제인의 정의
사용자가 관심있어 할 만한 아이템을 제공해주는 자동화된 시스템
keyword : 관심과 자동화
야후의 디팍 아그라왈의 정의
비지니스 장기적인 목표를 개선하기 위해 사용자에게 알맞은 아이템을 자동으로 보여주는 시스템
keyword : 장기적인 목표(매출액)와 자동화
결국은 개인화(Personalization)로 연결됨
또한 가끔씩 전혀 관심없을 듯한 아이템도 추천 가능(serendipity)
회사 과전에서는 추천 엔진을 기반으로 다양한 기능 추가 가능
마케팅시 추천 엔진 사용(이메일 마케팅)
관련 상품 추천으로 쉽게 확장 가능
아이템의 수가 많아서 원하는 것을 찾기 쉽지 않은 경우
검색을 위한 수고를 덜어줌
추천을 통해 신상품등의 마케팅이 가능해짐
새로 나온 아이템들은 노출 자체가 어려운데 추천을 통해 기회를 줄 수 있음
인기 아이템 뿐만 아니라 롱테일의 다양한 아이템의 노출이 가능해짐
추천 방식에 따라 다르지만 개인화가 잘 되면 이게 가능해짐
사용자에게는 맞는 아이템을 매칭해주기
아이템은 서비스에 따라 달라지며 아이템이 다른 사용자가 될 수도 있음
친구 추천 혹은 데이트 상대 추천
어떤 아이템을 추천할 것인가?
다양한 방법이 존재함
-> 지금 뜨는 아이템 추천 (개인화가 되어있지 않은 추천)
-> 사용자가 마지막에 클릭했던 아이템들을 다시 추천
-> 사용자가 구매했던 아이템들을 구매한 다른 사용자들이 구매한 아이템 추천
협업 필터링(Collavrative Filtering)이라 부름
추천 UI도 중요
보통 추천 유닛들이 존재하며 이를 어떤 순서로 노출하느냐가 중요
사용자와 아이템에 대한 부가 정보들이 필요해짐
아이템 부가 정보
먼저 분류 체계를 만드는 것이 필요
태그 형태로 부가정보를 유지하는 것도 아주 좋음
사용자 프로파일 정보
개인 정보 : 성별, 연령대
아이템정보:
관심 카테로기와 서브 카테고리(분류체계 기반), 태그
클릭 혹은 구매 아이템
무엇을 기준으로 추천할것인가?
클릭? 매출? 소비? 평점?
아마존 관련 상품 추천
넷플릭스 영화/드라마 추천
구글 검색어 자동완성
링크드인 혹은 페이스북 친구추천
스포티파이 혹은 판도라 노래/플레이리스트 추천
헬스케어 도메인의 위험 점수 계산
유데미 강좌 추천
격자 형태 UI를 사용
넷플릭스가 선구자
다양한 종류의 추천 유닛들이 존재
일부 유닛은 개인화
사람에 따라 다른 아이템 추천
일부 유닛은 인기도 등의 비개인화 정보 기반
모든 이에게 동일함 아이템 추천
추천 유닛의 랭킹이 중요해짐
이부분도 모델링을 하여 개인화하는 추세
클릭을 최적화하고 이 데이터 수집을 위한 실험을 함
순전히 데이터 수집을 위한 온라인 테스트
어떤 방식의 추천 엔진들이 존재하는가?
컨텐츠 기반 (아이템 기반)
개인화된 추천이 아니며 비슷한 아이템을 기반으로 추천이 이뤄짐
텍스트 처리가 필요하기도 함(NLP)
협업 필터링(Collaborative Filtering) : 평점 기준
기본적으로 다른 사용자들의 정보를 이용하여 내 취향을 예측하는 방식
크게 사용자가 기반과 아이템 기반 두 종류가 존재
결국 행렬 계산 (계산이 한 번에 가능)
사용자 기반 (user)
나와 비슷한 평점 패턴을 조이는 사람들을 찾아서 그 사람들이 높게 평가한 아이템 추천
아이템 기반(item)
평점의 패턴이 비슷한 아이템들을 찾아서 그걸 추천하는 방식
모델링을 통해 사용자와 아이템 페어에 대한 클릭 확률 등의 점수 계산이 가능(계산의 양증가)
의사 결정 트리나 딥러닝등이 사용가능
유데미에서 사용했던 방식
아이템 간의 유사도를 측정하여 추천
책이라면 타이틀, 저자, 책 요약, 장르 등의 정보를 사용
많은 경우 NLP 테크닉을 사용해 텍스트 정보를 벡터 정보로 변환
단어 카운트, TF-IDF 카운트 등등, 임베딩도 사용 가능
개인화된 추천이 아님
모든 이에게 동일하나 아이템을 추천
구현이 상대적으로 간단함
보통 아이템의 수가 사용자의 수가 작음
사용자 기반 협업 필터링
나와 비슷한 평점 패턴을 보이는 사람들을 찾아서 그 사람들이 높게 평가한 아이템 추천
나와 비슷한 사용자를 어떻게 찾을지가 중요
사용자 프로파일 정보 구축
프로파일 정보간의 유사도 계산(KNN 알고리즘을 사용하기도 함)
아이템 기반 협업 필터링
2001년에 아마존에서 논문으로 발표
아이템들간의 유사도를 비교하는 것으로 시작
사용자 기반 협업 필터링과 비교해 더 안정적이며 좋은 서능을 보임
아이템의 수가 보통 작기에 사용에 비해 평점의 수가 평균적으로 더 많고 계산량이 작음
두 개의 비교대상을 N차원 좌표로 표현: 사용자와 사용자 혹은 아이템과 아이템
보통 코사인 유사도 혹승 피어슨 상관계수 유사도
Cold Start 문제
사용자 : 아직 평점을 준 아이템이 없는 경우
아이템 : 아직 평점을 준 사용자가 없는 경우
보통 컨텐츠 기반 혹은 사용자 행동 기반 추천과 병행하여 이 문제를 해결(다른 특징 사용, 클릭, 색상, 모양)
리뷰 정보의 부족 (sparsity)
리뷰를 했다는 자체도 사실은 관심?
업데이트 시점
사용자나 아이템이 추가될 때마다 다시 계산을 해주어야함
확장성 이슈
사용자와 아이템의 수가 늘어나면서 행렬 계산이 오래 걸리게 됨(행렬이 커짐)
Spark과 같은 인프라가 이런 이유로 인해 필요함
협업 필터링의 많은 문제들이 일반적인 문제이기도 함.
메모리 기반
사용자 기반과 아이템 기반
사용자간 혹은 아이템간 유사도를 미리 계산
추천요청이 오면 유사한 사용자 혹은 아이템을 K개 뽑아서 이를 바탕으로 아이템 추천
구현과 이해가 상대적으로 쉽지만 스케일하지 않음(평점 데이터의 부족)
모델기반
넷플릭스 프라이즈 컨테스트 때 고안 된 추천 방식
사용자 아이템 행렬에서 비어있는 평점들을 SGD를 사용해서 채우는 방식
보통 SVD(Singular Vector Decomposition)을 사용해서 구현됨
요즘은 딥러닝의 오토인코더를 사용하기도 함
평점을 포함한 다른 사용자 행동을 예측하는 방식으로 진화하고 있기도 함
사용자의 행동을 보고 그에 맞춰 아이템을 추천
주로 암시적 정보(클릭, 구매, 소비)기반으로 예측
크게 두 종류가 존재
사용자 행동 기반 간단한 추천 유닛 구성
사용자가 관심 보인 특정 카테고리의 새로운 아이템
사용자가 관심 보인 특정 카테고리의 인기 아이템 기반
사용자 행동을 예측하는 추천(클릭 혹은 구매)
여기서부터 지도학습 문제로 접근 가능
무엇을 학습/ 예측하는 모델인지 먼저 생각
어떤 기준으로 추천하느냐가 가장 중요
결국 머신러닝의 레이블 정보!
크게 두 종류 힌트 사용
명시적인 힌트 : 리뷰점수(rating)혹은 좋아요(Like)
암시적인 힌트: 클릭, 구매, 소비
클릭보다는 구매가 더 좋은 힌트이고 소비 여부도 좋은 힌트
클릭은 노이즈가 있지만 장점은 관심 없는 아이템들의 파악이 쉽다는 장점 존재
자세한 사용자 행동 정보의 수집, 저장과 가공이 먼저 필요
추천이란 사용자가 관심있어 할 만한 아이템으로 적극적으로 제시하는 것
가장 대표적인 추천 알고리즘은 컨텐츠 기반과 협업 필터링
추천 UI와 추천 유닛 랭킹도 아주 중요