[R - ml]关联分析

数据准备

9835条交易,也就是说大约327条每天,是一个不大也不小的店。
对于交易数据arules提供了一个函数来处理(处理为稀疏矩阵)

require(arules)
groceries = read.transactions('E:/rpath/groceries.csv', sep = ',') # 注意这里 sep 要写准确
summary(groceries)

9835行,169列。

inspect(groceries[1:5])

itemFrequency查看1:3项出现频率

itemFrequency(groceries[, 1:3])

数据探索

有8项的support 大于 0.1

itemFrequencyPlot(groceries, support = 0.08)

+参数一:数据集
+参数二:频率

top 20

itemFrequencyPlot(groceries, topN = 20)

稀疏矩阵可视化

image(groceries[1:5]) # 第一行到第五行交易大致的交易数
image(sample(groceries, 100)) # 抽100行交易大致的交易数

模型

apriori(groceries)

没有一项 suport > 0.1, confidence > 0.8
根据你的知识来选择参数,比如
我们可以认为一个item如果一天买2次就是频繁项,
那么30天*2/9835 = 0.006的support可以作为我们的起点。
然后就是confidence,我们希望百分之几十的情况我们是正确的?
最后是rule中的item的最少数目:minlen 最少 2个

groceryrules = apriori(groceries, parameter = 
                         list(support = 0.006, confidence = 0.25, minlen = 2))
groceryrules

共有满足条件 463条 rule 关系

模型评估

distribution (lhs + rhs):sizes
A -> B (A商品 导致 B商品)
A:left-hand side (lhs)
B:right-hand side (rhs)

summary(groceryrules)
  • lift:有A出现对B的提升,最大的接近4, 最小的不到1
inspect(groceryrules[1:3])
inspect(sort(groceryrules, by = 'lift')[1:5])

根据lift 大小排序,提升最高的前五条规则

berryrules <- subset(groceryrules, items %in% 'berries')
inspect(berryrules)

看berries 出现后 买哪些最多

保存规则

write(groceryrules, file = 'groceryrules.csv',
      sep = ',', quote = TRUE, row.names = FALSE)
groceryrules_df <- as(groceryrules, 'data.frame')
str(groceryrules_df)

你可能感兴趣的:([R - ml]关联分析)