Добавление информации об элементе в объект транзакции в правилах

Я использую пакет arules для поиска правил ассоциации в данных розничной торговли в точках продаж. Я извлекаю информацию о транзакции из базы данных, а затем помещаю ее в объект transaction. Я новичок в arules и пытаюсь понять, как заполнить фрейм данных itemInfo в объекте транзакции. Сейчас я просто ввожу transaction и item ID (оба числовые), которые дают мало контекста. Я хотел бы иметь возможность добавлять описание товара, а также уровни иерархии продуктов.

Ниже процесс, который я использую сегодня:

  1. Данные поступают из базы данных в следующем формате:

    Transaction_ID     Item_ID
    --------------     ----------- 
    100                1
    100                2
    100                3
    101                2
    101                3
    102                1
    102                2
    
  2. Чтобы создать объект transaction, я использую следующую команду, как описано в документации arules:

    txdata <- as(split(txdata[, "Item_ID"], txdata[, "Transaction_ID"]), "transactions")
    

    Примечание. Я обнаружил, что мне нужно иметь числовое значение для Item_ID, иначе я столкнусь с серьезными проблемами производительности при использовании строки (из-за плохой производительности разделения при использовании факторизованных строк).

  3. Создание и просмотр правил ассоциации

    rules <- apriori(txdata, parameter = list(support=0.00015, confidence=0.5))
    inspect(head((sort(rules, by="confidence")), n=5))
    

Когда правила возвращаются, они перечислены Item_ID, что мне не помогает. Я хочу иметь возможность отображать их по ID и/или описанию. Кроме того, хотелось бы воспользоваться функциями агрегирования, встроенными в пакет arules.


person jamesb    schedule 09.03.2015    source источник


Ответы (1)


Вы можете изменить имена элементов, используя itemInfo. Вот пример:

R> df <- data.frame(
   TID = c(1,1,2,2,2,3), 
   item=c("a","b","a","b","c", "b")
 )
R> trans <- as(split(df[,"item"], df[,"TID"]), "transactions")

### this is how you replace item labels and set a hierachy (here level1)
R> myLabels <- c("milk", "butter", "beer")
R> myLevel1 <- c("dairy", "dairy", "beverage")
R> itemInfo(trans) <- data.frame(labels = myLabels, level1 = myLevel1)

R> inspect(trans)
     items    transactionID
  1 {milk,                
     butter}             1
  2 {milk,                
     butter,              
     beer}               2
  3 {butter}             3

 ### now you can use aggregate()
 R> inspect(aggregate(trans, itemInfo(trans)[["level1"]]))
     items      transactionID
  1 {dairy}                1
  2 {beverage,              
     dairy}                2
  3 {dairy}                3

Вы можете найти дополнительную информацию, используя class? transactions и ? aggregate.

Надеюсь, это поможет, Майкл

person Michael Hahsler    schedule 22.03.2015
comment
Это очень полезно - спасибо. Это может показаться базовым вопросом, но как узнать порядок применения меток? В моем наборе данных тысячи элементов, поэтому я хочу быть уверен, что перечисляю метки в правильном порядке? Это просто в порядке первого появления в наборе данных? - person jamesb; 23.03.2015
comment
Похоже, я могу просто извлечь данные из слота itemInfo в объекте транзакции, используя trans@itemInfo, а затем назначить метки в указанном там порядке. - person jamesb; 24.03.2015
comment
Правильно, вы можете взять itemInfo и затем использовать match, чтобы получить метки в правильном порядке. - person Michael Hahsler; 25.03.2015
comment
Когда я использую агрегат для правил и проверяю его, он не показывает поддержки/доверия и т. д. по любой причине, по которой данные (Продукты) ## Правила сводного правила ‹- apriori (Продукты, параметр = список (supp = 0,005, conf = 0,5) )) инспектировать(правила) аггрулес‹-агрегировать(правила, уровень1) инспектировать(аггрулес) - person usct01; 06.11.2015
comment
@ usct01: причина в том, что поддержка/конф/подъем агрегированных правил не может быть рассчитана на основе показателей для исходных правил. Вы можете агрегировать данные, а затем использовать interestMeasures для расчета показателей для ваших агрегированных правил. В качестве альтернативы вы можете сначала просто агрегировать транзакции, а затем создавать правила. Они будут иметь меры. - person Michael Hahsler; 07.11.2015