추천 시스템 패키지 소개 - recommenderlab

Page content

I. 개요

  • 추천시스템을 처음 배우는 접하는 사람들을 위해 준비한 입문 Tutorial이다.

  • 패키지 소개서에 있는 내용을 한글로 번역하였다.

  • This R package provides an infrastructure to test and develop recommender algorithms. The package supports rating (e.g., 1-5 stars) and unary (0-1) data sets. Supported algorithms are:

  • 이 R 패키지는 추천자 알고리즘을 테스트하고 개발할 수 있는 인프라를 제공한다. 이 패키지는 등급(예: 별 1-5개) 및 단항(0-1) 데이터 세트를 지원한다. 지원되는 알고리즘:

    • User-based collborative filtering (UBCF)
    • Item-based collborative filtering (IBCF)
    • SVD with column-mean imputation (SVD)
    • Funk SVD (SVDF)
    • Alternating Least Squares (ALS)
    • Matrix factorization with LIBMF (LIBMF)
    • Association rule-based recommender (AR)
    • Popular items (POPULAR)
    • Randomly chosen items for comparison (RANDOM)
    • Re-recommend liked items (RERECOMMEND)
    • Hybrid recommendations (HybridRecommender)
  • For evaluation, the framework supports given-n and all-but-x protocols with

    • Train/test split
    • Cross-validation
    • Repeated bootstrap sampling

Evaluation measures are:

  • Rating errors: MSE, RMSE, MAE
  • Top-N recommendations: TPR/FPR (ROC), precision and recall

II. 패키지 설치

  • 패키지 설치는 크게 두가지 방법이 있다.
    • CRAN에서 설치 방법
    • 깃허브에서 직접 설치하는 방법
install.packages("recommenderlab")
library(recommenderlab)
  • 이제 도움말 기능을 활용하여 도움말 파일과 함수 목록을 확인한다.
help(package = "recommenderlab")
  • 데이터를 불러온 뒤, 사용자 기반의 추천시스템 알고리즘을 활용해본다.

III. 데이터 수집 및 전처리

  • 데이터를 불러와서
data("MovieLense")
MovieLense100 <- MovieLense[rowCounts(MovieLense) > 100,]
MovieLense100
## 358 x 1664 rating matrix of class 'realRatingMatrix' with 73610 ratings.
  • rowCounts의 뜻은 행의 총합을 의미하며, 이 때 100개 이상의 데이터만 추출하겠다는 뜻임
    • 이를 통해 데이터의 왜곡을 줄여줄 수 있음

VI. 추천시스템 모델링 구현 및 추천

  • 간단하게 사용자 기반의 추천 시스템 모델링을 구현한 뒤, 테스트를 진행해보자.
train <- MovieLense100[1:70]
rec <- Recommender(train, method = "UBCF")
rec
## Recommender of type 'UBCF' for 'realRatingMatrix' 
## learned using 70 users.
  • 이번에는 구현된 모형을 바탕으로 추천 영화를 10개 정도 출력할 수 있도록 구현하자.
pre <- predict(rec, MovieLense100[101], n = 10)
as(pre, "list")
## $`291`
##  [1] "Braindead (1992)"                                        
##  [2] "Bad Taste (1987)"                                        
##  [3] "Mrs. Brown (Her Majesty, Mrs. Brown) (1997)"             
##  [4] "Cry, the Beloved Country (1995)"                         
##  [5] "Gridlock'd (1997)"                                       
##  [6] "Charade (1963)"                                          
##  [7] "Nosferatu (Nosferatu, eine Symphonie des Grauens) (1922)"
##  [8] "Ruling Class, The (1972)"                                
##  [9] "Brassed Off (1996)"                                      
## [10] "It's My Party (1995)"

V. 결론

  • 모든 함수 기반에는 알고리즘이 내재가 되어 있지만, 그렇다고 입문하시는 분들이 처음부터 알고리즘을 공부해서 새로 짜야 하는 것은 아니다.
  • 그러나, 이론 학습이 필요한 이유는 패키지 내 다양한 함수들을 보다 적절하게 사용하기 위함이다.
  • 위 패키지는 지속적으로 업그레이드가 되고 있기 때문에 꼭 Reference Manual을 활용한다.
  • 만약 R을 활용해서 추천시스템을 구현한다면 shiny app을 활용하여 배포까지 하는 것을 추천한다.