본문 바로가기

프로그래머스 데브 코스/TIL

[6기] 프로그래머스 인공지능 데브코스 110일차 TIL

1219

[17주차 - Day3] Recommendation system

아이템 기반 협업 필터링 실습 

# 더미 데이터 사용
import pandas as pd
from sklearn.metrics.pairwise import cosine_similarity

dummy_rating = pd.read_csv("https://grepp-reco-test.s3.ap-northeast-2.amazonaws.com/dummy_rating.csv", index_col=0)

dummy_rating.head()

 

dummy_rating = dummy_rating.T
dummy_rating.fillna(0, inplace=True)
dummy_rating

 

# 평점 정보를 보정. 이후에 코사인 유사도를 사용하면 피어슨 유사도에 해당
def standardize(row):
  new_row = (row - row.mean())/(row.max()-row.min())
  return new_row

# 행렬을 transpose해서 데이터프레임 생성
dummy_rating_std = dummy_rating.apply(standardize)
dummy_rating_std.head()

 

# 아이템간의 유사도 측정 행렬 만들기
corrMatrix = pd.DataFrame(cosine_similarity(dummy_rating_std), index = dummy_rating.index, columns=dummy_rating.index)
corrMatrix

 

def get_similar(movie_name):
  # 주어진 영화 이름에 해당하는 유사도 컬럼을 읽어서 평점 정보에 rating를 곱함
  similar_score = corrMatrix[movie_name]
  #앞서 보정된 값을 가지고 평점의 내림차순으로 정렬
  similar_score = similar_score.sort_values(ascending=False)
  return similar_score
  
movie_i_liked = 'scifi1'

# 3개의 영화 평점을 가진 사용자를 기반으로 비슷한 아이템을 찾아보자
similar_scores = pd.DataFrame(get_similar(movie_i_liked)) 
similar_scores