오늘은 R로 상품추천기술중 하나인 IBCF와 UBCF를 구현해 보겠다.
데이터에 대하여 간단히 설명하면, 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로 변환 r <-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는 아까 설정한 트레이닝데이터를 제외한 나머지를 테스트 데이터로 사용하겠다는 뜻이다.
'데이터분석 > with R' 카테고리의 다른 글
[R] Rattle을 이용한 데이터 분석(머신러닝) 알고리즘 구현 (0) | 2018.01.22 |
---|---|
[R] R로 구현하는 상품추천기술(IBCF, UBCF) - (2) (0) | 2018.01.09 |
[R] 상품추천기술: 협업필터링의 정의와 예시 (0) | 2018.01.02 |
[R] R로 구현하는 서포트 벡터 머신(SVM) (0) | 2017.12.29 |
[R] SVM 서포트 벡터 머신의 정의와 설명 (0) | 2017.12.28 |