数据准备
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)
网友评论