1
2
3
4
5
6
7
8
9
10
11
## Step.3  Evaluating model performance ###
 
#추천실시
UBCFlist <- predict(mUBCF, recommenderUserList, n=5)
 
IBCFlist <- predict(mIBCF, recommenderUserList, n=5)
 
 
#추천받은 리스트 보기
as(UBCFlist, "list")
as(IBCFlist, "list")
cs

이제 본격적으로 모델을 구현해 보겠다.

위 코드처럼 입력해주면 우리는 추천 리스트를 만들게 되는데, 그 결과는 아래 화면과 같다 



직관성이 떨어지지만 읽어보면 제일 위 114 고객에는 20, 425, 771, 31, 47번 물품을 추천한다는 것이다.

바로 위에서 추천을 할때 n을 5로 주어서 다섯개만 추천해 준 것이며, 이 숫자를 바꿔주면 해당 숫자의 갯수만큼 추천해준다.


이제 모델 결과표와 그래프를 생성해 보겠다. (사실 위 과정까지만 해도 추천 과정은 끝난것이다)


1
2
3
4
5
6
7
8
9
10
# 시뮬레이션에 사용할 알고리즘과 유사도 지표 종류 지정
alUBCF<-list("user-based CF_Cosine" = list(name = "UBCF"
                                           param = list(method = "Cosine")),
             "user-based CF_Pearson" = list(name = "UBCF"
                                           param = list(method = "Pearson")))
 
alIBCF<-list("item-based CF_Cosine" = list(name = "IBCF"
                                           param = list(method = "Cosine")),
             "item-based CF_Pearson" = list(name = "IBCF"
                                           param = list(method = "Pearson")))
cs


위는 평가를 위한 알고리즘을 생성한 것이다. 각각 Cosine과 Pearson 두 가지를 모두 포함한 알고리즘을 만들어주면 된다.




위는 우리가 생성했던 모델에 대한 최종 평가에 사용할 evaluation 함수이다. 바로 위에서 생성한 알고리즘이 알고리즘 자리로,

초반부에 evaluationScheme 함수로 생성한 결과같이 scheme로 오게 된다.


 

1
2
3
4
5
6
7
8
# 실행 및 결과 표시
result1<-evaluate(scheme, alUBCF,n=c(1,3,5))
result1
avg(result1) #결과값 테이블을 볼 수 있는 결과물 
 
result2<-evaluate(scheme, alIBCF,n=c(1,3,5))
result2
avg(result2) 
cs


이런식으로 실행을 해주게 되면 



이런 결과가 나온다. 


여기서 핵심적으로 봐야할 것은 precision 과 recall 이며, 해당 지표에 대한 설명은 이전 포스팅에서 진행하였다.

하지만 직관성이 떨어지기 때문에 다시 그래프를 그려보도록 한다.


1
2
3
4
5
6
7
# 그래프 
 plot(result1, annotate = TRUE , legend = "bottomright"#  높음 (두자리)  - 코사인 높음 
 plot(result1, "prec/rec", annotate = TRUE , legend = "bottomright"# 낮음 (세자리) 
 
 plot(result2, annotate = TRUE , legend = "topleft"# 피어슨이 더 높다 
 plot(result2, "prec/rec", annotate = TRUE , legend = "topleft")
 # 추천성능 UBCF 가 현저하게 높다 
cs


 

참고로 plot 함수의 인자는 아래와 같다.




위의 과정을 끝냈으면, 각각 ROC 방식("pre/rec"라고 입력 안하면 defalt가 ROC) 일때 result1 과 result2의 성과를 확인해보도록 하겠다.

제일 위 코드를 실행시키면 아래와 같은 그래프가 뜬다.

UBCF 의 경우 코사인 방식이 더 성과가 좋은것을 알 수 있다. 


IBCF 의 경우 피어슨 방식이 더 성과가 좋은것을 알 수 있다. 





+ Recent posts