본문 바로가기

분석이야기/Practices

넷플릭스, 영화추천의 비밀과 상관계수


넷플릭스의 최근 성장세가 무섭습니다. 넷플릭스는 지난해 4분기 4,840만달러(약 515억원)의 순이익을 기록했습니다. 이는 2013년 전체 순이익의 43%입니다. 북미시장에서의 비디오 스트리밍 서비스 역시 전년비 7%포인트 상승하며 압도적인 1위를 차지하고 있습니다. 주가역시 올해들어 고전하는 양상을 보이다 지난 1월 22일 실적발표 후 급반등했습니다.


[넷플릭스의 2013년 분기별 순이익, 자료: 비즈니스위크]

[북미시장의 비디오 스트리밍 서비스 점유율, 자료:statista]


[넷플릭스의 최근 1년간 주가 현황, 자료: Yahoo Finance]



넷플릭스는 잘 알려진 바와 같이 영화추천기능을 가진 미국의 온라인 DVD서비스 업체입니다. 1997년 리드 헤이스팅스(Wilmot Reed Hastings Jr., 1960~)에 의해 설립되었습니다. 시작은 인터넷을 통해 우편으로 DVD를 대여해 주는 사업이었으나, 2009년 온라인 스트리밍 서비스에 본격적으로 뛰어 들었습니다. 지난 해 부터는 '하우스 오브 카드(House of Cards)'라는 자체제작 드라마를 전편 몰아보기라는 독특한 전략으로 성공적으로 런칭하며 기존 거대방송사를 위협하기 까지 합니다. 재미있습니다. ^^


[넷플릭스 자체 제작드라마 하우스 오브 카드]

영화추천의 비밀, 시네매치 알고리즘

이러한 급성장에는 '시네매치 알고리즘'이라고 하는 영화추천 시스템이 바탕이 되었습니다. 넷플릭스의 전세계 가입자 수는 4,400만명에 이릅니다. 이 고객의 시청이력 데이터를 분석해 자동으로 가입자가 좋아할 만한 영화를 추천해 주는 것이 시네매치 알고리즘의 핵심입니다.


한가한 시간에 P2P사이트에 접속해 볼만한 영화 한 편을 검색하는 일이 여간 귀찮은 게 아닙니다. 넷플릭스는 수학, 컴퓨터공학, 인공지능, 엔지니어링 기술을 기반으로 가입자의 DVD 클릭패턴, 검색어, 대여목록, 평점을 분석해 회원 개개인의 취향을 알아냅니다. 이를 기반으로 회원들이 좋아할 만한 영화를 자동으로 추천해 줍니다.


News Peppermint 블로그의 '넷플릭스는 어떻게 헐리우드 영화를 분해하는가'에 따르면, 넷플릭스의 영화 장르만 76,897개에 이릅니다. 운영자는 이를 지역, 부사, 명사장르, 기반, 배경, 제작자, 영화의 내용, 타겟 연령대의 조합으로 로직화했습니다. 또한, 넷플리스는 시네매치 알고리즘의 성능을 개선하기 위해 100만 달러의 상금을 걸고 대회를 열기도 합니다. 2009년에 우승한 Bellkor's Pragmatic Chaos팀의 알고리즘은 알고리즘을 설명하는 문서만 92페이지에 달할 정도로 방대합니다. 관심있으신 분들은 읽어보시기 바랍니다.

상관관계 분석으로 구현한 시네매치 알고리즘

시네매치 알고리즘의 핵심은 상관관계에 있있습니다. 넷플릭스는 내가 누구인지는 관심이 없습니다. 다만 내가 어떤 영화를 봤고, 영화에 얼마의 평점을 줬으며, 같은 영화를 본 사람들이 영화를 어떻게 평가했는지에만 관심이 있습니다. 여기에 시네매치 알고리즘의 비밀이 숨어있습니다.


내가 어떤 영화를 보고 평점을 매기면 내 평점과 상관관계가 높은 평점을 준 사람들을 찾아 비교합니다. 그 사람들이 좋아하는 영화를 내가 좋아할 가능성이 높고, 나 역시 그 사람들이 좋아하는 영화를 좋아할 가능성이 높습니다. 이런 분석을 통해 내가 좋아할 만한 영화 중 보지 않은 영화를 추천해 주는 것입니다. 

상관계수의 계산과 그래프

이제 상관계수에 대해 이야기 해보겠습니다. 지난 포스팅에서 상관계수는 -1에서 1까지의 값을 가진다고 했습니다. 어떻게 이 값이 도출되는 지 먼저 데이터를 잠시 살펴 보겠습니다. 최근 5년간 평균 주가가 30만원이고 순이익이 3억 6천만원인 회사 3곳이 있다고 가정하겠습니다.



우리가 알고 싶은 사실은 순이익이 주가와 관련이 있는가 입니다. 데이터를 살펴보면, 평균적으로 같은 이익과 주가를 기록하고 있지만 양상은 완전히 다릅니다. 이 순이익과 주가의 관계를 상관계수라고 하는 표준화된 수치로 계산할 수 있습니다. 상관계수를 구하는 공식은 아래와 같습니다.



복잡합니다. 의미는 사실 그렇게 복잡하지 않습니다. 상관계수란 둘 이상의 변수에 있어서 한 변수가 변할 때 다른 변수가 어떻게 변하는지를 나타내는 수치입니다. 숫자가 +1에 가까울수록 정(+)의 상관관계가 있다고 하고, -1에 가까울수록 부(-)의 상관관계가 있다고 합니다. 여기서 '정(+)의 상관관계'란 어떤 변수가 증가하거나 감소할 때, 관계된 다른 변수도 같이 증가하거나 감소한다는 것을 의미합니다. 부(-)의 상관관계는 반대로 어떤 변수가 증가하거나 감소할 때, 관계된 다른 변수는 감소하거나 증가함을 의미합니다. 상관관계가 0에 근접할 수록 두 변수는 관계가 없다는 것을 의미합니다.


계산은 R을 사용하면 간단합니다. R을 설치하고 사용하는 방법은 'R프로그래밍 카테고리'를 참고하시기 바랍니다.

> # 주가를 X, 순이익을 Y로 두고 각 기업의 주가와 순이익 벡터를 생성
> XA <- c(10, 20, 30, 40, 50)
> YA <- c(15, 25, 35, 45, 60)
> XB <- c(20, 30, 10, 50, 40)
> YB <- c(15, 60, 45, 35, 25)
> XC <- c(50, 40, 30, 20, 10)
> YC <- c(15, 25, 35, 45, 60)
> # 각 기업의 주가와 순이익의 상관계수를 계산
> cor(XA, YA)
[1] 0.9958932
> cor(XB, YB)
[1] -0.09053575
> cor(XC, YC)
[1] -0.9958932

이제 이 값들이 어떻게 생겼는지 그래프를 한 번 그려보겠습니다.

> plot(XA, YA, main="A기업의 주가와 순이익", xlab="주가", ylab="순이익")
> plot(XB, YB, main="B기업의 주가와 순이익", xlab="주가", ylab="순이익")
> plot(XC, YC, main="C기업의 주가와 순이익", xlab="주가", ylab="순이익")


A기업과 C기업은 순이익을 가지고 주가를 예측 할 수 있겠지만, B기업은 순이익은 주가예측에 전혀 도움이 되지 않는다는 것을 알 수 있습니다. 상관계수는 몇 가지 한계점을 가지고 있기는 하지만 우리 주변에 널리 이용되고 있습니다.