본문 바로가기
Machine Learning

[ML] 추천시스템_ 장르 유사도를 고려한 영화 추천 알고리즘

by ram_ 2023. 1. 11.

최근접 이웃 협업 필터링

- 축적된 사용자 행동 데이터를 기반으로 사용자가 아직 평가하지 않은 아이템을 예측 평가

    - 사용자 기반 : 당신과 비슷한 고객들이 다음 상품을 구매했다.

    - 아이템 기반 : 이 상품을 선택한 다른 고객들은 다음 상품도 구매했다.

 

- 일반적으로는 사용자 기반보다는 아이템 기반 협업 필터링이 정확도가 더 높다.

    - 비슷한 영화를 좋아한다고 취향이 비슷하다고 판단하기 어렵거나, 매우 유명한 것의 경우 취향과 관계없이 관람하는 경우가 많고,

      평점을 매기지 않은 경우가 많기 때문이다.

 

잠재 요인 협업 필터링

- 사용자-아이템 평점 행렬 데이터를 이용해서 "잠재요인"을 도출하는 것이다.

- 주 요인과 아이템에 대한 잠재요인에 대해 행렬 분해를 하고 

  다시 행렬곱을 통해 아직 부여하지 않은 아이템에 대한 예측 평점을 생성하는 것이다.

 


 장르별 영화 추천 시스템 만들기

movie Data를 불러와서 필요한 칼럼만 솔팅하고, 가장 중요한 genres 칼럼을 살펴보았다. str 형태였다.

문자열로 된 데이터를 각각 복구시켜주는 literal_eval을 import한다.

출력값 ['Action', 'Adventure', 'Fantasy', 'Science Fiction']

id와 name 등 필요없는 항목들은 계속해서 지워준다. 

lambda 함수를 이용하여 장르 특성값만 남겨주었다.

장르 여러개를 사용해 유사도를 정리하고자 CountVectorizer을 import했다.

위에서 만든 genres_literal을 fit_transform한 변수를 만들어 전개한다.

문장의 유사도 측정에는 cosine_similarity를 사용했다.

 

! 문제점을 발견했다. 

Mi America의 vote_average는 0.0이다?

평점과 평점을 매긴 횟수를 보면 문제 데이터가 보인다. vote_averagevote_count

 -> 어떻게 처리할 것인가?  ->  영화 선정을 위한 가중치를 선정해보자.

 

weighted_vote 칼럼을 새로 만들어 가중치 계산이 된 평점을 넣어준다.

movies_df의 head와 tail을 출력해봐도 값이 제대로 들어간 것을 알 수 있다.

 

위에서 작성한 함수를 일부 수정해준다. 

이후 다시 'The Godfather'과 유사한 영화를 검색해보면 상위 10개의 영화 값이 제대로 출력되는 것을 볼 수 있다.

 

(너무나 당연하게 갓파더2가 맨 위에 랭크되어있다)

'Machine Learning' 카테고리의 다른 글

[ML] PCA 개념  (0) 2023.02.24
[ML] 추천시스템_ 책 추천 알고리즘  (0) 2023.01.12
[ML] GBM  (0) 2023.01.10
[ML] Credit Card Fraud Detection  (0) 2023.01.10
[ML] Ensemble _HAR data _ DecisionTree / RandomForest  (0) 2023.01.09