Introduction


여러분은 넷플릭스와 유튜브가 무엇으로 유명한지 아시나요?

맞아요. 추천 시스템이에요! (아니면 어쩔 수 없구 ..) 추천 시스템이란 유저가 관심을 가질 것 같은 아이템 (ex. 영화, 옷, 음식 등) 을 유저에게 추천해주는 시스템을 말합니다.

사실 추천 시스템이 여러 방면에서 많이 쓰이다 보니 언급한 회사 뿐만 아니라 다른 회사들도 추천 시스템 기술을 이미 보유하고 있거나 도입하려고 하는 것 같아요.

그렇다면 추천 시스템은 우리가 좋아할만한 것들을 대체 어떻게 알고 추천해주는 걸까요? 이를 위해 관련 지식들을 짚어보고, 추천에서 가장 기본적인 알고리즘들을 간단하게 소개하고 마칠까 해요!

Explicit / Implicit Feedback Data


사실 이 피드백 데이터들은 제가 아래에서 소개할 알고리즘들에서 언급되는 것은 아니지만, 추천 시스템을 좀 더 공부하다보면 알아야 하는 사전 지식 (?) 같은 것들이에요.

여기서는 간단하게 언급하고 넘어가보도록 할게요!

1. Explicit Feedback

이 데이터의 예시들은 영화 평점, 영화 리뷰 등이 있어요.

이름 그대로 (Explicit) 유저가 이 영화를 얼마나 좋아하고 싫어하는지에 대한 선호도를 명확하게 알 수 있어요. 그렇기 때문에 굉장히 유용하게 사용할 수 있죠.

하지만 단점도 존재 한답니다. 수십, 수백 만개의 영화를 모든 유저가 모두 보고 평점을 매기기에는 현실적으로 불가능해요. 또한, 영화를 봤더라도 적극적인 행동 (평점 매기기, 리뷰 달기) 을 취하는 유저가 별로 없기도 하죠. 그래서 데이터를 얻기가 힘들 뿐더러 데이터 양도 많지 않아요. 이를 희소 (Sparse) 하다고 표현합니다.

2. Implicit Feedback

이 데이터의 예시들은 클릭유무, 검색 기록, 방문 페이지, 구매 내역 등이 있어요.

일단 유저가 행동하는대로 데이터가 생성되고 자동으로 수집되기 때문에, 수집 난이도가 낮고 데이터양이 정말 방대해요.

하지만, 이또한 단점이 있습니다. 어떤 영화를 봤다라는 것만 봤을 때는 이 유저가 영화를 정말 보고 싶어서 본건지, 과제 때문에 어쩔 수 없이 봤는지 등의 여러 이유가 있을 수 있기 때문에 확실한 판단을 내릴 수가 없어요.

기본 추천 알고리즘


1. CBF (Content-Based Filtering)

쉽게 예시를 들어볼게요!

여러분이 유튜브에서 영상을 시청하면, 방금 본 영상이랑 비슷한 영상을 추천해주잖아요? 바로 그거에요! 물론, 실제로 유튜브에서는 이 알고리즘이 아닌 좀 더 복잡하고 정교한 알고리즘을 사용하고 있지만요.

또 다른 구체적인 예시를 생각해보죠. 여러분이 “캡틴 아메리카: 시빌 워” 라는 영화를 봤다고 해볼게요.

이 영화의 특징은 많이 있겠지만 그 중 세 개 정도를 뽑아볼게요.

  1. 크리스 에반스 배우 출연
  2. 마블 영화
  3. 판타지 영화

그러면, 위 특징들을 바탕으로 이와 유사한 또 다른 영화들을 추천해줄 수 있겠죠?

  1. 설국 열차 (크리스 에반스)
  2. 어벤져스: 인피니티 워 (마블)
  3. 해리포터: 죽음의 성물 I (판타지)

이처럼 아이템 특징을 바탕으로 유사한 아이템을 추천해주는 알고리즘이 CBF 인거죠. 간단하고 직관적이죠?

하지만, 이 알고리즘은 다양성이 부족하다는 문제가 있어요. 위에 언급한 영화 말고 공포영화 또는 로맨스 영화가 보고 싶을 수도 있잖아요? 하지만 영화들마다 가지고 있는 특징이 있고, 그 특징이 기반이 되기 때문에 기존에 봤던 영화들과 유사한 영화들 밖에 추천을 못 해주는 거죠 ..

2. CF (Collaborative Filtering)

협업 필터링으로도 불리는 CF는, 간단히 얘기하면 취향이 비슷한 사람들을 바탕으로 추천해주는 알고리즘이에요.

이 알고리즘도 예시를 들어서 설명해 볼게요.

A라는 사람이 아래와 같은 영화들을 시청했다고 해보죠.

  1. 셔터 아일랜드
  2. 브이 포 벤데타
  3. 범죄와의 전쟁: 나쁜놈들 전성시대

다음으로 B라는 사람은 아래와 같은 영화들을 시청했다고 해볼게요.

  1. 인셉션
  2. 셔터 아일랜드
  3. 태극기 휘날리며
  4. 브이 포 벤데타
  5. 다크나이트

그러면 A와 B가 시청한 영화 데이터를 바탕으로 A라는 사람에게 어떤 영화를 추천해주는 것이 좋을까요?

B는 시청했지만, A가 아직 시청하지 않은 “태극기 휘날리며”, “인셉션” 등의 영화를 추천해주면 좋겠죠?

비슷한 취향을 가진 유저들의 데이터를 바탕으로 추천을 해주는 것이 이름 그대로 마치 협업을 하는 것 같지 않나요? (그렇다고 하죠)

이 알고리즘은 CBF와 달리 다양한 아이템을 추천해줄 수 있어요. 왜냐하면 아이템 특징을 고려하지 않고, 비슷한 취향을 가진 사람들을 바탕으로 추천 해주기 때문에 위 예시처럼 유저가 SF, 액션, 스릴러 등 다양한 영화들을 시청했을 경우, 이를 바탕으로 다양하게 영화들을 추천해줄 수 있는 거죠.

그리고 데이터를 기반으로 추천해주기 때문에 유저가 좋아할 만한 것들을 추천해줄 것이다라는 신뢰성이 있는 거죠.

하지만, 이 알고리즘 또한 문제점이 있어요.

위에서 언급한 데이터를 기반으로 추천해준다는 부분이 문제로 작용하는 거죠. 콜드 스타트 (Cold Start) 라고 부르는 문제를 간단하게 설명해볼게요.

만약 C라는 사람이 신규 회원으로 가입을 했어요. 하지만 C는 새로 들어 왔기 때문에 이전에 시청한 영화 데이터가 아무것도 없겠죠? 그러면 어떤 유저와 취향이 비슷한지 알 수 없어 영화를 추천해줄 수 없는 거죠.

CF의 대표적인 기술로는 Matrix Factorization이라는 기법이 있어요. 만약 추천 시스템에 관심이 있으시다면 들어보신 적이 있을거에요! 여기서 설명하기에는 벗어나기 때문에, 링크에 들어가시면 설명이 잘 나와있습니다!

3. Hybrid Recommender System

이 알고리즘은 위 CBF와 CF의 단점을 보완하고 장점을 합쳐 만든 추천 시스템이에요. 명칭에 있는 하이브리드 (Hybrid) 라는 단어가 딱 어울리죠?

위 두 알고리즘의 장점과 단점을 간단하게 다시 얘기해보면,

CBF
  • 장점 : 데이터가 충분히 존재하기 때문에 “콜드 스타트” 문제가 없어요.
  • 단점 : 다양한 추천을 해주지 못하죠.
CF
  • 장점 : 다양한 추천을 해줄 수 있으며, 신뢰도가 높아요.
  • 단점 : 데이터에 의존하기 때문에 새로 유입되는 유저의 경우에 “콜드 스타트” 문제가 발생합니다.

CBF와 CF는 서로의 단점을 커버할 수 있기 때문에 이 둘을 잘 합쳐 사용하는 경우가 많다고 해요.

정리


추천 시스템은 현재까지도 활발하게 연구 및 개발 되고 있는 주제입니다. 사실 여기서 설명한 것들은 추천 시스템의 정말 기본적인 것들이며, 이외에도 상당히 깊고 어려운 내용들이 많아요.

현재는 추천 분야 또한 딥러닝을 활용하는 트렌드이기 때문에 추천 알고리즘을 공부하고 싶으시다면 딥러닝 기초를 같이 공부하시면 좋을 것 같아요.

제 이야기는 여기까지입니다. 조금이라도 기본적인 추천에 대해 ‘아, 이런거구나!’ 라고 이해가 되셨다면 저는 만족합니다!

SubAkBa's profile image

SubAkBa

2020-02-24

Read more posts by this author