[프로그래머스 인공지능 미니 데브코스] 수업 정리 -21- [Recommendation system: 추천 엔진1]

3yeong·2022년 9월 6일
0

추천 엔진이란?

사용자와 아이템

사용자 : 서비스를 사용하는 사람
아이템 : 서비스에서 판매하는 물품
-> 다른 사용자가 물품이 될 수 있음

보통 서비스가 성장하면 사용자/아이템의 수도 같이 성장함
특히 사용자의 성장도가 훨씬 커짐
하지만 아이템의 수가 커지면서 아이템 디스커버리 문제가 대두됨
모든 사용자가 검색(능동적)을 하지 않으며 사람들이 점점더 추천(수동적)을 원함

추천엔진 정의

트위터의 알파 제인의 정의
사용자가 관심있어 할 만한 아이템을 제공해주는 자동화된 시스템
keyword : 관심과 자동화
야후의 디팍 아그라왈의 정의
비지니스 장기적인 목표를 개선하기 위해 사용자에게 알맞은 아이템을 자동으로 보여주는 시스템
keyword : 장기적인 목표(매출액)와 자동화

왜 추천엔진이 필요한가?

  1. 조금의 노력으로 사용자가 관심있어 할만한 아이템을 찾아주는 방법
    이는 특히 아이템의 수가 굉장히 큰 경우 더 의미가 있음
    사람의 노가다로 해결불가 -> 자동화 필요!

결국은 개인화(Personalization)로 연결됨
또한 가끔씩 전혀 관심없을 듯한 아이템도 추천 가능(serendipity)

  1. 회사 과전에서는 추천 엔진을 기반으로 다양한 기능 추가 가능
    마케팅시 추천 엔진 사용(이메일 마케팅)
    관련 상품 추천으로 쉽게 확장 가능

  2. 아이템의 수가 많아서 원하는 것을 찾기 쉽지 않은 경우
    검색을 위한 수고를 덜어줌

  3. 추천을 통해 신상품등의 마케팅이 가능해짐
    새로 나온 아이템들은 노출 자체가 어려운데 추천을 통해 기회를 줄 수 있음

  4. 인기 아이템 뿐만 아니라 롱테일의 다양한 아이템의 노출이 가능해짐
    추천 방식에 따라 다르지만 개인화가 잘 되면 이게 가능해짐

추천은 결국 매칭 문제

  1. 사용자에게는 맞는 아이템을 매칭해주기
    아이템은 서비스에 따라 달라지며 아이템이 다른 사용자가 될 수도 있음
    친구 추천 혹은 데이트 상대 추천

  2. 어떤 아이템을 추천할 것인가?
    다양한 방법이 존재함
    -> 지금 뜨는 아이템 추천 (개인화가 되어있지 않은 추천)
    -> 사용자가 마지막에 클릭했던 아이템들을 다시 추천
    -> 사용자가 구매했던 아이템들을 구매한 다른 사용자들이 구매한 아이템 추천
    협업 필터링(Collavrative Filtering)이라 부름

추천 UI도 중요
보통 추천 유닛들이 존재하며 이를 어떤 순서로 노출하느냐가 중요

  1. 사용자와 아이템에 대한 부가 정보들이 필요해짐

  2. 아이템 부가 정보
    먼저 분류 체계를 만드는 것이 필요
    태그 형태로 부가정보를 유지하는 것도 아주 좋음

  3. 사용자 프로파일 정보
    개인 정보 : 성별, 연령대
    아이템정보:
    관심 카테로기와 서브 카테고리(분류체계 기반), 태그
    클릭 혹은 구매 아이템

  4. 무엇을 기준으로 추천할것인가?
    클릭? 매출? 소비? 평점?

추천 엔진 예

아마존 관련 상품 추천
넷플릭스 영화/드라마 추천
구글 검색어 자동완성
링크드인 혹은 페이스북 친구추천
스포티파이 혹은 판도라 노래/플레이리스트 추천
헬스케어 도메인의 위험 점수 계산
유데미 강좌 추천

공통점

  1. 격자 형태 UI를 사용
    넷플릭스가 선구자

  2. 다양한 종류의 추천 유닛들이 존재
    일부 유닛은 개인화
    사람에 따라 다른 아이템 추천

일부 유닛은 인기도 등의 비개인화 정보 기반
모든 이에게 동일함 아이템 추천

추천 유닛의 랭킹이 중요해짐
이부분도 모델링을 하여 개인화하는 추세
클릭을 최적화하고 이 데이터 수집을 위한 실험을 함
순전히 데이터 수집을 위한 온라인 테스트

추천엔진의 종류

어떤 방식의 추천 엔진들이 존재하는가?

다양한 방식의 추천 알고리즘이 존재

  1. 컨텐츠 기반 (아이템 기반)
    개인화된 추천이 아니며 비슷한 아이템을 기반으로 추천이 이뤄짐
    텍스트 처리가 필요하기도 함(NLP)

  2. 협업 필터링(Collaborative Filtering) : 평점 기준
    기본적으로 다른 사용자들의 정보를 이용하여 내 취향을 예측하는 방식
    크게 사용자가 기반과 아이템 기반 두 종류가 존재
    결국 행렬 계산 (계산이 한 번에 가능)

사용자 기반 (user)
나와 비슷한 평점 패턴을 조이는 사람들을 찾아서 그 사람들이 높게 평가한 아이템 추천

아이템 기반(item)
평점의 패턴이 비슷한 아이템들을 찾아서 그걸 추천하는 방식

  1. 사용자 행동 기반
    아이템 클릭 혹은 구매 혹은 소비 등의 정보를 기반으로 한 추천
    이 경우 사용자와 아이템에 대한 부가 정보가 반드시 필요
    여기에 속하는 추천은 구현이 간단하지만 아주 유용함

모델링을 통해 사용자와 아이템 페어에 대한 클릭 확률 등의 점수 계산이 가능(계산의 양증가)
의사 결정 트리나 딥러닝등이 사용가능
유데미에서 사용했던 방식

  1. 이외에도 다수의 알고리즘 존재
  2. 많은 경우 위의 알고리즘들을 하이브리드 형태로 사용
    유데미에서도 앞서의 다양한 방식들을 조합하여 사용

컨텐츠 기반 추천

  1. 아이템 간의 유사도를 측정하여 추천
    책이라면 타이틀, 저자, 책 요약, 장르 등의 정보를 사용
    많은 경우 NLP 테크닉을 사용해 텍스트 정보를 벡터 정보로 변환
    단어 카운트, TF-IDF 카운트 등등, 임베딩도 사용 가능

  2. 개인화된 추천이 아님
    모든 이에게 동일하나 아이템을 추천

  3. 구현이 상대적으로 간단함
    보통 아이템의 수가 사용자의 수가 작음

협업 필터링(Collaborative Filtering) 기반

  1. 사용자 기반 협업 필터링
    나와 비슷한 평점 패턴을 보이는 사람들을 찾아서 그 사람들이 높게 평가한 아이템 추천
    나와 비슷한 사용자를 어떻게 찾을지가 중요
    사용자 프로파일 정보 구축
    프로파일 정보간의 유사도 계산(KNN 알고리즘을 사용하기도 함)

  2. 아이템 기반 협업 필터링
    2001년에 아마존에서 논문으로 발표
    아이템들간의 유사도를 비교하는 것으로 시작
    사용자 기반 협업 필터링과 비교해 더 안정적이며 좋은 서능을 보임
    아이템의 수가 보통 작기에 사용에 비해 평점의 수가 평균적으로 더 많고 계산량이 작음

유사도 측정 방법

두 개의 비교대상을 N차원 좌표로 표현: 사용자와 사용자 혹은 아이템과 아이템
보통 코사인 유사도 혹승 피어슨 상관계수 유사도

협업 필터링 문제점

  1. Cold Start 문제
    사용자 : 아직 평점을 준 아이템이 없는 경우
    아이템 : 아직 평점을 준 사용자가 없는 경우
    보통 컨텐츠 기반 혹은 사용자 행동 기반 추천과 병행하여 이 문제를 해결(다른 특징 사용, 클릭, 색상, 모양)

  2. 리뷰 정보의 부족 (sparsity)
    리뷰를 했다는 자체도 사실은 관심?

  3. 업데이트 시점
    사용자나 아이템이 추가될 때마다 다시 계산을 해주어야함

  4. 확장성 이슈
    사용자와 아이템의 수가 늘어나면서 행렬 계산이 오래 걸리게 됨(행렬이 커짐)

Spark과 같은 인프라가 이런 이유로 인해 필요함

협업 필터링의 많은 문제들이 일반적인 문제이기도 함.

협업 필터링 구현방법

  1. 메모리 기반
    사용자 기반과 아이템 기반
    사용자간 혹은 아이템간 유사도를 미리 계산
    추천요청이 오면 유사한 사용자 혹은 아이템을 K개 뽑아서 이를 바탕으로 아이템 추천
    구현과 이해가 상대적으로 쉽지만 스케일하지 않음(평점 데이터의 부족)

  2. 모델기반
    넷플릭스 프라이즈 컨테스트 때 고안 된 추천 방식
    사용자 아이템 행렬에서 비어있는 평점들을 SGD를 사용해서 채우는 방식
    보통 SVD(Singular Vector Decomposition)을 사용해서 구현됨
    요즘은 딥러닝의 오토인코더를 사용하기도 함
    평점을 포함한 다른 사용자 행동을 예측하는 방식으로 진화하고 있기도 함

사용자 행동 기반

  1. 사용자의 행동을 보고 그에 맞춰 아이템을 추천
    주로 암시적 정보(클릭, 구매, 소비)기반으로 예측

  2. 크게 두 종류가 존재
    사용자 행동 기반 간단한 추천 유닛 구성
    사용자가 관심 보인 특정 카테고리의 새로운 아이템
    사용자가 관심 보인 특정 카테고리의 인기 아이템 기반

사용자 행동을 예측하는 추천(클릭 혹은 구매)
여기서부터 지도학습 문제로 접근 가능
무엇을 학습/ 예측하는 모델인지 먼저 생각

지도학습의 추천 엔진

  1. 어떤 기준으로 추천하느냐가 가장 중요
    결국 머신러닝의 레이블 정보!

  2. 크게 두 종류 힌트 사용
    명시적인 힌트 : 리뷰점수(rating)혹은 좋아요(Like)

암시적인 힌트: 클릭, 구매, 소비
클릭보다는 구매가 더 좋은 힌트이고 소비 여부도 좋은 힌트
클릭은 노이즈가 있지만 장점은 관심 없는 아이템들의 파악이 쉽다는 장점 존재
자세한 사용자 행동 정보의 수집, 저장과 가공이 먼저 필요

추천이란 사용자가 관심있어 할 만한 아이템으로 적극적으로 제시하는 것
가장 대표적인 추천 알고리즘은 컨텐츠 기반과 협업 필터링
추천 UI와 추천 유닛 랭킹도 아주 중요

profile
초보 컴공

0개의 댓글