유튜브&넷플릭스 추천 알고리즘의 비밀 (협업 필터링, 유사도 필터링)

유튜브와 넷플릭스를 볼 때 제가 본 영화나 드라마와 비슷한 느낌의 콘텐츠가 추천되는 것을 보신 적이 있나요?

이것은 여러분이 알고리즘(Argorithm)의 선택을 받았다는 것! 이 알고리즘에 대해서는 많이 들어보셨을 거예요.

사전적으로 해석하면 어떤 문제를 해결하기 위한 절차, 방법, 명령 세트를 의미합니다.

다양한 플랫폼은 이 알고리즘을 통해 사용자가 시청한 영상 기록을 수집해 어떤 장르를 좋아하는지 예측하고 맞춤형 콘텐츠를 보여주는 방식입니다.

이 과정에서 넷플릭스는 추천 알고리즘을 개선하기 위해 상금 10억이 걸린 대회를 개최하고 소비자를 2천개가 넘는 집단으로 세분화하는 등 매우 디테일하게 타깃팅했습니다.

유튜브는 이용자의 70%는 추천 알고리즘 기반으로 새로운 작품을 탐색하고 감상하도록 하고 부적절하고 품질이 낮은 동영상 필터링을 위해 연간 30회 이상의 알고리즘을 수정하는 과정을 거친다.

많은 기업들이 이처럼 추천 알고리즘을 개선하고 발전시키는데 노력하는 이유는

소비자의 이탈을 막고 고객 충성도(loyalty)를 향상시켜 안정적인 수익기반 마련에 핵심적인 역할을 할 알고리즘으로 급부상했기 때문입니다.

그러면 이런 알고리즘이 어떻게 만들어지는 빅 재미를 통해서 같이 분석하러 가보겠습니다.

분석의 전체적인 흐름

추천 시스템으로는 크게 협업 필터링(Collaborative Filtering) 콘텐츠 기반 필터링(Content-based Filtering) 두 가지가 대표적입니다.

전체적인 절차는 아래와 같이 진행할 예정입니다!

영화간 유사도 분석 ↓ 사용자간 유사도 분석 ↓ 영화간 장르 유사도 분석 ↓ 사용자 평점 예측

수집 DATA(공공데이터)

MovieLens 100k 영화정보 데이터 영화정보에 관한 9125건의 데이터를 수집하였으며, movieId(영화ID), title(영화제목), genres(영화장르)를 이용하였습니다.

MovieLens 100k 영화평점 데이터 영화평점에 대한 100,004개의 데이터를 수집하였으며, userId(사용자ID), movieId(영화ID), rating(사용자가 부여한 평점), timestamp(타임스탬프)를 이용하였습니다.

영화 정보 및 평가 데이터 보기

영화평점 데이터의 탐색적 데이터 분석(EDA)을 통해

영화별 평점 개수 분포 시각화 사용자별 평점 개수 분포 시각화 평점 분포 시각화

평점수와 평점간의 상관분석가 중에서 평점을 산출하여 Top5 영화 리스트업

이렇게 총 시각화 3개, 분석 2개의 결과를 확인했습니다.

시각화 그래프에서 영화별, 사용자별 평점 개수 분포를 확인하는 것 외에도 전체적인 영화 평점이 3~5점 사이에 가장 많은 분포를 보이고 있다는 것을 알 수 있죠?

해당 데이터를 이용하여 상관 분석을 해 보면 평점 개수가 150개 이상인 경우 평점 개수와 평점 평균 사이에 약한 양의 상관관계가 있음을 알 수 있습니다.

유의미한 결과, 유도를 위해 평점수에 가중치를 부여함으로써 가중 평점을 산출했습니다.

해당 분석에 사용된 연산식은 아래와 같으니 참고해주세요!

(Weighted Rating) = (v/(m+v))*R+(m/(v+m))*Cv: 개별영화에 평점을 투표한 횟수m: 평점을 부여하기 위한 최소 투표 횟수R: 개별영화에 대한 평균 평점C: 전체영화에 대한 평균 평점

사용자 기반 협업 필터링

나와 다른 사람의 취향을 분석해 취향이 비슷했던 사용자가 좋아했던 영화를 나에게도 추천해주는 방식입니다.

사용자가 영화 ‘조커’를 본다면 조커를 본 다른 사람이 좋아하는 영화 ‘라라랜드’를 추천해 줍니다.

사용자 기반 콜라보레이션 필터링 전체 시나리오 절차 지금부터 영화 데이터와 평점 데이터를 이용해 분석해줍니다!

먼저 userid와 title에서 피벗 테이블을 만들어 사용자가 평가한 평점을 바탕으로 유사도 행렬을 구한 후

사용자 간의 유사도 측정을 위해 상관 분석으로 피어슨 유사도를 분석합니다.

기본적인 원리는 위 표와 같이 가장 유사도가 높은 사용자가 구매한 영화 중 아직 시청하지 않은 영화를 추천합니다.즉, 가중 평점이 높은 영화 순으로 목록이 만들어집니다.

소팅(sorting) 기능으로 userId’514’를 선택한 후 유사도 순으로 정렬하면 가장 유사한 사용자가 userid’19’임을 알 수 있습니다.

다시 영화의 가중 평점과 사용자 ’19’ 평점이 높은 순으로 정렬하면 사용자 ‘514’가 보지 못한 영화 추천 목록이 나타납니다.

쇼생크 탈출, 대부, 유주얼 서스펙트, 쉰들러 리스트 등

취향이 비슷한 유저들이 본 영화 중 아직 구매하지 않은 영화를 추천드려요!

장르에 따른 콘텐츠 유사도 기반 필터링

제가 본 콘텐츠 장르를 분석해서 비슷한 장르와 내용의 영화를 추천하는 방식입니다.

영화 데이터 파일을 로드하고 파생 변수 블록에서 장르 컬럼에 통합되어 있던 정보를 각각 하나의 컬럼으로 합니다.

장르에 따라 필터링하려면 먼저 장르 데이터를 전처리해야 합니다.

어드벤처 장르를 포함하고 어드벤처 컬럼이라면 TRUE, 그렇지 않으면 FALSE가 됩니다.

‘TRUE=1’, ‘FALSE=0’처럼 미리 숫자 형식으로 바꿔 연산을 용이하게 한 뒤 정렬 기능을 통해 ‘토이스토리’와 장르가 비슷한 순서로 나열했습니다.

그럼 유사도를 계산해서 토이스토리와 장르가 몇 번 겹치는지 확인해 보겠습니다.

error: Content is protected !!