아이디어 설명
- 유저 프로필 구성
- 장르별 평균으로 어떤 유저가 어떤 장르를 얼마나 좋아하는지에 대한 각 유저의 프로필 만들기
- 유저의 평점과, 유저가 평점을 준 영화들의 아이템 프로필을 사용해서 계산함
- 예) 조의 유저 프로필
코미디 : (3.5) / 1 = 3.5
스릴러 : (5.0 + 1.0) / 2 = 3.0
액션 : (4.5 + 4.0 + 1.0) / 3 = 3.17
- 장르별 평균으로 어떤 유저가 어떤 장르를 얼마나 좋아하는지에 대한 각 유저의 프로필 만들기
- 영화 평점 예측
- 각 유저의 유저 프로필을 가지고 새로운 영화에 대한 평점 예측하기
- 예) 조의 '기생충' 예상 평점
(3.5 * 1) + (3.0 * 1) + (3.17 * 0) / (1 + 1 + 0) = 3.25 - 예) 베스의 '기생충' 예상 평점
(4.0 * 1) + (1.0 * 1 ) + (2.0 * 0) / (1 + 1 + 0) = 2.5
- Cold-Start 문제 해결
- 예1) '마미'는 코미디 장르가 포함되는 영화에 평점을 준 적이 한 번도 없기 때문에 코미디 장르에 대한 값은 NaN이 됨
따라서 오직 코미디 장르만 가진 '정직한 후보'에 대한 '마미'의 예상 평점은 구할 수 없음 - 예2) '코코'는 장르 데이터가 없어서 예상 평점을 구할 수 없음
- 보통은 global mean (전체 데이터의 평균)으로 채워주게 됨
- 또는 '마미'가 준 데이터의 평균 등으로 채워주게 됨
- 예1) '마미'는 코미디 장르가 포함되는 영화에 평점을 준 적이 한 번도 없기 때문에 코미디 장르에 대한 값은 NaN이 됨
파이썬 구현
- 데이터 전처리
- 필요한 패키지 설치
- 데이터 읽어오기
- ratings 테이블에 genres 데이터를 이너 조인으로 붙이기
- 0 값을 NaN으로 바꿔주기
- 모델을 훈련하는 데이터와 성능을 테스트하는 데이터로 나눠주기
- 아이템 프로필 만들기
- 유저 프로필 만들기
- 장르 이름 가져오기
- 각 영화에 대해서 장르에 몇 점을 줬는지 곱하기 연산
- 각 유저 별로 그룹을 만들어서 장르별 평균값 구하기
- 나의 유저 프로필 찾아보기
- 샘플 유저의 평점 예측
- 테스트 데이터 중 인덱스 8313의 userId 가져와서 샘플 유저로 사용하기
- 57번 유저 프로필 가져오기
- 특정 영화인 Godzilla에 대한 57번 유저의 예상 평균 평점 구하기
- 전체 유저의 평점 예측
- 전체 데이터로 확장
- Cold Start 문제로 인한 NaN은 global mean으로 넣어주기
- 모델 평가
- RMSE로 평가
참고 자료 및 코드
더보기
[개념부터 실습까지] 추천 시스템 입문편
[추천 시스템 입문편] Content-Based Recommendation 1
'ML > 추천 시스템 입문편' 카테고리의 다른 글
[추천 시스템 입문편] 나와 친구를 위한 영화 추천 (0) | 2023.05.18 |
---|---|
[추천 시스템 입문편] Content-Based Recommendation 2 (0) | 2023.05.16 |
[추천 시스템 입문편] 아주 간단한 추천 시스템 만들기 (0) | 2023.05.12 |
[추천 시스템 입문편] Pandas 보충강의 (0) | 2023.05.12 |
[추천 시스템 입문편] 영화 데이터 읽고 기초 분석하기 (0) | 2023.05.12 |