오늘은 R로 상품추천기술중 하나인 IBCF와 UBCF를 구현해 보겠다.



sample.csv


샘플데이터는 아래와 같이 생겼다.



데이터에 대하여 간단히 설명하면, V1과 V2, 그리고 V3는 각각 사용자식별번호, 아이템번호, 구매 횟수를 뜻한다.

즉 이미 전처리가 어느정도 완료되어 있는 데이터를 바탕으로, 우리는 사용자 베이스 추천, 아이템 베이스 추천을 진행하도록 하겠다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
##########################################
## 온라인 유통회사의 추천 시스템 사례 ####
##########################################
## step.1 preparing the data #####
 
# 데이터 로딩
data<-read.csv("sample.csv",head=FALSE, sep =",")
View(data)
 
# 추천시스템 패키지를 인스톨
install.packages("recommenderlab")
 
 
# 패키지를 로딩
library(recommenderlab)
 
 
# 데이터형을 realRatingMatrix로 변환
<-as(data, "realRatingMatrix")
 #바이너리는 산 횟수가 0 1 (샀다 안샀다) 리얼레이팅은 진짜 횟수 (0~) 
cs


우리가 사용할 패키지는 recommenderlab 이며, 없다면 설치하도록 하자.

아래 행의 realRatingMatrix 는 진짜 횟수에 대한 것으로, 우리는 V3칼럼에서 볼 수 있는 것처럼 샀는지 안샀는지의 유무가 아닌

얼마나 구매했는지를 바탕으로 모델을 만들어야 하기 때문에 realRatingMatrix를 사용한다.


binary 일 경우네는 쉽게 이야기해 더미 변수처럼 1 0 으로 샀냐 안샀냐만 구분해주는 것이다.


1
2
3
4
5
6
7
8
9
10
## Step.2 Training a model on the data ###
 
# 머신러닝을 위해 학습데이터선정
# 전체데이터의 90%를 학습데이터로 선정
trainingData<- sample(4945,4500#(4950개중 4500개 추출 )
trainingSet<- r[trainingData]
 
# 행의 총합 5개 이상의 아이템만 선택, 많이 팔리지 않은 아이템을 제외시킴
trainingSet<-trainingSet[rowCounts(trainingSet) > 5#아이템이 적은것은 왜곡된 추천결과 보내줄수 있음 
as(trainingSet,"matrix")  
cs


이제 모델을 생성하기 위한 작업을 해보자.

코드에서 볼 수 있는 것처럼 트레이닝셋과 테스트셋을 구분하기 위하여 추출을 해주는데, 이 과정에서 구매 횟수가 5보다 낮은것은

제외하도록 한다. 그 이유는 구매가 적으면 아웃라이어처럼 결과에 왜곡을 줄 수 있기 때문이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# scheme 지정과 표시
# 추천의 평가방식을 저장 
# split은 분할, crosss는 교차검정 
# train 은 모델만드는 데이터 비율로서 아래 코드는 이를 80%로, 나머지 20%를 평가셋으로 한 것을 의미
# given 은 사람당 평가하는 아이템 수 
# K는 시뮬레이션 반복횟수
scheme <- evaluationScheme(trainingSet,method="split", train = .8,
                           given = 6
                           goodRating = 4,
                           k = 3)
    #추천의 평가방식을 지정하고 저장 - 중요하다
    #교차검정(crosstable) - 전체 데이셋을 k개로 나눈다 
    # train - 모델을 만드는 데이터 비율 - 위 코드는 80퍼로 만듬
    # given 은 사람당 평가하는 아이템 수 
    # goodrating = 실제 사용 등급이 4이상이면 모두 평가에 포함 
    # 시뮬레이션 실행할때마다 결과가 바뀜 - 너무많이 돌리면 개선이 덜 되고, 적게돌리면  편차 큼 
cs


위는 상품추천기술의 핵심 함수라고 할 수 있는 evaluationScheme 함수이다. 설명은 주석을 참고하면 된다.

.




위는 또다른 핵심 함수인 Recommender에 대한 설명이다. 여기서 우리는 UBCF 와 IBCF를 구분해서 각각 모델을 생성하게 된ㄷ.

파라미터로는 cosine와 pearson 두 가지가 있으며, 선택해주면 된다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 추천모델생성
mUBCF <- Recommender(trainingSet,method="UBCF",
                     parameter="Cosine")
 
mUBCF
 
mIBCF <- Recommender(trainingSet,method="IBCF",
                     parameter="Cosine")
 
mIBCF
 
# 추천을 받을 사용자리스트 (Testset)
recommenderUserList<-r[-trainingData] # 트레이닝데이터 반대되는 행들을 테스트셋으로 
 #트레이닝셋을 쓰지않고 데이터를 쓰는 이유는 이미 4500명에 대한 
 #트레이닝데이터를 만들었기 때문에 445명에 대한 테스트셋을 만들위해 추천리스트 다시 설정 
 
cs


위와 같이 코딩을 해주면 되고, 아래 -trainingData는 아까 설정한 트레이닝데이터를 제외한 나머지를 테스트 데이터로 사용하겠다는 뜻이다.



+ Recent posts