소개
넷플릭스 어플의 데이터를 직접 설계해보고 클라이언트 개발자가 필요한 API들을 개발해보았습니다.
DB 설계
URL : https://aquerytool.com/aquerymain/index/?rurl=62eae5f3-b47b-4b19-acdc-b0f8cb7963df&
Password : 4ram6c
API 시트
https://docs.google.com/spreadsheets/d/1B4lU_gqsQ5nDLYGDderpVyzuXBNlBav1a5HwzntEeGk/edit?usp=sharing
영상 추천 알고리즘 원리
1. updateUserTendency()
먼저 프로필마다의 경향을 볼 수 있는 TENDENCY 테이블을 업데이트 합니다.
TENDENCY 테이블에는 해당 프로필이 어떤 장르를 좋아하는지 나타내는 테이블입니다.
영상 장르는 총 17개(액션, 코미디 등등)가 있고 각각의 장르에 대해서 어느정도 호감도가 있는지에 대한 데이터가 기록됩니다.
예를 들어,
1. 영상을 시청하면 해당 영상이 가지는 장르들에 대한 모든 점수가 +2점이 올라갑니다.
2. 그리고 추가로 영상에 좋아요를 누르면 해당 영상 장르들에 대한 모든 점수가 +1점 추가로 올라갑니다.
3. 그리고 싫어요를 누르면 해당 영상 장르들에 대한 모든 점수가 -5점이 부여됩니다.
시청기록에 2점을 준 이유는 좋아요,싫어요 평가를 잘 안하는 사람들이 많기 때문에 주로 어떤 것들을 자주 시청하는지 파악해서 좋아하는 장르를 유추하려는 의도입니다.
이미 시청기록으로 점수가 올라가기 때문에 좋아요 기록에는 추가로 1점만 부여합니다.
그래서 좋아요를 누른 영상에는 총 3점이 부여됩니다.
반대로 싫어요를 누른 영상에는 -3점을 부여하기 위해서 시청기록으로 추가된 2점을 고려하여 -5점을 부여했습니다.
그리고 장르마다 가중치를 주기위해 플러스 점수들의 총합과 마이너스 점수들의 총합을 나타내는 컬럼 totalPositive, totalNegative가 있습니다
2. getRcmdVideo()
모든 영상들에 해당 프로필의 경향을 반영해서 취향 일치도 점수를 계산합니다.
계산 방법으로는 기본점수 50점에 해당 영상이 포함한 장르와 해당 프로필의 장르에 대한 점수를 적용합니다.
취향 일치도 점수 tasteScore = 50+50*((영상 장르에 속하는 플러스 장르 점수들의 합 / totalPositive) + (영상 장르에 속하는 마이너스 장르 점수들의 합 / |totalNegative| ))
예를 들어,
TENDENCY 테이블이 아래와 같고
profileIdx | genre1Score | genre2Score | genre3Score | genre4Score | totalPostivie | totalNegative |
1 | 10 | 2 | -20 | 4 | 16 | -20 |
(genre1 : 코미디 , genre2 : 액션 , genre3 : 호러 , genre4 : 스릴)
"기묘한 이야기"라는 영화가 코미디와 호러 장르를 가지고 있다면
1번 프로필 유저의 "기묘한 이야기"에 대한 취향 일치도 점수는
tasteScore = 50 + 50*( (10 / 16) + (-20 / |-20| ) = 50 - 18.75 = 31.25 => 31 점
이렇게 계산해서 모든 영상들을 취향 점수를 기준으로 정렬하여 가장 높은 점수의 영상이 추천됩니다.
소스코드
'프로젝트' 카테고리의 다른 글
여기어때 클론 코딩 데이터 API 개발 프로젝트 (0) | 2021.07.08 |
---|
댓글