Одно из возможных применений алгоритма “apriori” – выдача рекомендаций.
Для тех кто знаком с методами машинного обучения первым кандидатом для
выполнения этой задачи будет метод recommend(). Однако, в пакете arules
данный метод используется для выдачи рекомендаций по принадлежности к
определенному кластеру, а не по следующей наиболее вероятной покупке.

Ключевой функцией для выдачи рекомендаций по покупке является функция
is.subset().

Рассмотрим, каким образом мы можем рекомендовать очередную
возможную покупку для клиента со следующей корзиной:

library(arules)
data("Groceries")
basket <- Groceries[1]
inspect(basket)
##   items                                                   
## 1 {citrus fruit,semi-finished bread,margarine,ready soups}

1. Подготовка данных

Сформируем ассоциативные правила согласно заданных параметров, только без
корзины покупок, для которой необходимо выдать рекомендацию:

rules <- apriori(Groceries[-1],
                 parameter = list(support=.001,
                                  confidence=.5,
                                  target="rules"))
## Apriori
## 
## Parameter specification:
##  confidence minval smax arem  aval originalSupport support minlen maxlen target   ext
##         0.5    0.1    1 none FALSE            TRUE   0.001      1     10  rules FALSE
## 
## Algorithmic control:
##  filter tree heap memopt load sort verbose
##     0.1 TRUE TRUE  FALSE TRUE    2    TRUE
## 
## Absolute minimum support count: 9 
## 
## set item appearances ...[0 item(s)] done [0.00s].
## set transactions ...[169 item(s), 9834 transaction(s)] done [0.00s].
## sorting and recoding items ... [157 item(s)] done [0.00s].
## creating transaction tree ... done [0.00s].
## checking subsets of size 1 2 3 4 5 6 done [0.02s].
## writing ... [5668 rule(s)] done [0.00s].
## creating S4 object  ... done [0.00s].

2. Выдача рекомендаций

Функция is.subset(x,y) ищет в множестве x все возможные комбинации из
членов множества y. Результатом будет вектор из TRUE и FALSE в позициях
множества x , где интересующие наc подмножества существуют или не существуют:

sbs <- is.subset(rules@lhs,basket)
recommendations <- rules[sbs]@rhs
inspect(recommendations)
##   items           
## 1 {tropical fruit}
## 2 {whole milk}    
## 3 {whole milk}

Избавится от дубликатов можно при помощи:

recommendations <- recommendations[!duplicated(recommendations)]
inspect(recommendations)
##   items           
## 1 {tropical fruit}
## 2 {whole milk}

3. “Оригинальные рекомендации”

Т.к. мы проверяем все возможные подмножества для интересующей нас корзины,
иногда мы можем получить в качестве рекомендации уже купленный продукт.
Следующий код поможет исключить такую ситуацию:

recommendations_c <- unlist(as(recommendations,'list'))
basket_c <- unlist(as(basket,'list'))
duplicates <- recommendations_c %in% basket_c
recommendations_c[!duplicates]
## [1] "tropical fruit" "whole milk"

4. Источники

  1. Cross Validated: Finding suitable rules for new data using arules
Write a comment:

*

Your email address will not be published.

© 2014 In R we trust.
Top
Follow us: