본문 바로가기

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

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

1215

[17주차 - Day2] 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.fillna(0, inplace=True)
dummy_rating

> 더미 데이터를 불러오고 NaN 값들을 0으로 채워 준다

 

def standardize(row):
  new_row = (row - row.mean())/(row.max() - row.min())
  return new_row

dummy_rating_std = dummy_rating.apply(standardize)
dummy_rating_std.head()

> 확인하기 쉽게 값을 -1 ~ +1 사이의 값으로 바꾸어 준다

 

corrMatrix_wo_std = pd.DataFrame(cosine_similarity(dummy_rating), index=dummy_rating.index, columns=dummy_rating.index)
corrMatrix_wo_std

corrMatrix = pd.DataFrame(cosine_similarity(dummy_rating_std), index=dummy_rating.index, columns=dummy_rating.index)
corrMatrix

> 값 변형한 것과 아닌 것의 결과물을 직접 비교해 보자 (아래의 경우가 훨씬 분석하기 좋다)

 

def get_similar(userId):
  similar_score = corrMatrix[userId]
  similar_score = similar_score.sort_values(ascending=False)
  return similar_score
  
scifi_lover = "user1"

similar_users = get_similar(scifi_lover)
similar_users.head(10)

> user1이라는 아이디를 가진 유저와 흡사한 사람 순으로 유저 불러오기(score가 높을수록 흡사한 것)