• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    해결됨

(재업)인기제품 추천방식 결과가 달라요

22.04.07 10:23 작성 조회수 119

2

인기 제품 추천 방식 코드를 보고 따라쳤는데, 강사님이랑 결과(movie_id)가 다른데 왜 그런건가요?

#사용자 u.user 파일을 DataFrame으로 읽기
import os
import pandas as pd
base_src = 'drive/MyDrive/RecoSys/Data'
u_user_src = os.path.join(base_src,'u.user')
u_cols = ['user_id','age','sex','occupation','zip_code']
users = pd.read_csv(u_user_src,
                    sep='|',
                    names=u_cols,
                    encoding='latin-1')
users = users.set_index('user_id')
users.head()

# u.item 파일을 DataFrame으로 읽기
u_item_src = os.path.join(base_src,'u.item')
i_cols = ['movie_id','title','release date','video release date',
          'IMDB URL','unknown','Action','Adventure','Animation',
          'Children\'s','Comedy','Crime','Documentary,','Drama','Fantasy',
          'FilmNoir','Horror','Musical','Mystery','Romance', 'Sci-Fi','Thriller','War','Western']
movies = pd.read_csv(u_item_src,
                     sep='|',
                     names=i_cols,
                     encoding='latin-1')
movies = movies.set_index('movie_id')
movies.head()

 #u.data 파일을 DataFrame으로 읽기
u_data_src = os.path.join(base_src,'u.data')
r_cols = ['user_id', 'movie_id','rating','timestamp']
ratings = pd.read_csv(u_data_src,
                      sep = '\t',
                      names = r_cols,
                      encoding='latin-1')
ratings = ratings.set_index('user_id')
ratings.head()

#인기 제품 추천 방식 Function
def recom_movie(n_items):
  movie_mean = ratings.groupby(['movie_id'])['rating'].mean()
  movie_sort = movie_mean.sort_values(ascending=False)[:n_items]
  recom_movies = movies.loc[movie_sort.index]
  recommendations = recom_movies['title']
  return recommendations

recom_movie(5)

답변 1

답변을 작성해보세요.

1

안녕하세요.

거친코딩입니다.

저 또한 새롭게 코드를 돌려보았을 때 학습자님처럼 같은 결과값이 나왔습니다.

그런데 자세히 보니, 해당 부분이 다르게 나온 이유는 코랩 쪽에서 데이터를 보여주는 우선 순위(그들만의 글자 순)으로 보여주는 것 같았습니다.

쉽게 말해서 코드로 말씀드리면 아래와 같습니다.

1순위~10순위가 5.0으로 동일하게 점수를 배정받고 있기 때문에, 단순히 5개를 찍히는 것은 코랩쪽에서 보여지는 규칙인 것 같습니다.

나중에 향후 비즈니스에서는 이러한 동점이 나온 상황에서는 룰 베이스(각자 비즈니스 도메인)에 맞게 처리하시면 될 것 같습니다.

감사합니다.

-거친코딩 드림-

movie_mean = ratings.groupby(['movie_id'])['rating'].mean()
movie_sort = movie_mean.sort_values(ascending=False)[:10]
movie_sort