본문 바로가기

데이터/머신러닝

실전 1.2 내용 기반 추천

해당 글은 코드잇 강의를 참고하여 작성되었습니다.

- 추천 시스템이란? 

  • 어떤 작업을 할 때, 경험을 통해 그 작업에 대한 성능이 향상되는 프로그램 즉 머신러닝 프로그램이다.
  • 유저와 상품의 관계를 표현한 데이터를 사용하여 유저와 상호작용이 없었던 상품에 대한 선호도를 예측하고 선호도가 높게 예측되는 상품들을 유저에게 추천한다.

 

- 추천 시스템의 데이터

  • 직접 데이터 
    • 유저가 직접적으로 상품에 대한 만족/선호도를 표시한 데이터
    • 유저 영화 평점 데이터/ 유튜브 유저 좋아요,싫어요 데이터 등
    • 데이터가 정확하다.
  • 간접 데이터
    • 유저가 직접적 선호도를 표시하지는 않았지만 유추할 수 있는 데이터
    • 데이터의 형태는 똑같이 표현함
    • 유튜브 유저 영상 시청 데이터/ 아마존 유저 구매 데이터
    • 데이터를 수집하기 쉽다

 

- 내용 기반 추천이란? 

  • 상품의 속성, 즉 '어떤' 상품인지를 사용해서 추천
  • ex) 액션, 로맨스 등이 입력 변수=속성(x)/ 평점은 목표 변수(y) 
      액션 로맨스 코미디 감동 유저의 평점
    러브 액츄얼리 0.1 0.9 0.9 0.6 5
    반지의 제왕 1.0 0.5 0.2 0.2 1
    국제 시장 0.4 0.2 0 1 1
    어바웃 타임 0.3 0.9 0.8 0.5 5

 

- 데이터 표현하기

  • xj(i)= i번째 데이터의 j번째 속성​

 

- 다중 선형 회귀

  • hθ​(x)=θTx(=θ0+θ1x1+θ2x2++θnx)
  • 경사 하강법 : 손실함수를 최소화하는 방법(가설함수에 1/2m곱한 것) → 최적의 θ값 구하기
    손실함수
    경사 하강법

- 학습시킨 모델로 추천하기

  • 이렇게 해서 찾은 최적의 \theta값들은 각 영화 종류에 대한 유저의 선호도를 학습한 값
  • 은 그냥 상수항
  • 가설함수hθ​(x)에 경사 하강법으로 구한 와 영화 속성을 저장하고 있는 벡터 x를 대입
  • 각각 유저가 이미 평가한 영화 데이터를 가지고 학습하고, 학습된 모델을 가지고 평가하지 않은 영화에 대한 평점을 예측

 

- 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

 

- 장점

  • 상품을 추천할 때 다른 유저 데이터가 필요하지 않다.
  • 새롭게 출시한 상품이나, 인기가 없는 상품을 추천할 수 있다.

 

- 단점

  • 적합한 속성을 고르는 것이 어렵다.
  • 고른 속성 값들이 주관적으로 선정될 수 있다.
  • 유저가 준 데이터를 벗어나는 추천을 할 수 없다.
  • 인기가 많은 상ㅍ움들을 더 추천해 줄 수 없다.

'데이터 > 머신러닝' 카테고리의 다른 글

실전 1.4 행렬 인수분해  (0) 2021.07.27
실전 1.3 협업 필터링  (0) 2021.07.27
4.3 에다 부스트  (0) 2021.07.26
4.2 랜덤 포레스트  (0) 2021.07.25
4.1 결정 트리(Decision Tree)  (0) 2021.07.25