티스토리 뷰

사용 데이터

제가 사용한 데이터는 해외 인터넷 영화 온라인 데이터베이스 IMDB에서 제공하는 데이터셋입니다.

https://www.kaggle.com/rounakbanik/the-movies-dataset

 

The Movies Dataset

Metadata on over 45,000 movies. 26 million ratings from over 270,000 users.

www.kaggle.com

이 중 영화 정보와 영화 평점 데이터를 가지고 피어슨 상관계수 함수를 이용해서 상관관계 순으로 추천을 받을거에요!

자세한 진행 과정은 마지막편에 첨부한 코드를 참고해주세요 :D

영화 정보 (movie 테이블)

처음 가져온 movie 테이블은 굉장히 다양한 정보를 담고있습니다.

이를 필요한 변수 선택, 중복 및 전처리 과정을 거치면 movie테이블은 최종적으로 이러한 형태가 됩니다.

movie 테이블 구성

영화 평가 (ratings 테이블)

ratings 테이블은 유저id, 평가한 영화id, 평가 점수, 시간 등을 포함하고 있습니다. 

필요하지 않은 시간 정보를 제외하고 어떤 유저가 어떤 영화들을 평가 했는지 살펴봅시다.

이 테이블은 한 유저가 여러 개의 영화를 평가한 것 같습니다.

통계를 살펴보기 위해 유저 별로 몇 개의 영화를 평가했는지 살펴볼까요?

그룹으로 묶어보면 고유 userId 개수는 671개 입니다.

671명의 유저가 10만개의 영화들을 평가 했다는 뜻이네요..? 정말 매니악한 유저들의 데이터만 모았나봐요..

그래프로 살펴보면

2000개가 넘는 영화를 평가한 유저도 있군요

병합 (merging)

이제 정제된 movie와 ratings 테이블을 함수에 적용하기 좋은 형태로 합쳐줍니다.

병합한 테이블은 몇 개의 영화 종류가 있는지 살펴보면

movie 테이블의 약 3만 종류의 영화 중 1973개의 영화만 병합된 테이블에 존재하는 것을 알 수 있습니다.

최종적으로 계산을 위해 피벗 테이블 형태로 바꿔줍니다.

1차 추천

앞의 글에서 1차 추천에 피어슨 상관계수를 이용하여 상관계수를 추천 받는다고 했습니다.

해당 식은 사용자 u와 v 간의 피어슨 유사도를 구하는 공식이며 μ(u),μ(v)는 사용자의 평균 평점입니다.

위의 피벗테이블 형식으로 계산을 수행하여 입력 영화에 대한 1차 추천 리스트를 받습니다.
(데이터가 한정적인 관계로 대중적인 스타워즈를 입력값으로 넣어보았습니다!)

상관계수 기반 추천

많은 사람들의 평점을 바탕으로 최대한 장르와 상관계수가 비슷한 영화들을 추천받기는 했는데

얼핏 봐서는 과연 저 영화들이 다 재밌을까 라고는 생각이 잘 안들더라구요..

만약 상관계수에 높은 신뢰를 건다면 위에서 추천받은 영화를 시청하면 좋을 것 같고

대중적인 평가에 높은 신뢰를 건다면 다음과 같이 평균 평점이 높은 영화를 시청하면 좋을 것 같습니다!

평균 평점 기반 추천

저는 1차 추천에서 다시 대중적인 평가로 재필터를 거친 상위 5개의 영화들을 최종 추천으로 판단하겠습니다.

해당 영화들이 비슷한 장르의 영화라고 가정했을 때, 만약 이 영화들을 일부 시청한 유저가 있다면

그 유저는 해당 장르에 일가견이 있는 취향이 비슷한 유저일 것이라고 판단하고

그 유저를 집중적으로 분석해보겠습니다!

다음 편에서 크롤링을 통해 그 유저를 찾아볼게요!

글 보관함