TIL_55 : 추천 시스템

JaHyeon Gu·2021년 11월 24일
0

Machine Learning

목록 보기
13/15
post-thumbnail

🙄 추천 시스템


➡ 추천 시스템이란?

  • 특정 사용자가 좋아해 할 만한 것들을 찾아주는 프로그램

➡ 추천 시스템들은 어떻게 추천을 할까?

  • 유저와 상품의 관계를 표현한 데이터 사용
  • 유저와 상호 작용이 없었던 상품에 대한 선호도 예측
  • 선호도가 높게 예측되는 상품들 유저에게 추천

➡ 추천 시스템 데이터

직접 데이터, explicit data

  • 유저가 직접적으로 상품에 대한 만족/선호도를 표시한 데이터
  • 유저 영화 평점 데이터 (1~5로 선호도 표시)
  • 유튜브 유저 좋아요/싫어요 데이터 (0, 1로 선호도 표시)
  • 유저 선호도를 정확하게 나타내는 장점

간접 데이터, implicit data

  • 유저가 직접적 선호도를 표시하지는 않았지만 유추할 수 있는 데이터
  • 유튜브 유저 영상 시청 데이터
  • 아마존 유저 구매 데이터
  • 데이터 형태는 똑같이 표현함
  • 데이터를 수집하기 쉽다는 장점
  • 유저의 선호도를 정확하게 나타내지 않지만 정확한 적은 양의 데이터보다
    조금 부정확하지만 많은 양의 데이터로 학습하는 게 더 정확할 수 있다
    .



🙄 내용 기반 추천


➡ 내용 기반 추천이란?

  • 상품의 속성, 즉 '어떤' 상품인지를 사용해서 추천
  • 영화 속성 데이터를 입력 변수, 평점을 목표 변수로 학습
  • 유저가 평가하지 않은 새로운 영화들에 대한 속성을 바탕으로 평점 예측
  • 높은 평점이 예측되는 영화를 추천

➡ 다중 선형 회귀 가설 함수

  • hθ(x)=θ0+θ1x1+θ2x2+...+θnxnh_{\theta}(x)=\theta_0+\theta_1x_1+\theta_2x_2+...+\theta_nx_n
  • hθ(x)=θTxh_{\theta}(x)=\theta^Tx
  • 영화 속성 4개 사용 (액션, 로맨스, 코미디, 감동)
  • hθ(x)=θ0+θ1x1+θ2x2+θ3x3+θ4x4h_{\theta}(x)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+\theta_4x_4
  • x1x_1 : 액션 정도
    x2x_2 : 로맨스 정도
    x3x_3 : 코미디 정도
    x4x_4 : 감동 정도
  • θ1\theta_1 : 액션 선호도
    θ2\theta_2 : 로맨스 선호도
    θ3\theta_3 : 코미디 선호도
    θ4\theta_4 : 감동 선호도



🙄 sklearn으로 유저 평점 예측하기


# 필요한 도구들을 가지고 오는 코드
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split

import pandas as pd
import numpy as np

# 유저 평점 + 영화 속성 데이터 경로 정의
MOVIE_DATA_PATH = './data/movie_rating.csv'

# pandas로 데이터 불러 오기
movie_rating_df = pd.read_csv(MOVIE_DATA_PATH)

features =['romance', 'action', 'comedy', 'heart-warming'] # 사용할 속성들 이름

# 입력 변수와 목표 변수 나누기
X = movie_rating_df[features]
y = movie_rating_df[['rating']]

# 입력 변수와 목표 변수들을 각각의 training/test 셋으로 나누기
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=5)

model = LinearRegression()
model.fit(X_train, y_train)
y_test_predict = model.predict(X_test)

# 실행 코드
y_test_predict


# array([[ 3.83034441],
#        [ 2.59418977],
#        [ 2.63653566],
#        [ 3.48333221],
#        [ 2.75217812],
#        [ 2.43303141],
#        [ 3.03247628],
#        [ 4.41312853],
#        [ 4.28145539],
#        [ 3.61139607],
#        [ 3.82260281],
#        [ 3.01099122],
#        [ 3.06324646],
#        [ 4.41401949],
#        [ 4.08837667],
#        [ 3.30347874],
#        [ 4.69514621],
#        [ 4.3397661 ],
#        [ 3.42084949],
#        [ 3.94638571]])



🙄 내용 기반 추천 장단점


➡ 장점

  • 상품을 추천할 때 다른 유저 데이터가 필요하지 않다

  • 새롭게 출시한 상품이나, 인기가 없는 상품을 추천할 수 있다


➡ 단점

  • 적합한 속성을 고르는 것이 어렵다

  • 고른 속성 값들이 주관적으로 선정될 수 있다

  • 유저가 준 데이터를 벗어나는 추천을 할 수 없다

  • 인기가 많은 상품들을 더 추천해 줄 수 없다

profile
IWBAGDS

0개의 댓글