글쟁이, 코딩한다

이상형 월드컵 기반 영화 추천 프로젝트 (1) 추천, 어떻게? 본문

나는 코딩도 한다/멋쟁이사자처럼 K 디지털

이상형 월드컵 기반 영화 추천 프로젝트 (1) 추천, 어떻게?

Algori 2021. 3. 29. 17:18

 

 

0.

 

이상형 월드컵 기반 영화 추천 프로젝트 '무비판'은 멋쟁이사자처럼 K 디지털 AI 인재양성과정의 마지막 프로젝트였다.

 

프로젝트 주제 선정부터 데이터 확보, 전처리, ML/DL 기반 추천 시스템 개발과 웹 구현까지 긴 호흡으로 이어졌다.

내가 겪어온 과정을 순서대로 정리해본다.

 

1. 우선, 추천.

 

 

나는 영화를 많이 본다. 주로 넷플릭스와 왓챠플레이를 쓴다. 운동하거나 이동할 때는 음악을 듣는다. 이럴 때는 얼마전 한국 시장에 들어온 스포티파이에서 음원을 듣는다. 남는 시간에는 유튜브를 본다. 보통 '맞춤 동영상'을 벗어나지 않는다. 때로는 웹툰도 본다. 네이버,다음웹툰을 주로 간다. 

 

유튜브와 넷플릭스, 스포티파이와 아마존, 네이버 쇼핑과 웹툰... 공통점이 있다. 추천이다. 상품 구매와 콘텐츠 등 대중을 상대로 한 장사에서 '추천'은 곧 성공으로 이어졌다. 콘텐츠는 너무나 많다. 말 그대로 쏟아진다. 반면 시간은 한정적이다. 뭘 볼까? 만지작 만지작. 새로 나온 콘텐츠만 이리저리 휘휘 둘러보다 나오기 일쑤다. 추천이 없었다면 아마 안 볼 거다.

 

취향은 이제 더는 개인의 영역이 아니다. 취향 역시 기업과 자본이 결정한다. 그리고 이 취향을 쥐락펴락하는 것, 그것이 추천.

 

과한 버전이지만, 아무튼 추천 시스템을 제대로 활용한다면 기업들이 큰 이득을 볼테다. 유튜브 최고 상품 담당자 닐 모한은 한 인터뷰에서 “유튜브 시청시간 70%가 추천 알고리즘에 의한 결과며, 알고리즘 도입으로 총 비디오 시청시간이 20배 이상 증가했다”고 했다. 단적인 예다.

 

 

그럼 이 추천 어디서, 어떻게 하나.

 

추천시스템은 우선 크게 두 가지로 나뉘는듯 하다. 콘텐츠 기반 필터링, 협업 필터링.

 

2. 추천시스템 (1) 콘텐츠 기반 필터링 Contents-Based Filtering

 

콘텐츠 기반 필터링부터 보자. 간단한 아이디어 같다. 영화의 예를 들자.

 

누군가 토이스토리(ToyStory)를 좋아한다면 토이스토리와 비슷한 영화, 여기서는 업(Up), 업을 추천하면 되는 거다.
토이스토리와 업은 공통점이 있다. 일단 애니메이션이고, 픽사-디즈니에서 만든 미국 영화고, 아동용인듯 하지만 어른들에게도 감동을 줍니다. 평단과 대중의 호평을 모두 얻었다.
이처럼 콘텐츠 기반 필터링은 이름처럼 콘텐츠, 즉 상품 자체에 집중한다. 즉 영화의 장르, 배급, 국가, 박스오피스 등 특성을 통해 비슷함을 확인하고 추천을 진행하는 거다. 

 

핵심은 토이스토리와 업 사이 화살표


쉽지만 강력하다. 

 

장점 (1) 여러 사용자를 대상으로 쉽게 확장할 수 있고 (2) 추천할 수 있는 상품의 가짓 수가 넓다. (3) 특성이 비슷하다면 이용자의 관심사 밖에 떨어진 영화도 추천하기 좋다. (4) 추천의 이유를 설명하기도 쉽다. (5)무엇보다 새로운 아이템이 들어왔을 때 곧바로 이를 고객에게 추천하기 용이하다.

 

반면 단점도 명확하다.

(1) 콘텐츠의 특징을 뽑아낼 높은 수준의 기본 지식, 즉 도메인 지식이 필요하다. (2) 기존 관심사항을 기반으로만 추천하기에 이용자에게 매번 똑같은 것만 추천하기도 한다. (3) 가장 큰 단점 : 이용자가 자기 취향을 잘 안 알려준다는데 있다.

귀찮기도 하고 거부감도 있고 혹은 개인 정보를 알리는 것 자체에 큰 불안을 느낄 수도 있다. 나만해도 왓챠에 별점 정보를 남기기까지 시간이 꽤나 걸렸다. 주변 친구들이 "야 그거 해야 개꿀이야. 그래야 더 정확함" 하고 나서야 별점을 달기 시작했다. (요즘도 대부분은 잊고 그냥 넘어간다)

 

여러 블로그, 기사, 논문 등을 읽으며 개인적으로 간단히 취합한 장단점이다. 생각해보자면, 어려운 조건을 갖춰낸다면 나름 더 명확한 추천을 해줄 수 있는 녀석이다. 난이도가 높은 조건은 결국, '데이터'.

 

 

3. 추천시스템 (2) 협업 필터링 Collaborative Filtering

 

협업 필터링도 살펴본다. 

 

이 방식은 사용자의 '행동 양식'을 활용한다. 대규모 사용자들이 쌓아올린 행동 정보를 분석해 이를 기반으로 추천하는 거다.
이를테면 여기 위의 그룹은 토이스토리를 보고 업을 추천 받았고 결국 둘 다 만족했다. 이제 다른 사용자 그룹이 왔고, 이 사람들은 토이스토리를 재밌게 봤다. 그럼 이들은 저 위 그룹처럼 업 역시 재밌게 볼 확률이 높다.

협업필터링은 이러한 사용자-아이템 행렬 데이터에 기초에 생각하는 듯하다. 별점 표 사이 빈 칸을 채우는 것이 주요 목적이고.

 

이번에는 화살표가 이용자와 이용자 사이에 있다.

협업 필터링은 여기에서 또 두 갈래로 갈라진다. 최근접 이웃 기반 협업 필터링(nearest neighbor based collaborative filtering) 과 잠재 요인 협업 필터링(latent factor based collaborative filtering).

 

 

3 -1 최근접 이웃 기반 협업 필터링(nearest neighbor based collaborative filtering)

 

우선, 비슷한 데이터 분포를 가진 다른 사례들을 통해 추천하는 방식을 최근접 이웃 기반 협업 필터링이라고 한다. 

 

이는 다시 선호도가 비슷한 고객들이 본 영화를 추천하는 사용자 기반 협업 필터링(User based collaborative filtering)과 이 영화를 본 고객들이 높은 평점을 준 영화를 추천하는 아이템 기반 협업 필터링(Item based collaborative filtering)으로 나뉜다. 

 

내가 이해한대로 말을 좀 풀자면, 나와 좋아하는 영화 목록이 비슷한 사람들을 찾아서, 그들이 좋아한 영화 가운데 내가 안 본 영화를 추천해주는 방법. 이것이 (1) 사용자 기반 협업 필터링.

 

반면 내가 좋아한 영화와 비슷한 별점 구조를 가진 영화, 즉 이 영화를 본 사람들이 높은 별점을 준 또 다른 영화를 추천해주는 방법. 이것이 (2) 아이템 기반 협업 필터링.

 

최근에는 두 가지 방법 가운데 아이템 기반 협업 필터링이 더 선호된다고 한다. 비슷한 상품을 좋아한다고 모두 취향이 같지는 않으니까 말이다.

 

3-2 잠재 요인 협업 필터링(latent factor based collaborative filtering)


잠재 요인 협업 필터링은 여기서 한 단계 더 나아간 방법이라고 한다. 2009년 넷플릭스 데이터 대회에서 우승하고 각광받은 상품이라고 유명하다.

 

행렬 분해를 통해 사용자-아이템 행렬 사이에 숨어있는 잠재요인을 찾아내고 이를 기반으로 추천하는 방법이다. 여기서 잠재요인은 무어라 명확히 확정지을 수는 없고 행렬분해를 하는 과정에서 알아서 분리된다고 한다. 자세한 것은 여기 블로그 를 비롯해 다른 블로그들을 참고했다. 데이터 자체에 숨어 있는 잠재 요인을 활용하는 만큼 정확도가 우수하다고 쓰여 있다. 

 

협업 필터링의 종류들

 

음, 쌓아둔 이용자 데이터가 있다면 꽤나 좋아 보인다. 

 

장점을 보자 (1) 이용자가 자기 취향을 밝히지 않아도 높은 수준의 정확한 추천을 진행한다. (2) 뛰어난 도메인 지식, 상품 분류 등 세부 데이터가 없어도 추천이 가능하다. (3) 집단의 힘. 결국 다른 이들이 좋아하는 것들을 추천해주는 것인 만큼, 실패할 가능성도 낮아 보인다.

 

단점은 어떨까. 크게 세가지가 거론된다.

(1) Cold Start 새 콘텐츠는 정보가 쌓일 때까지 추천을 잘 못 하는 문제 (2) 다양한 연산이 얽혀 있어 추천에 다소 오랜 시간이 들어가는 문제 (3) Long Tail 사람들이 좋아하는 콘텐츠만 추천하고 인기 없는 콘텐츠는 추천에서 밀려나는 문제

 

 

4. 그래서, 어떻게 추천할까?

 

아주아주 간단한 공부를 마치고 나니 알고리즘과 코드를 구성하기 전에 앞서 할 일이 있었다. 어떤 데이터를, 어떻게 활용해, 어떤 형식으로 추천할까.

 

기본적으로 이번 프로젝트는 추천 알고리즘들을 다양하게 활용해 추천하는 것에 집중하고는 방향성을 가진다.


하지만 무엇보다 추천에 있어 중요한 것은 결국, 데이터, 이용자의 취향 데이터라는 것을 깨달았습니다. 

 

이용자가 직접 선호도를 표현한 데이터는 Explicit Data라고 한다. 리뷰, 별점, 구독, 차단 등이 있다. 

반면 간접적인 선호, 취향을 나타내는 데이터는 Implicit Data라고 한다. 검색 기록, 방문 페이지, 마우스 움직임 등이 있다.

나는 이 Explicit Data를 최대한 끌어낼 방법을 찾아 헤맸다. 올바른, 폭넓은, 정확한 데이터. 다시 말해 양질의 데이터가 양질의 추천을 뒷받침할 것으로 보였다.

 

그렇기에 나온 핵심 시스템, '이상형 월드컵'이다. 

 

PIKU 이상형 월드컵 사이트 레퍼런스다. 깔끔하다. 손쉽게 유저가 이상형 월드컵을 만들 수도 있다.


선택은 언제나 즐겁다. 놀이로 느껴져 크게 부담스럽지도 않다. 누가 귀찮게 이상형 월드컵까지 하겠어? 하지만, 오히려 별점을 매기는 것보다 가능성이 있다고 생각했다. 아울러 기본적으로 이상형 월드컵을 마치고 남은 데이터는 정말 '양질의 데이터'로 볼 수 있었다.

 

결론 : 목표 : 놀이 방식을 통해 이용자들로부터 정확한 취향 데이터를 얻고 이를 활용해 올바른 추천을 하는 것.

 

적확한 데이터를 얻어내는 것에 기반하므로 핵심 추천 알고리즘 역시 콘텐츠 기반 필터링을 쓰기로 했다. 

 

 

추천시스템과 데이터에 대한 이해를 바탕으로 이제 본격적인 적용에 들어가야 했다. 그리고, 다음 과제는 데이터.

 

 

 


추천시스템 공부에 크게 영향을 받은 사이트들. 순서대로 보는 편이 이해가 쉬웠다.

 

1. 한국콘텐츠진흥원에서 발간한 인사이트 잡지. <콘텐츠 추천 알고리즘의 진화> 꼭지를 보면 이해가 쉽다. 서울대 서봉원 교수

2. 추천시스템 정리와 예제. 아주 친절하고 세밀한 블로그.

3. 추천 시스템 적용에 관한 유튜브 영상. T아카데미 제공

Comments